瀏覽代碼

VS: Add flag table entry for -Qspectre

Add special logic to map this flag to a top-level build setting
instead of being in ClCompile.

Fixes: #18426
Brad King 7 年之前
父節點
當前提交
bb60ed6e72
共有 3 個文件被更改,包括 11 次插入0 次删除
  1. 2 0
      Source/cmVS141CLFlagTable.h
  2. 8 0
      Source/cmVisualStudio10TargetGenerator.cxx
  3. 1 0
      Source/cmVisualStudio10TargetGenerator.h

+ 2 - 0
Source/cmVS141CLFlagTable.h

@@ -83,6 +83,8 @@ static cmVS7FlagTable cmVS141CLFlagTable[] = {
   { "FloatingPointModel", "fp:strict", "Strict", "Strict", 0 },
   { "FloatingPointModel", "fp:strict", "Strict", "Strict", 0 },
   { "FloatingPointModel", "fp:fast", "Fast", "Fast", 0 },
   { "FloatingPointModel", "fp:fast", "Fast", "Fast", 0 },
 
 
+  { "SpectreMitigation", "Qspectre", "Spectre mitigations", "Spectre", 0 },
+
   { "LanguageStandard", "std:c++17", "ISO C++17 Standard", "stdcpp17", 0 },
   { "LanguageStandard", "std:c++17", "ISO C++17 Standard", "stdcpp17", 0 },
   { "LanguageStandard", "std:c++14", "ISO C++14 Standard", "stdcpp14", 0 },
   { "LanguageStandard", "std:c++14", "ISO C++14 Standard", "stdcpp14", 0 },
   { "LanguageStandard", "std:c++latest", "ISO C++ Latest Draft Standard",
   { "LanguageStandard", "std:c++latest", "ISO C++ Latest Draft Standard",

+ 8 - 0
Source/cmVisualStudio10TargetGenerator.cxx

@@ -1125,6 +1125,9 @@ void cmVisualStudio10TargetGenerator::WriteMSToolConfigurationValues(
   if (this->IPOEnabledConfigurations.count(config) > 0) {
   if (this->IPOEnabledConfigurations.count(config) > 0) {
     e1.Element("WholeProgramOptimization", "true");
     e1.Element("WholeProgramOptimization", "true");
   }
   }
+  if (this->SpectreMitigationConfigurations.count(config) > 0) {
+    e1.Element("SpectreMitigation", "Spectre");
+  }
 }
 }
 
 
 void cmVisualStudio10TargetGenerator::WriteMSToolConfigurationValuesManaged(
 void cmVisualStudio10TargetGenerator::WriteMSToolConfigurationValuesManaged(
@@ -2625,6 +2628,11 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
     }
     }
   }
   }
 
 
+  if (clOptions.HasFlag("SpectreMitigation")) {
+    this->SpectreMitigationConfigurations.insert(configName);
+    clOptions.RemoveFlag("SpectreMitigation");
+  }
+
   this->ClOptions[configName] = std::move(pOptions);
   this->ClOptions[configName] = std::move(pOptions);
   return true;
   return true;
 }
 }

+ 1 - 0
Source/cmVisualStudio10TargetGenerator.h

@@ -205,6 +205,7 @@ private:
   unsigned int NsightTegraVersion[4];
   unsigned int NsightTegraVersion[4];
   bool TargetCompileAsWinRT;
   bool TargetCompileAsWinRT;
   std::set<std::string> IPOEnabledConfigurations;
   std::set<std::string> IPOEnabledConfigurations;
+  std::set<std::string> SpectreMitigationConfigurations;
   cmGlobalVisualStudio10Generator* const GlobalGenerator;
   cmGlobalVisualStudio10Generator* const GlobalGenerator;
   cmLocalVisualStudio10Generator* const LocalGenerator;
   cmLocalVisualStudio10Generator* const LocalGenerator;
   std::set<std::string> CSharpCustomCommandNames;
   std::set<std::string> CSharpCustomCommandNames;