Changeset View
Changeset View
Standalone View
Standalone View
cmake/modules/AddCompilerFlags.cmake
# Allow to easily add flags for C and C++ | # Allow to easily add flags for C and C++ | ||||
include(CheckCXXCompilerFlag) | include(CheckCXXCompilerFlag) | ||||
include(CheckCCompilerFlag) | include(CheckCCompilerFlag) | ||||
macro(build_test_name_from_flag TEST_NAME FLAG) | |||||
# Remove leading '-' chars | |||||
string(REGEX REPLACE "-*(.+)" "\\1" ${TEST_NAME} "${FLAG}") | |||||
# Replace non printable char with '_' | |||||
string(REGEX REPLACE "[^a-zA-Z0-9_]" "_" ${TEST_NAME} "${${TEST_NAME}}") | |||||
# Append "_is_supported" to the test name | |||||
string(APPEND ${TEST_NAME} "_is_supported") | |||||
endmacro() | |||||
function(add_c_compiler_flag) | function(add_c_compiler_flag) | ||||
foreach(f ${ARGN}) | foreach(f ${ARGN}) | ||||
CHECK_C_COMPILER_FLAG(${f} FLAG_IS_SUPPORTED) | build_test_name_from_flag(FLAG_IS_SUPPORTED ${f}) | ||||
if(FLAG_IS_SUPPORTED) | CHECK_C_COMPILER_FLAG(${f} ${FLAG_IS_SUPPORTED}) | ||||
deadalnix: Using a function and/or macro that take the language as argument would go a long way toward… | |||||
if(${FLAG_IS_SUPPORTED}) | |||||
string(APPEND CMAKE_C_FLAGS " ${f}") | string(APPEND CMAKE_C_FLAGS " ${f}") | ||||
endif() | endif() | ||||
endforeach() | endforeach() | ||||
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} PARENT_SCOPE) | set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} PARENT_SCOPE) | ||||
endfunction() | endfunction() | ||||
function(add_cxx_compiler_flag) | function(add_cxx_compiler_flag) | ||||
foreach(f ${ARGN}) | foreach(f ${ARGN}) | ||||
CHECK_CXX_COMPILER_FLAG(${f} FLAG_IS_SUPPORTED) | build_test_name_from_flag(FLAG_IS_SUPPORTED ${f}) | ||||
if(FLAG_IS_SUPPORTED) | CHECK_CXX_COMPILER_FLAG(${f} ${FLAG_IS_SUPPORTED}) | ||||
if(${FLAG_IS_SUPPORTED}) | |||||
string(APPEND CMAKE_CXX_FLAGS " ${f}") | string(APPEND CMAKE_CXX_FLAGS " ${f}") | ||||
endif() | endif() | ||||
endforeach() | endforeach() | ||||
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} PARENT_SCOPE) | set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} PARENT_SCOPE) | ||||
endfunction() | endfunction() | ||||
macro(add_compiler_flag) | macro(add_compiler_flag) | ||||
add_c_compiler_flag(${ARGN}) | add_c_compiler_flag(${ARGN}) | ||||
Show All 29 Lines |
Using a function and/or macro that take the language as argument would go a long way toward reducing code duplication.