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 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. # Options
  2. option (ENABLE_AUDIO "Enable Sound Output" YES)
  3. option (FORCE_GLFW "Use GLFW even if SDL2 was found" NO)
  4. # Add OpenGL Library
  5. find_package (OpenGL REQUIRED)
  6. include_directories (SYSTEM ${OPENGL_INCLUDE_DIRS})
  7. set (LIBS ${LIBS} ${OPENGL_LIBRARIES})
  8. # Add Z Library
  9. find_package (ZLIB REQUIRED)
  10. include_directories (SYSTEM ${ZLIB_INCLUDE_DIRS})
  11. set (LIBS ${LIBS} ${ZLIB_LIBRARIES})
  12. # Add SDL2 Library
  13. find_package (SDL2)
  14. if (SDL2_FOUND AND NOT FORCE_GLFW)
  15. include_directories (SYSTEM ${SDL2_INCLUDE_DIR})
  16. set (LIBS ${LIBS} ${SDL2_LIBRARY})
  17. # Add SDL2_ttf Library
  18. find_package (SDL2TTF)
  19. if (SDL2TTF_FOUND)
  20. include_directories (SYSTEM ${SDL2TTF_INCLUDE_DIR})
  21. set (LIBS ${LIBS} ${SDL2TTF_LIBRARY})
  22. endif (SDL2TTF_FOUND)
  23. else (SDL2_FOUND AND NOT FORCE_GLFW)
  24. find_package (GLFW)
  25. if (GLFW_FOUND)
  26. include_directories (SYSTEM ${GLFW_INCLUDE_DIRS})
  27. set (LIBS ${LIBS} ${GLFW_LIBRARIES})
  28. endif (GLFW_FOUND)
  29. endif (SDL2_FOUND AND NOT FORCE_GLFW)
  30. # Add OpenAL Library
  31. find_package (OpenAL)
  32. if (OPENAL_FOUND)
  33. include_directories (SYSTEM ${OPENAL_INCLUDE_DIRS})
  34. set (LIBS ${LIBS} ${OPENAL_LIBRARIES})
  35. # Add ALUT Library
  36. find_package (ALUT)
  37. if (ALUT_FOUND)
  38. include_directories (SYSTEM ${ALUT_INCLUDE_DIRS})
  39. set (LIBS ${LIBS} ${ALUT_LIBRARIES})
  40. endif (ALUT_FOUND)
  41. endif (OPENAL_FOUND)
  42. # Add GLM Library
  43. find_package (GLM REQUIRED)
  44. if (GLM_FOUND)
  45. include_directories (SYSTEM ${GLM_INCLUDE_DIRS})
  46. endif (GLM_FOUND)
  47. #################################################################
  48. # Set Source files
  49. set (SRCS ${SRCS} "Camera.cpp" "../include/Camera.h")
  50. set (SRCS ${SRCS} "Console.cpp" "../include/Console.h")
  51. set (SRCS ${SRCS} "Entity.cpp" "../include/Entity.h")
  52. set (SRCS ${SRCS} "Exception.cpp" "../include/Exception.h")
  53. set (SRCS ${SRCS} "Game.cpp" "../include/Game.h")
  54. set (SRCS ${SRCS} "Log.cpp" "../include/Log.h")
  55. set (SRCS ${SRCS} "main.cpp")
  56. set (SRCS ${SRCS} "Menu.cpp" "../include/Menu.h")
  57. set (SRCS ${SRCS} "MenuFolder.cpp" "../include/MenuFolder.h")
  58. set (SRCS ${SRCS} "Mesh.cpp" "../include/Mesh.h")
  59. set (SRCS ${SRCS} "Render.cpp" "../include/Render.h")
  60. set (SRCS ${SRCS} "Room.cpp" "../include/Room.h")
  61. set (SRCS ${SRCS} "RoomData.cpp" "../include/RoomData.h")
  62. set (SRCS ${SRCS} "RoomMesh.cpp" "../include/RoomMesh.h")
  63. set (SRCS ${SRCS} "RunTime.cpp" "../include/RunTime.h")
  64. set (SRCS ${SRCS} "Script.cpp" "../include/Script.h")
  65. set (SRCS ${SRCS} "SkeletalModel.cpp" "../include/SkeletalModel.h")
  66. set (SRCS ${SRCS} "SoundManager.cpp" "../include/SoundManager.h")
  67. set (SRCS ${SRCS} "Sprite.cpp" "../include/Sprite.h")
  68. set (SRCS ${SRCS} "StaticMesh.cpp" "../include/StaticMesh.h")
  69. set (SRCS ${SRCS} "TextureManager.cpp" "../include/TextureManager.h")
  70. set (SRCS ${SRCS} "UI.cpp" "../include/UI.h")
  71. set (SRCS ${SRCS} "World.cpp" "../include/World.h")
  72. # Select available Sound library
  73. if (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
  74. set (USING_AL TRUE)
  75. else (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
  76. set (USING_AL FALSE)
  77. message (STATUS "Disabled Sound support (no OpenAL and ALUT)!")
  78. endif (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
  79. # Select available Windowing library
  80. if (SDL2_FOUND AND NOT FORCE_GLFW)
  81. set (USING_GLFW FALSE)
  82. set (USING_SDL TRUE)
  83. if (SDL2TTF_FOUND)
  84. set (USING_SDL_FONT TRUE)
  85. else (SDL2TTF_FOUND)
  86. set (USING_SDL_FONT FALSE)
  87. endif (SDL2TTF_FOUND)
  88. else (SDL2_FOUND AND NOT FORCE_GLFW)
  89. set (USING_SDL FALSE)
  90. set (USING_SDL_FONT FALSE)
  91. if (GLFW_FOUND)
  92. set (USING_GLFW TRUE)
  93. else (GLFW_FOUND)
  94. set (USING_GLFW FALSE)
  95. message (FATAL_ERROR "SDL2 or GLFW are required!")
  96. endif (GLFW_FOUND)
  97. endif (SDL2_FOUND AND NOT FORCE_GLFW)
  98. #################################################################
  99. # Check for header/function presence
  100. include (CheckIncludeFiles)
  101. include (CheckFunctionExists)
  102. include (CheckSymbolExists)
  103. # backtrace() for assert with call stack output
  104. check_include_files (execinfo.h HAVE_EXECINFO_H)
  105. check_function_exists (backtrace HAVE_BACKTRACE)
  106. check_function_exists (backtrace_symbols HAVE_BACKTRACE_SYMBOLS)
  107. # readdir() for recursive folder traversal
  108. check_include_files (dirent.h HAVE_DIRENT_H)
  109. check_function_exists (opendir HAVE_OPENDIR)
  110. check_function_exists (readdir_r HAVE_READDIR_R)
  111. check_function_exists (closedir HAVE_CLOSEDIR)
  112. check_symbol_exists (DT_DIR "dirent.h" HAVE_DT_DIR)
  113. # getcwd() for the current working directory
  114. check_include_files (unistd.h HAVE_UNISTD_H)
  115. check_function_exists (getcwd HAVE_GETCWD)
  116. # getenv() for reading environment variables
  117. check_include_files (stdlib.h HAVE_STDLIB_H)
  118. check_function_exists (getenv HAVE_GETENV)
  119. #################################################################
  120. # Configuration Header file
  121. configure_file (
  122. "${PROJECT_SOURCE_DIR}/include/config.h.in"
  123. "${PROJECT_BINARY_DIR}/config.h"
  124. )
  125. # Configuration Source file
  126. configure_file (
  127. "${PROJECT_SOURCE_DIR}/src/config.cpp.in"
  128. "${PROJECT_BINARY_DIR}/config.cpp"
  129. )
  130. set (SRCS ${SRCS} "${PROJECT_BINARY_DIR}/config.cpp")
  131. #################################################################
  132. # Apple specific bundling
  133. if (APPLE)
  134. # Mac Bundle Data
  135. set (MACOSX_BUNDLE_INFO_STRING "OpenSource TombRaider Game Engine")
  136. set (MACOSX_BUNDLE_ICON_FILE "AppIcon")
  137. set (MACOSX_BUNDLE_GUI_IDENTIFIER "de.xythobuz.OpenRaider")
  138. set (MACOSX_BUNDLE_BUNDLE_NAME "OpenRaider")
  139. set (MACOSX_BUNDLE_SHORT_VERSION_STRING "${OpenRaider_VERSION_MAJOR}.${OpenRaider_VERSION_MINOR}.${OpenRaider_VERSION_MICRO}${OpenRaider_VERSION_RELEASE}")
  140. set (MACOSX_BUNDLE_LONG_VERSION_STRING "${OpenRaider_VERSION_MAJOR}.${OpenRaider_VERSION_MINOR}.${OpenRaider_VERSION_MICRO}${OpenRaider_VERSION_RELEASE} (${CMAKE_BUILD_TYPE})")
  141. set (MACOSX_BUNDLE_BUNDLE_VERSION "${OpenRaider_VERSION_MAJOR}.${OpenRaider_VERSION_MINOR}.${OpenRaider_VERSION_MICRO}${OpenRaider_VERSION_RELEASE} (${CMAKE_BUILD_TYPE})")
  142. set (MACOSX_BUNDLE_COPYRIGHT "2001 - 2014")
  143. # Copy Icon
  144. set (MAC_ICON "../cmake/AppIcon.icns")
  145. set_source_files_properties (${MAC_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
  146. set (RESRCS ${RESRCS} ${MAC_ICON})
  147. # Copy Data
  148. set (MAC_DATA "../data/font.pc" "../data/OpenRaider.ini" "../data/test.ttf" "../data/splash.tga")
  149. set_source_files_properties (${MAC_DATA} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/defaults)
  150. set (RESRCS ${RESRCS} ${MAC_DATA})
  151. endif (APPLE)
  152. #################################################################
  153. # Check for SSE, enable if available
  154. include (../cmake/FindSSE.cmake)
  155. if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  156. if (SSE_FOUND)
  157. set (SSE_FOUND_MSG "${SSE_FOUND_MSG} SSE")
  158. set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -msse")
  159. endif (SSE_FOUND)
  160. if (SSE2_FOUND)
  161. set (SSE_FOUND_MSG "${SSE_FOUND_MSG} SSE2")
  162. set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -msse2")
  163. endif (SSE2_FOUND)
  164. if (SSE3_FOUND)
  165. set (SSE_FOUND_MSG "${SSE_FOUND_MSG} SSE3")
  166. set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -msse3")
  167. endif (SSE3_FOUND)
  168. if (SSSE3_FOUND)
  169. set (SSE_FOUND_MSG "${SSE_FOUND_MSG} SSSE3")
  170. set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -mssse3")
  171. endif (SSSE3_FOUND)
  172. if (SSE4_1_FOUND)
  173. set (SSE_FOUND_MSG "${SSE_FOUND_MSG} SSE4.1")
  174. set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -msse4.1")
  175. endif (SSE4_1_FOUND)
  176. # Display message if something is enabled
  177. if (NOT "${SSE_FOUND_MSG}" STREQUAL "")
  178. message (STATUS "Enabled${SSE_FOUND_MSG}...")
  179. endif (NOT "${SSE_FOUND_MSG}" STREQUAL "")
  180. endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  181. # Apply Flags
  182. set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenRaider_CXX_FLAGS}")
  183. set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OpenRaider_CXX_FLAGS} ${OpenRaider_CXX_FLAGS_DEBUG}")
  184. set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OpenRaider_CXX_FLAGS} ${OpenRaider_CXX_FLAGS_RELEASE}")
  185. # Add subdirectories
  186. add_subdirectory ("commands")
  187. add_subdirectory ("deps")
  188. add_subdirectory ("loader")
  189. add_subdirectory ("system")
  190. add_subdirectory ("utils")
  191. # Add Executable
  192. add_executable (OpenRaider MACOSX_BUNDLE ${RESRCS}
  193. ${SRCS} $<TARGET_OBJECTS:OpenRaider_commands>
  194. $<TARGET_OBJECTS:OpenRaider_deps> $<TARGET_OBJECTS:OpenRaider_loader>
  195. $<TARGET_OBJECTS:OpenRaider_utils> $<TARGET_OBJECTS:OpenRaider_system>
  196. )
  197. #################################################################
  198. if (APPLE)
  199. if (${CMAKE_GENERATOR} STREQUAL "Unix Makefiles")
  200. # Copy setup script
  201. add_custom_command (TARGET OpenRaider POST_BUILD
  202. COMMAND echo "Injecting setup script..."
  203. COMMAND cp "${PROJECT_SOURCE_DIR}/cmake/setup_mac.sh" "${PROJECT_BINARY_DIR}/src/OpenRaider.app/Contents/MacOS/OpenRaider.sh"
  204. COMMAND chmod "a+x" "${PROJECT_BINARY_DIR}/src/OpenRaider.app/Contents/MacOS/OpenRaider.sh"
  205. )
  206. # Fix executable name, so setup script will be called
  207. add_custom_command (TARGET OpenRaider POST_BUILD
  208. COMMAND echo "Changing executable name..."
  209. COMMAND /usr/libexec/PlistBuddy -c "Set :CFBundleExecutable OpenRaider.sh" Info.plist
  210. WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/src/OpenRaider.app/Contents
  211. )
  212. # Preparing the bundle on install
  213. # http://www.cmake.org/Wiki/BundleUtilitiesExample
  214. set (plugin_dest_dir OpenRaider.app/Contents/MacOS)
  215. set (APPS "${PROJECT_BINARY_DIR}/src/OpenRaider.app")
  216. install (CODE "
  217. file(GLOB_RECURSE PLUGINS
  218. \"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
  219. include(BundleUtilities)
  220. fixup_bundle(\"${APPS}\" \"\${PLUGINS}\" \"\")
  221. " COMPONENT Runtime
  222. )
  223. endif (${CMAKE_GENERATOR} STREQUAL "Unix Makefiles")
  224. endif (APPLE)
  225. #################################################################
  226. # Install rules
  227. if (APPLE)
  228. # We want to install to /Applications by default, not /usr
  229. set (OR_INSTALL_PREFIX "/" CACHE PATH "Prefix prepended to
  230. install directories")
  231. set (CMAKE_INSTALL_PREFIX "${OR_INSTALL_PREFIX}" CACHE INTERNAL "Prefix
  232. prepended to install directories" FORCE)
  233. # Only the App Bundle is required on OS X
  234. install (TARGETS OpenRaider BUNDLE DESTINATION Applications)
  235. elseif (NOT WIN32)
  236. # We need a special config file for this install method
  237. configure_file (
  238. "${PROJECT_SOURCE_DIR}/data/Unix.in"
  239. "${PROJECT_BINARY_DIR}/Unix.ini"
  240. )
  241. # Executable
  242. install (TARGETS OpenRaider RUNTIME DESTINATION bin)
  243. # Config file
  244. install (FILES "${PROJECT_BINARY_DIR}/Unix.ini"
  245. DESTINATION "share/OpenRaider"
  246. RENAME "OpenRaider.ini")
  247. # Data files
  248. install (FILES "${PROJECT_SOURCE_DIR}/data/font.pc"
  249. "${PROJECT_SOURCE_DIR}/data/splash.tga"
  250. "${PROJECT_SOURCE_DIR}/data/test.ttf"
  251. DESTINATION "share/OpenRaider")
  252. endif (APPLE)
  253. #################################################################
  254. # Add Math Library
  255. if (UNIX)
  256. set (LIBS ${LIBS} m)
  257. endif (UNIX)
  258. # Link to all found libs
  259. target_link_libraries (OpenRaider ${LIBS})
  260. #################################################################
  261. # Add target to run executable
  262. if (${CMAKE_GENERATOR} STREQUAL "Unix Makefiles" OR ${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles")
  263. add_custom_target(run COMMAND OpenRaider DEPENDS OpenRaider WORKING_DIRECTORY ${CMAKE_PROJECT_DIR})
  264. endif (${CMAKE_GENERATOR} STREQUAL "Unix Makefiles" OR ${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles")