# Try to detect operating system ifeq ($(OS),Windows_NT) ifeq ($(shell uname -s),) # not in a bash-like shell OS_RM = del /F /Q OS_CP = copy OS_MKDIR = mkdir else # in a bash-like shell, like msys OS_RM = rm -rf OS_CP = cp -rf OS_MKDIR = mkdir -p endif OS_EXTENSION=.exe OS_INC=-I C:\MinGW\lib else OS_RM = rm -rf OS_CP = cp -rf OS_MKDIR = mkdir -p OS_EXTENSION= OS_INC= endif # Files to compile # For tests, runeoptimizer.c is not included in the list: is is included from # each test file with a redefinition of main. FILES=src/cli/runeoptimizer/runeoptimizer.c src/cli/runeoptimizer/*/*.c src/cli/runeoptimizer/*/*/*.c TESTU_FILES=src/cli/test/runeoptimizer_unit_test.c src/cli/runeoptimizer/*/*.c TESTI_FILES=src/cli/test/runeoptimizer_integration_test.c src/cli/runeoptimizer/*/*.c TESTE_FILES=src/cli/test/runeoptimizer_e2e_test.c src/cli/runeoptimizer/*/*.c # Compiler CC=gcc # Compiler flags CFLAGS= DEBUG_CFLAGS=-Wall -Wextra -g EXTRA_CFLAGS=-fdump-tree-all # Libraries for the compiler LIBS=-lsqlite3 -lm -ljson-c -lpthread # Include direcotries (Win32 only) INC=$(OS_INC) # Optimization options OPTS=-O3 TESTX_OPTS= DEBUG_OPTS= # Output files OUT_DIR=bin/ OUT_EXT=$(OS_EXTENSION) OUT_NAME=runeoptimizer OUT=$(OUT_DIR)$(OUT_NAME)$(OUT_EXT) DEBUG_OUT_NAME=$(OUT_NAME)_debug DEBUG_OUT=$(OUT_DIR)$(DEBUG_OUT_NAME)$(OUT_EXT) TESTU_OUT_NAME=$(OUT_NAME)_test_unit TESTU_OUT=$(OUT_DIR)$(TESTU_OUT_NAME)$(OUT_EXT) TESTI_OUT_NAME=$(OUT_NAME)_test_integration TESTI_OUT=$(OUT_DIR)$(TESTI_OUT_NAME)$(OUT_EXT) TESTE_OUT_NAME=$(OUT_NAME)_test_e2e TESTE_OUT=$(OUT_DIR)$(TESTE_OUT_NAME)$(OUT_EXT) # Instalation directories INSTALL_CLI_SRC=$(OUT) INSTALL_GUI_SRC=src/gui/runeoptimizer_gui INSTALL_DIR_BASE=/usr/share/runeoptimizer/ INSTALL_DIR_EXEC=/usr/local/bin/ INSTALL_CLI_EXEC_SRC=$(INSTALL_DIR_BASE)$(OUT_NAME)$(OUT_EXT) INSTALL_GUI_EXEC_SRC=$(INSTALL_DIR_BASE)runeoptimizer_gui/runeoptimizer_gui.py INSTALL_CLI_EXEC_DST=$(INSTALL_DIR_EXEC)$(OUT_NAME)$(OUT_EXT) INSTALL_GUI_EXEC_DST=$(INSTALL_DIR_EXEC)$(OUT_NAME)_gui$(OUT_EXT) CMD_DOC=doxygen CMD_RM=$(OS_RM) CMD_CP=$(OS_CP) CMD_MKDIR=$(OS_MKDIR) # Default, just build RuneOptimizer default : @echo Compiling... @$(CC) -o $(OUT) $(CFLAGS) $(FILES) $(INC) $(LIBS) $(OPTS) @echo Compiled executable $(OUT) # Debug, compile with extra flags and no optimization debug : @echo Compiling with debug symbols... $(CC) -o $(DEBUG_OUT) $(DEBUG_CFLAGS) $(FILES) $(INC) $(LIBS) $(DEBUG_OPTS) @echo Compiled debug executable $(DEBUG_OUT) # Test, run default and compile the tests. test : default @echo Generating tests... @$(CC) -o $(TESTU_OUT) $(TESTU_FILES) $(INC) $(LIBS) $(TESTX_OPTS) @echo Compiled testing executable $(TESTU_OUT) @$(CC) -o $(TESTI_OUT) $(TESTI_FILES) $(INC) $(LIBS) $(TESTX_OPTS) @echo Compiled testing executable $(TESTI_OUT) @$(CC) -o $(TESTE_OUT) $(TESTE_FILES) $(INC) $(LIBS) $(TESTX_OPTS) @echo Compiled testing executable $(TESTE_OUT) # Install, install to the system install : @echo Installing... @$(CMD_MKDIR) $(INSTALL_DIR_BASE) @$(CMD_CP) $(INSTALL_CLI_SRC) $(INSTALL_DIR_BASE) @$(CMD_CP) $(INSTALL_GUI_SRC) $(INSTALL_DIR_BASE) -@$(CMD_RM) $(INSTALL_CLI_EXEC_DST) -@$(CMD_RM) $(INSTALL_GUI_EXEC_DST) @ln -s $(INSTALL_CLI_EXEC_SRC) $(INSTALL_CLI_EXEC_DST) @ln -s $(INSTALL_GUI_EXEC_SRC) $(INSTALL_GUI_EXEC_DST) @echo Installed RuneOptimizer and RuneOptimizerGUI # Unisnstall, delete every file create by install in the system uninstall : @echo Uninstalling... @$(CMD_RM) $(INSTALL_CLI_EXEC_DST) @$(CMD_RM) $(INSTALL_GUI_EXEC_DST) @$(CMD_RM) $(INSTALL_DIR_BASE) @echo RuneOptimizer and RuneOptimizerGUI uninstalled. # Docs, generate doxygen documentation docs : ifeq ($(shell which $(CMD_DOC)),) $(error "No $(CMD_DOC) commannd found. Install it and run 'make doc' to generate documentation") else @echo Generating documentation... @$(CMD_MKDIR) doc/cli @$(CMD_MKDIR) doc/gui @$(CMD_DOC) doxygen-cli.conf @$(CMD_DOC) doxygen-gui.conf 2>/dev/null @echo Documentation generated in doc/ endif # Clean, remove all geenerated files clean : @echo Cleaning... @$(CMD_RM) bin/* @$(CMD_RM) doc/* @echo All clean