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 <Torsten.Rasmussen@nordicsemi.no>
This commit is contained in:
parent
e63c6cd534
commit
0332770e46
2 changed files with 29 additions and 13 deletions
|
@ -18,6 +18,9 @@ macro(configure_linker_script linker_script_gen linker_pass_define)
|
|||
set(STEERING_FILE_ARG)
|
||||
set(STEERING_C_ARG)
|
||||
set(linker_pass_define_list ${linker_pass_define})
|
||||
set(cmake_linker_script_settings
|
||||
${PROJECT_BINARY_DIR}/include/generated/ld_script_settings_${linker_pass_define}.cmake
|
||||
)
|
||||
|
||||
if("LINKER_ZEPHYR_FINAL" IN_LIST linker_pass_define_list)
|
||||
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)
|
|||
set(STEERING_C_ARG "-DSTEERING_C=${STEERING_C}")
|
||||
endif()
|
||||
|
||||
file(GENERATE OUTPUT ${cmake_linker_script_settings} CONTENT
|
||||
"set(FORMAT \"$<TARGET_PROPERTY:linker,FORMAT>\" CACHE INTERNAL \"\")\n
|
||||
set(ENTRY \"$<TARGET_PROPERTY:linker,ENTRY>\" CACHE INTERNAL \"\")\n
|
||||
set(MEMORY_REGIONS \"$<TARGET_PROPERTY:linker,MEMORY_REGIONS>\" CACHE INTERNAL \"\")\n
|
||||
set(GROUPS \"$<TARGET_PROPERTY:linker,GROUPS>\" CACHE INTERNAL \"\")\n
|
||||
set(SECTIONS \"$<TARGET_PROPERTY:linker,SECTIONS>\" CACHE INTERNAL \"\")\n
|
||||
set(SECTION_SETTINGS \"$<TARGET_PROPERTY:linker,SECTION_SETTINGS>\" CACHE INTERNAL \"\")\n
|
||||
set(SYMBOLS \"$<TARGET_PROPERTY:linker,SYMBOLS>\" CACHE INTERNAL \"\")\n
|
||||
"
|
||||
)
|
||||
add_custom_command(
|
||||
OUTPUT ${linker_script_gen}
|
||||
${STEERING_FILE}
|
||||
${STEERING_C}
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-C ${cmake_linker_script_settings}
|
||||
-DPASS="${linker_pass_define}"
|
||||
-DMEMORY_REGIONS="$<TARGET_PROPERTY:linker,MEMORY_REGIONS>"
|
||||
-DGROUPS="$<TARGET_PROPERTY:linker,GROUPS>"
|
||||
-DSECTIONS="$<TARGET_PROPERTY:linker,SECTIONS>"
|
||||
-DSECTION_SETTINGS="$<TARGET_PROPERTY:linker,SECTION_SETTINGS>"
|
||||
-DSYMBOLS="$<TARGET_PROPERTY:linker,SYMBOLS>"
|
||||
${STEERING_FILE_ARG}
|
||||
${STEERING_C_ARG}
|
||||
-DOUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/${linker_script_gen}
|
||||
|
|
|
@ -18,22 +18,29 @@ endif()
|
|||
# NOTE: ${linker_script_gen} will be produced at build-time; not at configure-time
|
||||
macro(configure_linker_script linker_script_gen linker_pass_define)
|
||||
set(extra_dependencies ${ARGN})
|
||||
set(cmake_linker_script_settings
|
||||
${PROJECT_BINARY_DIR}/include/generated/ld_script_settings_${linker_pass_define}.cmake
|
||||
)
|
||||
|
||||
if(CONFIG_CMAKE_LINKER_GENERATOR)
|
||||
file(GENERATE OUTPUT ${cmake_linker_script_settings} CONTENT
|
||||
"set(FORMAT \"$<TARGET_PROPERTY:linker,FORMAT>\" CACHE INTERNAL \"\")\n
|
||||
set(ENTRY \"$<TARGET_PROPERTY:linker,ENTRY>\" CACHE INTERNAL \"\")\n
|
||||
set(MEMORY_REGIONS \"$<TARGET_PROPERTY:linker,MEMORY_REGIONS>\" CACHE INTERNAL \"\")\n
|
||||
set(GROUPS \"$<TARGET_PROPERTY:linker,GROUPS>\" CACHE INTERNAL \"\")\n
|
||||
set(SECTIONS \"$<TARGET_PROPERTY:linker,SECTIONS>\" CACHE INTERNAL \"\")\n
|
||||
set(SECTION_SETTINGS \"$<TARGET_PROPERTY:linker,SECTION_SETTINGS>\" CACHE INTERNAL \"\")\n
|
||||
set(SYMBOLS \"$<TARGET_PROPERTY:linker,SYMBOLS>\" CACHE INTERNAL \"\")\n
|
||||
"
|
||||
)
|
||||
add_custom_command(
|
||||
OUTPUT ${linker_script_gen}
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-C ${cmake_linker_script_settings}
|
||||
-DPASS="${linker_pass_define}"
|
||||
-DFORMAT="$<TARGET_PROPERTY:linker,FORMAT>"
|
||||
-DENTRY="$<TARGET_PROPERTY:linker,ENTRY>"
|
||||
-DMEMORY_REGIONS="$<TARGET_PROPERTY:linker,MEMORY_REGIONS>"
|
||||
-DGROUPS="$<TARGET_PROPERTY:linker,GROUPS>"
|
||||
-DSECTIONS="$<TARGET_PROPERTY:linker,SECTIONS>"
|
||||
-DSECTION_SETTINGS="$<TARGET_PROPERTY:linker,SECTION_SETTINGS>"
|
||||
-DSYMBOLS="$<TARGET_PROPERTY:linker,SYMBOLS>"
|
||||
-DOUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/${linker_script_gen}
|
||||
-P ${ZEPHYR_BASE}/cmake/linker/ld/ld_script.cmake
|
||||
)
|
||||
)
|
||||
else()
|
||||
set(template_script_defines ${linker_pass_define})
|
||||
list(TRANSFORM template_script_defines PREPEND "-D")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue