Skip to content

Commit eff2408

Browse files
committed
Fix PR #599 review comments: refactor compiler flags and address platform compatibility
- Extract common compiler flag macros into compiler_base.cmake - Restore compiler-specific ISA flags to respective compiler files: * clang.cmake: -msse -msse2 -mno-sse4.2 + -march=skx (non-ARM) * dpcpp.cmake: -msse2 + -march=skx (non-ARM) with full ARM support * gnu.cmake: -msse2 + -march=skylake-avx512 (non-ARM) - Fix typo: 'set ARM an x86 flags' -> 'set ARM and x86 flags' - Guard Clang-only flags (-stdlib=libc++) behind compiler check - Guard ELF-specific linker flags (-z relro, -z now, etc.) with NOT WIN32 - Improve stack protector handling for MSVC, Unix, and MinGW toolchains - Fix gnu.cmake -pie flag to be guarded by NOT APPLE (was unconditional) - Preserve baseline behavior: only functional change is ARM support in dpcpp.cmake
1 parent 8eab027 commit eff2408

8 files changed

Lines changed: 12563 additions & 35 deletions

File tree

.clang-format

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
BasedOnStyle: LLVM
2+
IndentWidth: 2
3+

.vscode/settings.json

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
{
2+
"files.associations": {
3+
"map": "cpp",
4+
"queue": "cpp",
5+
"memory": "cpp",
6+
"*.isph": "cpp",
7+
"ranges": "cpp",
8+
"cmath": "cpp",
9+
"cstdarg": "cpp",
10+
"cstddef": "cpp",
11+
"cstdio": "cpp",
12+
"cstdlib": "cpp",
13+
"cstring": "cpp",
14+
"atomic": "cpp",
15+
"bit": "cpp",
16+
"compare": "cpp",
17+
"concepts": "cpp",
18+
"cstdint": "cpp",
19+
"algorithm": "cpp",
20+
"iterator": "cpp",
21+
"random": "cpp",
22+
"type_traits": "cpp",
23+
"utility": "cpp",
24+
"initializer_list": "cpp",
25+
"limits": "cpp",
26+
"stdexcept": "cpp",
27+
"cinttypes": "cpp",
28+
"array": "cpp",
29+
"cctype": "cpp",
30+
"clocale": "cpp",
31+
"condition_variable": "cpp",
32+
"ctime": "cpp",
33+
"cwchar": "cpp",
34+
"cwctype": "cpp",
35+
"deque": "cpp",
36+
"set": "cpp",
37+
"unordered_map": "cpp",
38+
"vector": "cpp",
39+
"exception": "cpp",
40+
"fstream": "cpp",
41+
"functional": "cpp",
42+
"iomanip": "cpp",
43+
"iosfwd": "cpp",
44+
"iostream": "cpp",
45+
"istream": "cpp",
46+
"mutex": "cpp",
47+
"new": "cpp",
48+
"numbers": "cpp",
49+
"optional": "cpp",
50+
"ostream": "cpp",
51+
"ratio": "cpp",
52+
"semaphore": "cpp",
53+
"sstream": "cpp",
54+
"stop_token": "cpp",
55+
"streambuf": "cpp",
56+
"string": "cpp",
57+
"string_view": "cpp",
58+
"system_error": "cpp",
59+
"thread": "cpp",
60+
"tuple": "cpp",
61+
"typeinfo": "cpp",
62+
"__verbose_abort": "cpp"
63+
}
64+
}

common/cmake/clang.cmake

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,35 @@
33

44
INCLUDE(compiler_base)
55

6+
MACRO(_SET_IF_EMPTY VAR VALUE)
7+
IF(NOT ${VAR})
8+
SET(${VAR} "${VALUE}")
9+
ENDIF()
10+
ENDMACRO()
11+
12+
IF (EMBREE_ARM)
13+
IF ("x86_64" IN_LIST CMAKE_OSX_ARCHITECTURES)
14+
# set ARM and x86 flags for macOS universal binary build
15+
SET(FLAGS_SSE2 "-D__SSE__ -D__SSE2__ -msse -msse2 -mno-sse4.2")
16+
SET(FLAGS_SSE42 "-D__SSE4_2__ -D__SSE4_1__ -msse4.2")
17+
SET(FLAGS_AVX "-D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__ -mavx")
18+
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")
19+
_SET_IF_EMPTY(FLAGS_AVX512 "-march=skx")
20+
ELSE ()
21+
SET(FLAGS_SSE2 "-D__SSE__ -D__SSE2__")
22+
SET(FLAGS_SSE42 "-D__SSE4_2__ -D__SSE4_1__")
23+
SET(FLAGS_AVX "-D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__")
24+
SET(FLAGS_AVX2 "-D__AVX2__ -D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__")
25+
ENDIF ()
26+
ELSE ()
27+
# for `thread` keyword
28+
_SET_IF_EMPTY(FLAGS_SSE2 "-msse -msse2 -mno-sse4.2")
29+
_SET_IF_EMPTY(FLAGS_SSE42 "-msse4.2")
30+
_SET_IF_EMPTY(FLAGS_AVX "-mavx")
31+
_SET_IF_EMPTY(FLAGS_AVX2 "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2")
32+
_SET_IF_EMPTY(FLAGS_AVX512 "-march=skx")
33+
ENDIF ()
34+
635
IF (WIN32)
736

837
SET(COMMON_CXX_FLAGS "")

common/cmake/compiler_base.cmake

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,14 @@
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

66
MACRO(_SET_IF_EMPTY VAR VALUE)
77
IF(NOT ${VAR})
88
SET(${VAR} "${VALUE}")
99
ENDIF()
1010
ENDMACRO()
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
3713
MACRO(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
5127
ENDMACRO()
5228

53-
# Stack protector configuration (Unix-only)
29+
# Stack protector configuration
5430
MACRO(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()
5843
ENDMACRO()
5944

6045
MACRO(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()
6453
ENDMACRO()
6554

@@ -85,13 +74,16 @@ ENDMACRO()
8574
MACRO(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()
9082
ENDMACRO()
9183

92-
# Linux-specific linker flags
84+
# Linux/ELF-specific linker flags (not for Windows or macOS)
9385
MACRO(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

common/cmake/dpcpp.cmake

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,35 @@
33

44
INCLUDE(compiler_base)
55

6+
MACRO(_SET_IF_EMPTY VAR VALUE)
7+
IF(NOT ${VAR})
8+
SET(${VAR} "${VALUE}")
9+
ENDIF()
10+
ENDMACRO()
11+
12+
IF (EMBREE_ARM)
13+
IF ("x86_64" IN_LIST CMAKE_OSX_ARCHITECTURES)
14+
# set ARM and x86 flags for macOS universal binary build
15+
SET(FLAGS_SSE2 "-D__SSE__ -D__SSE2__ -msse -msse2 -mno-sse4.2")
16+
SET(FLAGS_SSE42 "-D__SSE4_2__ -D__SSE4_1__ -msse4.2")
17+
SET(FLAGS_AVX "-D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__ -mavx")
18+
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")
19+
_SET_IF_EMPTY(FLAGS_AVX512 "-march=skx")
20+
ELSE ()
21+
SET(FLAGS_SSE2 "-D__SSE__ -D__SSE2__")
22+
SET(FLAGS_SSE42 "-D__SSE4_2__ -D__SSE4_1__")
23+
SET(FLAGS_AVX "-D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__")
24+
SET(FLAGS_AVX2 "-D__AVX2__ -D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__")
25+
ENDIF ()
26+
ELSE ()
27+
# for `thread` keyword
28+
_SET_IF_EMPTY(FLAGS_SSE2 "-msse2")
29+
_SET_IF_EMPTY(FLAGS_SSE42 "-msse4.2")
30+
_SET_IF_EMPTY(FLAGS_AVX "-mavx")
31+
_SET_IF_EMPTY(FLAGS_AVX2 "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2")
32+
_SET_IF_EMPTY(FLAGS_AVX512 "-march=skx")
33+
ENDIF ()
34+
635
IF (NOT WIN32)
736
OPTION(EMBREE_IGNORE_CMAKE_CXX_FLAGS "When enabled Embree ignores default CMAKE_CXX_FLAGS." ON)
837
IF (EMBREE_IGNORE_CMAKE_CXX_FLAGS)

common/cmake/gnu.cmake

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,25 @@
33

44
INCLUDE(compiler_base)
55

6+
MACRO(_SET_IF_EMPTY VAR VALUE)
7+
IF(NOT ${VAR})
8+
SET(${VAR} "${VALUE}")
9+
ENDIF()
10+
ENDMACRO()
11+
12+
IF (EMBREE_ARM)
13+
SET(FLAGS_SSE2 "-D__SSE__ -D__SSE2__")
14+
SET(FLAGS_SSE42 "-D__SSE4_2__ -D__SSE4_1__")
15+
SET(FLAGS_AVX "-D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__")
16+
SET(FLAGS_AVX2 "-D__AVX2__ -D__AVX__ -D__SSE4_2__ -D__SSE4_1__ -D__BMI__ -D__BMI2__ -D__LZCNT__")
17+
ELSE ()
18+
_SET_IF_EMPTY(FLAGS_SSE2 "-msse2")
19+
_SET_IF_EMPTY(FLAGS_SSE42 "-msse4.2")
20+
_SET_IF_EMPTY(FLAGS_AVX "-mavx")
21+
_SET_IF_EMPTY(FLAGS_AVX2 "-mf16c -mavx2 -mfma -mlzcnt -mbmi -mbmi2")
22+
_SET_IF_EMPTY(FLAGS_AVX512 "-march=skylake-avx512")
23+
ENDIF ()
24+
625
OPTION(EMBREE_IGNORE_CMAKE_CXX_FLAGS "When enabled Embree ignores default CMAKE_CXX_FLAGS." ON)
726
IF (EMBREE_IGNORE_CMAKE_CXX_FLAGS)
827
SET(CMAKE_CXX_FLAGS "")
@@ -36,6 +55,5 @@ IF (NOT APPLE)
3655
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z noexecstack") # we do not need an executable stack
3756
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z relro -z now") # re-arranges data sections to increase security
3857
ENDIF ()
58+
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") # enables position independent execution for executable
3959
ENDIF()
40-
41-
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") # enables position independent execution for executable

0 commit comments

Comments
 (0)