mirror of
https://github.com/reactos/CMake.git
synced 2025-03-03 09:27:12 +00:00
Merge topic 'vs-spectre-off'
f9b7c660d7 VS: Fix mapping of `-Qspectre-` flag Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !3629
This commit is contained in:
commit
cb88632790
@ -1235,8 +1235,11 @@ void cmVisualStudio10TargetGenerator::WriteMSToolConfigurationValues(
|
||||
if (this->IPOEnabledConfigurations.count(config) > 0) {
|
||||
e1.Element("WholeProgramOptimization", "true");
|
||||
}
|
||||
if (this->SpectreMitigationConfigurations.count(config) > 0) {
|
||||
e1.Element("SpectreMitigation", "Spectre");
|
||||
{
|
||||
auto s = this->SpectreMitigation.find(config);
|
||||
if (s != this->SpectreMitigation.end()) {
|
||||
e1.Element("SpectreMitigation", s->second);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2766,8 +2769,8 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions(
|
||||
}
|
||||
}
|
||||
|
||||
if (clOptions.HasFlag("SpectreMitigation")) {
|
||||
this->SpectreMitigationConfigurations.insert(configName);
|
||||
if (const char* s = clOptions.GetFlag("SpectreMitigation")) {
|
||||
this->SpectreMitigation[configName] = s;
|
||||
clOptions.RemoveFlag("SpectreMitigation");
|
||||
}
|
||||
|
||||
|
@ -215,7 +215,7 @@ private:
|
||||
unsigned int NsightTegraVersion[4];
|
||||
bool TargetCompileAsWinRT;
|
||||
std::set<std::string> IPOEnabledConfigurations;
|
||||
std::set<std::string> SpectreMitigationConfigurations;
|
||||
std::map<std::string, std::string> SpectreMitigation;
|
||||
cmGlobalVisualStudio10Generator* const GlobalGenerator;
|
||||
cmLocalVisualStudio10Generator* const LocalGenerator;
|
||||
std::set<std::string> CSharpCustomCommandNames;
|
||||
|
@ -28,3 +28,7 @@ run_cmake(VsDpiAwareBadParam)
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.05)
|
||||
run_cmake(VsJustMyCode)
|
||||
endif()
|
||||
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "MSVC" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.20)
|
||||
run_cmake(VsSpectreMitigation)
|
||||
endif()
|
||||
|
30
Tests/RunCMake/VS10Project/VsSpectreMitigation-check.cmake
Normal file
30
Tests/RunCMake/VS10Project/VsSpectreMitigation-check.cmake
Normal file
@ -0,0 +1,30 @@
|
||||
macro(VsSpectreMitigation_check tgt spectre_expect)
|
||||
set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/${tgt}.vcxproj")
|
||||
if(NOT EXISTS "${vcProjectFile}")
|
||||
set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not exist.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(HAVE_SpectreMitigation 0)
|
||||
|
||||
file(STRINGS "${vcProjectFile}" lines)
|
||||
foreach(line IN LISTS lines)
|
||||
if(line MATCHES "^ *<SpectreMitigation>([^<>]+)</SpectreMitigation>")
|
||||
set(spectre_actual "${CMAKE_MATCH_1}")
|
||||
if(NOT "${spectre_actual}" STREQUAL "${spectre_expect}")
|
||||
set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj has <SpectreMitigation> '${spectre_actual}', not '${spectre_expect}'.")
|
||||
return()
|
||||
endif()
|
||||
set(HAVE_SpectreMitigation 1)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT HAVE_SpectreMitigation AND NOT "${spectre_expect}" STREQUAL "")
|
||||
set(RunCMake_TEST_FAILED "Project file ${tgt}.vcxproj does not have a <SpectreMitigation> field.")
|
||||
return()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
VsSpectreMitigation_check(SpectreMitigationOn-C "Spectre")
|
||||
VsSpectreMitigation_check(SpectreMitigationOff-C "false")
|
8
Tests/RunCMake/VS10Project/VsSpectreMitigation.cmake
Normal file
8
Tests/RunCMake/VS10Project/VsSpectreMitigation.cmake
Normal file
@ -0,0 +1,8 @@
|
||||
set(CMAKE_CONFIGURATION_TYPES Debug)
|
||||
enable_language(C)
|
||||
|
||||
add_library(SpectreMitigationOn-C empty.c)
|
||||
target_compile_options(SpectreMitigationOn-C PRIVATE -Qspectre)
|
||||
|
||||
add_library(SpectreMitigationOff-C empty.c)
|
||||
target_compile_options(SpectreMitigationOff-C PRIVATE -Qspectre-)
|
Loading…
x
Reference in New Issue
Block a user