diff options
author | Ben Boeckel <ben.boeckel@kitware.com> | 2023-10-20 02:39:30 (GMT) |
---|---|---|
committer | Ben Boeckel <ben.boeckel@kitware.com> | 2023-10-20 11:18:33 (GMT) |
commit | ed45432571e23ccba77cdb64aa3eb7e109e73329 (patch) | |
tree | 70bf712bfe2b7faba76127ae84f125f546052b7e /Tests | |
parent | 0973cd670231ec6a3e09cf22065e4b7dec4503f5 (diff) | |
download | CMake-ed45432571e23ccba77cdb64aa3eb7e109e73329.zip CMake-ed45432571e23ccba77cdb64aa3eb7e109e73329.tar.gz CMake-ed45432571e23ccba77cdb64aa3eb7e109e73329.tar.bz2 |
cmNinjaTargetGenerator: do not order-depend on C++ module sources
C++ module sources should not be included by any other TUs, so their
presence cannot matter for order-only dependencies of the entire target.
Exclude them.
Update CMP0154 to take this into consideration and add tests to the
`CXXModules` suite (which already deals with module support detection).
Diffstat (limited to 'Tests')
6 files changed, 72 insertions, 1 deletions
diff --git a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake index 2938fa8..e687e9f 100644 --- a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake +++ b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake @@ -133,7 +133,11 @@ function (run_cxx_module_test directory) ${ARGN}) run_cmake("examples/${test_name}") set(RunCMake_TEST_NO_CLEAN 1) - run_cmake_command("examples/${test_name}-build" "${CMAKE_COMMAND}" --build . --config Debug) + if (RunCMake_CXXModules_TARGET) + run_cmake_command("examples/${test_name}-build" "${CMAKE_COMMAND}" --build . --config Debug --target "${RunCMake_CXXModules_TARGET}") + else () + run_cmake_command("examples/${test_name}-build" "${CMAKE_COMMAND}" --build . --config Debug) + endif () if (RunCMake_CXXModules_INSTALL) run_cmake_command("examples/${test_name}-install" "${CMAKE_COMMAND}" --build . --target install --config Debug) endif () @@ -142,8 +146,23 @@ function (run_cxx_module_test directory) endif () endfunction () +function (run_cxx_module_test_target directory target) + set(RunCMake_CXXModules_TARGET "${target}") + set(RunCMake_CXXModules_NO_TEST 1) + run_cxx_module_test("${directory}" ${ARGN}) +endfunction () + string(REPLACE "," ";" CMake_TEST_MODULE_COMPILATION "${CMake_TEST_MODULE_COMPILATION}") +if (RunCMake_GENERATOR MATCHES "Ninja") + if (RunCMake_GENERATOR_IS_MULTI_CONFIG) + set(ninja_cmp0154_target "CMakeFiles/ninja_cmp0154.dir/Debug/unrelated.cxx${CMAKE_CXX_OUTPUT_EXTENSION}") + else () + set(ninja_cmp0154_target "CMakeFiles/ninja_cmp0154.dir/unrelated.cxx${CMAKE_CXX_OUTPUT_EXTENSION}") + endif () + run_cxx_module_test_target(ninja-cmp0154 "${ninja_cmp0154_target}") +endif () + # Tests which use named modules. if ("named" IN_LIST CMake_TEST_MODULE_COMPILATION) run_cxx_module_test(simple) diff --git a/Tests/RunCMake/CXXModules/examples/ninja-cmp0154-build-check.cmake b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154-build-check.cmake new file mode 100644 index 0000000..6c4812b --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154-build-check.cmake @@ -0,0 +1,4 @@ +if (EXISTS "${RunCMake_TEST_BINARY_DIR}/importable.cxx") + list(APPEND RunCMake_TEST_FAILED + "The `importable.cxx` file should not be generated to compile `unrelated`'s object") +endif () diff --git a/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/CMakeLists.txt new file mode 100644 index 0000000..1aa36c1 --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 3.24...3.28) +project(cxx_modules_ninja_cmp0154 CXX) + +include("${CMAKE_SOURCE_DIR}/../cxx-modules-rules.cmake") + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/importable.cxx" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/importable.cxx.in" + COMMAND "${CMAKE_COMMAND}" + -E copy_if_different + "${CMAKE_CURRENT_SOURCE_DIR}/importable.cxx.in" + "${CMAKE_CURRENT_BINARY_DIR}/importable.cxx" + COMMENT "Copying 'importable.cxx'") + +add_executable(ninja_cmp0154) +target_sources(ninja_cmp0154 + PRIVATE + main.cxx + unrelated.cxx + PUBLIC + FILE_SET CXX_MODULES + BASE_DIRS + "${CMAKE_CURRENT_BINARY_DIR}" + FILES + "${CMAKE_CURRENT_BINARY_DIR}/importable.cxx") +target_compile_features(ninja_cmp0154 PUBLIC cxx_std_20) +set_property(SOURCE unrelated.cxx + PROPERTY + CXX_SCAN_FOR_MODULES 0) + +add_test(NAME ninja_cmp0154 COMMAND ninja_cmp0154) diff --git a/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/importable.cxx.in b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/importable.cxx.in new file mode 100644 index 0000000..a9287d7 --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/importable.cxx.in @@ -0,0 +1,5 @@ +export module importable; + +export int from_import() { + return 0; +} diff --git a/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/main.cxx b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/main.cxx new file mode 100644 index 0000000..1ac4850 --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/main.cxx @@ -0,0 +1,8 @@ +import importable; + +extern int unrelated(); + +int main(int argc, char* argv[]) +{ + return from_import() + unrelated(); +} diff --git a/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/unrelated.cxx b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/unrelated.cxx new file mode 100644 index 0000000..d54a47f --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/unrelated.cxx @@ -0,0 +1,4 @@ +int unrelated() +{ + return 0; +} |