Przeglądaj źródła

Improved module installer

Kajetan Johannes Hammerle 1 miesiąc temu
rodzic
commit
60c1dab8a6
2 zmienionych plików z 69 dodań i 47 usunięć
  1. 7 47
      CMakeLists.txt
  2. 62 0
      cmake/add_modules.cmake

+ 7 - 47
CMakeLists.txt

@@ -7,48 +7,6 @@ set(PRIVATE_MODULES
     "src/ErrorSimulator.cppm"
     "src/ErrorSimulator.cppm"
 )
 )
 
 
-set(PUBLIC_MODULES
-    "modules/AlignedData.cppm"
-    "modules/Array.cppm"
-    "modules/Assert.cppm"
-    "modules/ArrayList.cppm"
-    "modules/BitArray.cppm"
-    "modules/Box.cppm"
-    "modules/Buffer.cppm"
-    "modules/Clock.cppm"
-    "modules/Color.cppm"
-    "modules/Components.cppm"
-    "modules/File.cppm"
-    "modules/Frustum.cppm"
-    "modules/HashMap.cppm"
-    "modules/HashedString.cppm"
-    "modules/List.cppm"
-    "modules/Logger.cppm"
-    "modules/Math.cppm"
-    "modules/Matrix.cppm"
-    "modules/Meta.cppm"
-    "modules/New.cppm"
-    "modules/Plane.cppm"
-    "modules/Quaternion.cppm"
-    "modules/Queue.cppm"
-    "modules/Random.cppm"
-    "modules/ReadLine.cppm"
-    "modules/Std.cppm"
-    "modules/StringFormat.cppm"
-    "modules/StringJoin.cppm"
-    "modules/Terminal.cppm"
-    "modules/TerminalConstants.cppm"
-    "modules/Test.cppm"
-    "modules/Thread.cppm"
-    "modules/ToString.cppm"
-    "modules/Types.cppm"
-    "modules/Unicode.cppm"
-    "modules/UniquePointer.cppm"
-    "modules/Utility.cppm"
-    "modules/Vector.cppm"
-    "modules/View.cppm"
-)
-
 set(SRC
 set(SRC
     "src/BitArray.cpp"
     "src/BitArray.cpp"
     "src/Box.cpp"
     "src/Box.cpp"
@@ -136,6 +94,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
 elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
 elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
     include("cmake/clang_warnings.cmake")
     include("cmake/clang_warnings.cmake")
 endif()
 endif()
+include("cmake/add_modules.cmake")
 
 
 add_library(core STATIC ${SRC})
 add_library(core STATIC ${SRC})
 target_compile_options(core PUBLIC
 target_compile_options(core PUBLIC
@@ -143,10 +102,10 @@ target_compile_options(core PUBLIC
     ${WARNINGS}
     ${WARNINGS}
     -fdiagnostics-color=always
     -fdiagnostics-color=always
 )
 )
-target_sources(core PUBLIC
-    FILE_SET public_modules
-    TYPE CXX_MODULES
-    FILES ${PUBLIC_MODULES}
+add_modules(
+    TARGET core
+    NAME public_modules
+    FILES ${core_modules}
 )
 )
 target_sources(core PUBLIC
 target_sources(core PUBLIC
     FILE_SET private_modules
     FILE_SET private_modules
@@ -160,7 +119,8 @@ target_compile_definitions(core
 target_link_libraries(core
 target_link_libraries(core
     PRIVATE m ${LINK_OPTIONS}
     PRIVATE m ${LINK_OPTIONS}
 )
 )
-install(TARGETS core FILE_SET public_modules DESTINATION modules)
+install(TARGETS core FILE_SET public_modules DESTINATION .)
+install(FILES cmake/add_modules.cmake DESTINATION cmake)
 
 
 add_executable(test ${SRC_TESTS})
 add_executable(test ${SRC_TESTS})
 target_sources(test PUBLIC
 target_sources(test PUBLIC

+ 62 - 0
cmake/add_modules.cmake

@@ -0,0 +1,62 @@
+set(core_modules
+    "modules/AlignedData.cppm"
+    "modules/Array.cppm"
+    "modules/Assert.cppm"
+    "modules/ArrayList.cppm"
+    "modules/BitArray.cppm"
+    "modules/Box.cppm"
+    "modules/Buffer.cppm"
+    "modules/Clock.cppm"
+    "modules/Color.cppm"
+    "modules/Components.cppm"
+    "modules/File.cppm"
+    "modules/Frustum.cppm"
+    "modules/HashMap.cppm"
+    "modules/HashedString.cppm"
+    "modules/List.cppm"
+    "modules/Logger.cppm"
+    "modules/Math.cppm"
+    "modules/Matrix.cppm"
+    "modules/Meta.cppm"
+    "modules/New.cppm"
+    "modules/Plane.cppm"
+    "modules/Quaternion.cppm"
+    "modules/Queue.cppm"
+    "modules/Random.cppm"
+    "modules/ReadLine.cppm"
+    "modules/Std.cppm"
+    "modules/StringFormat.cppm"
+    "modules/StringJoin.cppm"
+    "modules/Terminal.cppm"
+    "modules/TerminalConstants.cppm"
+    "modules/Test.cppm"
+    "modules/Thread.cppm"
+    "modules/ToString.cppm"
+    "modules/Types.cppm"
+    "modules/Unicode.cppm"
+    "modules/UniquePointer.cppm"
+    "modules/Utility.cppm"
+    "modules/Vector.cppm"
+    "modules/View.cppm"
+)
+
+function(add_modules)
+    cmake_parse_arguments(args
+        "" "TARGET;NAME;PREFIX" "FILES" ${ARGN}
+    )
+    if("${args_TARGET}" STREQUAL "")
+        message( FATAL_ERROR "add_modules misses TARGET" )
+    endif()
+    if("${args_NAME}" STREQUAL "")
+        message( FATAL_ERROR "add_modules misses NAME" )
+    endif()
+
+    list(TRANSFORM args_FILES PREPEND ${args_PREFIX}./)
+
+    target_sources(${args_TARGET} PUBLIC
+        FILE_SET ${args_NAME}
+        TYPE CXX_MODULES
+        BASE_DIRS ${args_PREFIX}
+        FILES ${args_FILES}
+    )
+endfunction()