@@ -40,17 +40,57 @@ option(NBL_REQUEST_SSE_4_2 "Request compilation with SSE 4.2 instruction set ena
4040option (NBL_REQUEST_SSE_AXV2 "Request compilation with SSE Intel Advanced Vector Extensions 2 for Nabla projects" ON )
4141
4242# 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 ()
5494
5595function (NBL_EXT_P_APPEND_COMPILE_OPTIONS NBL_LIST_NAME MAP_RELEASE MAP_RELWITHDEBINFO MAP_DEBUG )
5696 macro (NBL_MAP_CONFIGURATION NBL_CONFIG_FROM NBL_CONFIG_TO )
@@ -173,7 +213,7 @@ function(nbl_adjust_flags)
173213
174214 set (MAPPED_CONFIG $<TARGET_GENEX_EVAL :${NBL_TARGET_ITEM} ,$<TARGET_PROPERTY :${NBL_TARGET_ITEM} ,NBL_CONFIGURATION_MAP >>)
175215
176- if (MSVC )
216+ if (CMAKE_CXX_COMPILER_ID STREQUAL MSVC )
177217 if (NBL_SANITIZE_ADDRESS)
178218 set (NBL_TARGET_MSVC_DEBUG_INFORMATION_FORMAT "$<$<OR :$<STREQUAL :${MAPPED_CONFIG} ,DEBUG >,$<STREQUAL :${MAPPED_CONFIG} ,RELWITHDEBINFO >>:ProgramDatabase >" )
179219 else ()
0 commit comments