@@ -226,6 +226,12 @@ get_property(ASM_OPTIMIZE_FOR_SPEED_FLAG TARGET asm PROPERTY optimization_speed)
226226get_property (ASM_OPTIMIZE_FOR_SIZE_FLAG TARGET asm PROPERTY optimization_size)
227227get_property (ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG TARGET asm PROPERTY optimization_size_aggressive)
228228
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+
229235# Let the assembler inherit the optimization flags of the compiler if it is
230236# not set explicitly.
231237if (NOT ASM_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG)
@@ -244,23 +250,46 @@ if(NOT ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG)
244250 set (ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG} )
245251endif ()
246252
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+
247271# From kconfig choice, pick the actual OPTIMIZATION_FLAG to use.
248272# Kconfig choice ensures only one of these CONFIG_*_OPTIMIZATIONS is set.
249273if (CONFIG_NO_OPTIMIZATIONS)
250274 set (COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG} )
251275 set (ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG} )
276+ set (LINKER_OPTIMIZATION_FLAG ${LINKER_OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG} )
252277elseif (CONFIG_DEBUG_OPTIMIZATIONS)
253278 set (COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_DEBUG_FLAG} )
254279 set (ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_DEBUG_FLAG} )
280+ set (LINKER_OPTIMIZATION_FLAG ${LINKER_OPTIMIZE_FOR_DEBUG_FLAG} )
255281elseif (CONFIG_SPEED_OPTIMIZATIONS)
256282 set (COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_SPEED_FLAG} )
257283 set (ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_SPEED_FLAG} )
284+ set (LINKER_OPTIMIZATION_FLAG ${LINKER_OPTIMIZE_FOR_SPEED_FLAG} )
258285elseif (CONFIG_SIZE_OPTIMIZATIONS)
259286 set (COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_FLAG} ) # Default in kconfig
260287 set (ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_SIZE_FLAG} )
288+ set (LINKER_OPTIMIZATION_FLAG ${LINKER_OPTIMIZE_FOR_SIZE_FLAG} )
261289elseif (CONFIG_SIZE_OPTIMIZATIONS_AGGRESSIVE)
262290 set (COMPILER_OPTIMIZATION_FLAG ${COMPILER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG} )
263291 set (ASM_OPTIMIZATION_FLAG ${ASM_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG} )
292+ set (LINKER_OPTIMIZATION_FLAG ${LINKER_OPTIMIZE_FOR_SIZE_AGGRESSIVE_FLAG} )
264293else ()
265294 message (FATAL_ERROR
266295 "Unreachable code. Expected optimization level to have been chosen. See Kconfig.zephyr" )
@@ -277,6 +306,7 @@ endif()
277306zephyr_compile_options($<$<COMPILE_LANGUAGE:ASM>:${ASM_OPTIMIZATION_FLAG} >)
278307zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:${COMPILER_OPTIMIZATION_FLAG} >)
279308zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:${COMPILER_OPTIMIZATION_FLAG} >)
309+ add_link_options (${LINKER_OPTIMIZATION_FLAG} )
280310
281311if (CONFIG_LTO)
282312 zephyr_compile_options($<TARGET_PROPERTY:compiler,optimization_lto>)
0 commit comments