cmLocalGenerator: Factor out helper to compute MSVC_DEBUG_INFORMATION_FORMAT

This commit is contained in:
Brad King
2022-10-31 11:59:20 -04:00
parent c8f3ba7214
commit 17096aeba8
2 changed files with 30 additions and 16 deletions

View File

@@ -2046,25 +2046,15 @@ void cmLocalGenerator::AddLanguageFlags(std::string& flags,
}
}
// Add MSVC debug information format flags. This is activated by the presence
// of a default selection whether or not it is overridden by a property.
cmValue msvcDebugInformationFormatDefault = this->Makefile->GetDefinition(
"CMAKE_MSVC_DEBUG_INFORMATION_FORMAT_DEFAULT");
if (cmNonempty(msvcDebugInformationFormatDefault)) {
cmValue msvcDebugInformationFormatValue =
target->GetProperty("MSVC_DEBUG_INFORMATION_FORMAT");
if (!msvcDebugInformationFormatValue) {
msvcDebugInformationFormatValue = msvcDebugInformationFormatDefault;
}
std::string const msvcDebugInformationFormat =
cmGeneratorExpression::Evaluate(*msvcDebugInformationFormatValue, this,
config, target);
if (!msvcDebugInformationFormat.empty()) {
// Add MSVC debug information format flags if CMP0141 is NEW.
if (cm::optional<std::string> msvcDebugInformationFormat =
this->GetMSVCDebugFormatName(config, target)) {
if (!msvcDebugInformationFormat->empty()) {
if (cmValue msvcDebugInformationFormatOptions =
this->Makefile->GetDefinition(
cmStrCat("CMAKE_", lang,
"_COMPILE_OPTIONS_MSVC_DEBUG_INFORMATION_FORMAT_",
msvcDebugInformationFormat))) {
*msvcDebugInformationFormat))) {
this->AppendCompileOptions(flags, *msvcDebugInformationFormatOptions);
} else if ((this->Makefile->GetSafeDefinition(
cmStrCat("CMAKE_", lang, "_COMPILER_ID")) == "MSVC"_s ||
@@ -2074,7 +2064,7 @@ void cmLocalGenerator::AddLanguageFlags(std::string& flags,
// The compiler uses the MSVC ABI so it needs a known runtime library.
this->IssueMessage(MessageType::FATAL_ERROR,
cmStrCat("MSVC_DEBUG_INFORMATION_FORMAT value '",
msvcDebugInformationFormat,
*msvcDebugInformationFormat,
"' not known for this ", lang,
" compiler."));
}
@@ -2871,6 +2861,26 @@ void cmLocalGenerator::CopyPchCompilePdb(
target_compile_pdb_dir);
}
cm::optional<std::string> cmLocalGenerator::GetMSVCDebugFormatName(
std::string const& config, cmGeneratorTarget const* target)
{
// MSVC debug information format selection is activated by the presence
// of a default whether or not it is overridden by a property.
cm::optional<std::string> msvcDebugInformationFormat;
cmValue msvcDebugInformationFormatDefault = this->Makefile->GetDefinition(
"CMAKE_MSVC_DEBUG_INFORMATION_FORMAT_DEFAULT");
if (cmNonempty(msvcDebugInformationFormatDefault)) {
cmValue msvcDebugInformationFormatValue =
target->GetProperty("MSVC_DEBUG_INFORMATION_FORMAT");
if (!msvcDebugInformationFormatValue) {
msvcDebugInformationFormatValue = msvcDebugInformationFormatDefault;
}
msvcDebugInformationFormat = cmGeneratorExpression::Evaluate(
*msvcDebugInformationFormatValue, this, config, target);
}
return msvcDebugInformationFormat;
}
namespace {
inline void RegisterUnitySources(cmGeneratorTarget* target, cmSourceFile* sf,

View File

@@ -646,6 +646,10 @@ private:
cmGeneratorTarget* reuseTarget,
std::vector<std::string> const& extensions);
// Returns MSVC_DEBUG_INFORMATION_FORMAT value if CMP0141 is NEW.
cm::optional<std::string> GetMSVCDebugFormatName(
std::string const& config, cmGeneratorTarget const* target);
struct UnityBatchedSource
{
cmSourceFile* Source = nullptr;