@@ -40,17 +40,57 @@ option(NBL_REQUEST_SSE_4_2 "Request compilation with SSE 4.2 instruction set ena
40
40
option (NBL_REQUEST_SSE_AXV2 "Request compilation with SSE Intel Advanced Vector Extensions 2 for Nabla projects" ON )
41
41
42
42
# profiles
43
- if (MSVC )
44
- include ("${CMAKE_CURRENT_LIST_DIR} /template/windows/msvc.cmake" )
45
- elseif (ANDROID)
46
- include ("${CMAKE_CURRENT_LIST_DIR} /template/unix/android.cmake" )
47
- elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
48
- include ("${CMAKE_CURRENT_LIST_DIR} /template/unix/gnu.cmake" )
49
- elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
50
- include ("${CMAKE_CURRENT_LIST_DIR} /template/unix/clang.cmake" )
51
- else ()
52
- message (WARNING "UNTESTED COMPILER DETECTED, EXPECT WRONG OPTIMIZATION FLAGS! SUBMIT ISSUE ON GITHUB https://github.com/Devsh-Graphics-Programming/Nabla/issues" )
53
- endif ()
43
+ foreach (NBL_COMPILER_LANGUAGE IN ITEMS C CXX)
44
+ # all list of all known by CMake vendors:
45
+ # https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_COMPILER_ID.html
46
+ set (NBL_COMPILER_VENDOR "${CMAKE_${NBL_COMPILER_LANGUAGE} _COMPILER_ID}" )
47
+ set (NBL_PROFILE_NAME "${NBL_COMPILER_LANGUAGE} _${NBL_COMPILER_VENDOR} " ) # eg. "cxx_MSVC.cmake"
48
+ set (NBL_PROFILE_PATH "${CMAKE_CURRENT_LIST_DIR} /template/vendor/${NBL_PROFILE_NAME} .cmake" )
49
+
50
+ include ("${NBL_PROFILE_PATH} " RESULT_VARIABLE _NBL_FOUND_)
51
+
52
+ if (NOT _NBL_FOUND_)
53
+ message (WARNING "UNSUPPORTED \" ${NBL_COMPILER_LANGUAGE} \" COMPILER LANGUAGE FOR \" ${NBL_COMPILER_VENDOR} \" DETECTED, CMAKE CONFIGURATION OR BUILD MAY FAIL AND COMPILE OPTIONS FLAGS WILL NOT BE SET! SUBMIT ISSUE ON GITHUB https://github.com/Devsh-Graphics-Programming/Nabla/issues" )
54
+ continue ()
55
+ endif ()
56
+
57
+ # a profile MUST define
58
+ # - "NBL_${NBL_COMPILER_LANGUAGE}_${CONFIGURATION}_COMPILE_OPTIONS" (configuration dependent)
59
+ # - "NBL_${NBL_COMPILER_LANGUAGE}_COMPILE_OPTIONS" (global)
60
+
61
+ # a profile MUST NOT define
62
+ # - NBL_COMPILE_OPTIONS
63
+
64
+ set (NBL_COMPILE_OPTIONS_VAR_NAME NBL_${NBL_COMPILER_LANGUAGE} _COMPILE_OPTIONS)
65
+ set (NBL_COMPILE_OPTIONS_VAR_VALUE ${${NBL_COMPILE_OPTIONS_VAR_NAME} })
66
+
67
+ if (NOT DEFINED ${NBL_COMPILE_OPTIONS_VAR_NAME} )
68
+ message (FATAL_ERROR "\" ${NBL_PROFILE_PATH} \" did not define \" ${NBL_COMPILE_OPTIONS_VAR_NAME} \" !" )
69
+ endif ()
70
+
71
+ # update map with configuration dependent compile options
72
+ foreach (CONFIGURATION IN ITEMS RELEASE RELWITHDEBINFO DEBUG)
73
+ set (NBL_CONFIGURATION_COMPILE_OPTIONS_VAR_NAME NBL_${NBL_COMPILER_LANGUAGE} _${CONFIGURATION} _COMPILE_OPTIONS)
74
+ set (NBL_CONFIGURATION_COMPILE_OPTIONS_VAR_VALUE ${${NBL_CONFIGURATION_COMPILE_OPTIONS_VAR_NAME} })
75
+
76
+ if (NOT DEFINED ${NBL_CONFIGURATION_COMPILE_OPTIONS_VAR_NAME} )
77
+ message (FATAL_ERROR "\" ${NBL_PROFILE_PATH} \" did not define \" ${NBL_CONFIGURATION_COMPILE_OPTIONS_VAR_NAME} \" !" )
78
+ endif ()
79
+
80
+ list (APPEND NBL_${CONFIGURATION} _COMPILE_OPTIONS
81
+ # note that "${NBL_CONFIGURATION_COMPILE_OPTIONS_VAR_VALUE}" MUST NOT contain ANY
82
+ # $<$<CONFIG:<>> generator expression in order to support our configuration mapping features
83
+ $<$<COMPILE_LANGUAGE:${NBL_COMPILER_LANGUAGE} >:${NBL_CONFIGURATION_COMPILE_OPTIONS_VAR_VALUE} >
84
+ )
85
+
86
+ set (NBL_${CONFIGURATION} _COMPILE_OPTIONS ${NBL_${CONFIGURATION} _COMPILE_OPTIONS})
87
+ endforeach ()
88
+
89
+ # update map with global compile options
90
+ list (APPEND NBL_COMPILE_OPTIONS $<$<COMPILE_LANGUAGE:${NBL_COMPILER_LANGUAGE} >:${NBL_${NBL_COMPILER_LANGUAGE} _COMPILE_OPTIONS}>)
91
+
92
+ set (NBL_COMPILE_OPTIONS ${NBL_COMPILE_OPTIONS} )
93
+ endforeach ()
54
94
55
95
function (NBL_EXT_P_APPEND_COMPILE_OPTIONS NBL_LIST_NAME MAP_RELEASE MAP_RELWITHDEBINFO MAP_DEBUG)
56
96
macro (NBL_MAP_CONFIGURATION NBL_CONFIG_FROM NBL_CONFIG_TO)
@@ -173,7 +213,7 @@ function(nbl_adjust_flags)
173
213
174
214
set (MAPPED_CONFIG $<TARGET_GENEX_EVAL:${NBL_TARGET_ITEM} ,$<TARGET_PROPERTY:${NBL_TARGET_ITEM} ,NBL_CONFIGURATION_MAP>>)
175
215
176
- if (MSVC )
216
+ if (CMAKE_CXX_COMPILER_ID STREQUAL MSVC )
177
217
if (NBL_SANITIZE_ADDRESS)
178
218
set (NBL_TARGET_MSVC_DEBUG_INFORMATION_FORMAT "$<$<OR:$<STREQUAL:${MAPPED_CONFIG} ,DEBUG>,$<STREQUAL:${MAPPED_CONFIG} ,RELWITHDEBINFO>>:ProgramDatabase>" )
179
219
else ()
0 commit comments