Skip to content

Commit

Permalink
Merge topic 'cxxmodules-vs-no-synthetic-targets' into release-3.28
Browse files Browse the repository at this point in the history
17fd7fe Tests/CXXModules: test Visual Studio synthetic target error
badb6ab VS: Explicitly disallow C++ modules provided by imported targets

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !8895
  • Loading branch information
bradking authored and kwrobot committed Oct 18, 2023
2 parents c924b9e + 17fd7fe commit dc7bed5
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 1 deletion.
1 change: 1 addition & 0 deletions Help/manual/cmake-cxxmodules.7.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.
9 changes: 9 additions & 0 deletions Source/cmVisualStudio10TargetGenerator.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
2 changes: 1 addition & 1 deletion Tests/RunCMake/CXXModules/RunCMakeTest.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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.")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Original file line number Diff line number Diff line change
@@ -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.
27 changes: 27 additions & 0 deletions Tests/RunCMake/CXXModules/VisualStudioNoSyntheticTargets.cmake
Original file line number Diff line number Diff line change
@@ -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)
6 changes: 6 additions & 0 deletions Tests/RunCMake/CXXModules/sources/module-simple-use.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import simple;

int main(int argc, char* argv[])
{
return g();
}
6 changes: 6 additions & 0 deletions Tests/RunCMake/CXXModules/sources/module-simple.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export module simple;

int g()
{
return 0;
}

0 comments on commit dc7bed5

Please sign in to comment.