1- ## Copyright 2009-2021 Intel Corporation
1+ ## Copyright 2009-2024 Intel Corporation
22## SPDX-License-Identifier: Apache-2.0
33
44MACRO (_SET_IF_EMPTY VAR VALUE )
@@ -39,6 +39,7 @@ IF (WIN32)
3939 SET (COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} -Xclang -fcxx-exceptions" ) # enable C++ exceptions in Clang
4040 SET (COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} /w" ) # disable all warnings
4141 SET (COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} /Gy" ) # package individual functions
42+ SET (COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} /GF" ) # eliminate duplicate strings
4243 IF (EMBREE_STACK_PROTECTOR)
4344 SET (COMMON_CXX_FLAGS "${COMMON_CXX_FLAGS} /GS" ) # protects against return address overrides
4445 ELSE ()
@@ -49,25 +50,37 @@ IF (WIN32)
4950 SET_SOURCE_FILES_PROPERTIES (${file} PROPERTIES COMPILE_FLAGS "/GS-" )
5051 ENDIF ()
5152 ENDMACRO ()
52-
53+
5354 SET (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMMON_CXX_FLAGS} " )
5455 SET (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /DDEBUG" ) # enables assertions
5556 SET (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /DTBB_USE_DEBUG" ) # configures TBB in debug mode
5657 SET (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Ox" ) # enable full optimizations
5758 SET (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Oi" ) # inline intrinsic functions
5859 SET (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG" ) # generate debug information
60+ SET (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO" ) # disable incremental linking
61+ SET (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /OPT:REF /OPT:ICF" ) # restore optimizations disabled by /DEBUG
5962 SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /DEBUG" ) # generate debug information
63+ SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO" ) # disable incremental linking
64+ SET (CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /OPT:REF /OPT:ICF" ) # restore optimizations disabled by /DEBUG
6065
6166 SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${COMMON_CXX_FLAGS} " )
6267 SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Ox" ) # enable full optimizations
6368 SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi" ) # inline intrinsic functions
64-
69+ SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /guard:cf" ) # enable control flow guard
70+ SET (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /INCREMENTAL:NO" ) # disable incremental linking
71+ SET (CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /INCREMENTAL:NO" ) # disable incremental linking
72+
6573 SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${COMMON_CXX_FLAGS} " )
6674 SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Ox" ) # enable full optimizations
6775 SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Oi" ) # inline intrinsic functions
76+ SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /guard:cf" ) # enable control flow guard
6877 SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /DEBUG" ) # generate debug information
78+ SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /INCREMENTAL:NO" ) # disable incremental linking
79+ SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /OPT:ICF" ) # restore optimizations disabled by /DEBUG
6980 SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /DEBUG" ) # generate debug information
70-
81+ SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /INCREMENTAL:NO" ) # disable incremental linking
82+ SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /OPT:ICF" ) # restore optimizations disabled by /DEBUG
83+
7184 SET (SECURE_LINKER_FLAGS "" )
7285 SET (SECURE_LINKER_FLAGS "${SECURE_LINKER_FLAGS} /NXCompat" ) # compatible with data execution prevention (on by default)
7386 SET (SECURE_LINKER_FLAGS "${SECURE_LINKER_FLAGS} /DynamicBase" ) # random rebase of executable at load time
@@ -77,6 +90,22 @@ IF (WIN32)
7790 SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${SECURE_LINKER_FLAGS} " )
7891 SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${SECURE_LINKER_FLAGS} " )
7992
93+ # /CETCOMPAT requires clang-cl 13.0+ and is only supported on x64
94+ IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
95+ SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /CETCOMPAT" ) # enable CET shadow stack compatibility
96+ SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /CETCOMPAT" ) # enable CET shadow stack compatibility
97+ ENDIF ()
98+
99+ # /guard:ehcont requires clang-cl 13.0+ and is only supported on x64
100+ IF (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
101+ SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /guard:ehcont" ) # enable EH continuation metadata
102+ SET (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /guard:ehcont" ) # enable EH continuation metadata
103+ SET (CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /guard:ehcont" ) # enable EH continuation metadata
104+ SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /guard:ehcont" ) # enable EH continuation metadata
105+ SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /guard:ehcont" ) # enable EH continuation metadata
106+ SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /guard:ehcont" ) # enable EH continuation metadata
107+ ENDIF ()
108+
80109 INCLUDE (msvc_post )
81110ELSE ()
82111
@@ -86,7 +115,7 @@ ELSE()
86115 SET (CMAKE_CXX_FLAGS "" )
87116 ENDIF ()
88117
89- SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
118+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} " )
90119 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" ) # enables most warnings
91120 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security" ) # enables string format vulnerability warnings
92121 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char" ) # treat char as signed on all processors, including ARM
@@ -95,7 +124,7 @@ ELSE()
95124 ENDIF ()
96125 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC" ) # generate position independent code suitable for shared libraries
97126 SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC" ) # generate position independent code suitable for shared libraries
98- SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" ) # enables C++11 features
127+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" ) # enables C++11 features
99128 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden" ) # makes all symbols hidden by default
100129 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden" ) # makes all inline symbols hidden by default
101130 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing" ) # disables strict aliasing rules
0 commit comments