11## Copyright 2009-2022 Intel Corporation
22## SPDX-License-Identifier: Apache-2.0
33
4- # Common compiler configuration shared between clang.cmake, dpcpp.cmake and gnu.cmake
4+ # Common compiler configuration macros shared between clang.cmake, dpcpp.cmake and gnu.cmake
55
66MACRO (_SET_IF_EMPTY VAR VALUE )
77 IF (NOT ${VAR} )
88 SET (${VAR} "${VALUE} " )
99 ENDIF ()
1010ENDMACRO ()
1111
12- # ARM platform ISA flags
13- IF (EMBREE_ARM)
14- IF ("x86_64" IN_LIST CMAKE_OSX_ARCHITECTURES)
15- # set ARM an x86 flags for macOS universal binary build
16- SET (FLAGS_SSE2 "-D__SSE__ -D__SSE2__ -msse -msse2 -mno-sse4.2" )
17- SET (FLAGS_SSE42 "-D__SSE4_2__ -D__SSE4_1__ -msse4.2" )
18- SET (FLAGS_AVX "-D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__ -mavx" )
19- SET (FLAGS_AVX2 "-D__AVX2__ -D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__ -mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2" )
20- _SET_IF_EMPTY (FLAGS_AVX512 "-march=skx" )
21- ELSE ()
22- SET (FLAGS_SSE2 "-D__SSE__ -D__SSE2__" )
23- SET (FLAGS_SSE42 "-D__SSE4_2__ -D__SSE4_1__" )
24- SET (FLAGS_AVX "-D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__" )
25- SET (FLAGS_AVX2 "-D__AVX2__ -D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__" )
26- ENDIF ()
27- ELSE ()
28- # for `thread` keyword
29- _SET_IF_EMPTY (FLAGS_SSE2 "-msse -msse2 -mno-sse4.2" )
30- _SET_IF_EMPTY (FLAGS_SSE42 "-msse4.2" )
31- _SET_IF_EMPTY (FLAGS_AVX "-mavx" )
32- _SET_IF_EMPTY (FLAGS_AVX2 "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2" )
33- _SET_IF_EMPTY (FLAGS_AVX512 "-march=skx" )
34- ENDIF ()
35-
3612# Common security and visibility flags for non-Windows platforms
3713MACRO (APPLY_COMMON_COMPILER_FLAGS )
3814 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -Wall" ) # enables most warnings
@@ -50,16 +26,29 @@ MACRO(APPLY_COMMON_COMPILER_FLAGS)
5026 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -D_FORTIFY_SOURCE=2" ) # perform extra security checks for some standard library calls
5127ENDMACRO ()
5228
53- # Stack protector configuration (Unix-only)
29+ # Stack protector configuration
5430MACRO (CONFIGURE_STACK_PROTECTOR )
55- IF (EMBREE_STACK_PROTECTOR AND NOT WIN32 )
56- SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -fstack-protector" ) # protects against return address overrides
31+ IF (EMBREE_STACK_PROTECTOR)
32+ IF (WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
33+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } /GS" ) # protects against return address overrides
34+ ELSEIF (NOT WIN32 )
35+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -fstack-protector" ) # protects against return address overrides
36+ ELSEIF (WIN32 )
37+ # MinGW or Clang on Windows - use GNU-style flag
38+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -fstack-protector" )
39+ ENDIF ()
40+ ELSEIF (WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
41+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } /GS-" ) # do not protect against return address overrides
5742 ENDIF ()
5843ENDMACRO ()
5944
6045MACRO (DISABLE_STACK_PROTECTOR_FOR_FILE file )
61- IF (EMBREE_STACK_PROTECTOR AND NOT WIN32 )
62- SET_SOURCE_FILES_PROPERTIES (${file} PROPERTIES COMPILE_FLAGS "-fno-stack-protector" )
46+ IF (EMBREE_STACK_PROTECTOR)
47+ IF (WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
48+ SET_SOURCE_FILES_PROPERTIES (${file} PROPERTIES COMPILE_FLAGS "/GS-" )
49+ ELSE ()
50+ SET_SOURCE_FILES_PROPERTIES (${file} PROPERTIES COMPILE_FLAGS "-fno-stack-protector" )
51+ ENDIF ()
6352 ENDIF ()
6453ENDMACRO ()
6554
@@ -85,13 +74,16 @@ ENDMACRO()
8574MACRO (APPLY_MACOS_FLAGS )
8675 IF (APPLE )
8776 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -mmacosx-version-min=10.7" ) # makes sure code runs on older MacOSX versions
88- SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -stdlib=libc++" ) # link against libc++ which supports C++11 features
77+ # Only use libc++ for Clang-based compilers; GCC on macOS doesn't support it
78+ IF (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
79+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -stdlib=libc++" ) # link against libc++ which supports C++11 features
80+ ENDIF ()
8981 ENDIF ()
9082ENDMACRO ()
9183
92- # Linux-specific linker flags
84+ # Linux/ELF -specific linker flags (not for Windows or macOS)
9385MACRO (APPLY_LINUX_LINKER_FLAGS )
94- IF (NOT APPLE AND NOT EMBREE_ADDRESS_SANITIZER AND NOT EMSCRIPTEN)
86+ IF (NOT APPLE AND NOT WIN32 AND NOT EMBREE_ADDRESS_SANITIZER AND NOT EMSCRIPTEN)
9587 SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS } -Wl,--no-undefined" ) # issues link error for undefined symbols in shared library
9688 SET (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS } -pie" ) # enables position independent execution for executable
9789 SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS } -z relro -z now" ) # re-arranges data sections to increase security
0 commit comments