zephyr/cmake/compiler/arcmwdt/compiler_flags.cmake

211 lines
7.9 KiB
CMake

# List the warnings that are not supported for C++ compilations
list(APPEND CXX_EXCLUDED_OPTIONS
-Werror=implicit-int
-Wold-style-definition
)
###################################################
# Setting compiler properties for MWDT compilers. #
###################################################
#####################################################
# This section covers flags related to optimization #
#####################################################
set_compiler_property(PROPERTY no_optimization -O0)
set_compiler_property(PROPERTY optimization_debug -O0)
set_compiler_property(PROPERTY optimization_speed -O2)
set_compiler_property(PROPERTY optimization_size -Os)
#######################################################
# This section covers flags related to warning levels #
#######################################################
# options for warnings
# base options
set_compiler_property(PROPERTY warning_base
-Wformat
-Wformat-security
-Wno-format-zero-length
-Wno-unaligned-pointer-conversion
-Wno-incompatible-pointer-types-discards-qualifiers
-Wno-typedef-redefinition
)
# 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)
# level 1 warning options
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
)
# level 2 warning options
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
)
# level 3 warning options
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
)
# extended warning options
check_set_compiler_property(PROPERTY warning_extended
-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
)
check_set_compiler_property(PROPERTY warning_error_implicit_int -Werror=implicit-int)
set_compiler_property(PROPERTY warning_error_misra_sane -Werror=vla)
###########################################################################
# This section covers flags related to C or C++ standards / standard libs #
###########################################################################
set_compiler_property(PROPERTY cstd -std=)
if (NOT CONFIG_ARCMWDT_LIBC)
set_compiler_property(PROPERTY nostdinc -Hno_default_include -Hnoarcexlib -U__STDC_LIB_EXT1__)
set_compiler_property(APPEND PROPERTY nostdinc_include ${NOSTDINC})
endif()
# C++ std options
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")
#no support of C++2a, C++20, C++2b
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 -fno-strict-aliasing)
# Flags for set extra warnigs (ARCMWDT asm can't recognize --fatal-warnings. Skip it)
set_property(TARGET compiler PROPERTY warnings_as_errors -Werror)
set_property(TARGET asm PROPERTY warnings_as_errors -Werror)
# 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 #
###################################################
# mwdt flag for a freestanding application
# do not link in supplied run-time startup files
set_compiler_property(PROPERTY freestanding -Hnocrt)
# Flag to keep DWARF information (enable debug info)
set_compiler_property(PROPERTY debug -g)
# compile common globals like normal definitions
set_compiler_property(PROPERTY no_common -fno-common)
# mwdt's coverage mechanism is different with gnu
# at present, zephyr only support gnu coverage
set_compiler_property(PROPERTY coverage "")
# mwdt compiler flags for imacros. The specific header must be appended by user.
set_compiler_property(PROPERTY imacros -imacros)
# Security canaries.
#no support of -mstack-protector-guard=global"
set_compiler_property(PROPERTY security_canaries -fstack-protector-all)
#no support of _FORTIFY_SOURCE"
set_compiler_property(PROPERTY security_fortify_compile_time)
set_compiler_property(PROPERTY security_fortify_run_time)
# Required C++ flags when using mwdt
set_property(TARGET compiler-cpp PROPERTY required "-Hcplus" )
if(CONFIG_ARC)
set_property(TARGET compiler-cpp PROPERTY required "-Hoff=Stackcheck_alloca")
endif()
# Compiler flag for turning off thread-safe initialization of local statics
set_property(TARGET compiler-cpp PROPERTY no_threadsafe_statics "-fno-threadsafe-statics")
# ARC MWDT does not support -fno-pic and -fno-pie flags,
# but it has PIE disabled by default - so no extra flags are required here.
set_compiler_property(PROPERTY no_position_independent "")
set_compiler_property(PROPERTY no_global_merge "")
#################################
# This section covers asm flags #
#################################
# Required ASM flags when using mwdt
set_property(TARGET asm PROPERTY required "-Hasmcpp")
if(CONFIG_ARCMWDT_LIBC)
# We rely on the default C/C++ include locations which are provided by MWDT if we do build with
# MW C / C++ libraries. However, for that case we still need to explicitly set header directory
# to ASM builds (which may use 'stdbool.h').
set_property(TARGET asm APPEND PROPERTY required "-I${NOSTDINC}")
endif()
# Remove after testing that -Wshadow works
set_compiler_property(PROPERTY warning_shadow_variables)
set_compiler_property(PROPERTY no_builtin -fno-builtin)
set_compiler_property(PROPERTY no_builtin_malloc -fno-builtin-malloc)