summaryrefslogtreecommitdiffstats
path: root/Tests/RunCMake
diff options
context:
space:
mode:
authorBenjamin Sluis <benjamin.sluis@intel.com>2022-01-11 15:43:23 (GMT)
committerBrad King <brad.king@kitware.com>2022-01-12 21:45:07 (GMT)
commit9e24437c912f52a7afcba58cdd51b74c7dab3861 (patch)
tree9cbf329b1ee1f8e4f00f6179ec4f52254238fc04 /Tests/RunCMake
parentb8e0b40734568a9a18095babc3feb4b1fe12c6ef (diff)
downloadCMake-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.
Diffstat (limited to 'Tests/RunCMake')
-rw-r--r--Tests/RunCMake/VS10Project/RunCMakeTest.cmake1
-rw-r--r--Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting-check.cmake40
-rw-r--r--Tests/RunCMake/VS10Project/VsControlFlowGuardLinkSetting.cmake7
3 files changed, 48 insertions, 0 deletions
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)