From 02c4578121bd42c10c23abcaee9cda18dcefa3ed Mon Sep 17 00:00:00 2001 From: Charles Giessen Date: Wed, 16 Feb 2022 13:24:26 -0700 Subject: [PATCH] Cleanup MSVC CMake code * Googletest has been updated to 1.11 which means the TR1 deprecation notice is unecessary. * The `/permissive-` flag has been moved to loader_common_options so it doesn't have to be repeated over and over. * Since we do not support VS 2013 and early, use /guard:cf everywhere * Remove MSVC_LOADER_COMPILE_OPTIONS in favor of loader_common_options * Remove reduntant compile options and include directories --- CMakeLists.txt | 8 +++- loader/CMakeLists.txt | 56 +++++++++++----------------- tests/framework/CMakeLists.txt | 5 --- tests/framework/icd/CMakeLists.txt | 8 +--- tests/framework/layer/CMakeLists.txt | 8 +--- 5 files changed, 30 insertions(+), 55 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d30924b..89a109aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -300,7 +300,13 @@ if(MSVC) # /w34701, /w34703: Warn about potentially uninitialized variables # /w34057: Warn about different indirection types. # /w34245: Warn about signed/unsigned mismatch. - target_compile_options(loader_common_options INTERFACE /WX /GR- /w34456 /w34701 /w34703 /w34057 /w34245) + # /guard:cf: Enable control flow guard + # /permissive-: Use standard conformance mode + target_compile_options(loader_common_options INTERFACE /WX /GR- /w34456 /w34701 /w34703 /w34057 /w34245 /guard:cf /permissive-) + + # Enable control flow guard + list(APPEND CMAKE_SHARED_LINKER_FLAGS /guard:cf) + list(APPEND CMAKE_EXE_LINKER_FLAGS /guard:cf) # Prevent from polluting the code. guards against things like MIN and MAX target_compile_definitions(loader_common_options INTERFACE WIN32_LEAN_AND_MEAN) diff --git a/loader/CMakeLists.txt b/loader/CMakeLists.txt index 50587278..1f4bd6af 100644 --- a/loader/CMakeLists.txt +++ b/loader/CMakeLists.txt @@ -41,37 +41,27 @@ if(NOT MSVC AND NOT (HAVE_SECURE_GETENV OR HAVE___SECURE_GETENV)) message(WARNING "Using non-secure environmental lookups. This loader will not properly disable environent variables when run with elevated permissions.") endif() -if(WIN32) - if(MSVC AND NOT MSVC_VERSION LESS 1900) - # Enable control flow guard - message(STATUS "Building loader with control flow guard") - set(MSVC_LOADER_COMPILE_OPTIONS ${MSVC_LOADER_COMPILE_OPTIONS} /guard:cf) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /guard:cf") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /guard:cf") - endif() -endif() - if(WIN32) if(MSVC) - # Use static MSVCRT libraries - foreach(configuration - in - CMAKE_C_FLAGS_DEBUG - CMAKE_C_FLAGS_MINSIZEREL - CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS_DEBUG - CMAKE_CXX_FLAGS_MINSIZEREL - CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_RELWITHDEBINFO) - if(${configuration} MATCHES "/MD") - string(REGEX - REPLACE "/MD" - "/MT" - ${configuration} - "${${configuration}}") - endif() - endforeach() + # Use static MSVCRT libraries + foreach(configuration + in + CMAKE_C_FLAGS_DEBUG + CMAKE_C_FLAGS_MINSIZEREL + CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS_DEBUG + CMAKE_CXX_FLAGS_MINSIZEREL + CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_RELWITHDEBINFO) + if(${configuration} MATCHES "/MD") + string(REGEX + REPLACE "/MD" + "/MT" + ${configuration} + "${${configuration}}") + endif() + endforeach() endif() if(ENABLE_WIN10_ONECORE) @@ -81,7 +71,7 @@ if(WIN32) set(CMAKE_C_STANDARD_LIBRARIES ${CMAKE_CXX_STANDARD_LIBRARIES}) endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS") + target_compile_options(loader_specific_options INTERFACE -D_CRT_SECURE_NO_WARNINGS) # ~~~ # Build dev_ext_trampoline.c and unknown_ext_chain.c with /O2 to allow tail-call optimization. # Setup two CMake targets (loader-norm and loader-opt) for the different compilation flags. @@ -180,6 +170,7 @@ if(WIN32) set_target_properties(loader_asm_gen_files PROPERTIES FOLDER ${LOADER_HELPER_FOLDER}) add_library(loader-unknown-chain OBJECT unknown_ext_chain_masm.asm) target_link_libraries(loader-unknown-chain Vulkan::Headers) + target_include_directories(loader-unknown-chain PUBLIC $) add_dependencies(loader-unknown-chain loader_asm_gen_files) else() message(WARNING "Could not find working MASM assebler\n${ASM_FAILURE_MSG}") @@ -187,7 +178,6 @@ if(WIN32) add_library(loader-unknown-chain OBJECT unknown_ext_chain.c) target_link_libraries(loader-unknown-chain loader_specific_options) set_target_properties(loader-unknown-chain PROPERTIES CMAKE_C_FLAGS_DEBUG "${MODIFIED_C_FLAGS_DEBUG}") - target_compile_options(loader-unknown-chain PUBLIC ${MSVC_LOADER_COMPILE_OPTIONS}) endif() elseif(APPLE) # For MacOS, use the C code and force the compiler's tail-call optimization instead of using assembly code. @@ -241,8 +231,6 @@ if(WIN32) target_link_libraries(loader-opt PUBLIC loader_specific_options) add_dependencies(loader-opt loader_asm_gen_files) set_target_properties(loader-opt PROPERTIES CMAKE_C_FLAGS_DEBUG "${MODIFIED_C_FLAGS_DEBUG}") - target_compile_options(loader-opt PUBLIC ${MSVC_LOADER_COMPILE_OPTIONS}) - target_include_directories(loader-opt PRIVATE "$") add_library(vulkan SHARED @@ -252,8 +240,6 @@ if(WIN32) ${CMAKE_CURRENT_LIST_DIR}/loader.rc) target_link_libraries(vulkan loader_specific_options loader-opt) - target_compile_options(vulkan PUBLIC ${MSVC_LOADER_COMPILE_OPTIONS}) - target_include_directories(vulkan PRIVATE "$") if (UPDATE_DEPS) add_dependencies(vulkan vl_update_deps) diff --git a/tests/framework/CMakeLists.txt b/tests/framework/CMakeLists.txt index d2472b63..6328da03 100644 --- a/tests/framework/CMakeLists.txt +++ b/tests/framework/CMakeLists.txt @@ -76,9 +76,4 @@ target_compile_definitions(test-environment PUBLIC "GTEST_LINKED_AS_SHARED_LIBRA add_library(testing_dependencies INTERFACE) -target_compile_options(testing_dependencies INTERFACE $<$:${MSVC_LOADER_COMPILE_OPTIONS},/permissive->) -target_compile_definitions(testing_dependencies INTERFACE -# Workaround for TR1 deprecation in Visual Studio 15.5 until Google Test is updated - $<$:-DWIN32_LEAN_AND_MEAN,-D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING>) - target_link_libraries(testing_dependencies INTERFACE Vulkan::Headers testing_framework_util test-environment) diff --git a/tests/framework/icd/CMakeLists.txt b/tests/framework/icd/CMakeLists.txt index 44378d16..bf6d6967 100644 --- a/tests/framework/icd/CMakeLists.txt +++ b/tests/framework/icd/CMakeLists.txt @@ -19,13 +19,7 @@ set(CMAKE_CXX_STANDARD 11) add_library(test_icd_deps INTERFACE) -target_compile_options(test_icd_deps INTERFACE - $<$:${MSVC_LOADER_COMPILE_OPTIONS},/permissive->) - -target_compile_definitions(test_icd_deps INTERFACE -# Workaround for TR1 deprecation in Visual Studio 15.5 until Google Test is updated - $<$:-DWIN32_LEAN_AND_MEAN,-D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING> - VK_NO_PROTOTYPES) +target_compile_definitions(test_icd_deps INTERFACE VK_NO_PROTOTYPES) target_link_libraries(test_icd_deps INTERFACE testing_framework_util) diff --git a/tests/framework/layer/CMakeLists.txt b/tests/framework/layer/CMakeLists.txt index 0ab39550..15cd8896 100644 --- a/tests/framework/layer/CMakeLists.txt +++ b/tests/framework/layer/CMakeLists.txt @@ -17,13 +17,7 @@ add_library(test_layer_deps INTERFACE) -target_compile_options(test_layer_deps INTERFACE - $<$:${MSVC_LOADER_COMPILE_OPTIONS},/permissive->) - -target_compile_definitions(test_layer_deps INTERFACE - # Workaround for TR1 deprecation in Visual Studio 15.5 until Google Test is updated - $<$:-DWIN32_LEAN_AND_MEAN,-D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING> - VK_NO_PROTOTYPES) +target_compile_definitions(test_layer_deps INTERFACE VK_NO_PROTOTYPES) target_link_libraries(test_layer_deps INTERFACE testing_framework_util) -- 2.34.1