CMakeLists.txt 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. cmake_minimum_required(VERSION 3.28)
  2. project(ls-atlantis-engine VERSION 0.0.1 LANGUAGES CXX)
  3. ################################
  4. # Compiler Settings
  5. ################################
  6. set(CMAKE_CXX_STANDARD 17)
  7. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  8. set(CMAKE_CXX_EXTENSIONS OFF)
  9. ################################
  10. # Global Project Settings
  11. ################################
  12. set(MODULE_NAME_CORE ls-atlantis-core)
  13. set(MODULE_NAME_INTERFACE ls-atlantis-interface)
  14. set(MODULE_NAME_WINDOW ls-atlantis-window)
  15. set(CMAKE_DEBUG_POSTFIX -d)
  16. include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
  17. include_directories(${CMAKE_CURRENT_LIST_DIR}/)
  18. ################################
  19. # Dependencies
  20. ################################
  21. find_package(GTest REQUIRED)
  22. find_package(ls-std REQUIRED)
  23. find_package(SDL3 REQUIRED)
  24. if (WIN32)
  25. file(GLOB LS_STD_DLLS_DEBUG "${ls-std_LIB_DIRS_DEBUG}/*.dll")
  26. file(GLOB LS_STD_DLLS_RELEASE "${ls-std_LIB_DIRS_RELEASE}/*.dll")
  27. endif ()
  28. ################################################################
  29. ################################################################
  30. # Module: Core
  31. ################################################################
  32. ################################################################
  33. ################################
  34. # Source Files: Core Module
  35. ################################
  36. set(ATLANTIS_CORE_SOURCES
  37. ${CMAKE_CURRENT_SOURCE_DIR}/source/core/StatusCodeOk.cpp
  38. ${CMAKE_CURRENT_SOURCE_DIR}/source/core/StatusCodeWindowApiLoadingFailed.cpp
  39. ${CMAKE_CURRENT_SOURCE_DIR}/source/core/StatusCodeWindowCreationFailed.cpp
  40. )
  41. ################################
  42. # Library Creation: Core Module
  43. ################################
  44. add_library(${MODULE_NAME_CORE} SHARED ${ATLANTIS_CORE_SOURCES})
  45. target_link_libraries(${MODULE_NAME_CORE} PUBLIC
  46. ${MODULE_NAME_INTERFACE}
  47. $<$<CONFIG:Debug>:ls-std::ls-std-core-d>
  48. $<$<CONFIG:Release>:ls-std::ls-std-core>
  49. )
  50. ################################
  51. # Test Files: Core Module
  52. ################################
  53. set(ATLANTIS_CORE_TEST_SOURCES
  54. ${CMAKE_CURRENT_SOURCE_DIR}/test/core/StatusCodeOkTest.cpp
  55. ${CMAKE_CURRENT_SOURCE_DIR}/test/core/StatusCodeWindowApiLoadingFailedTest.cpp
  56. ${CMAKE_CURRENT_SOURCE_DIR}/test/core/StatusCodeWindowCreationFailedTest.cpp
  57. )
  58. ################################
  59. # Test Case Creation: Core Module
  60. ################################
  61. enable_testing()
  62. add_executable(${MODULE_NAME_CORE}-tests ${ATLANTIS_CORE_TEST_SOURCES})
  63. target_link_libraries(${MODULE_NAME_CORE}-tests PRIVATE
  64. ${MODULE_NAME_CORE}
  65. GTest::gtest_main
  66. )
  67. include(GoogleTest)
  68. gtest_discover_tests(${MODULE_NAME_CORE}-tests DISCOVERY_MODE PRE_TEST)
  69. if (WIN32)
  70. add_custom_command(TARGET ${MODULE_NAME_CORE}-tests POST_BUILD
  71. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_CORE}-tests>
  72. $<TARGET_RUNTIME_DLLS:${MODULE_NAME_CORE}-tests>
  73. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_CORE}-tests>
  74. "$<$<CONFIG:Debug>:${LS_STD_DLLS_DEBUG}>"
  75. "$<$<CONFIG:Release>:${LS_STD_DLLS_RELEASE}>"
  76. COMMAND_EXPAND_LISTS
  77. )
  78. endif ()
  79. ################################################################
  80. ################################################################
  81. # Module: Interface
  82. ################################################################
  83. ################################################################
  84. ################################
  85. # Source Files: Interface Module
  86. ################################
  87. set(ATLANTIS_INTERFACE_SOURCES
  88. ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/AStatusCode.cpp
  89. ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/ISdlApi.cpp
  90. ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/IWindowApi.cpp
  91. )
  92. ################################
  93. # Library Creation: Interface Module
  94. ################################
  95. add_library(${MODULE_NAME_INTERFACE} SHARED ${ATLANTIS_INTERFACE_SOURCES})
  96. target_link_libraries(${MODULE_NAME_INTERFACE} PUBLIC
  97. SDL3::SDL3
  98. $<$<CONFIG:Debug>:ls-std::ls-std-core-d>
  99. $<$<CONFIG:Release>:ls-std::ls-std-core>
  100. )
  101. ################################
  102. # Test Files: Interface Module
  103. ################################
  104. set(ATLANTIS_INTERFACE_TEST_SOURCES
  105. ${CMAKE_CURRENT_SOURCE_DIR}/test/interface/mock/StatusCodeMock.cpp
  106. ${CMAKE_CURRENT_SOURCE_DIR}/test/interface/AStatusCodeTest.cpp
  107. )
  108. ################################
  109. # Test Case Creation: Interface Module
  110. ################################
  111. add_executable(${MODULE_NAME_INTERFACE}-tests ${ATLANTIS_INTERFACE_TEST_SOURCES})
  112. target_link_libraries(${MODULE_NAME_INTERFACE}-tests PRIVATE
  113. ${MODULE_NAME_INTERFACE}
  114. GTest::gtest_main
  115. )
  116. gtest_discover_tests(${MODULE_NAME_INTERFACE}-tests DISCOVERY_MODE PRE_TEST)
  117. if (WIN32)
  118. add_custom_command(TARGET ${MODULE_NAME_INTERFACE}-tests POST_BUILD
  119. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_INTERFACE}-tests>
  120. $<TARGET_RUNTIME_DLLS:${MODULE_NAME_INTERFACE}-tests>
  121. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_INTERFACE}-tests>
  122. "$<$<CONFIG:Debug>:${LS_STD_DLLS_DEBUG}>"
  123. "$<$<CONFIG:Release>:${LS_STD_DLLS_RELEASE}>"
  124. COMMAND_EXPAND_LISTS
  125. )
  126. endif ()
  127. ################################################################
  128. ################################################################
  129. # Module: Window
  130. ################################################################
  131. ################################################################
  132. ################################
  133. # Source Files: Window Module
  134. ################################
  135. set(ATLANTIS_WINDOW_SOURCES
  136. ${CMAKE_CURRENT_SOURCE_DIR}/source/window/SdlApi.cpp
  137. ${CMAKE_CURRENT_SOURCE_DIR}/source/window/SdlWindowApi.cpp
  138. )
  139. ################################
  140. # Library Creation: Window Module
  141. ################################
  142. add_library(${MODULE_NAME_WINDOW} SHARED ${ATLANTIS_WINDOW_SOURCES})
  143. target_link_libraries(${MODULE_NAME_WINDOW} PUBLIC
  144. ${MODULE_NAME_CORE}
  145. ${MODULE_NAME_INTERFACE}
  146. SDL3::SDL3
  147. )
  148. ################################
  149. # Test Files: Window Module
  150. ################################
  151. set(ATLANTIS_WINDOW_TEST_SOURCES
  152. ${CMAKE_CURRENT_SOURCE_DIR}/test/window/mock/SdlApiMock.cpp
  153. ${CMAKE_CURRENT_SOURCE_DIR}/test/window/SdlWindowApiTest.cpp
  154. )
  155. ################################
  156. # Test Case Creation: Window Module
  157. ################################
  158. add_executable(${MODULE_NAME_WINDOW}-tests ${ATLANTIS_WINDOW_TEST_SOURCES})
  159. target_link_libraries(${MODULE_NAME_WINDOW}-tests PRIVATE
  160. ${MODULE_NAME_WINDOW}
  161. GTest::gmock_main
  162. )
  163. gtest_discover_tests(${MODULE_NAME_WINDOW}-tests DISCOVERY_MODE PRE_TEST)
  164. if (WIN32)
  165. add_custom_command(TARGET ${MODULE_NAME_WINDOW}-tests POST_BUILD
  166. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_WINDOW}-tests>
  167. $<TARGET_RUNTIME_DLLS:${MODULE_NAME_WINDOW}-tests>
  168. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_WINDOW}-tests>
  169. "$<$<CONFIG:Debug>:${LS_STD_DLLS_DEBUG}>"
  170. "$<$<CONFIG:Release>:${LS_STD_DLLS_RELEASE}>"
  171. COMMAND_EXPAND_LISTS
  172. )
  173. endif ()
  174. ################################################################
  175. ################################################################
  176. # All Tests
  177. ################################################################
  178. ################################################################
  179. add_custom_target(ls-atlantis-tests
  180. DEPENDS
  181. ${MODULE_NAME_CORE}-tests
  182. ${MODULE_NAME_INTERFACE}-tests
  183. ${MODULE_NAME_WINDOW}-tests
  184. )