Makefile 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. @echo Compiled executable $(OUT)
  73. # Debug, compile with extra flags and no optimization
  74. debug :
  75. @echo Compiling with debug symbols...
  76. $(CC) -o $(DEBUG_OUT) $(DEBUG_CFLAGS) $(FILES) $(INC) $(LIBS) $(DEBUG_OPTS)
  77. @echo Compiled debug executable $(DEBUG_OUT)
  78. # Test, run default and compile the tests.
  79. test : default
  80. @echo Generating tests...
  81. @$(CC) -o $(TESTU_OUT) $(TESTU_FILES) $(INC) $(LIBS) $(TESTX_OPTS)
  82. @echo Compiled testing executable $(TESTU_OUT)
  83. @$(CC) -o $(TESTI_OUT) $(TESTI_FILES) $(INC) $(LIBS) $(TESTX_OPTS)
  84. @echo Compiled testing executable $(TESTI_OUT)
  85. @$(CC) -o $(TESTE_OUT) $(TESTE_FILES) $(INC) $(LIBS) $(TESTX_OPTS)
  86. @echo Compiled testing executable $(TESTE_OUT)
  87. # Install, install to the system
  88. install :
  89. @echo Installing...
  90. @$(CMD_MKDIR) $(INSTALL_DIR_BASE)
  91. @$(CMD_CP) $(INSTALL_CLI_SRC) $(INSTALL_DIR_BASE)
  92. @$(CMD_CP) $(INSTALL_GUI_SRC) $(INSTALL_DIR_BASE)
  93. -@$(CMD_RM) $(INSTALL_CLI_EXEC_DST)
  94. -@$(CMD_RM) $(INSTALL_GUI_EXEC_DST)
  95. @ln -s $(INSTALL_CLI_EXEC_SRC) $(INSTALL_CLI_EXEC_DST)
  96. @ln -s $(INSTALL_GUI_EXEC_SRC) $(INSTALL_GUI_EXEC_DST)
  97. @echo Installed RuneOptimizer and RuneOptimizerGUI
  98. # Unisnstall, delete every file create by install in the system
  99. uninstall :
  100. @echo Uninstalling...
  101. @$(CMD_RM) $(INSTALL_CLI_EXEC_DST)
  102. @$(CMD_RM) $(INSTALL_GUI_EXEC_DST)
  103. @$(CMD_RM) $(INSTALL_DIR_BASE)
  104. @echo RuneOptimizer and RuneOptimizerGUI uninstalled.
  105. # Docs, generate doxygen documentation
  106. docs :
  107. ifeq ($(shell which $(CMD_DOC)),)
  108. $(error "No $(CMD_DOC) commannd found. Install it and run 'make doc' to generate documentation")
  109. else
  110. @echo Generating documentation...
  111. @$(CMD_MKDIR) doc/cli
  112. @$(CMD_MKDIR) doc/gui
  113. @$(CMD_DOC) doxygen-cli.conf
  114. @$(CMD_DOC) doxygen-gui.conf 2>/dev/null
  115. @echo Documentation generated in doc/
  116. endif
  117. # Clean, remove all geenerated files
  118. clean :
  119. @echo Cleaning...
  120. @$(CMD_RM) bin/*
  121. @$(CMD_RM) doc/*
  122. @echo All clean