cmake: Fix bug where -Wno- flags could not be compatbility-checked

It turns out that 'check_compiler_flag' has not been working for flags
that start with -Wno-. This has caused old compilers to accidentally
use flags that they do not support.

To fix this we check for compatibility with the appropriate -W flag
instead and infer the -Wno- compatibility from this check.

The root cause of this problem is explained well here:

https://github.com/zephyrproject-rtos/zephyr/pull/18922#discussion_r321537098

Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
This commit is contained in:
Sebastian Bøe 2019-09-06 11:54:29 +02:00 committed by Carles Cufí
parent 764f07c2a4
commit c898c156c9

View file

@ -747,8 +747,17 @@ function(zephyr_check_compiler_flag lang option check)
return()
endif()
# Test the flag
check_compiler_flag(${lang} "${option}" inner_check)
# Flags that start with -Wno-<warning> can not be tested by
# check_compiler_flag, they will always pass, but -W<warning> can be
# tested, so to test -Wno-<warning> flags we test -W<warning>
# instead.
if("${option}" MATCHES "-Wno-(.*)")
set(possibly_translated_option -W${CMAKE_MATCH_1})
else()
set(possibly_translated_option ${option})
endif()
check_compiler_flag(${lang} "${possibly_translated_option}" inner_check)
set(${check} ${inner_check} PARENT_SCOPE)