CMakeLists.txt 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. file (GLOB CONTAINER_SOURCE Container/*.cpp Container/*.h)
  2. file (GLOB CORE_SOURCE Core/*.cpp Core/*.h)
  3. file (GLOB MATH_SOURCE Math/*.cpp Math/*.h)
  4. file (GLOB IO_SOURCE IO/*.cpp IO/*.h)
  5. file (GLOB ENGINE_SOURCE Engine/*.cpp Engine/*.h)
  6. file (GLOB INPUT_SOURCE Input/*.cpp Input/*.h)
  7. file (GLOB RESOURCE_SOURCE Resource/*.cpp Resource/*.h)
  8. file (GLOB AUDIO_SOURCE Audio/*.cpp Audio/*.h)
  9. file (GLOB NETWORK_SOURCE Network/*.cpp Network/*.h)
  10. file (GLOB WEB_SOURCE Web/*.cpp Web/*.h)
  11. file (GLOB SCRIPT_SOURCE Script/*.cpp Script/*.h)
  12. file (GLOB METRICS_SOURCE Metrics/*.cpp Metrics/*.h)
  13. if (NOT WEB AND NOT IOS AND NOT ANDROID)
  14. file (GLOB IPC_SOURCE IPC/*.cpp IPC/*.h)
  15. endif()
  16. file (GLOB ATOMIC2D_SOURCE Atomic2D/*.cpp Atomic2D/*.h)
  17. file (GLOB SCENE_SOURCE Scene/*.cpp Scene/*.h)
  18. file (GLOB UI_SOURCE UI/*.cpp UI/*.h)
  19. file (GLOB SYSTEM_UI_SOURCE UI/SystemUI/*.cpp UI/SystemUI/*.h)
  20. file (GLOB PHYSICS_SOURCE Physics/*.cpp Physics/*.h)
  21. file (GLOB NAVIGATION_SOURCE Navigation/*.cpp Navigation/*.h)
  22. file (GLOB ENVIRONMENT_SOURCE Environment/*.cpp Environment/*.h)
  23. file (GLOB GRAPHICS_SOURCE Graphics/*.cpp Graphics/*.h Graphics/Text3D/*.cpp Graphics/Text3D/*.h)
  24. if (ATOMIC_IK)
  25. file (GLOB IK_SOURCE IK/*.cpp IK/*.h)
  26. endif ()
  27. if (ATOMIC_DATABASE_SQLITE)
  28. file (GLOB DATABASE_SOURCE Database/*.cpp Database/*.h Database/SQLite/*.cpp Database/SQLite/*.h)
  29. elseif (ATOMIC_DATABASE_ODBC)
  30. file (GLOB DATABASE_SOURCE Database/*.cpp Database/*.h Database/ODBC/*.cpp Database/ODBC/*.h)
  31. endif ()
  32. if (WIN32)
  33. if (ATOMIC_D3D9) # DirectX 9
  34. file (GLOB GRAPHICS_IMPL_SOURCE Graphics/Direct3D9/*.cpp Graphics/Direct3D9/*.h)
  35. elseif (ATOMIC_OPENGL) # OpenGL
  36. file (GLOB GRAPHICS_IMPL_SOURCE Graphics/OpenGL/*.cpp Graphics/OpenGL/*.h)
  37. elseif(ATOMIC_D3D11) # DirectX 11
  38. file (GLOB GRAPHICS_IMPL_SOURCE Graphics/Direct3D11/*.cpp Graphics/Direct3D11/*.h)
  39. endif()
  40. else()
  41. file (GLOB GRAPHICS_IMPL_SOURCE Graphics/OpenGL/*.cpp Graphics/OpenGL/*.h)
  42. endif()
  43. if (APPLE AND NOT IOS)
  44. set (PLATFORM_SOURCE IO/MacFileWatcher.mm UI/UIDragDropMac.mm)
  45. endif()
  46. set (SOURCE_FILES ${CONTAINER_SOURCE} ${CORE_SOURCE} ${ENGINE_SOURCE} ${INPUT_SOURCE}
  47. ${AUDIO_SOURCE} ${IO_SOURCE} ${MATH_SOURCE}
  48. ${RESOURCE_SOURCE} ${PHYSICS_SOURCE} ${IPC_SOURCE}
  49. ${GRAPHICS_SOURCE} ${GRAPHICS_IMPL_SOURCE}
  50. ${ATOMIC3D_SOURCE}
  51. ${ATOMIC2D_SOURCE} ${ENVIRONMENT_SOURCE}
  52. ${SCENE_SOURCE} ${UI_SOURCE} ${SYSTEM_UI_SOURCE}
  53. ${WEB_SOURCE} ${SCRIPT_SOURCE} ${METRICS_SOURCE}
  54. ${PLATFORM_SOURCE} ${DATABASE_SOURCE} ${IK_SOURCE} ${NAVIGATION_SOURCE})
  55. if (NOT WEB)
  56. set (SOURCE_FILES ${SOURCE_FILES} ${NETWORK_SOURCE})
  57. endif()
  58. GroupSources("Atomic2D")
  59. GroupSources("Atomic3D")
  60. GroupSources("Audio")
  61. GroupSources("Container")
  62. GroupSources("Core")
  63. GroupSources("Engine")
  64. GroupSources("Environment")
  65. GroupSources("Graphics")
  66. GroupSources("Input")
  67. GroupSources("IO")
  68. GroupSources("IPC")
  69. GroupSources("Math")
  70. GroupSources("Navigation")
  71. GroupSources("Network")
  72. GroupSources("Physics")
  73. GroupSources("Resource")
  74. GroupSources("Scene")
  75. GroupSources("UI")
  76. GroupSources("Web")
  77. GroupSources("Script")
  78. GroupSources("Metrics")
  79. GroupSources("BuildInfo")
  80. GroupSources("IK")
  81. # Handle Git Revision
  82. include(GetGitRevisionDescription)
  83. get_git_head_revision(GIT_REFSPEC GIT_SHA1)
  84. configure_file("${CMAKE_CURRENT_SOURCE_DIR}/BuildInfo/AtomicGitSHA.cpp.in" "${CMAKE_CURRENT_SOURCE_DIR}/BuildInfo/AtomicGitSHA.cpp" @ONLY)
  85. set (SOURCE_FILES ${SOURCE_FILES} BuildInfo/AtomicBuildInfo.cpp BuildInfo/AtomicBuildInfo.h BuildInfo/AtomicGitSHA.cpp BuildInfo/AtomicGitSHA.h)
  86. if (ATOMIC_DYNAMIC_RUNTIME)
  87. set(ATOMIC_LIBRARY_TYPE SHARED)
  88. else ()
  89. set(ATOMIC_LIBRARY_TYPE STATIC)
  90. endif ()
  91. add_library(Atomic ${ATOMIC_LIBRARY_TYPE} ${SOURCE_FILES})
  92. if (NOT ATOMIC_DYNAMIC_RUNTIME)
  93. target_compile_definitions (Atomic PUBLIC -DATOMIC_STATIC_DEFINE=1 -DATOMIC_API=)
  94. else ()
  95. target_compile_definitions (Atomic PRIVATE -DATOMIC_EXPORTS=1)
  96. endif ()
  97. include_directories (${CMAKE_CURRENT_SOURCE_DIR})
  98. target_include_directories(Atomic PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../)
  99. target_link_libraries (Atomic Box2D Duktape TurboBadger FreeType JO LZ4 PugiXml STB SDL ASIO rapidjson WebSocketPP imgui)
  100. target_compile_definitions (Atomic PUBLIC -DATOMIC_CXX11=1)
  101. if (ATOMIC_64BIT)
  102. target_compile_definitions (Atomic PUBLIC -DATOMIC_64BIT=1)
  103. endif ()
  104. if (ANDROID)
  105. target_link_libraries (Atomic dl log android GLESv1_CM GLESv2)
  106. target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_ANDROID=1 -DGLEW_NO_GLU=1)
  107. elseif (APPLE)
  108. if (IOS)
  109. target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_IOS=1 -DIOS=1)
  110. else () # MacOS
  111. target_link_libraries (Atomic GLEW)
  112. target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_OSX=1)
  113. endif ()
  114. elseif (LINUX)
  115. target_link_libraries (Atomic pthread GLEW GL dl)
  116. target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_LINUX=1)
  117. elseif (WIN32)
  118. target_compile_definitions (Atomic PUBLIC -DATOMIC_PLATFORM_WINDOWS=1)
  119. target_link_libraries (Atomic user32 gdi32 winmm imm32 ole32 oleaut32 version uuid Ws2_32)
  120. if (ATOMIC_D3D9) # DirectX 9
  121. target_link_libraries (Atomic d3d9 d3dcompiler)
  122. target_compile_definitions (Atomic PUBLIC -DATOMIC_D3D9=1)
  123. elseif(ATOMIC_OPENGL) # OpenGL
  124. find_package(OpenGL REQUIRED)
  125. include_directories (${OpenGL_INCLUDE_DIRS})
  126. link_directories (${OpenGL_LIBRARY_DIRS})
  127. target_compile_definitions (Atomic PRIVATE ${OpenGL_DEFINITIONS})
  128. target_link_libraries (Atomic GLEW opengl32 glu32)
  129. elseif(ATOMIC_D3D11) # DirectX 11
  130. target_compile_definitions (Atomic PUBLIC -DATOMIC_D3D11=1)
  131. target_link_libraries (Atomic d3d11 d3dcompiler dxguid)
  132. endif()
  133. target_link_libraries(Atomic MojoShader user32 gdi32 winmm imm32 ole32 oleaut32 version uuid Ws2_32)
  134. # removes dependency on D3DCompiler dll for Atomic Direct3D9 builds which don't require it
  135. # (binaries that never initialize the Direct3D9 graphics subsystem)
  136. option (ATOMIC_D3D9SHADERCOMPILER_DISABLE "Remove D3DCompiler.dll dependency. Use for binaries that never initialize the Direct3D9 graphics subsystem." OFF)
  137. if (ATOMIC_D3D9SHADERCOMPILER_DISABLE)
  138. target_compile_definitions (Atomic PUBLIC -DATOMIC_D3D9SHADERCOMPILER_DISABLE=1)
  139. endif()
  140. elseif (WEB)
  141. target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_WEB=1 -DNO_POPEN=1)
  142. endif ()
  143. if (ATOMIC_OPENGL)
  144. target_compile_definitions(Atomic PUBLIC -DATOMIC_OPENGL=1)
  145. endif ()
  146. if (ATOMIC_DESKTOP)
  147. target_compile_definitions (Atomic PUBLIC -DATOMIC_PLATFORM_DESKTOP=1)
  148. target_link_libraries (Atomic libsquish)
  149. if (NOT LINUX)
  150. target_link_libraries (Atomic LibCpuId)
  151. endif()
  152. option (ATOMIC_FILEWATCHER "Enable file watcher" ON)
  153. if (ATOMIC_FILEWATCHER)
  154. target_compile_definitions(Atomic PUBLIC -DATOMIC_FILEWATCHER=1)
  155. endif ()
  156. endif ()
  157. if (NOT WEB)
  158. target_compile_definitions (Atomic PUBLIC -DATOMIC_THREADING=1 -DATOMIC_NETWORK=1 -DATOMIC_WEB=1)
  159. target_link_libraries (Atomic libcurl Civetweb kNet)
  160. endif()
  161. if (ATOMIC_PROFILING)
  162. target_compile_definitions (Atomic PUBLIC -DATOMIC_PROFILING=1)
  163. target_link_libraries (Atomic easy_profiler)
  164. endif ()
  165. option (ATOMIC_LOGGING "Enable logging" ON)
  166. if (ATOMIC_LOGGING)
  167. target_compile_definitions (Atomic PUBLIC -DATOMIC_LOGGING=1)
  168. endif ()
  169. option (ATOMIC_2D_ONLY "Build only with 2D support" OFF)
  170. if (ATOMIC_2D_ONLY)
  171. target_compile_definitions (Atomic PUBLIC -DATOMIC_ATOMIC2D=1)
  172. else ()
  173. target_compile_definitions (Atomic PUBLIC -DATOMIC_3D)
  174. option (ATOMIC_ATOMIC2D "Enable 2D subsystem" ON)
  175. if (ATOMIC_ATOMIC2D)
  176. target_compile_definitions (Atomic PUBLIC -DATOMIC_ATOMIC2D=1)
  177. endif ()
  178. option (ATOMIC_PHYSICS "Enable physics subsystem" ON)
  179. if (ATOMIC_PHYSICS)
  180. target_compile_definitions (Atomic PUBLIC -DATOMIC_PHYSICS=1)
  181. target_link_libraries (Atomic Bullet StanHull)
  182. endif ()
  183. option (ATOMIC_NAVIGATION "Enable navigation subsystem" ON)
  184. if (ATOMIC_NAVIGATION)
  185. target_compile_definitions (Atomic PUBLIC -DATOMIC_NAVIGATION=1)
  186. target_link_libraries (Atomic Recast Detour DetourCrowd DetourTileCache)
  187. endif ()
  188. endif ()
  189. # TODO: enable shared library builds.
  190. if (NOT APPLE OR IOS OR WEB)
  191. target_compile_definitions (Atomic PUBLIC -DATOMIC_TBUI=1)
  192. endif ()
  193. if (ATOMIC_DATABASE_SQLITE)
  194. target_link_libraries(Atomic sqlite)
  195. target_compile_definitions(Atomic PUBLIC -DATOMIC_DATABASE=1 -DATOMIC_DATABASE_SQLITE=1)
  196. elseif (ATOMIC_DATABASE_ODBC)
  197. target_link_libraries(Atomic nanodbc)
  198. target_compile_definitions(Atomic PUBLIC -DATOMIC_DATABASE=1 -DATOMIC_DATABASE_ODBC=1)
  199. endif ()
  200. if (ATOMIC_IK)
  201. target_link_libraries(Atomic ik)
  202. target_compile_definitions(Atomic PUBLIC -DATOMIC_IK=1)
  203. endif ()
  204. target_include_directories (Atomic PUBLIC
  205. ${ATOMIC_SOURCE_DIR}/Source
  206. ${ATOMIC_SOURCE_DIR}/Source/ThirdParty
  207. )
  208. include(AtomicDoc)
  209. if ($ENV{ATOMIC_BUILD_DIST})
  210. target_compile_definitions(Atomic PUBLIC -DATOMIC_BUILD_DIST=1)
  211. endif ()
  212. if (MSVC)
  213. target_compile_options(Atomic PUBLIC $<$<CONFIG:Debug>:${ATOMIC_MSVC_RUNTIME}d> $<$<NOT:$<CONFIG:Debug>>:${ATOMIC_MSVC_RUNTIME}>)
  214. endif ()
  215. if (UNIX OR MINGW)
  216. target_compile_options(Atomic PUBLIC $<$<COMPILE_LANGUAGE:CXX>:-std=gnu++11>)
  217. endif ()