summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Weis <der_ghulbus@ghulbus-inc.de>2023-06-08 10:21:17 (GMT)
committerBrad King <brad.king@kitware.com>2023-06-22 18:22:56 (GMT)
commitd90a61d671192fefd18a9c6152db8925a64b5035 (patch)
treeb63780988994517780ecf48d979930cf2d5f35e1
parent99ea9ad947e980d179a618ff1f67fa27a30975d3 (diff)
downloadCMake-d90a61d671192fefd18a9c6152db8925a64b5035.zip
CMake-d90a61d671192fefd18a9c6152db8925a64b5035.tar.gz
CMake-d90a61d671192fefd18a9c6152db8925a64b5035.tar.bz2
VS: Make C++ module BMIs public by default for shared libraries
Enable the `AllProjectBMIsArePublic` option for shared libraries in the VS project files when building with C++20 modules support.
-rw-r--r--.gitlab/ci/configure_windows_vs2022_x64.cmake2
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx24
-rw-r--r--Source/cmVisualStudio10TargetGenerator.h1
3 files changed, 26 insertions, 1 deletions
diff --git a/.gitlab/ci/configure_windows_vs2022_x64.cmake b/.gitlab/ci/configure_windows_vs2022_x64.cmake
index 290d380..51ee514 100644
--- a/.gitlab/ci/configure_windows_vs2022_x64.cmake
+++ b/.gitlab/ci/configure_windows_vs2022_x64.cmake
@@ -1,4 +1,4 @@
-set(CMake_TEST_MODULE_COMPILATION "named,partitions,internal_partitions" CACHE STRING "")
+set(CMake_TEST_MODULE_COMPILATION "named,partitions,internal_partitions,shared" CACHE STRING "")
include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_msvc_cxx_modules_common.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_vs_common.cmake")
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 7975018..33152f2 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -793,6 +793,7 @@ void cmVisualStudio10TargetGenerator::WriteClassicMsBuildProjectFile(
Elem(e0, "PropertyGroup").Attribute("Label", "UserMacros");
this->WriteWinRTPackageCertificateKeyFile(e0);
this->WritePathAndIncrementalLinkOptions(e0);
+ this->WritePublicProjectContentOptions(e0);
this->WriteCEDebugProjectConfigurationValues(e0);
this->WriteItemDefinitionGroups(e0);
this->WriteCustomCommands(e0);
@@ -3115,6 +3116,29 @@ void cmVisualStudio10TargetGenerator::WritePathAndIncrementalLinkOptions(
}
}
+void cmVisualStudio10TargetGenerator::WritePublicProjectContentOptions(
+ Elem& e0)
+{
+ cmStateEnums::TargetType ttype = this->GeneratorTarget->GetType();
+ if (ttype != cmStateEnums::SHARED_LIBRARY) {
+ return;
+ }
+ if (this->ProjectType != VsProjectType::vcxproj) {
+ return;
+ }
+
+ Elem e1(e0, "PropertyGroup");
+ for (std::string const& config : this->Configurations) {
+ if (this->GeneratorTarget->HaveCxx20ModuleSources() &&
+ this->GeneratorTarget->HaveCxxModuleSupport(config) ==
+ cmGeneratorTarget::Cxx20SupportLevel::Supported) {
+ const std::string cond = this->CalcCondition(config);
+ // For DLL projects, we export all BMIs for now
+ e1.WritePlatformConfigTag("AllProjectBMIsArePublic", cond, "true");
+ }
+ }
+}
+
void cmVisualStudio10TargetGenerator::OutputLinkIncremental(
Elem& e1, std::string const& configName)
{
diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h
index a87cb01..ffab91f 100644
--- a/Source/cmVisualStudio10TargetGenerator.h
+++ b/Source/cmVisualStudio10TargetGenerator.h
@@ -97,6 +97,7 @@ private:
void WriteWinRTPackageCertificateKeyFile(Elem& e0);
void WriteXamlFilesGroup(Elem& e0);
void WritePathAndIncrementalLinkOptions(Elem& e0);
+ void WritePublicProjectContentOptions(Elem& e0);
void WriteItemDefinitionGroups(Elem& e0);
void VerifyNecessaryFiles();
void WriteMissingFiles(Elem& e1);