summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-10-18 13:51:43 (GMT)
committerKitware Robot <kwrobot@kitware.com>2023-10-18 13:51:53 (GMT)
commitaff78701723a3989a2cb829eef9e3ed97f1ba851 (patch)
tree3879806dd45088cfe7022a30f6681faf5e8a615c
parent2d68649142949465ed1889ded85e3cbad6f4cf65 (diff)
parent17fd7fe2aed20357275918591544b292d86f0fe1 (diff)
downloadCMake-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
-rw-r--r--Help/manual/cmake-cxxmodules.7.rst1
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx9
-rw-r--r--Tests/RunCMake/CXXModules/RunCMakeTest.cmake2
-rw-r--r--Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets-result.txt1
-rw-r--r--Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets-stderr.txt6
-rw-r--r--Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets.cmake27
-rw-r--r--Tests/RunCMake/CXXModules/sources/module-simple-use.cxx6
-rw-r--r--Tests/RunCMake/CXXModules/sources/module-simple.cxx6
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;
+}