Open Source Tomb Raider Engine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

CMakeLists.txt 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. cmake_minimum_required (VERSION 2.8.8)
  2. project (OpenRaider)
  3. # Version Number
  4. set (OpenRaider_VERSION_MAJOR 0)
  5. set (OpenRaider_VERSION_MINOR 1)
  6. set (OpenRaider_VERSION_MICRO 4)
  7. set (OpenRaider_VERSION_RELEASE -git)
  8. # Build Host
  9. set (OpenRaider_BUILD_HOST ${CMAKE_HOST_SYSTEM})
  10. site_name (OpenRaider_HOSTNAME)
  11. #################################################################
  12. # Set a default build type if none was specified
  13. if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  14. message (STATUS "Setting build type to 'Debug' as none was specified.")
  15. set (CMAKE_BUILD_TYPE Debug)
  16. endif()
  17. #################################################################
  18. # Include directories
  19. include_directories ("${PROJECT_SOURCE_DIR}/include")
  20. include_directories (SYSTEM "${PROJECT_SOURCE_DIR}/src/deps")
  21. include_directories ("${PROJECT_BINARY_DIR}")
  22. # Include External Modules
  23. set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
  24. #################################################################
  25. # Compiler specific flags
  26. if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  27. set (WARNINGS "${WARNINGS} -Weverything")
  28. set (WARNINGS "${WARNINGS} -Wno-padded -Wno-packed")
  29. set (WARNINGS "${WARNINGS} -Wno-global-constructors -Wno-exit-time-destructors")
  30. set (WARNINGS "${WARNINGS} -Wno-documentation-unknown-command -Wno-c++98-compat-pedantic")
  31. set (WARNINGS "${WARNINGS} -Wno-shorten-64-to-32 -Wno-sign-compare -Wno-sign-conversion")
  32. set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -std=c++11")
  33. set (OpenRaider_CXX_FLAGS_DEBUG "${OpenRaider_CXX_FLAGS_DEBUG} -g -O0 -ftrapv")
  34. set (OpenRaider_CXX_FLAGS_RELEASE "${OpenRaider_CXX_FLAGS_RELEASE} -O2 -fomit-frame-pointer")
  35. set (OpenRaider_CXX_FLAGS_RELEASE "${OpenRaider_CXX_FLAGS_RELEASE} -ffast-math -funroll-loops")
  36. elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  37. set (WARNINGS "${WARNINGS} -Wall -Wextra -Wpedantic")
  38. set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -std=c++11")
  39. set (OpenRaider_CXX_FLAGS_DEBUG "${OpenRaider_CXX_FLAGS_DEBUG} -g -O0 -ftrapv")
  40. set (OpenRaider_CXX_FLAGS_RELEASE "${OpenRaider_CXX_FLAGS_RELEASE} -O2 -fomit-frame-pointer")
  41. set (OpenRaider_CXX_FLAGS_RELEASE "${OpenRaider_CXX_FLAGS_RELEASE} -ffast-math -funroll-loops")
  42. elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  43. # TODO Visual C++ compiler flags?
  44. endif()
  45. # Flags for all builds
  46. set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} ${WARNINGS}")
  47. # Flags for Debug build
  48. set (OpenRaider_CXX_FLAGS_DEBUG "${OpenRaider_CXX_FLAGS_DEBUG} -DDEBUG")
  49. # Flags for Releasae builds
  50. set (OpenRaider_CXX_FLAGS_RELEASE "${OpenRaider_CXX_FLAGS_RELEASE} -DNODEBUG")
  51. #################################################################
  52. include (GetGitRevisionDescription)
  53. get_git_head_revision (GIT_REFSPEC GIT_SHA1)
  54. if (NOT ${GIT_SHA1} STREQUAL "GITDIR-NOTFOUND")
  55. string (SUBSTRING "-${GIT_SHA1}" 0 8 OpenRaider_VERSION_RELEASE)
  56. endif (NOT ${GIT_SHA1} STREQUAL "GITDIR-NOTFOUND")
  57. #################################################################
  58. enable_testing ()
  59. #################################################################
  60. # Add subdirectories
  61. add_subdirectory (src)
  62. add_subdirectory (test)
  63. #################################################################
  64. # CPack packaging
  65. include (InstallRequiredSystemLibraries)
  66. set (CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md")
  67. set (CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/COPYING")
  68. set (CPACK_MONOLITHIC_INSTALL YES)
  69. include (CPack)
  70. #################################################################
  71. if (${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles")
  72. # Target for running the setup
  73. add_custom_target (setup "${PROJECT_SOURCE_DIR}/cmake/setup_win.bat"
  74. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  75. )
  76. endif (${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles")
  77. if (${CMAKE_GENERATOR} STREQUAL "Unix Makefiles")
  78. # Target for running the setup
  79. add_custom_target (setup "${PROJECT_SOURCE_DIR}/cmake/setup.sh"
  80. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  81. )
  82. #################################################################
  83. # Target for running cppcheck
  84. set (CHECK_STD "--std=c++11" "--std=posix")
  85. set (CHECK_FLAGS "--quiet" "--force" "-I${PROJECT_SOURCE_DIR}/include")
  86. set (CHECK_FLAGS ${CHECK_FLAGS} "-i${PROJECT_SOURCE_DIR}/src/deps")
  87. set (CHECK_NORMAL "--enable=information,warning,performance,portability")
  88. set (CHECK_FULL "--enable=all")
  89. set (CHECK_CONFIG "--check-config")
  90. add_custom_target (cppcheck echo "Running cppcheck..."
  91. COMMAND cppcheck ${CHECK_FLAGS} ${CHECK_STD} ${CHECK_NORMAL} ${PROJECT_SOURCE_DIR}
  92. )
  93. add_custom_target (cppcheckFull echo "Running full cppcheck..."
  94. COMMAND cppcheck ${CHECK_FLAGS} ${CHECK_STD} ${CHECK_FULL} ${PROJECT_SOURCE_DIR}
  95. )
  96. add_custom_target (cppcheckConfig echo "Checking cppcheck config..."
  97. COMMAND cppcheck ${CHECK_FLAGS} ${CHECK_CONFIG} ${PROJECT_SOURCE_DIR}
  98. )
  99. #################################################################
  100. # Generate Doxygen Documentation
  101. find_package (Doxygen)
  102. if (DOXYGEN_FOUND)
  103. # Configure the Template Doxyfile for our specific project
  104. configure_file (cmake/Doxyfile.in
  105. ${PROJECT_BINARY_DIR}/Doxyfile @ONLY IMMEDIATE)
  106. # Add a custom target to run Doxygen when ever the project is built
  107. add_custom_target (doc
  108. COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile
  109. SOURCES ${PROJECT_BINARY_DIR}/Doxyfile)
  110. # Add custom target to create local documentation without graphs
  111. add_custom_target (docLocal
  112. COMMAND sed -i '' "s/HAVE_DOT = YES/HAVE_DOT = NO/g" Doxyfile
  113. COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile
  114. COMMAND cp -R doc/html/* ${PROJECT_SOURCE_DIR}/../apache/
  115. COMMAND sed -i '' "s/HAVE_DOT = NO/HAVE_DOT = YES/g" Doxyfile
  116. SOURCES ${PROJECT_BINARY_DIR}/Doxyfile)
  117. # Add custom target to create local documentation with call and caller graphs
  118. add_custom_target (docLocalFull
  119. COMMAND sed -i '' "s/CALL_GRAPH = NO/CALL_GRAPH = YES/g" Doxyfile
  120. COMMAND sed -i '' "s/CALLER_GRAPH = NO/CALLER_GRAPH = YES/g" Doxyfile
  121. COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile
  122. COMMAND cp -R doc/html/* ${PROJECT_SOURCE_DIR}/../apache/
  123. COMMAND sed -i '' "s/CALL_GRAPH = YES/CALL_GRAPH = NO/g" Doxyfile
  124. COMMAND sed -i '' "s/CALLER_GRAPH = YES/CALLER_GRAPH = NO/g" Doxyfile
  125. SOURCES ${PROJECT_BINARY_DIR}/Doxyfile)
  126. # Clean doc files
  127. set_directory_properties (PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "doc")
  128. endif (DOXYGEN_FOUND)
  129. #################################################################
  130. # Auto-format code
  131. add_custom_target (format
  132. COMMAND astyle -A14s4pHUk1OocxC100z2SKNLm1Qxynr "include/*.h"
  133. COMMAND astyle -A14s4pHUk1OocxC100z2SKNLm1Qxynr "src/*.cpp" --exclude=src/deps
  134. COMMAND astyle -A14s4pHUk1OocxC100z2SKNLm1Qxynr "test/*.cpp" "test/*.h"
  135. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  136. COMMENT "Auto-Formatting code..." VERBATIM
  137. )
  138. #################################################################
  139. # Count source code lines
  140. add_custom_target (count
  141. COMMAND cloc --exclude-dir=deps,cmake,data,build ${PROJECT_SOURCE_DIR}
  142. COMMENT "Counting lines of source code..." VERBATIM
  143. )
  144. add_custom_target (countFull
  145. COMMAND cloc --exclude-dir=build ${PROJECT_SOURCE_DIR}
  146. COMMENT "Counting lines of source code..." VERBATIM
  147. )
  148. endif (${CMAKE_GENERATOR} STREQUAL "Unix Makefiles")