Skip to content

Commit 423972f

Browse files
tejlmandpdgendt
authored andcommitted
cmake: create CMake pre-load file for calling linker script generator
Create a CMake preload file with linker settings which is then passed to the linker script generator as preload file. This removes the need for command invocation with long arguments. Signed-off-by: Torsten Rasmussen <[email protected]>
1 parent b9a1bf9 commit 423972f

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

cmake/linker/armlink/target.cmake

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ macro(configure_linker_script linker_script_gen linker_pass_define)
1818
set(STEERING_FILE_ARG)
1919
set(STEERING_C_ARG)
2020
set(linker_pass_define_list ${linker_pass_define})
21+
set(cmake_linker_script_settings
22+
${PROJECT_BINARY_DIR}/include/generated/ld_script_settings_${linker_pass_define}.cmake
23+
)
2124

2225
if("LINKER_ZEPHYR_FINAL" IN_LIST linker_pass_define_list)
2326
set(STEERING_FILE ${CMAKE_CURRENT_BINARY_DIR}/armlink_symbol_steering.steer)
@@ -26,17 +29,23 @@ macro(configure_linker_script linker_script_gen linker_pass_define)
2629
set(STEERING_C_ARG "-DSTEERING_C=${STEERING_C}")
2730
endif()
2831

32+
file(GENERATE OUTPUT ${cmake_linker_script_settings} CONTENT
33+
"set(FORMAT \"$<TARGET_PROPERTY:linker,FORMAT>\" CACHE INTERNAL \"\")\n
34+
set(ENTRY \"$<TARGET_PROPERTY:linker,ENTRY>\" CACHE INTERNAL \"\")\n
35+
set(MEMORY_REGIONS \"$<TARGET_PROPERTY:linker,MEMORY_REGIONS>\" CACHE INTERNAL \"\")\n
36+
set(GROUPS \"$<TARGET_PROPERTY:linker,GROUPS>\" CACHE INTERNAL \"\")\n
37+
set(SECTIONS \"$<TARGET_PROPERTY:linker,SECTIONS>\" CACHE INTERNAL \"\")\n
38+
set(SECTION_SETTINGS \"$<TARGET_PROPERTY:linker,SECTION_SETTINGS>\" CACHE INTERNAL \"\")\n
39+
set(SYMBOLS \"$<TARGET_PROPERTY:linker,SYMBOLS>\" CACHE INTERNAL \"\")\n
40+
"
41+
)
2942
add_custom_command(
3043
OUTPUT ${linker_script_gen}
3144
${STEERING_FILE}
3245
${STEERING_C}
3346
COMMAND ${CMAKE_COMMAND}
47+
-C ${cmake_linker_script_settings}
3448
-DPASS="${linker_pass_define}"
35-
-DMEMORY_REGIONS="$<TARGET_PROPERTY:linker,MEMORY_REGIONS>"
36-
-DGROUPS="$<TARGET_PROPERTY:linker,GROUPS>"
37-
-DSECTIONS="$<TARGET_PROPERTY:linker,SECTIONS>"
38-
-DSECTION_SETTINGS="$<TARGET_PROPERTY:linker,SECTION_SETTINGS>"
39-
-DSYMBOLS="$<TARGET_PROPERTY:linker,SYMBOLS>"
4049
${STEERING_FILE_ARG}
4150
${STEERING_C_ARG}
4251
-DOUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/${linker_script_gen}

cmake/linker/ld/target.cmake

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,29 @@ endif()
1818
# NOTE: ${linker_script_gen} will be produced at build-time; not at configure-time
1919
macro(configure_linker_script linker_script_gen linker_pass_define)
2020
set(extra_dependencies ${ARGN})
21+
set(cmake_linker_script_settings
22+
${PROJECT_BINARY_DIR}/include/generated/ld_script_settings_${linker_pass_define}.cmake
23+
)
2124

2225
if(CONFIG_CMAKE_LINKER_GENERATOR)
26+
file(GENERATE OUTPUT ${cmake_linker_script_settings} CONTENT
27+
"set(FORMAT \"$<TARGET_PROPERTY:linker,FORMAT>\" CACHE INTERNAL \"\")\n
28+
set(ENTRY \"$<TARGET_PROPERTY:linker,ENTRY>\" CACHE INTERNAL \"\")\n
29+
set(MEMORY_REGIONS \"$<TARGET_PROPERTY:linker,MEMORY_REGIONS>\" CACHE INTERNAL \"\")\n
30+
set(GROUPS \"$<TARGET_PROPERTY:linker,GROUPS>\" CACHE INTERNAL \"\")\n
31+
set(SECTIONS \"$<TARGET_PROPERTY:linker,SECTIONS>\" CACHE INTERNAL \"\")\n
32+
set(SECTION_SETTINGS \"$<TARGET_PROPERTY:linker,SECTION_SETTINGS>\" CACHE INTERNAL \"\")\n
33+
set(SYMBOLS \"$<TARGET_PROPERTY:linker,SYMBOLS>\" CACHE INTERNAL \"\")\n
34+
"
35+
)
2336
add_custom_command(
2437
OUTPUT ${linker_script_gen}
2538
COMMAND ${CMAKE_COMMAND}
39+
-C ${cmake_linker_script_settings}
2640
-DPASS="${linker_pass_define}"
27-
-DFORMAT="$<TARGET_PROPERTY:linker,FORMAT>"
28-
-DENTRY="$<TARGET_PROPERTY:linker,ENTRY>"
29-
-DMEMORY_REGIONS="$<TARGET_PROPERTY:linker,MEMORY_REGIONS>"
30-
-DGROUPS="$<TARGET_PROPERTY:linker,GROUPS>"
31-
-DSECTIONS="$<TARGET_PROPERTY:linker,SECTIONS>"
32-
-DSECTION_SETTINGS="$<TARGET_PROPERTY:linker,SECTION_SETTINGS>"
33-
-DSYMBOLS="$<TARGET_PROPERTY:linker,SYMBOLS>"
3441
-DOUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/${linker_script_gen}
3542
-P ${ZEPHYR_BASE}/cmake/linker/ld/ld_script.cmake
36-
)
43+
)
3744
else()
3845
set(template_script_defines ${linker_pass_define})
3946
list(TRANSFORM template_script_defines PREPEND "-D")

0 commit comments

Comments
 (0)