CMakeLists.txt 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. cmake_minimum_required(VERSION 3.28)
  2. project(core LANGUAGES CXX)
  3. set(CMAKE_CXX_STANDARD 23)
  4. set(PRIVATE_MODULES
  5. "src/ErrorSimulator.cppm"
  6. )
  7. set(PUBLIC_MODULES
  8. "modules/AlignedData.cppm"
  9. "modules/Array.cppm"
  10. "modules/Assert.cppm"
  11. "modules/ArrayList.cppm"
  12. "modules/BitArray.cppm"
  13. "modules/Box.cppm"
  14. "modules/Buffer.cppm"
  15. "modules/Clock.cppm"
  16. "modules/Color.cppm"
  17. "modules/Components.cppm"
  18. "modules/File.cppm"
  19. "modules/Frustum.cppm"
  20. "modules/HashMap.cppm"
  21. "modules/HashedString.cppm"
  22. "modules/List.cppm"
  23. "modules/Logger.cppm"
  24. "modules/Math.cppm"
  25. "modules/Matrix.cppm"
  26. "modules/Meta.cppm"
  27. "modules/New.cppm"
  28. "modules/Plane.cppm"
  29. "modules/Quaternion.cppm"
  30. "modules/Queue.cppm"
  31. "modules/Random.cppm"
  32. "modules/ReadLine.cppm"
  33. "modules/Std.cppm"
  34. "modules/StringFormat.cppm"
  35. "modules/Terminal.cppm"
  36. "modules/TerminalConstants.cppm"
  37. "modules/Test.cppm"
  38. "modules/Thread.cppm"
  39. "modules/ToString.cppm"
  40. "modules/Types.cppm"
  41. "modules/Unicode.cppm"
  42. "modules/UniquePointer.cppm"
  43. "modules/Utility.cppm"
  44. "modules/Vector.cppm"
  45. "modules/View.cppm"
  46. )
  47. set(SRC
  48. "src/BitArray.cpp"
  49. "src/Box.cpp"
  50. "src/Buffer.cpp"
  51. "src/Clock.cpp"
  52. "src/CustomNewDelete.cpp"
  53. "src/File.cpp"
  54. "src/Frustum.cpp"
  55. "src/Logger.cpp"
  56. "src/Matrix.cpp"
  57. "src/Plane.cpp"
  58. "src/Quaternion.cpp"
  59. "src/Random.cpp"
  60. "src/ReadLine.cpp"
  61. "src/Terminal.cpp"
  62. "src/Test.cpp"
  63. "src/Thread.cpp"
  64. "src/ToString.cpp"
  65. "src/Unicode.cpp"
  66. "src/Utility.cpp"
  67. "src/Vector.cpp"
  68. "src/View.cpp"
  69. )
  70. set(SRC_TESTS
  71. "test/Main.cpp"
  72. "test/modules/ArrayListTests.cpp"
  73. "test/modules/ArrayTests.cpp"
  74. "test/modules/BitArrayTests.cpp"
  75. "test/modules/BoxTests.cpp"
  76. "test/modules/BufferTests.cpp"
  77. "test/modules/ClockTests.cpp"
  78. "test/modules/ColorTests.cpp"
  79. "test/modules/ComponentsTests.cpp"
  80. "test/modules/FileTests.cpp"
  81. "test/modules/FrustumTests.cpp"
  82. "test/modules/HashMapTests.cpp"
  83. "test/modules/HashedStringTests.cpp"
  84. "test/modules/ListTests.cpp"
  85. "test/modules/MathTests.cpp"
  86. "test/modules/MatrixTests.cpp"
  87. "test/modules/PlaneTests.cpp"
  88. "test/modules/QuaternionTests.cpp"
  89. "test/modules/QueueTests.cpp"
  90. "test/modules/RandomTests.cpp"
  91. "test/modules/ReadLineTests.cpp"
  92. "test/modules/TerminalTests.cpp"
  93. "test/modules/TestTests.cpp"
  94. "test/modules/ThreadTests.cpp"
  95. "test/modules/UnicodeTests.cpp"
  96. "test/modules/UniquePointerTests.cpp"
  97. "test/modules/UtilityTests.cpp"
  98. "test/modules/VectorTests.cpp"
  99. "test/modules/ViewTests.cpp"
  100. )
  101. set(SRC_PERFORMANCE
  102. "performance/Main.cpp"
  103. )
  104. if("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
  105. set(COMPILE_OPTIONS "")
  106. set(LINK_OPTIONS "")
  107. set(LOG_LEVEL 2)
  108. set(DEFINITIONS CHECK_MEMORY)
  109. elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
  110. set(COMPILE_OPTIONS "")
  111. set(LINK_OPTIONS "")
  112. set(LOG_LEVEL 3)
  113. set(DEFINITIONS CHECK_MEMORY)
  114. else()
  115. set(DEFINITIONS ERROR_SIMULATOR CHECK_MEMORY)
  116. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  117. set(COMPILE_OPTIONS --coverage)
  118. set(LINK_OPTIONS gcov)
  119. elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  120. set(COMPILE_OPTIONS -fprofile-instr-generate -fcoverage-mapping)
  121. set(LINK_OPTIONS ${COMPILE_OPTIONS})
  122. endif()
  123. set(LOG_LEVEL 4)
  124. endif()
  125. if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  126. include("cmake/gcc_warnings.cmake")
  127. elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  128. include("cmake/clang_warnings.cmake")
  129. endif()
  130. add_library(core STATIC ${SRC})
  131. target_compile_options(core PUBLIC
  132. ${COMPILE_OPTIONS}
  133. ${WARNINGS}
  134. -fdiagnostics-color=always
  135. )
  136. target_sources(core PUBLIC
  137. FILE_SET public_modules
  138. TYPE CXX_MODULES
  139. FILES ${PUBLIC_MODULES}
  140. )
  141. target_sources(core PUBLIC
  142. FILE_SET private_modules
  143. TYPE CXX_MODULES
  144. FILES ${PRIVATE_MODULES}
  145. )
  146. target_compile_definitions(core
  147. PRIVATE LOG_LEVEL=${LOG_LEVEL}
  148. PRIVATE ${DEFINITIONS}
  149. )
  150. target_link_libraries(core
  151. PRIVATE m ${LINK_OPTIONS}
  152. )
  153. install(TARGETS core FILE_SET public_modules DESTINATION modules)
  154. add_executable(test ${SRC_TESTS})
  155. target_sources(test PUBLIC
  156. FILE_SET CXX_MODULES
  157. FILES test/Tests.cppm
  158. )
  159. target_link_libraries(test PRIVATE core)
  160. target_compile_definitions(test PRIVATE ${DEFINITIONS})
  161. target_compile_definitions(test
  162. PRIVATE LOG_LEVEL=4
  163. )
  164. add_executable(performance ${SRC_PERFORMANCE})
  165. target_link_libraries(performance PRIVATE core)
  166. target_compile_definitions(performance PRIVATE ${DEFINITIONS})
  167. target_compile_definitions(performance
  168. PRIVATE LOG_LEVEL=4
  169. )