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

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