Rewrote the warning levels for toolchain IAR as IAR tools just turn off warnings, not on. Also did some minor cleanup for coding guidelines. Signed-off-by: Lars-Ove Karlsson <lars-ove.karlsson@iar.com>
194 lines
8.0 KiB
CMake
194 lines
8.0 KiB
CMake
# Copyright (c) 2025 IAR Systems AB
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# Compiler options for the IAR C/C++ Compiler for Arm
|
|
|
|
#####################################################
|
|
# This section covers flags related to optimization #
|
|
#####################################################
|
|
set_compiler_property(PROPERTY no_optimization -On)
|
|
|
|
set_compiler_property(PROPERTY optimization_debug -Ol)
|
|
|
|
set_compiler_property(PROPERTY optimization_speed -Ohs)
|
|
|
|
set_compiler_property(PROPERTY optimization_size -Ohz)
|
|
|
|
set_compiler_property(PROPERTY optimization_size_aggressive -Ohz)
|
|
|
|
set_compiler_property(PROPERTY optimization_fast --no_size_constraints)
|
|
|
|
#######################################################
|
|
# This section covers flags related to warning levels #
|
|
#######################################################
|
|
|
|
# -DW=... settings
|
|
#
|
|
# W=1 - warnings that may be relevant and does not occur too often
|
|
# W=2 - warnings that occur quite often but may still be relevant
|
|
# W=3 - the more obscure warnings, can most likely be ignored
|
|
|
|
set(IAR_SUPPRESSED_WARNINGS)
|
|
|
|
# Set basic suppressed warning first
|
|
|
|
# Pe223: function "xxx" declared implicitly
|
|
# Pe054: too few arguments in invocation of macro
|
|
# Pe1675: unrecognized GCC pragma
|
|
# Pe111: statement is unreachable
|
|
# Pe1143: arithmetic on pointer to void or function type
|
|
# Pe068: integer conversion resulted in a change of sign
|
|
list(APPEND IAR_SUPPRESSED_WARNINGS
|
|
--diag_suppress=Pe068,Pe1143,Pe111,Pe1675,Pe054,Pe223)
|
|
|
|
# Since IAR does not turn on warnings we do this backwards
|
|
# by not suppressing warnings on higher levels.
|
|
if(NOT W MATCHES "3")
|
|
# Pe381: extra ";" ignored
|
|
list(APPEND IAR_SUPPRESSED_WARNINGS --diag_suppress=Pe381)
|
|
endif()
|
|
if(NOT W MATCHES "2" AND NOT W MATCHES "3")
|
|
# Pe1097: unknown attribute
|
|
# Pa082: undefined behavior: the order of volatile accesses is undefined
|
|
# Pa084: pointless integer comparison, the result is always false
|
|
# Pe185: dynamic initialization in unreachable code
|
|
# Pe167: argument of type "onoff_notify_fn" is incompatible with...
|
|
# Pe144: a value of type "void *" cannot be used to initialize...
|
|
# Pe177: function "xxx" was declared but never referenced
|
|
# Pe513: a value of type "void *" cannot be assigned to an
|
|
# entity of type "int (*)(int)"
|
|
list(APPEND IAR_SUPPRESSED_WARNINGS
|
|
--diag_suppress=Pe513,Pe177,Pe144,Pe167,Pe185,Pa084,Pa082,Pe1097)
|
|
endif()
|
|
if(NOT W MATCHES "1" AND NOT W MATCHES "2" AND NOT W MATCHES "3")
|
|
# Pe188: enumerated type mixed with another type
|
|
# Pe128: loop is not reachable
|
|
# Pe550: variable "res" was set but never used
|
|
# Pe546: transfer of control bypasses initialization
|
|
# Pe186: pointless comparison of unsigned integer with zero
|
|
# Pe054: too few arguments in invocation of macro xxx
|
|
# Pe144: a value of type "void *" cannot be used to initialize an
|
|
# entity of type [...] "void (*)(struct onoff_manager *, int)"
|
|
# Pe167: argument of type "void *" is incompatible with [...]
|
|
# "void (*)(void *, void *, void *)"
|
|
list(APPEND IAR_SUPPRESSED_WARNINGS
|
|
--diag_suppress=Pe054,Pe186,Pe546,Pe550,Pe128,Pe188,Pe144,Pe167)
|
|
endif()
|
|
|
|
set_compiler_property(PROPERTY warning_base ${IAR_SUPPRESSED_WARNINGS})
|
|
|
|
# Extended warning set supported by the compiler
|
|
set_compiler_property(PROPERTY warning_extended)
|
|
|
|
# Compiler property that will issue error if a declaration does not specify a type
|
|
set_compiler_property(PROPERTY warning_error_implicit_int)
|
|
|
|
# Compiler flags to use when compiling according to MISRA
|
|
set_compiler_property(PROPERTY warning_error_misra_sane)
|
|
|
|
set_property(TARGET compiler PROPERTY warnings_as_errors --warnings_are_errors)
|
|
|
|
###########################################################################
|
|
# This section covers flags related to C or C++ standards / standard libs #
|
|
###########################################################################
|
|
|
|
# Compiler flags for C standard. The specific standard must be appended by user.
|
|
# For example, gcc specifies this as: set_compiler_property(PROPERTY cstd -std=)
|
|
# TC-WG: the `cstd99` is used regardless of this flag being useful for iccarm
|
|
# This flag will make it a symbol. Works for C,CXX,ASM
|
|
# Since ICCARM does not use C standard flags, we just make them a defined symbol
|
|
# instead
|
|
set_compiler_property(PROPERTY cstd -D__IAR_CSTD_)
|
|
|
|
# Compiler flags for disabling C standard include and instead specify include
|
|
# dirs in nostdinc_include to use.
|
|
set_compiler_property(PROPERTY nostdinc)
|
|
set_compiler_property(PROPERTY nostdinc_include)
|
|
|
|
# Compiler flags for disabling C++ standard include.
|
|
set_compiler_property(TARGET compiler-cpp PROPERTY nostdincxx)
|
|
|
|
# Required C++ flags when compiling C++ code
|
|
set_property(TARGET compiler-cpp PROPERTY required --c++)
|
|
|
|
# Compiler flags to use for specific C++ dialects
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp98)
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp11)
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp14)
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp17 --libc++)
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp2a --libc++)
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp20 --libc++)
|
|
set_property(TARGET compiler-cpp PROPERTY dialect_cpp2b --libc++)
|
|
|
|
# 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 --no_exceptions)
|
|
|
|
# Flag for disabling rtti in C++
|
|
set_property(TARGET compiler-cpp PROPERTY no_rtti --no_rtti)
|
|
|
|
###################################################
|
|
# This section covers all remaining C / C++ flags #
|
|
###################################################
|
|
|
|
# Flags for coverage generation
|
|
set_compiler_property(PROPERTY coverage)
|
|
|
|
# Security canaries flags.
|
|
set_compiler_property(PROPERTY security_canaries --stack_protection)
|
|
set_compiler_property(PROPERTY security_canaries_strong --stack_protection)
|
|
set_compiler_property(PROPERTY security_canaries_all --security_canaries_all_is_not_supported)
|
|
set_compiler_property(PROPERTY security_canaries_explicit --security_canaries_explicit_is_not_supported)
|
|
|
|
if(CONFIG_STACK_CANARIES_TLS)
|
|
check_set_compiler_property(APPEND PROPERTY security_canaries --stack_protector_guard=tls)
|
|
check_set_compiler_property(APPEND PROPERTY security_canaries_strong --stack_protector_guard=tls)
|
|
check_set_compiler_property(APPEND PROPERTY security_canaries_all --stack_protector_guard=tls)
|
|
check_set_compiler_property(APPEND PROPERTY security_canaries_explicit --stack_protector_guard=tls)
|
|
endif()
|
|
|
|
set_compiler_property(PROPERTY security_fortify)
|
|
|
|
# Flag for a hosted (no-freestanding) application
|
|
set_compiler_property(PROPERTY hosted)
|
|
|
|
# gcc flag for a freestanding application
|
|
set_compiler_property(PROPERTY freestanding)
|
|
|
|
# Flag to include debugging symbol in compilation
|
|
set_property(TARGET compiler PROPERTY debug --debug)
|
|
set_property(TARGET compiler-cpp PROPERTY debug --debug)
|
|
|
|
set_compiler_property(PROPERTY no_common)
|
|
|
|
# Flags for imacros. The specific header must be appended by user.
|
|
set_property(TARGET compiler PROPERTY imacros --preinclude)
|
|
set_property(TARGET compiler-cpp PROPERTY imacros --preinclude)
|
|
set_property(TARGET asm PROPERTY imacros -imacros)
|
|
|
|
# Compiler flag for turning off thread-safe initialization of local statics
|
|
set_property(TARGET compiler-cpp PROPERTY no_threadsafe_statics)
|
|
|
|
# Required ASM flags when compiling
|
|
set_property(TARGET asm PROPERTY required)
|
|
|
|
# Compiler flag for disabling pointer arithmetic warnings
|
|
set_compiler_property(PROPERTY warning_no_pointer_arithmetic)
|
|
# Compiler flag for warning about shadow variables
|
|
set_compiler_property(PROPERTY warning_shadow_variables)
|
|
# Compiler flag for disabling warning about array bounds
|
|
set_compiler_property(PROPERTY warning_no_array_bounds)
|
|
|
|
# Compiler flags for disabling position independent code / executable
|
|
set_compiler_property(PROPERTY no_position_independent)
|
|
|
|
# Compiler flag for defining preinclude files.
|
|
set_compiler_property(PROPERTY include_file --preinclude)
|
|
|
|
set_compiler_property(PROPERTY cmse --cmse)
|
|
|
|
set_property(TARGET asm PROPERTY cmse -mcmse)
|