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.
This commit is contained in:
Andreas Weis 2023-06-08 12:21:17 +02:00 committed by Brad King
parent 99ea9ad947
commit d90a61d671
3 changed files with 26 additions and 1 deletions

View File

@ -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")

View File

@ -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)
{

View File

@ -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);