-
Soeren Peters authoredSoeren Peters authored
CMakeSetCompilerFlags.cmake 3.67 KiB
###############################################################
# set hostname -> CAB_MACHINE and load an optional config file
###############################################################
macro(loadMachineFile)
IF(NOT CAB_MACHINE)
SET(CAB_MACHINE $ENV{CAB_MACHINE})
IF( CAB_MACHINE )
STRING(TOUPPER "${CAB_MACHINE}" CAB_MACHINE)
ELSE()
EXECUTE_PROCESS( COMMAND hostname OUTPUT_VARIABLE CAB_MACHINE)
STRING(REGEX REPLACE "[ ]*([A-Za-z0-9]+).*[\\\\n]*" "\\1" CAB_MACHINE "${CAB_MACHINE}" )
STRING(TOUPPER "${CAB_MACHINE}" CAB_MACHINE)
ENDIF()
ENDIF()
LIST(APPEND VF_COMPILER_DEFINITION CAB_MACHINE=${CAB_MACHINE})
SET(CMAKE_CONFIG_FILE "${VF_CMAKE_DIR}/cmake_config_files/${CAB_MACHINE}.config.cmake")
IF(NOT EXISTS ${CMAKE_CONFIG_FILE})
status("No configuration file found for machine: ${CAB_MACHINE}.config.cmake")
ELSE()
status("Load configuration file ${CAB_MACHINE}.config.cmake")
include(${CMAKE_CONFIG_FILE})
ENDIF()
endmacro()
################################################################
### SET_COMPILER_SPECIFIC_FLAGS ###
### determines compiler flags variables ###
################################################################
macro(loadCompilerFlags)
SET(CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS "")
SET(CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS_DEBUG "")
SET(CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS_RELEASE "")
# https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_COMPILER_ID.html#variable:CMAKE_<LANG>_COMPILER_ID
IF( SPECIFIC_COMPILER_FLAG_FILE )
include( ${SPECIFIC_COMPILER_FLAG_FILE})
ELSEIF( EXISTS "${VF_CMAKE_DIR}/compilerflags/${CMAKE_CXX_COMPILER_ID}.cmake" )
status("Load compiler file: ${CMAKE_CXX_COMPILER_ID}.cmake")
include(${VF_CMAKE_DIR}/compilerflags/${CMAKE_CXX_COMPILER_ID}.cmake)
ELSE()
MESSAGE(FATAL_ERROR "compiler=${CMAKE_CXX_COMPILER_ID} seems to be a not supported compiler")
ENDIF()
endmacro()
################################################################
### ADD_COMPILER_FLAGS_TO_PROJECT ###
################################################################
function(addAdditionalFlags project_name)
status_lib("additional compiler flags CXX: ${CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS}")
status_lib("additional compiler flags CXX debug: ${CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS_DEBUG}")
status_lib("additional compiler flags CXX release: ${CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS_RELEASE}")
status_lib("additional compiler definitions: ${VF_COMPILER_DEFINITION}")
status_lib("additional linker flags: ${VF_LINK_OPTIONS}")
# compile definitions
foreach(flag IN LISTS VF_COMPILER_DEFINITION)
target_compile_definitions(${library_name} PRIVATE ${flag})
endforeach()
# link options
foreach(flag IN LISTS VF_LINK_OPTIONS) #TODO: check what happens when lib is static
target_link_options(${library_name} PRIVATE ${flag})
endforeach()
# compile options
foreach(flag IN LISTS CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS)
target_compile_options(${project_name} PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${flag}>")
endforeach()
foreach(flag IN LISTS CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS_DEBUG)
target_compile_options(${project_name} PRIVATE "$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:${flag}>")
endforeach()
foreach(flag IN LISTS CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS_RELEASE)
target_compile_options(${project_name} PRIVATE "$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:${flag}>")
endforeach()
endfunction()