cmake: update configure_linker_script() to prepend -D on defines

Currently all calls to `configure_linker_script()` specifies `-D<name>`
when calling `configure_linker_script()`.

This works well for the gcc pre-processed ld linker script templates,
but Zephyr also supports a CMake linker script generator which can be
used for ld scripts and armlink scatter files.

In this case, a `-D` must be stripped.

This commit changes this so that Zephyr CMake build system calls
`configure_linker_script()` without `-D`.
Thus the `LINKER_SCRIPT` choice can decide how this information should
be passed to underlying linker script functionality, that is `-D` for
linker script template and CMake variable for the CMake linker script
generator.

Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
This commit is contained in:
Torsten Rasmussen 2021-11-01 12:53:28 +01:00 committed by Carles Cufí
commit 1fa3f15137
5 changed files with 17 additions and 10 deletions

View file

@ -1061,7 +1061,7 @@ if(CONFIG_USERSPACE)
configure_linker_script( configure_linker_script(
linker_app_smem_unaligned.cmd linker_app_smem_unaligned.cmd
"-DLINKER_APP_SMEM_UNALIGNED" "LINKER_APP_SMEM_UNALIGNED"
${CODE_RELOCATION_DEP} ${CODE_RELOCATION_DEP}
${APP_SMEM_UNALIGNED_DEP} ${APP_SMEM_UNALIGNED_DEP}
${APP_SMEM_UNALIGNED_LD} ${APP_SMEM_UNALIGNED_LD}
@ -1246,7 +1246,7 @@ endif()
configure_linker_script( configure_linker_script(
linker_zephyr_prebuilt.cmd linker_zephyr_prebuilt.cmd
"-DLINKER_ZEPHYR_PREBUILT" "LINKER_ZEPHYR_PREBUILT"
${APP_SMEM_ALIGNED_DEP} ${APP_SMEM_ALIGNED_DEP}
${KOBJECT_LINKER_DEP} ${KOBJECT_LINKER_DEP}
${CODE_RELOCATION_DEP} ${CODE_RELOCATION_DEP}
@ -1298,7 +1298,7 @@ else()
# file and preprocessed with the define LINKER_ZEPHYR_FINAL. # file and preprocessed with the define LINKER_ZEPHYR_FINAL.
configure_linker_script( configure_linker_script(
linker.cmd linker.cmd
"-DLINKER_ZEPHYR_FINAL" "LINKER_ZEPHYR_FINAL"
${CODE_RELOCATION_DEP} ${CODE_RELOCATION_DEP}
${ZEPHYR_PREBUILT_EXECUTABLE} ${ZEPHYR_PREBUILT_EXECUTABLE}
zephyr_generated_headers zephyr_generated_headers

View file

@ -10,6 +10,8 @@ set_ifndef(LINKERFLAGPREFIX -Wl,)
# NOTE: ${linker_script_gen} will be produced at build-time; not at configure-time # NOTE: ${linker_script_gen} will be produced at build-time; not at configure-time
macro(configure_linker_script linker_script_gen linker_pass_define) macro(configure_linker_script linker_script_gen linker_pass_define)
set(extra_dependencies ${ARGN}) set(extra_dependencies ${ARGN})
set(template_script_defines ${linker_pass_define})
list(TRANSFORM template_script_defines PREPEND "-D")
# Different generators deal with depfiles differently. # Different generators deal with depfiles differently.
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles") if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
@ -50,7 +52,7 @@ macro(configure_linker_script linker_script_gen linker_pass_define)
-imacros ${AUTOCONF_H} -imacros ${AUTOCONF_H}
${current_includes} ${current_includes}
${current_defines} ${current_defines}
${linker_pass_define} ${template_script_defines}
${LINKER_SCRIPT} ${LINKER_SCRIPT}
-E -E
-o ${linker_script_gen} -o ${linker_script_gen}

View file

@ -31,9 +31,9 @@ macro(configure_linker_script linker_script_gen linker_pass_define)
set(STEERING_FILE_ARG) set(STEERING_FILE_ARG)
set(STEERING_C_ARG) set(STEERING_C_ARG)
if("${linker_pass_define}" STREQUAL "-DLINKER_ZEPHYR_PREBUILT") if("${linker_pass_define}" STREQUAL "LINKER_ZEPHYR_PREBUILT")
set(PASS 1) set(PASS 1)
elseif("${linker_pass_define}" STREQUAL "-DLINKER_ZEPHYR_FINAL") elseif("${linker_pass_define}" STREQUAL "LINKER_ZEPHYR_FINAL")
set(PASS 2) set(PASS 2)
set(STEERING_FILE ${CMAKE_CURRENT_BINARY_DIR}/armlink_symbol_steering.steer) set(STEERING_FILE ${CMAKE_CURRENT_BINARY_DIR}/armlink_symbol_steering.steer)
set(STEERING_C ${CMAKE_CURRENT_BINARY_DIR}/armlink_symbol_steering.c) set(STEERING_C ${CMAKE_CURRENT_BINARY_DIR}/armlink_symbol_steering.c)

View file

@ -32,9 +32,9 @@ macro(configure_linker_script linker_script_gen linker_pass_define)
set(extra_dependencies ${ARGN}) set(extra_dependencies ${ARGN})
if(CONFIG_CMAKE_LINKER_GENERATOR) if(CONFIG_CMAKE_LINKER_GENERATOR)
if("${linker_pass_define}" STREQUAL "-DLINKER_ZEPHYR_PREBUILT") if("${linker_pass_define}" STREQUAL "LINKER_ZEPHYR_PREBUILT")
set(PASS 1) set(PASS 1)
elseif("${linker_pass_define}" STREQUAL "-DLINKER_ZEPHYR_FINAL") elseif("${linker_pass_define}" STREQUAL "LINKER_ZEPHYR_FINAL")
set(PASS 2) set(PASS 2)
endif() endif()
@ -53,6 +53,9 @@ macro(configure_linker_script linker_script_gen linker_pass_define)
-P ${ZEPHYR_BASE}/cmake/linker/ld/ld_script.cmake -P ${ZEPHYR_BASE}/cmake/linker/ld/ld_script.cmake
) )
else() else()
set(template_script_defines ${linker_pass_define})
list(TRANSFORM template_script_defines PREPEND "-D")
# Different generators deal with depfiles differently. # Different generators deal with depfiles differently.
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles") if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
# Note that the IMPLICIT_DEPENDS option is currently supported only # Note that the IMPLICIT_DEPENDS option is currently supported only
@ -90,7 +93,7 @@ macro(configure_linker_script linker_script_gen linker_pass_define)
-imacros ${AUTOCONF_H} -imacros ${AUTOCONF_H}
${current_includes} ${current_includes}
${current_defines} ${current_defines}
${linker_pass_define} ${template_script_defines}
-E ${LINKER_SCRIPT} -E ${LINKER_SCRIPT}
-P # Prevent generation of debug `#line' directives. -P # Prevent generation of debug `#line' directives.
-o ${linker_script_gen} -o ${linker_script_gen}

View file

@ -9,6 +9,8 @@ set_ifndef(LINKERFLAGPREFIX -Wl)
# NOTE: ${linker_script_gen} will be produced at build-time; not at configure-time # NOTE: ${linker_script_gen} will be produced at build-time; not at configure-time
macro(configure_linker_script linker_script_gen linker_pass_define) macro(configure_linker_script linker_script_gen linker_pass_define)
set(extra_dependencies ${ARGN}) set(extra_dependencies ${ARGN})
set(template_script_defines ${linker_pass_define})
list(TRANSFORM template_script_defines PREPEND "-D")
# Different generators deal with depfiles differently. # Different generators deal with depfiles differently.
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles") if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
@ -45,7 +47,7 @@ macro(configure_linker_script linker_script_gen linker_pass_define)
-D_ASMLANGUAGE -D_ASMLANGUAGE
${current_includes} ${current_includes}
${current_defines} ${current_defines}
${linker_pass_define} ${template_script_defines}
-E ${LINKER_SCRIPT} -E ${LINKER_SCRIPT}
-P # Prevent generation of debug `#line' directives. -P # Prevent generation of debug `#line' directives.
-o ${linker_script_gen} -o ${linker_script_gen}