Skip to content

Commit a4b66f9

Browse files
danielfl-iarjhedberg
authored andcommitted
cmake: assembler optimization options
Commit f499ea0 made it so that the compiler optimization flags are also passed to the assembler. However, this breaks for the IAR toolchain since it uses the GNU assembler which does not have the same optimization flags as the IAR compiler. This commit separates the compiler and assembler optimizations to make it possible to specify appropriate flags in a toolchains corresponding `compiler_flags.cmake` Signed-off-by: Daniel Flodin <[email protected]>
1 parent bd412d7 commit a4b66f9

File tree

7 files changed

+56
-24
lines changed

7 files changed

+56
-24
lines changed

CMakeLists.txt

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -214,24 +214,53 @@ endif()
214214
# 1) Using EXTRA_CFLAGS which is applied regardless of kconfig choice, or
215215
# 2) Rely on override support being implemented by your toolchain_cc_optimize_*()
216216
#
217-
get_property(OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG TARGET compiler PROPERTY no_optimization)
218-
get_property(OPTIMIZE_FOR_DEBUG_FLAG TARGET compiler PROPERTY optimization_debug)
219-
get_property(OPTIMIZE_FOR_SPEED_FLAG TARGET compiler PROPERTY optimization_speed)
220-
get_property(OPTIMIZE_FOR_SIZE_FLAG TARGET compiler PROPERTY optimization_size)
221-
get_property(OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG TARGET compiler PROPERTY optimization_size_aggressive)
217+
get_property(COMPILER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG TARGET compiler PROPERTY no_optimization)
218+
get_property(COMPILER_OPTIMIZE_FOR_DEBUG_FLAG TARGET compiler PROPERTY optimization_debug)
219+
get_property(COMPILER_OPTIMIZE_FOR_SPEED_FLAG TARGET compiler PROPERTY optimization_speed)
220+
get_property(COMPILER_OPTIMIZE_FOR_SIZE_FLAG TARGET compiler PROPERTY optimization_size)
221+
get_property(COMPILER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG TARGET compiler PROPERTY optimization_size_aggressive)
222+
223+
get_property(ASM_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG TARGET asm PROPERTY no_optimization)
224+
get_property(ASM_OPTIMIZE_FOR_DEBUG_FLAG TARGET asm PROPERTY optimization_debug)
225+
get_property(ASM_OPTIMIZE_FOR_SPEED_FLAG TARGET asm PROPERTY optimization_speed)
226+
get_property(ASM_OPTIMIZE_FOR_SIZE_FLAG TARGET asm PROPERTY optimization_size)
227+
get_property(ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG TARGET asm PROPERTY optimization_size_aggressive)
228+
229+
# Let the assembler inherit the optimization flags of the compiler if it is
230+
# not set explicitly.
231+
if(NOT ASM_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG)
232+
set(ASM_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG ${COMPILER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG})
233+
endif()
234+
if(NOT ASM_OPTIMIZE_FOR_DEBUG_FLAG)
235+
set(ASM_OPTIMIZE_FOR_DEBUG_FLAG ${COMPILER_OPTIMIZE_FOR_DEBUG_FLAG})
236+
endif()
237+
if(NOT ASM_OPTIMIZE_FOR_SPEED_FLAG)
238+
set(ASM_OPTIMIZE_FOR_SPEED_FLAG ${COMPILER_OPTIMIZE_FOR_SPEED_FLAG})
239+
endif()
240+
if(NOT ASM_OPTIMIZE_FOR_SIZE_FLAG)
241+
set(ASM_OPTIMIZE_FOR_SIZE_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_FLAG})
242+
endif()
243+
if(NOT ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG)
244+
set(ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG})
245+
endif()
222246

223247
# From kconfig choice, pick the actual OPTIMIZATION_FLAG to use.
224248
# Kconfig choice ensures only one of these CONFIG_*_OPTIMIZATIONS is set.
225249
if(CONFIG_NO_OPTIMIZATIONS)
226-
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG})
250+
set(COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG})
251+
set(ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG})
227252
elseif(CONFIG_DEBUG_OPTIMIZATIONS)
228-
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_DEBUG_FLAG})
253+
set(COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_DEBUG_FLAG})
254+
set(ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_DEBUG_FLAG})
229255
elseif(CONFIG_SPEED_OPTIMIZATIONS)
230-
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_SPEED_FLAG})
256+
set(COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_SPEED_FLAG})
257+
set(ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_SPEED_FLAG})
231258
elseif(CONFIG_SIZE_OPTIMIZATIONS)
232-
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_SIZE_FLAG}) # Default in kconfig
259+
set(COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_FLAG}) # Default in kconfig
260+
set(ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_SIZE_FLAG})
233261
elseif(CONFIG_SIZE_OPTIMIZATIONS_AGGRESSIVE)
234-
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG})
262+
set(COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG})
263+
set(ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG})
235264
else()
236265
message(FATAL_ERROR
237266
"Unreachable code. Expected optimization level to have been chosen. See Kconfig.zephyr")
@@ -245,9 +274,9 @@ SOC_* symbol.")
245274
endif()
246275

247276
# Apply the final optimization flag(s)
248-
zephyr_compile_options($<$<COMPILE_LANGUAGE:ASM>:${OPTIMIZATION_FLAG}>)
249-
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:${OPTIMIZATION_FLAG}>)
250-
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:${OPTIMIZATION_FLAG}>)
277+
zephyr_compile_options($<$<COMPILE_LANGUAGE:ASM>:${ASM_OPTIMIZATION_FLAG}>)
278+
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:${COMPILER_OPTIMIZATION_FLAG}>)
279+
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:${COMPILER_OPTIMIZATION_FLAG}>)
251280

252281
if(CONFIG_LTO)
253282
zephyr_compile_options($<TARGET_PROPERTY:compiler,optimization_lto>)

cmake/compiler/iar/compiler_flags.cmake

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,20 @@
88
# This section covers flags related to optimization #
99
#####################################################
1010
set_compiler_property(PROPERTY no_optimization -On)
11-
1211
set_compiler_property(PROPERTY optimization_debug -Ol)
13-
1412
set_compiler_property(PROPERTY optimization_speed -Ohs)
15-
1613
set_compiler_property(PROPERTY optimization_size -Ohz)
17-
1814
set_compiler_property(PROPERTY optimization_size_aggressive -Ohz)
19-
2015
set_compiler_property(PROPERTY optimization_fast --no_size_constraints)
2116

17+
# IAR uses the GNU assembler so the options differ from the compiler
18+
set_property(TARGET asm PROPERTY no_optimization -O0)
19+
set_property(TARGET asm PROPERTY optimization_debug -Og)
20+
set_property(TARGET asm PROPERTY optimization_speed -O2)
21+
set_property(TARGET asm PROPERTY optimization_size -Os)
22+
set_property(TARGET asm PROPERTY optimization_size_aggressive -Oz)
23+
set_property(TARGET asm PROPERTY optimization_fast -Ofast)
24+
2225
#######################################################
2326
# This section covers flags related to warning levels #
2427
#######################################################

cmake/toolchain/xcc/generic.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
include(${ZEPHYR_BASE}/cmake/toolchain/xcc/common.cmake)
44

55
set(COMPILER xcc)
6-
set(OPTIMIZE_FOR_DEBUG_FLAG "-O0")
6+
set(COMPILER_OPTIMIZE_FOR_DEBUG_FLAG "-O0")
77
set(CC xcc)
88
set(C++ xc++)
99
set(LINKER xt-ld)

modules/mbedtls/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ zephyr_interface_library_named(mbedTLS)
130130
# if address sanitizer is enabled, as such switch default optimization level
131131
# to speed
132132
set_property(SOURCE ${ZEPHYR_CURRENT_MODULE_DIR}/mbedtls/library/bignum.c APPEND PROPERTY COMPILE_OPTIONS
133-
"${OPTIMIZE_FOR_SPEED_FLAG}")
133+
"${COMPILER_OPTIMIZE_FOR_SPEED_FLAG}")
134134
endif ()
135135

136136
zephyr_library_link_libraries(mbedTLS)

subsys/bluetooth/controller/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,10 @@ add_subdirectory_ifdef(
221221

222222
zephyr_library_compile_options_ifdef(
223223
CONFIG_BT_CTLR_OPTIMIZE_FOR_SIZE
224-
${OPTIMIZE_FOR_SIZE_FLAG}
224+
${COMPILER_OPTIMIZE_FOR_SIZE_FLAG}
225225
)
226226

227227
zephyr_library_compile_options_ifdef(
228228
CONFIG_BT_CTLR_OPTIMIZE_FOR_SPEED
229-
${OPTIMIZE_FOR_SPEED_FLAG}
229+
${COMPILER_OPTIMIZE_FOR_SPEED_FLAG}
230230
)

subsys/bluetooth/controller/ll_sw/nordic/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,5 +122,5 @@ zephyr_include_directories(
122122

123123
zephyr_library_compile_options_ifdef(
124124
CONFIG_BT_CTLR_OPTIMIZE_FOR_SPEED
125-
${OPTIMIZE_FOR_SPEED_FLAG}
125+
${COMPILER_OPTIMIZE_FOR_SPEED_FLAG}
126126
)

subsys/bluetooth/controller/ll_sw/openisa/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,5 @@ zephyr_library_include_directories(
5555

5656
zephyr_library_compile_options_ifdef(
5757
CONFIG_BT_CTLR_OPTIMIZE_FOR_SPEED
58-
${OPTIMIZE_FOR_SPEED_FLAG}
58+
${COMPILER_OPTIMIZE_FOR_SPEED_FLAG}
5959
)

0 commit comments

Comments
 (0)