diff options
author | Benjamin Sluis <benjamin.sluis@intel.com> | 2022-01-11 15:43:23 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2022-01-12 21:45:07 (GMT) |
commit | 9e24437c912f52a7afcba58cdd51b74c7dab3861 (patch) | |
tree | 9cbf329b1ee1f8e4f00f6179ec4f52254238fc04 | |
parent | b8e0b40734568a9a18095babc3feb4b1fe12c6ef (diff) | |
download | CMake-9e24437c912f52a7afcba58cdd51b74c7dab3861.zip CMake-9e24437c912f52a7afcba58cdd51b74c7dab3861.tar.gz CMake-9e24437c912f52a7afcba58cdd51b74c7dab3861.tar.bz2 |
VS: Remove the '/guard:cf' flag from v143 link flag table
Apply the change from commit db35e3cfd6 (VS: Fix support for '/guard:cf'
linker flag for v142, 2019-01-24, v3.14.0-rc1~74^2~2) to the v143 flag
table.
The entry for `LinkControlFlowGuard` in `v143_Link.json` does not work
when used in a `.vcxproj` file. Drop our link flag table entries for
this toolset so that the flag will be passed via `AdditionalOptions`.
Also add a test case.
4 files changed, 48 insertions, 7 deletions
diff --git a/Templates/MSBuild/FlagTables/v143_Link.json b/Templates/MSBuild/FlagTables/v143_Link.json index 71d58f8..4422f55 100644 --- a/Templates/MSBuild/FlagTables/v143_Link.json +++ b/Templates/MSBuild/FlagTables/v143_Link.json @@ -978,13 +978,6 @@ "flags": [] }, { - "name": "LinkControlFlowGuard", - "switch": "guard:cf", - "comment": "Control Flow Guard", - "value": "true", - "flags": [] - }, - { "name": "LinkGuardEHContMetadata", "switch": "guard:ehcont", "comment": "Enable EH Continuation Metadata", diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake index d5ed136..e11a24a 100644 --- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake +++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake @@ -41,6 +41,7 @@ run_cmake(VsDeployEnabled) run_cmake(VsSettings) run_cmake(VsSourceSettingsTool) run_cmake(VsPlatformToolset) +run_cmake(VsControlFlowGuardLinkSetting) run_cmake(VsWinRTByDefault) diff --git a/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting-check.cmake b/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting-check.cmake new file mode 100644 index 0000000..c13858b --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting-check.cmake @@ -0,0 +1,40 @@ +set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/ControlFlowGuardProject.vcxproj") +if(NOT EXISTS "${vcProjectFile}") + set(RunCMake_TEST_FAILED "Project file ControlFlowGuardProject.vcxproj does not exist.") + return() +endif() + +set(Is_in_link_section 0) +set(HAS_ControlFlowGuardSetting 0) + +file(STRINGS "${vcProjectFile}" lines) +foreach(line IN LISTS lines) + if(line MATCHES "^ *<LinkControlFlowGuard>([^<>]+)</LinkControlFlowGuard>") + set(RunCMake_TEST_FAILED "Project file ControlFlowGuardProject.vcxproj contains the invalid <LinkControlFlowGuard> link property.") + return() + break() + endif() + if(line MATCHES "^ *<Link>") + # The start of the link section of the vcxproj file + set(Is_in_link_section 1) + continue() + endif() + if(line MATCHES "^ *</Link>") + # The end of the link section of the vcxproj file + set(Is_in_link_section 0) + continue() + endif() + if(Is_in_link_section) + if(line MATCHES "^ *<AdditionalOptions>([^<>]+)</AdditionalOptions>") + if("${CMAKE_MATCH_1}" MATCHES ".*/guard:cf.*") + set(HAS_ControlFlowGuardSetting 1) + break() + endif() + endif() + endif() +endforeach() + +if(NOT HAS_ControlFlowGuardSetting) + set(RunCMake_TEST_FAILED "Project file ControlFlowGuardProject.vcxproj does not have '/guard:cf' specified in the <AdditionalOptions> property.") + return() +endif() diff --git a/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting.cmake b/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting.cmake new file mode 100644 index 0000000..31e69ac --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting.cmake @@ -0,0 +1,7 @@ +enable_language(CXX) + +# Add the Control Flow Guard compiler and linker option +add_compile_options("/guard:cf") +string(APPEND CMAKE_SHARED_LINKER_FLAGS " /guard:cf") + +add_library(ControlFlowGuardProject SHARED foo.cpp) |