243 lines
9.1 KiB
CMake
243 lines
9.1 KiB
CMake
# Those are flags not to test for CXX compiler.
|
|
list(APPEND CXX_EXCLUDED_OPTIONS
|
|
-Werror=implicit-int
|
|
-Wold-style-definition
|
|
-Wno-pointer-sign
|
|
)
|
|
|
|
########################################################
|
|
# Setting compiler properties for gcc / g++ compilers. #
|
|
########################################################
|
|
|
|
#####################################################
|
|
# This section covers flags related to optimization #
|
|
#####################################################
|
|
set_compiler_property(PROPERTY no_optimization -O0)
|
|
if(CMAKE_C_COMPILER_VERSION VERSION_LESS "4.8.0")
|
|
set_compiler_property(PROPERTY optimization_debug -O0)
|
|
else()
|
|
set_compiler_property(PROPERTY optimization_debug -Og)
|
|
endif()
|
|
set_compiler_property(PROPERTY optimization_speed -O2)
|
|
set_compiler_property(PROPERTY optimization_size -Os)
|
|
|
|
if(CMAKE_C_COMPILER_VERSION GREATER_EQUAL "4.5.0")
|
|
set_compiler_property(PROPERTY optimization_lto -flto)
|
|
set_compiler_property(PROPERTY prohibit_lto -fno-lto)
|
|
endif()
|
|
|
|
#######################################################
|
|
# This section covers flags related to warning levels #
|
|
#######################################################
|
|
|
|
# GCC Option standard warning base in Zephyr
|
|
check_set_compiler_property(PROPERTY warning_base
|
|
-Wall
|
|
"SHELL:-Wformat -Wformat-security"
|
|
"SHELL:-Wformat -Wno-format-zero-length"
|
|
)
|
|
|
|
# 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)
|
|
|
|
# not portable
|
|
check_set_compiler_property(APPEND PROPERTY warning_base -Wexpansion-to-defined)
|
|
|
|
# GCC options for warning levels 1, 2, 3, when using `-DW=[1|2|3]`
|
|
set_compiler_property(PROPERTY warning_dw_1
|
|
-Waggregate-return
|
|
-Wcast-align
|
|
-Wdisabled-optimization
|
|
-Wnested-externs
|
|
-Wshadow
|
|
)
|
|
check_set_compiler_property(APPEND PROPERTY warning_dw_1
|
|
-Wlogical-op
|
|
-Wmissing-field-initializers
|
|
)
|
|
|
|
set_compiler_property(PROPERTY warning_dw_2
|
|
-Wbad-function-cast
|
|
-Wcast-qual
|
|
-Wconversion
|
|
-Wpacked
|
|
-Wpadded
|
|
-Wpointer-arith
|
|
-Wredundant-decls
|
|
-Wswitch-default
|
|
)
|
|
check_set_compiler_property(APPEND PROPERTY warning_dw_2
|
|
-Wpacked-bitfield-compat
|
|
-Wvla
|
|
)
|
|
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 -Wno-unused-but-set-variable)
|
|
|
|
check_set_compiler_property(PROPERTY warning_error_implicit_int -Werror=implicit-int)
|
|
|
|
set_compiler_property(PROPERTY warning_error_misra_sane -Werror=vla)
|
|
|
|
set_compiler_property(PROPERTY warning_error_coding_guideline
|
|
-Werror=vla
|
|
-Wimplicit-fallthrough=2
|
|
-Wconversion
|
|
-Woverride-init
|
|
)
|
|
|
|
###########################################################################
|
|
# This section covers flags related to C or C++ standards / standard libs #
|
|
###########################################################################
|
|
|
|
# GCC compiler flags for C standard. The specific standard must be appended by user.
|
|
set_compiler_property(PROPERTY cstd -std=)
|
|
|
|
if (NOT CONFIG_NEWLIB_LIBC AND
|
|
NOT (CONFIG_PICOLIBC AND NOT CONFIG_PICOLIBC_USE_MODULE) AND
|
|
NOT COMPILER STREQUAL "xcc" AND
|
|
NOT CONFIG_HAS_ESPRESSIF_HAL AND
|
|
NOT CONFIG_NATIVE_BUILD)
|
|
set_compiler_property(PROPERTY nostdinc -nostdinc)
|
|
set_compiler_property(APPEND PROPERTY nostdinc_include ${NOSTDINC})
|
|
endif()
|
|
|
|
set_compiler_property(PROPERTY no_printf_return_value -fno-printf-return-value)
|
|
|
|
set_property(TARGET compiler-cpp PROPERTY nostdincxx "-nostdinc++")
|
|
|
|
# Required C++ flags when using gcc
|
|
set_property(TARGET compiler-cpp PROPERTY required "-fcheck-new")
|
|
|
|
# GCC compiler flags for C++ dialect: "register" variables and some
|
|
# "volatile" usage generates warnings by default in standard versions
|
|
# higher than 17 and 20 respectively. Zephyr uses both, so turn off
|
|
# the warnings where needed (but only on the compilers that generate
|
|
# them, older toolchains like xcc don't understand the command line
|
|
# flags!)
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp98 "-std=c++98")
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp11 "-std=c++11")
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp14 "-std=c++14")
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp17 "-std=c++17" "-Wno-register")
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp2a "-std=c++2a"
|
|
"-Wno-register" "-Wno-volatile")
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp20 "-std=c++20"
|
|
"-Wno-register" "-Wno-volatile")
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp2b "-std=c++2b"
|
|
"-Wno-register" "-Wno-volatile")
|
|
|
|
# Flag for disabling strict aliasing rule in C and C++
|
|
set_compiler_property(PROPERTY no_strict_aliasing -fno-strict-aliasing)
|
|
|
|
# Extra warning options
|
|
set_property(TARGET compiler PROPERTY warnings_as_errors -Werror)
|
|
set_property(TARGET asm PROPERTY warnings_as_errors -Werror -Wa,--fatal-warnings)
|
|
|
|
# Disable exceptions flag in C++
|
|
set_property(TARGET compiler-cpp PROPERTY no_exceptions "-fno-exceptions")
|
|
|
|
# Disable rtti in C++
|
|
set_property(TARGET compiler-cpp PROPERTY no_rtti "-fno-rtti")
|
|
|
|
|
|
###################################################
|
|
# This section covers all remaining C / C++ flags #
|
|
###################################################
|
|
|
|
# gcc flags for coverage generation
|
|
set_compiler_property(PROPERTY coverage -fprofile-arcs -ftest-coverage -fno-inline)
|
|
|
|
# Security canaries.
|
|
set_compiler_property(PROPERTY security_canaries -fstack-protector-all)
|
|
|
|
# Only a valid option with GCC 7.x and above, so let's do check and set.
|
|
if(CONFIG_STACK_CANARIES_TLS)
|
|
check_set_compiler_property(APPEND PROPERTY security_canaries -mstack-protector-guard=tls)
|
|
else()
|
|
check_set_compiler_property(APPEND PROPERTY security_canaries -mstack-protector-guard=global)
|
|
endif()
|
|
|
|
|
|
if(NOT CONFIG_NO_OPTIMIZATIONS)
|
|
# _FORTIFY_SOURCE: Detect common-case buffer overflows for certain functions
|
|
# _FORTIFY_SOURCE=1 : Loose checking (use wide bounds checks)
|
|
# _FORTIFY_SOURCE=2 : Tight checking (use narrow bounds checks)
|
|
# GCC always does compile-time bounds checking for string/mem functions, so
|
|
# there's no additional value to set here
|
|
set_compiler_property(PROPERTY security_fortify_compile_time)
|
|
set_compiler_property(PROPERTY security_fortify_run_time _FORTIFY_SOURCE=2)
|
|
endif()
|
|
|
|
# gcc flag for a hosted (no-freestanding) application
|
|
check_set_compiler_property(APPEND PROPERTY hosted -fno-freestanding)
|
|
|
|
# gcc flag for a freestanding application
|
|
check_set_compiler_property(PROPERTY freestanding -ffreestanding)
|
|
|
|
# Flag to enable debugging
|
|
set_compiler_property(PROPERTY debug -g)
|
|
|
|
# Flags to save temporary object files
|
|
set_compiler_property(PROPERTY save_temps -save-temps=obj)
|
|
|
|
# Flag to specify linker script
|
|
set_compiler_property(PROPERTY linker_script -T)
|
|
|
|
# Flags to not track macro expansion
|
|
set_compiler_property(PROPERTY no_track_macro_expansion -ftrack-macro-expansion=0)
|
|
|
|
# GCC 11 by default emits DWARF version 5 which cannot be parsed by
|
|
# pyelftools. Can be removed once pyelftools supports v5.
|
|
check_set_compiler_property(APPEND PROPERTY debug -gdwarf-4)
|
|
|
|
set_compiler_property(PROPERTY no_common -fno-common)
|
|
|
|
# GCC compiler flags for imacros. The specific header must be appended by user.
|
|
set_compiler_property(PROPERTY imacros -imacros)
|
|
|
|
set_compiler_property(PROPERTY gprof -pg)
|
|
|
|
# GCC compiler flag for turning off thread-safe initialization of local statics
|
|
set_property(TARGET compiler-cpp PROPERTY no_threadsafe_statics "-fno-threadsafe-statics")
|
|
|
|
# Required ASM flags when using gcc
|
|
set_property(TARGET asm PROPERTY required "-xassembler-with-cpp")
|
|
|
|
# gcc flag for colourful diagnostic messages
|
|
if (NOT COMPILER STREQUAL "xcc")
|
|
set_compiler_property(PROPERTY diagnostic -fdiagnostics-color=always)
|
|
endif()
|
|
|
|
# Compiler flag for disabling pointer arithmetic warnings
|
|
set_compiler_property(PROPERTY warning_no_pointer_arithmetic "-Wno-pointer-arith")
|
|
|
|
#Compiler flags for disabling position independent code / executable
|
|
set_compiler_property(PROPERTY no_position_independent
|
|
-fno-pic
|
|
-fno-pie
|
|
)
|
|
|
|
set_compiler_property(PROPERTY no_global_merge "")
|
|
|
|
set_compiler_property(PROPERTY warning_shadow_variables -Wshadow)
|
|
|
|
set_compiler_property(PROPERTY no_builtin -fno-builtin)
|
|
set_compiler_property(PROPERTY no_builtin_malloc -fno-builtin-malloc)
|