125 lines
4.6 KiB
CMake
125 lines
4.6 KiB
CMake
# 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
|
|
)
|
|
|
|
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")
|