CMakeLists.txt 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. )
  40. ################################
  41. # Library Creation: Core Module
  42. ################################
  43. add_library(${MODULE_NAME_CORE} SHARED ${ATLANTIS_CORE_SOURCES})
  44. target_link_libraries(${MODULE_NAME_CORE} PUBLIC
  45. ${MODULE_NAME_INTERFACE}
  46. $<$<CONFIG:Debug>:ls-std::ls-std-core-d>
  47. $<$<CONFIG:Release>:ls-std::ls-std-core>
  48. )
  49. ################################
  50. # Test Files: Core Module
  51. ################################
  52. set(ATLANTIS_CORE_TEST_SOURCES
  53. ${CMAKE_CURRENT_SOURCE_DIR}/test/core/StatusCodeOkTest.cpp
  54. ${CMAKE_CURRENT_SOURCE_DIR}/test/core/StatusCodeWindowApiLoadingFailedTest.cpp
  55. )
  56. ################################
  57. # Test Case Creation: Core Module
  58. ################################
  59. enable_testing()
  60. add_executable(${MODULE_NAME_CORE}-tests ${ATLANTIS_CORE_TEST_SOURCES})
  61. target_link_libraries(${MODULE_NAME_CORE}-tests PRIVATE
  62. ${MODULE_NAME_CORE}
  63. GTest::gtest_main
  64. )
  65. include(GoogleTest)
  66. gtest_discover_tests(${MODULE_NAME_CORE}-tests DISCOVERY_MODE PRE_TEST)
  67. if (WIN32)
  68. add_custom_command(TARGET ${MODULE_NAME_CORE}-tests POST_BUILD
  69. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_CORE}-tests>
  70. $<TARGET_RUNTIME_DLLS:${MODULE_NAME_CORE}-tests>
  71. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_CORE}-tests>
  72. "$<$<CONFIG:Debug>:${LS_STD_DLLS_DEBUG}>"
  73. "$<$<CONFIG:Release>:${LS_STD_DLLS_RELEASE}>"
  74. COMMAND_EXPAND_LISTS
  75. )
  76. endif ()
  77. ################################################################
  78. ################################################################
  79. # Module: Interface
  80. ################################################################
  81. ################################################################
  82. ################################
  83. # Source Files: Interface Module
  84. ################################
  85. set(ATLANTIS_INTERFACE_SOURCES
  86. ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/AStatusCode.cpp
  87. ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/ISdlApi.cpp
  88. ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/IWindowApi.cpp
  89. )
  90. ################################
  91. # Library Creation: Interface Module
  92. ################################
  93. add_library(${MODULE_NAME_INTERFACE} SHARED ${ATLANTIS_INTERFACE_SOURCES})
  94. target_link_libraries(${MODULE_NAME_INTERFACE} PUBLIC
  95. SDL3::SDL3
  96. )
  97. ################################################################
  98. ################################################################
  99. # Module: Window
  100. ################################################################
  101. ################################################################
  102. ################################
  103. # Source Files: Window Module
  104. ################################
  105. set(ATLANTIS_WINDOW_SOURCES
  106. ${CMAKE_CURRENT_SOURCE_DIR}/source/window/SdlApi.cpp
  107. ${CMAKE_CURRENT_SOURCE_DIR}/source/window/SdlWindowApi.cpp
  108. )
  109. ################################
  110. # Library Creation: Window Module
  111. ################################
  112. add_library(${MODULE_NAME_WINDOW} SHARED ${ATLANTIS_WINDOW_SOURCES})
  113. target_link_libraries(${MODULE_NAME_WINDOW} PUBLIC
  114. ${MODULE_NAME_CORE}
  115. ${MODULE_NAME_INTERFACE}
  116. SDL3::SDL3
  117. )
  118. ################################
  119. # Test Files: Window Module
  120. ################################
  121. set(ATLANTIS_WINDOW_TEST_SOURCES
  122. ${CMAKE_CURRENT_SOURCE_DIR}/test/window/mock/SdlApiMock.cpp
  123. ${CMAKE_CURRENT_SOURCE_DIR}/test/window/SdlWindowApiTest.cpp
  124. )
  125. ################################
  126. # Test Case Creation: Window Module
  127. ################################
  128. add_executable(${MODULE_NAME_WINDOW}-tests ${ATLANTIS_WINDOW_TEST_SOURCES})
  129. target_link_libraries(${MODULE_NAME_WINDOW}-tests PRIVATE
  130. ${MODULE_NAME_WINDOW}
  131. GTest::gmock_main
  132. )
  133. gtest_discover_tests(${MODULE_NAME_WINDOW}-tests DISCOVERY_MODE PRE_TEST)
  134. if (WIN32)
  135. add_custom_command(TARGET ${MODULE_NAME_WINDOW}-tests POST_BUILD
  136. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_WINDOW}-tests>
  137. $<TARGET_RUNTIME_DLLS:${MODULE_NAME_WINDOW}-tests>
  138. COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:${MODULE_NAME_WINDOW}-tests>
  139. "$<$<CONFIG:Debug>:${LS_STD_DLLS_DEBUG}>"
  140. "$<$<CONFIG:Release>:${LS_STD_DLLS_RELEASE}>"
  141. COMMAND_EXPAND_LISTS
  142. )
  143. endif ()
  144. ################################################################
  145. ################################################################
  146. # All Tests
  147. ################################################################
  148. ################################################################
  149. add_custom_target(ls-atlantis-tests
  150. DEPENDS
  151. ${MODULE_NAME_CORE}-tests
  152. ${MODULE_NAME_WINDOW}-tests
  153. )