From 790b68048cb472edd91084c9053f58196d100097 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 23 May 2023 08:53:35 +0200 Subject: [PATCH 1/2] Make it works on OSX with clang-16 --- CMakeLists.txt | 35 +++++++++++++++---- generated/CMakeLists.txt | 6 ++-- .../{gen-import.mpp.in => gen-import.cpp.in} | 0 generated/{use.mpp => use.cpp} | 0 link-use-mask/CMakeLists.txt | 4 +-- link-use-mask/{use.mpp => use.cpp} | 0 link-use/CMakeLists.txt | 2 +- link-use/{use.mpp => use.cpp} | 0 simple/CMakeLists.txt | 4 +-- simple/{use.mpp => use.cpp} | 0 10 files changed, 37 insertions(+), 14 deletions(-) rename generated/{gen-import.mpp.in => gen-import.cpp.in} (100%) rename generated/{use.mpp => use.cpp} (100%) rename link-use-mask/{use.mpp => use.cpp} (100%) rename link-use/{use.mpp => use.cpp} (100%) rename simple/{use.mpp => use.cpp} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9517213..16657fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.14 FATAL_ERROR) +cmake_minimum_required(VERSION 3.26 FATAL_ERROR) project(cxxmodules CXX) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") @@ -6,21 +6,44 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_EXTENSIONS NO) +set(CMAKE_CXX_STANDARD_REQUIRED YES) +set(CMAKE_CXX_SCAN_FOR_MODULES YES) + # See #10. # set(CMAKE_CXX_VISIBILITY_PRESET hidden) +set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API 2182bf5c-ef0d-489a-91da-49dbc3090d2a) +set(CMake_TEST_CXXModules_UUID "a246741c-d067-4019-a8fb-3d16b0c9d1d3") + +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) + set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "clang") + set(CMAKE_EXE_LINKER_FLAGS -lstdc++) + # Workaround for C++Modules: Missing module map flags in exported compile commands + # see https://gitlab.kitware.com/cmake/cmake/-/issues/24618 + set(CMAKE_CXX_COMPILE_OBJECT "${CMAKE_CXX_COMPILE_OBJECT} @.modmap") + +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) + +endif() + include(GenerateExportHeader) -include(CTest) + +# include(CTest) +enable_testing() add_subdirectory(simple) add_subdirectory(duplicates) add_subdirectory(duplicates-same-dir) add_subdirectory(link-use) add_subdirectory(link-use-mask) -add_subdirectory(good-scanner) +#TODO add_subdirectory(good-scanner) add_subdirectory(generated) -add_subdirectory(partitions) +# NOTE: This use CXX_MODULE_INTERNAL_PARTITIONS? +#FIXME add_subdirectory(partitions) -# The CMake APIs used here are not yet implemented. -#add_subdirectory(header-units) +# The CMake APIs used here are not yet implemented! +# add_subdirectory(header-units) diff --git a/generated/CMakeLists.txt b/generated/CMakeLists.txt index 821ce6c..f9eacb3 100644 --- a/generated/CMakeLists.txt +++ b/generated/CMakeLists.txt @@ -10,13 +10,13 @@ function (generate name) endfunction () generate(gen-export.mpp) -generate(gen-import.mpp) +generate(gen-import.cpp) add_executable(generated) target_sources(generated PRIVATE - "${CMAKE_CURRENT_BINARY_DIR}/gen-import.mpp" - use.mpp + "${CMAKE_CURRENT_BINARY_DIR}/gen-import.cpp" + use.cpp PRIVATE FILE_SET cxx_modules TYPE CXX_MODULES BASE_DIRS diff --git a/generated/gen-import.mpp.in b/generated/gen-import.cpp.in similarity index 100% rename from generated/gen-import.mpp.in rename to generated/gen-import.cpp.in diff --git a/generated/use.mpp b/generated/use.cpp similarity index 100% rename from generated/use.mpp rename to generated/use.cpp diff --git a/link-use-mask/CMakeLists.txt b/link-use-mask/CMakeLists.txt index b656995..dfc8752 100644 --- a/link-use-mask/CMakeLists.txt +++ b/link-use-mask/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable(link-use-mask - use.mpp) + use.cpp) # Should use "simple"'s `M` module since it is first in the link list. target_link_libraries(link-use-mask PRIVATE @@ -8,7 +8,7 @@ target_link_libraries(link-use-mask add_test(NAME link-use-mask COMMAND link-use-mask) add_executable(link-use-mask-reverse - use.mpp) + use.cpp) # Should use "duplicate"'s `M` module since it is first in the link list. target_link_libraries(link-use-mask-reverse PRIVATE diff --git a/link-use-mask/use.mpp b/link-use-mask/use.cpp similarity index 100% rename from link-use-mask/use.mpp rename to link-use-mask/use.cpp diff --git a/link-use/CMakeLists.txt b/link-use/CMakeLists.txt index dcbab51..88224a4 100644 --- a/link-use/CMakeLists.txt +++ b/link-use/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable(link-use - use.mpp) + use.cpp) target_link_libraries(link-use PRIVATE simple) diff --git a/link-use/use.mpp b/link-use/use.cpp similarity index 100% rename from link-use/use.mpp rename to link-use/use.cpp diff --git a/simple/CMakeLists.txt b/simple/CMakeLists.txt index aa9afde..b84ca87 100644 --- a/simple/CMakeLists.txt +++ b/simple/CMakeLists.txt @@ -2,8 +2,8 @@ add_library(simple) generate_export_header(simple) target_sources(simple PRIVATE - use.mpp - PRIVATE + use.cpp + PUBLIC FILE_SET headers TYPE HEADERS BASE_DIRS "${CMAKE_CURRENT_BINARY_DIR}" diff --git a/simple/use.mpp b/simple/use.cpp similarity index 100% rename from simple/use.mpp rename to simple/use.cpp From 60e23bb8344741959940e90ac3910f75d3de447d Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 23 May 2023 09:04:54 +0200 Subject: [PATCH 2/2] Remove CXX_MODULE_INTERNAL_PARTITIONS usage --- CMakeLists.txt | 6 +++--- partitions/CMakeLists.txt | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 16657fe..35c00b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,11 +39,11 @@ add_subdirectory(duplicates) add_subdirectory(duplicates-same-dir) add_subdirectory(link-use) add_subdirectory(link-use-mask) -#TODO add_subdirectory(good-scanner) +#TODO(CK): add_subdirectory(good-scanner) add_subdirectory(generated) -# NOTE: This use CXX_MODULE_INTERNAL_PARTITIONS? -#FIXME add_subdirectory(partitions) +# NOTE: This dit use of CXX_MODULE_INTERNAL_PARTITIONS? +#FIXME: add_subdirectory(partitions) # The CMake APIs used here are not yet implemented! # add_subdirectory(header-units) diff --git a/partitions/CMakeLists.txt b/partitions/CMakeLists.txt index 07c2d08..0313990 100644 --- a/partitions/CMakeLists.txt +++ b/partitions/CMakeLists.txt @@ -4,6 +4,5 @@ target_sources(partitions FILE_SET cxx_modules TYPE CXX_MODULES FILES module.mpp parta.mpp - FILE_SET cxx_module_internal_partitions TYPE CXX_MODULE_INTERNAL_PARTITIONS FILES partb.mpp impl.mpp)