CMakeLists.txt 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  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. )
  99. ################################################################
  100. ################################################################
  101. # Module: Window
  102. ################################################################
  103. ################################################################
  104. ################################
  105. # Source Files: Window Module
  106. ################################
  107. set(ATLANTIS_WINDOW_SOURCES
  108. ${CMAKE_CURRENT_SOURCE_DIR}/source/window/SdlApi.cpp
  109. ${CMAKE_CURRENT_SOURCE_DIR}/source/window/SdlWindowApi.cpp
  110. )
  111. ################################
  112. # Library Creation: Window Module
  113. ################################
  114. add_library(${MODULE_NAME_WINDOW} SHARED ${ATLANTIS_WINDOW_SOURCES})
  115. target_link_libraries(${MODULE_NAME_WINDOW} PUBLIC
  116. ${MODULE_NAME_CORE}
  117. ${MODULE_NAME_INTERFACE}
  118. SDL3::SDL3
  119. )
  120. ################################
  121. # Test Files: Window Module
  122. ################################
  123. set(ATLANTIS_WINDOW_TEST_SOURCES
  124. ${CMAKE_CURRENT_SOURCE_DIR}/test/window/mock/SdlApiMock.cpp
  125. ${CMAKE_CURRENT_SOURCE_DIR}/test/window/SdlWindowApiTest.cpp
  126. )
  127. ################################
  128. # Test Case Creation: Window Module
  129. ################################
  130. add_executable(${MODULE_NAME_WINDOW}-tests ${ATLANTIS_WINDOW_TEST_SOURCES})
  131. target_link_libraries(${MODULE_NAME_WINDOW}-tests PRIVATE
  132. ${MODULE_NAME_WINDOW}
  133. GTest::gmock_main
  134. )
  135. gtest_discover_tests(${MODULE_NAME_WINDOW}-tests DISCOVERY_MODE PRE_TEST)
  136. if (WIN32)
  137. add_custom_command(TARGET ${MODULE_NAME_WINDOW}-tests POST_BUILD
  138. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_WINDOW}-tests>
  139. $<TARGET_RUNTIME_DLLS:${MODULE_NAME_WINDOW}-tests>
  140. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_WINDOW}-tests>
  141. "$<$<CONFIG:Debug>:${LS_STD_DLLS_DEBUG}>"
  142. "$<$<CONFIG:Release>:${LS_STD_DLLS_RELEASE}>"
  143. COMMAND_EXPAND_LISTS
  144. )
  145. endif ()
  146. ################################################################
  147. ################################################################
  148. # All Tests
  149. ################################################################
  150. ################################################################
  151. add_custom_target(ls-atlantis-tests
  152. DEPENDS
  153. ${MODULE_NAME_CORE}-tests
  154. ${MODULE_NAME_WINDOW}-tests
  155. )