@@ -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