diff --git a/build/cmake/aom_configure.cmake b/build/cmake/aom_configure.cmake index b2770d94599e0558d8d59e370f7b18b468389150..f872b76a266b57d0aa916a07387d8b7c543f69e2 100644 --- a/build/cmake/aom_configure.cmake +++ b/build/cmake/aom_configure.cmake @@ -31,14 +31,7 @@ if (MSVC) add_compiler_flag_if_supported("/WX") endif () else () - set(c99_flag "-std=c99") - check_c_compiler_flag(${c99_flag} C99_FLAG_SUPPORTED) - if (C99_FLAG_SUPPORTED) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${c99_flag}" CACHE STRING "" FORCE) - else () - # report error - message(FATAL_ERROR "C99 support by the compiler is required!") - endif () + require_c_flag("-std=c99") add_compiler_flag_if_supported("-Wall") add_compiler_flag_if_supported("-Wdisabled-optimization") add_compiler_flag_if_supported("-Wextra") diff --git a/build/cmake/compiler_flags.cmake b/build/cmake/compiler_flags.cmake index a3e97943be095be0cae9af73d06a64d92c17bc33..0c8f5511dc33fbc8385adfc843c491c669540918 100644 --- a/build/cmake/compiler_flags.cmake +++ b/build/cmake/compiler_flags.cmake @@ -68,3 +68,101 @@ function (add_compiler_flag_if_supported flag) add_c_flag_if_supported(${flag}) add_cxx_flag_if_supported(${flag}) endfunction () + +# Checks C compiler for support of $c_flag and terminates generation when +# support is not present. +function (require_c_flag c_flag) + unset(C_FLAG_FOUND CACHE) + string(FIND "${CMAKE_C_FLAGS}" "${c_flag}" C_FLAG_FOUND) + + if (${C_FLAG_FOUND} EQUAL -1) + unset(HAVE_C_FLAG CACHE) + message("Checking C compiler flag support for: " ${c_flag}) + check_c_compiler_flag("${c_flag}" HAVE_C_FLAG) + if (NOT HAVE_C_FLAG) + message(FATAL_ERROR + "${PROJECT_NAME} requires support for C flag: ${c_flag}.") + endif () + set(CMAKE_C_FLAGS "${c_flag} ${CMAKE_C_FLAGS}" CACHE STRING "" FORCE) + endif () +endfunction () + +# Checks CXX compiler for support of $cxx_flag and terminates generation when +# support is not present. +function (require_cxx_flag cxx_flag) + unset(CXX_FLAG_FOUND CACHE) + string(FIND "${CMAKE_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FOUND) + + if (${CXX_FLAG_FOUND} EQUAL -1) + unset(HAVE_CXX_FLAG CACHE) + message("Checking CXX compiler flag support for: " ${cxx_flag}) + check_cxx_compiler_flag("${cxx_flag}" HAVE_CXX_FLAG) + if (NOT HAVE_CXX_FLAG) + message(FATAL_ERROR + "${PROJECT_NAME} requires support for CXX flag: ${cxx_flag}.") + endif () + set(CMAKE_CXX_FLAGS "${cxx_flag} ${CMAKE_CXX_FLAGS}" CACHE STRING "" FORCE) + endif () +endfunction () + +# Checks for support of $flag by both the C and CXX compilers. Terminates +# generation when support is not present in both compilers. +function (require_flag flag) + require_c_flag(${flag}) + require_cxx_flag(${flag}) +endfunction () + +# Checks only non-MSVC targets for support of $c_flag and terminates generation +# when support is not present. +function (require_c_flag_nomsvc c_flag) + if (NOT MSVC) + require_c_flag(${c_flag}) + endif () +endfunction () + +# Checks only non-MSVC targets for support of $cxx_flag and terminates +# generation when support is not present. +function (require_cxx_flag_nomsvc cxx_flag) + if (NOT MSVC) + require_cxx_flag(${cxx_flag}) + endif () +endfunction () + +# Checks only non-MSVC targets for support of $flag by both the C and CXX +# compilers. Terminates generation when support is not present in both +# compilers. +function (require_flag_nomsvc flag) + require_c_flag_nomsvc(${flag}) + require_cxx_flag_nomsvc(${flag}) +endfunction () + +# Adds $preproc_def to C compiler command line (as -D$preproc_def) if not +# already present. +function (add_c_preproc_definition preproc_def) + unset(PREPROC_DEF_FOUND CACHE) + string(FIND "${CMAKE_C_FLAGS}" "${preproc_def}" PREPROC_DEF_FOUND) + + if (${PREPROC_DEF_FOUND} EQUAL -1) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D${preproc_def}" CACHE STRING "" + FORCE) + endif () +endfunction () + +# Adds $preproc_def to CXX compiler command line (as -D$preproc_def) if not +# already present. +function (add_cxx_preproc_definition preproc_def) + unset(PREPROC_DEF_FOUND CACHE) + string(FIND "${CMAKE_CXX_FLAGS}" "${preproc_def}" PREPROC_DEF_FOUND) + + if (${PREPROC_DEF_FOUND} EQUAL -1) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${preproc_def}" CACHE STRING "" + FORCE) + endif () +endfunction () + +# Adds $preproc_def to C and CXX compiler command line (as -D$preproc_def) if +# not already present. +function (add_preproc_definition preproc_def) + add_c_preproc_definition(${preproc_def}) + add_cxx_preproc_definition(${preproc_def}) +endfunction ()