@@ -226,6 +226,12 @@ get_property(ASM_OPTIMIZE_FOR_SPEED_FLAG TARGET asm PROPERTY optimization_speed)
226
226
get_property (ASM_OPTIMIZE_FOR_SIZE_FLAG TARGET asm PROPERTY optimization_size)
227
227
get_property (ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG TARGET asm PROPERTY optimization_size_aggressive)
228
228
229
+ get_property (LINKER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG TARGET linker PROPERTY no_optimization)
230
+ get_property (LINKER_OPTIMIZE_FOR_DEBUG_FLAG TARGET linker PROPERTY optimization_debug)
231
+ get_property (LINKER_OPTIMIZE_FOR_SPEED_FLAG TARGET linker PROPERTY optimization_speed)
232
+ get_property (LINKER_OPTIMIZE_FOR_SIZE_FLAG TARGET linker PROPERTY optimization_size)
233
+ get_property (LINKER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG TARGET linker PROPERTY optimization_size_aggressive)
234
+
229
235
# Let the assembler inherit the optimization flags of the compiler if it is
230
236
# not set explicitly.
231
237
if (NOT ASM_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG)
@@ -244,23 +250,46 @@ if(NOT ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG)
244
250
set (ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG} )
245
251
endif ()
246
252
253
+ # Let the linker inherit the optimization flags of the compiler if it is
254
+ # not set explicitly.
255
+ if (NOT LINKER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG)
256
+ set (LINKER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG ${COMPILER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG} )
257
+ endif ()
258
+ if (NOT LINKER_OPTIMIZE_FOR_DEBUG_FLAG)
259
+ set (LINKER_OPTIMIZE_FOR_DEBUG_FLAG ${COMPILER_OPTIMIZE_FOR_DEBUG_FLAG} )
260
+ endif ()
261
+ if (NOT LINKER_OPTIMIZE_FOR_SPEED_FLAG)
262
+ set (LINKER_OPTIMIZE_FOR_SPEED_FLAG ${COMPILER_OPTIMIZE_FOR_SPEED_FLAG} )
263
+ endif ()
264
+ if (NOT LINKER_OPTIMIZE_FOR_SIZE_FLAG)
265
+ set (LINKER_OPTIMIZE_FOR_SIZE_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_FLAG} )
266
+ endif ()
267
+ if (NOT LINKER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG)
268
+ set (LINKER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG} )
269
+ endif ()
270
+
247
271
# From kconfig choice, pick the actual OPTIMIZATION_FLAG to use.
248
272
# Kconfig choice ensures only one of these CONFIG_*_OPTIMIZATIONS is set.
249
273
if (CONFIG_NO_OPTIMIZATIONS)
250
274
set (COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG} )
251
275
set (ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG} )
276
+ set (LINKER_OPTIMIZATION_FLAG ${LINKER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG} )
252
277
elseif (CONFIG_DEBUG_OPTIMIZATIONS)
253
278
set (COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_DEBUG_FLAG} )
254
279
set (ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_DEBUG_FLAG} )
280
+ set (LINKER_OPTIMIZATION_FLAG ${LINKER_OPTIMIZE_FOR_DEBUG_FLAG} )
255
281
elseif (CONFIG_SPEED_OPTIMIZATIONS)
256
282
set (COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_SPEED_FLAG} )
257
283
set (ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_SPEED_FLAG} )
284
+ set (LINKER_OPTIMIZATION_FLAG ${LINKER_OPTIMIZE_FOR_SPEED_FLAG} )
258
285
elseif (CONFIG_SIZE_OPTIMIZATIONS)
259
286
set (COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_FLAG} ) # Default in kconfig
260
287
set (ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_SIZE_FLAG} )
288
+ set (LINKER_OPTIMIZATION_FLAG ${LINKER_OPTIMIZE_FOR_SIZE_FLAG} )
261
289
elseif (CONFIG_SIZE_OPTIMIZATIONS_AGGRESSIVE)
262
290
set (COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG} )
263
291
set (ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG} )
292
+ set (LINKER_OPTIMIZATION_FLAG ${LINKER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG} )
264
293
else ()
265
294
message (FATAL_ERROR
266
295
"Unreachable code. Expected optimization level to have been chosen. See Kconfig.zephyr" )
@@ -277,6 +306,7 @@ endif()
277
306
zephyr_compile_options($<$<COMPILE_LANGUAGE:ASM>:${ASM_OPTIMIZATION_FLAG} >)
278
307
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:${COMPILER_OPTIMIZATION_FLAG} >)
279
308
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:${COMPILER_OPTIMIZATION_FLAG} >)
309
+ add_link_options (${LINKER_OPTIMIZATION_FLAG} )
280
310
281
311
if (CONFIG_LTO)
282
312
zephyr_compile_options($<TARGET_PROPERTY:compiler,optimization_lto>)
0 commit comments