Makefile 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. # Try to detect operating system
  2. ifeq ($(OS),Windows_NT)
  3. ifeq ($(shell uname -s),) # not in a bash-like shell
  4. OS_RM = del /F /Q
  5. OS_CP = copy
  6. OS_MKDIR = mkdir
  7. else # in a bash-like shell, like msys
  8. OS_RM = rm -rf
  9. OS_CP = cp -rf
  10. OS_MKDIR = mkdir -p
  11. endif
  12. OS_EXTENSION=.exe
  13. OS_INC=-I C:\MinGW\lib
  14. else
  15. OS_RM = rm -rf
  16. OS_CP = cp -rf
  17. OS_MKDIR = mkdir -p
  18. OS_EXTENSION=
  19. OS_INC=
  20. endif
  21. # Files to compile
  22. # For tests, runeoptimizer.c is not included in the list: is is included from
  23. # each test file with a redefinition of main.
  24. FILES=src/cli/runeoptimizer/runeoptimizer.c src/cli/runeoptimizer/*/*.c src/cli/runeoptimizer/*/*/*.c
  25. TESTU_FILES=src/cli/test/runeoptimizer_unit_test.c src/cli/runeoptimizer/*/*.c
  26. TESTI_FILES=src/cli/test/runeoptimizer_integration_test.c src/cli/runeoptimizer/*/*.c
  27. TESTE_FILES=src/cli/test/runeoptimizer_e2e_test.c src/cli/runeoptimizer/*/*.c
  28. # Compiler
  29. CC=gcc
  30. # Compiler flags
  31. CFLAGS=
  32. DEBUG_CFLAGS=-Wall -Wextra -g
  33. EXTRA_CFLAGS=-fdump-tree-all
  34. # Libraries for the compiler
  35. LIBS=-lsqlite3 -lm -ljson-c -lpthread
  36. # Include direcotries (Win32 only)
  37. INC=$(OS_INC)
  38. # Optimization options
  39. OPTS=-O3
  40. TESTX_OPTS=
  41. DEBUG_OPTS=
  42. # Output files
  43. OUT_DIR=bin/
  44. OUT_EXT=$(OS_EXTENSION)
  45. OUT_NAME=runeoptimizer
  46. OUT=$(OUT_DIR)$(OUT_NAME)$(OUT_EXT)
  47. DEBUG_OUT_NAME=$(OUT_NAME)_debug
  48. DEBUG_OUT=$(OUT_DIR)$(DEBUG_OUT_NAME)$(OUT_EXT)
  49. TESTU_OUT_NAME=$(OUT_NAME)_test_unit
  50. TESTU_OUT=$(OUT_DIR)$(TESTU_OUT_NAME)$(OUT_EXT)
  51. TESTI_OUT_NAME=$(OUT_NAME)_test_integration
  52. TESTI_OUT=$(OUT_DIR)$(TESTI_OUT_NAME)$(OUT_EXT)
  53. TESTE_OUT_NAME=$(OUT_NAME)_test_e2e
  54. TESTE_OUT=$(OUT_DIR)$(TESTE_OUT_NAME)$(OUT_EXT)
  55. # Instalation directories
  56. INSTALL_CLI_SRC=$(OUT)
  57. INSTALL_GUI_SRC=src/gui/runeoptimizer_gui
  58. INSTALL_DIR_BASE=/usr/share/runeoptimizer/
  59. INSTALL_DIR_EXEC=/usr/local/bin/
  60. INSTALL_CLI_EXEC_SRC=$(INSTALL_DIR_BASE)$(OUT_NAME)$(OUT_EXT)
  61. INSTALL_GUI_EXEC_SRC=$(INSTALL_DIR_BASE)runeoptimizer_gui/runeoptimizer_gui.py
  62. INSTALL_CLI_EXEC_DST=$(INSTALL_DIR_EXEC)$(OUT_NAME)$(OUT_EXT)
  63. INSTALL_GUI_EXEC_DST=$(INSTALL_DIR_EXEC)$(OUT_NAME)_gui$(OUT_EXT)
  64. CMD_DOC=doxygen
  65. CMD_RM=$(OS_RM)
  66. CMD_CP=$(OS_CP)
  67. CMD_MKDIR=$(OS_MKDIR)
  68. # Default, just build RuneOptimizer
  69. default :
  70. @echo Compiling...
  71. @$(CC) -o $(OUT) $(CFLAGS) $(FILES) $(INC) $(LIBS) $(OPTS)
  72. @$(OS_CP) $(INSTALL_GUI_SRC) $(OUT_DIR)
  73. @echo Compiled executable $(OUT)
  74. # Debug, compile with extra flags and no optimization
  75. debug :
  76. @echo Compiling with debug symbols...
  77. $(CC) -o $(DEBUG_OUT) $(DEBUG_CFLAGS) $(FILES) $(INC) $(LIBS) $(DEBUG_OPTS)
  78. @echo Compiled debug executable $(DEBUG_OUT)
  79. # Test, run default and compile the tests.
  80. test : default
  81. @echo Generating tests...
  82. @$(CC) -o $(TESTU_OUT) $(TESTU_FILES) $(INC) $(LIBS) $(TESTX_OPTS)
  83. @echo Compiled testing executable $(TESTU_OUT)
  84. @$(CC) -o $(TESTI_OUT) $(TESTI_FILES) $(INC) $(LIBS) $(TESTX_OPTS)
  85. @echo Compiled testing executable $(TESTI_OUT)
  86. @$(CC) -o $(TESTE_OUT) $(TESTE_FILES) $(INC) $(LIBS) $(TESTX_OPTS)
  87. @echo Compiled testing executable $(TESTE_OUT)
  88. # Install, install to the system
  89. install :
  90. @echo Installing...
  91. @$(CMD_MKDIR) $(INSTALL_DIR_BASE)
  92. @$(CMD_CP) $(INSTALL_CLI_SRC) $(INSTALL_DIR_BASE)
  93. @$(CMD_CP) $(INSTALL_GUI_SRC) $(INSTALL_DIR_BASE)
  94. -@$(CMD_RM) $(INSTALL_CLI_EXEC_DST)
  95. -@$(CMD_RM) $(INSTALL_GUI_EXEC_DST)
  96. @ln -s $(INSTALL_CLI_EXEC_SRC) $(INSTALL_CLI_EXEC_DST)
  97. @ln -s $(INSTALL_GUI_EXEC_SRC) $(INSTALL_GUI_EXEC_DST)
  98. @echo Installed RuneOptimizer and RuneOptimizerGUI
  99. # Unisnstall, delete every file create by install in the system
  100. uninstall :
  101. @echo Uninstalling...
  102. @$(CMD_RM) $(INSTALL_CLI_EXEC_DST)
  103. @$(CMD_RM) $(INSTALL_GUI_EXEC_DST)
  104. @$(CMD_RM) $(INSTALL_DIR_BASE)
  105. @echo RuneOptimizer and RuneOptimizerGUI uninstalled.
  106. # Docs, generate doxygen documentation
  107. docs :
  108. ifeq ($(shell which $(CMD_DOC)),)
  109. $(error "No $(CMD_DOC) commannd found. Install it and run 'make doc' to generate documentation")
  110. else
  111. @echo Generating documentation...
  112. @$(CMD_MKDIR) doc/cli
  113. @$(CMD_MKDIR) doc/gui
  114. @$(CMD_DOC) doxygen-cli.conf
  115. @$(CMD_DOC) doxygen-gui.conf 2>/dev/null
  116. @echo Documentation generated in doc/
  117. endif
  118. # Clean, remove all geenerated files
  119. clean :
  120. @echo Cleaning...
  121. @$(CMD_RM) bin/*
  122. @$(CMD_RM) doc/*
  123. @echo All clean