cmake: compiler: Add flag template for disabling strict aliasing rule
This commit adds a template for specifying the C/C++ compiler flag for disabling the strict aliasing rule. It also enables this flag globally because the Zephyr codebase does not strictly adhere to the aliasing rules specified by the C/C++ standards and the optimisation strategies that assume these rules may end up generating invalid code. For instance, GCC 11 and above tend to optimise more aggressively assuming the strict adherence to the standard aliasing rules and may generate invalid code, when compiling Zephyr with `-fstrict-aliasing`, that results in various run-time failures. Note that the footprint and performance ramifications of disabling the strict aliasing rule are negligible. Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
This commit is contained in:
parent
f5560279f5
commit
9672858c19
|
@ -141,6 +141,10 @@ if(TOOLCHAIN_USE_CUSTOM)
|
|||
zephyr_compile_definitions(__TOOLCHAIN_CUSTOM__)
|
||||
endif()
|
||||
|
||||
# @Intent: Set compiler specific flag for disabling strict aliasing rule
|
||||
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,no_strict_aliasing>>)
|
||||
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,no_strict_aliasing>>)
|
||||
|
||||
# @Intent: Set compiler flags to enable buffer overflow checks in libc functions
|
||||
# @config in CONFIG_NO_OPTIMIZATIONS optional : Optimizations may affect security
|
||||
zephyr_compile_definitions($<TARGET_PROPERTY:compiler,security_fortify> )
|
||||
|
|
|
@ -65,6 +65,9 @@ set_property(TARGET compiler-cpp PROPERTY dialect_cpp2a)
|
|||
set_property(TARGET compiler-cpp PROPERTY dialect_cpp20)
|
||||
set_property(TARGET compiler-cpp PROPERTY dialect_cpp2b)
|
||||
|
||||
# Flag for disabling strict aliasing rule in C and C++
|
||||
set_compiler_property(PROPERTY no_strict_aliasing)
|
||||
|
||||
# Flag for disabling exceptions in C++
|
||||
set_property(TARGET compiler-cpp PROPERTY no_exceptions)
|
||||
|
||||
|
|
Loading…
Reference in a new issue