diff options
author | Brad King <brad.king@kitware.com> | 2023-10-18 13:51:43 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2023-10-18 13:51:53 (GMT) |
commit | aff78701723a3989a2cb829eef9e3ed97f1ba851 (patch) | |
tree | 3879806dd45088cfe7022a30f6681faf5e8a615c | |
parent | 2d68649142949465ed1889ded85e3cbad6f4cf65 (diff) | |
parent | 17fd7fe2aed20357275918591544b292d86f0fe1 (diff) | |
download | CMake-aff78701723a3989a2cb829eef9e3ed97f1ba851.zip CMake-aff78701723a3989a2cb829eef9e3ed97f1ba851.tar.gz CMake-aff78701723a3989a2cb829eef9e3ed97f1ba851.tar.bz2 |
Merge topic 'cxxmodules-vs-no-synthetic-targets'
17fd7fe2ae Tests/CXXModules: test Visual Studio synthetic target error
badb6ab120 VS: Explicitly disallow C++ modules provided by imported targets
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !8895
8 files changed, 57 insertions, 1 deletions
diff --git a/Help/manual/cmake-cxxmodules.7.rst b/Help/manual/cmake-cxxmodules.7.rst index 5776421..99915e3 100644 --- a/Help/manual/cmake-cxxmodules.7.rst +++ b/Help/manual/cmake-cxxmodules.7.rst @@ -68,5 +68,6 @@ For the :ref:`Visual Studio Generators`: - Only Visual Studio 2022 and MSVC toolsets 14.34 (Visual Studio 17.4) and newer. - No support for exporting or installing BMI or module information. +- No support for compiling BMIs from ``IMPORTED`` targets with C++ modules. - No diagnosis of using modules provided by ``PRIVATE`` sources from ``PUBLIC`` module sources. diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 84f808d..1bbd934 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -358,6 +358,15 @@ std::ostream& cmVisualStudio10TargetGenerator::Elem::WriteString( void cmVisualStudio10TargetGenerator::Generate() { + if (this->GeneratorTarget->IsSynthetic()) { + this->GeneratorTarget->Makefile->IssueMessage( + MessageType::FATAL_ERROR, + cmStrCat("Target \"", this->GeneratorTarget->GetName(), + "\" contains C++ modules intended for BMI-only compilation. " + "This is not yet supported by the Visual Studio generator.")); + return; + } + for (std::string const& config : this->Configurations) { this->GeneratorTarget->CheckCxxModuleStatus(config); } diff --git a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake index e13b2d4..2938fa8 100644 --- a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake +++ b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake @@ -95,7 +95,7 @@ if (RunCMake_GENERATOR MATCHES "Ninja") run_cmake(NinjaDependInfoExport) run_cmake(NinjaDependInfoBMIInstall) elseif (RunCMake_GENERATOR MATCHES "Visual Studio") - # Not supported yet. + run_cmake(VisualStudioNoSyntheticTargets) else () message(FATAL_ERROR "Please add 'DependInfo' tests for the '${RunCMake_GENERATOR}' generator.") diff --git a/Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets-result.txt b/Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets-stderr.txt b/Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets-stderr.txt new file mode 100644 index 0000000..a8ef008 --- /dev/null +++ b/Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets-stderr.txt @@ -0,0 +1,6 @@ +^(CMake Error in CMakeLists.txt: + Target "imported-cxx-modules@synth_[0-9a-f]+" contains C\+\+ modules + intended for BMI-only compilation. This is not yet supported by the Visual + Studio generator. +* +)+CMake Generate step failed. Build files cannot be regenerated correctly. diff --git a/Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets.cmake b/Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets.cmake new file mode 100644 index 0000000..e5e178d --- /dev/null +++ b/Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets.cmake @@ -0,0 +1,27 @@ +enable_language(CXX) + +if (NOT CMAKE_GENERATOR MATCHES "Visual Studio") + message(FATAL_ERROR + "This test requires a 'Visual Studio' generator to be used.") +endif () + +add_library(imported-cxx-modules IMPORTED INTERFACE) +target_sources(imported-cxx-modules + INTERFACE + FILE_SET modules TYPE CXX_MODULES + BASE_DIRS + "${CMAKE_CURRENT_SOURCE_DIR}/sources" + FILES + sources/module-simple.cxx) +set_target_properties(imported-cxx-modules PROPERTIES + IMPORTED_CONFIGURATIONS DEBUG + IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX" + IMPORTED_CXX_MODULES_COMPILE_FEATURES "cxx_std_20" + INTERFACE_COMPILE_FEATURES "cxx_std_20" + IMPORTED_CXX_MODULES_DEBUG "simple=${CMAKE_CURRENT_SOURCE_DIR}/sources/module-simple.cxx") + +add_executable(vs-use-imported-cxx-modules + sources/module-simple-use.cxx) +target_link_libraries(vs-use-imported-cxx-modules + PRIVATE + imported-cxx-modules) diff --git a/Tests/RunCMake/CXXModules/sources/module-simple-use.cxx b/Tests/RunCMake/CXXModules/sources/module-simple-use.cxx new file mode 100644 index 0000000..b0bfeec --- /dev/null +++ b/Tests/RunCMake/CXXModules/sources/module-simple-use.cxx @@ -0,0 +1,6 @@ +import simple; + +int main(int argc, char* argv[]) +{ + return g(); +} diff --git a/Tests/RunCMake/CXXModules/sources/module-simple.cxx b/Tests/RunCMake/CXXModules/sources/module-simple.cxx new file mode 100644 index 0000000..21b087c --- /dev/null +++ b/Tests/RunCMake/CXXModules/sources/module-simple.cxx @@ -0,0 +1,6 @@ +export module simple; + +int g() +{ + return 0; +} |