diff --git a/CMakeLists.txt b/CMakeLists.txt index 9517213..35c00b0 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(CK): add_subdirectory(good-scanner) add_subdirectory(generated) -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) +# 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/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) 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