| # First step is to inherit all properties from gcc, as clang is compatible with most flags. |
| include(${ZEPHYR_BASE}/cmake/compiler/gcc/compiler_flags.cmake) |
| |
| # Now, let's overwrite the flags that are different in clang. |
| |
| # No property flag, clang doesn't understand fortify at all |
| set_compiler_property(PROPERTY security_fortify_compile_time) |
| set_compiler_property(PROPERTY security_fortify_run_time) |
| |
| # No printf-return-value optimizations in clang |
| set_compiler_property(PROPERTY no_printf_return_value) |
| |
| # No property flag, this is used by the native_posix, clang has problems |
| # compiling the native_posix with -fno-freestanding. |
| check_set_compiler_property(PROPERTY hosted) |
| |
| # clang flags for coverage generation |
| if (CONFIG_COVERAGE_NATIVE_SOURCE) |
| set_compiler_property(PROPERTY coverage -fprofile-instr-generate -fcoverage-mapping) |
| else() |
| set_compiler_property(PROPERTY coverage --coverage -fno-inline) |
| endif() |
| |
| # clang flag for colourful diagnostic messages |
| set_compiler_property(PROPERTY diagnostic -fcolor-diagnostics) |
| |
| # clang flag to save temporary object files |
| set_compiler_property(PROPERTY save_temps -save-temps) |
| |
| # clang doesn't handle the -T flag |
| set_compiler_property(PROPERTY linker_script -Wl,-T) |
| |
| ####################################################### |
| # This section covers flags related to warning levels # |
| ####################################################### |
| |
| # clang option standard warning base in Zephyr |
| check_set_compiler_property(PROPERTY warning_base |
| -Wall |
| -Wformat |
| -Wformat-security |
| -Wno-format-zero-length |
| -Wno-unused-but-set-variable |
| -Wno-typedef-redefinition |
| -Wno-deprecated-non-prototype |
| ) |
| |
| # C implicit promotion rules will want to make floats into doubles very easily |
| check_set_compiler_property(APPEND PROPERTY warning_base -Wdouble-promotion) |
| |
| check_set_compiler_property(APPEND PROPERTY warning_base -Wno-pointer-sign) |
| |
| # Prohibit void pointer arithmetic. Illegal in C99 |
| check_set_compiler_property(APPEND PROPERTY warning_base -Wpointer-arith) |
| |
| # clang options for warning levels 1, 2, 3, when using `-DW=[1|2|3]` |
| set_compiler_property(PROPERTY warning_dw_1 |
| -Wextra |
| -Wunused |
| -Wno-unused-parameter |
| -Wmissing-declarations |
| -Wmissing-format-attribute |
| ) |
| check_set_compiler_property(APPEND PROPERTY warning_dw_1 |
| -Wold-style-definition |
| -Wmissing-prototypes |
| -Wmissing-include-dirs |
| -Wunused-but-set-variable |
| -Wno-missing-field-initializers |
| ) |
| |
| set_compiler_property(PROPERTY warning_dw_2 |
| -Waggregate-return |
| -Wcast-align |
| -Wdisabled-optimization |
| -Wnested-externs |
| -Wshadow |
| ) |
| |
| check_set_compiler_property(APPEND PROPERTY warning_dw_2 |
| -Wlogical-op |
| -Wmissing-field-initializers |
| ) |
| |
| set_compiler_property(PROPERTY warning_dw_3 |
| -Wbad-function-cast |
| -Wcast-qual |
| -Wconversion |
| -Wpacked |
| -Wpadded |
| -Wpointer-arith |
| -Wredundant-decls |
| -Wswitch-default |
| ) |
| |
| check_set_compiler_property(APPEND PROPERTY warning_dw_3 |
| -Wpacked-bitfield-compat |
| -Wvla |
| ) |
| |
| |
| check_set_compiler_property(PROPERTY warning_extended |
| #FIXME: need to fix all of those |
| -Wno-sometimes-uninitialized |
| -Wno-shift-overflow |
| -Wno-missing-braces |
| -Wno-self-assign |
| -Wno-address-of-packed-member |
| -Wno-unused-function |
| -Wno-initializer-overrides |
| -Wno-section |
| -Wno-unknown-warning-option |
| -Wno-unused-variable |
| -Wno-format-invalid-specifier |
| -Wno-gnu |
| # comparison of unsigned expression < 0 is always false |
| -Wno-tautological-compare |
| ) |
| |
| set_compiler_property(PROPERTY warning_error_coding_guideline |
| -Werror=vla |
| -Wimplicit-fallthrough |
| -Wconversion |
| -Woverride-init |
| ) |
| |
| set_compiler_property(PROPERTY no_global_merge "-mno-global-merge") |