cmake: move configure_linker_script to ld/target.cmake
While configure_linker_script() may be useful for other linkers, it currently only aimed at GNU ld. To really be useful among different linkers, we would need to abstract its usage of the C preprocessor. We can do this later, if needed. No functional change expected. Signed-off-by: Mark Ruvald Pedersen <mped@oticon.com>
This commit is contained in:
parent
fbcea17c86
commit
5f347eefe6
2 changed files with 49 additions and 46 deletions
|
@ -408,52 +408,6 @@ endif()
|
||||||
|
|
||||||
configure_file(version.h.in ${PROJECT_BINARY_DIR}/include/generated/version.h)
|
configure_file(version.h.in ${PROJECT_BINARY_DIR}/include/generated/version.h)
|
||||||
|
|
||||||
# Run $LINKER_SCRIPT file through the C preprocessor, producing ${linker_script_gen}
|
|
||||||
macro(configure_linker_script linker_script_gen linker_pass_define)
|
|
||||||
set(extra_dependencies ${ARGN})
|
|
||||||
|
|
||||||
# Different generators deal with depfiles differently.
|
|
||||||
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
|
|
||||||
# Note that the IMPLICIT_DEPENDS option is currently supported only
|
|
||||||
# for Makefile generators and will be ignored by other generators.
|
|
||||||
set(linker_script_dep IMPLICIT_DEPENDS C ${LINKER_SCRIPT})
|
|
||||||
elseif(CMAKE_GENERATOR STREQUAL "Ninja")
|
|
||||||
# Using DEPFILE with other generators than Ninja is an error.
|
|
||||||
set(linker_script_dep DEPFILE ${PROJECT_BINARY_DIR}/${linker_script_gen}.dep)
|
|
||||||
else()
|
|
||||||
# TODO: How would the linker script dependencies work for non-linker
|
|
||||||
# script generators.
|
|
||||||
message(STATUS "Warning; this generator is not well supported. The
|
|
||||||
Linker script may not be regenerated when it should.")
|
|
||||||
set(linker_script_dep "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
zephyr_get_include_directories_for_lang(C current_includes)
|
|
||||||
get_filename_component(base_name ${CMAKE_CURRENT_BINARY_DIR} NAME)
|
|
||||||
get_property(current_defines GLOBAL PROPERTY PROPERTY_LINKER_SCRIPT_DEFINES)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${linker_script_gen}
|
|
||||||
DEPENDS
|
|
||||||
${LINKER_SCRIPT}
|
|
||||||
${extra_dependencies}
|
|
||||||
# NB: 'linker_script_dep' will use a keyword that ends 'DEPENDS'
|
|
||||||
${linker_script_dep}
|
|
||||||
COMMAND ${CMAKE_C_COMPILER}
|
|
||||||
-x assembler-with-cpp
|
|
||||||
${NOSYSDEF_CFLAG}
|
|
||||||
-MD -MF ${linker_script_gen}.dep -MT ${base_name}/${linker_script_gen}
|
|
||||||
${current_includes}
|
|
||||||
${current_defines}
|
|
||||||
${linker_pass_define}
|
|
||||||
-E ${LINKER_SCRIPT}
|
|
||||||
-P # Prevent generation of debug `#line' directives.
|
|
||||||
-o ${linker_script_gen}
|
|
||||||
VERBATIM
|
|
||||||
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
|
||||||
)
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
# Error-out when the deprecated naming convention is found (until
|
# Error-out when the deprecated naming convention is found (until
|
||||||
# after 1.14.0 has been released)
|
# after 1.14.0 has been released)
|
||||||
foreach(path
|
foreach(path
|
||||||
|
|
|
@ -4,6 +4,55 @@ find_program(CMAKE_LINKER ${CROSS_COMPILE}ld PATH ${TOOLCHAIN_HOME} NO_
|
||||||
|
|
||||||
set_ifndef(LINKERFLAGPREFIX -Wl)
|
set_ifndef(LINKERFLAGPREFIX -Wl)
|
||||||
|
|
||||||
|
|
||||||
|
# Run $LINKER_SCRIPT file through the C preprocessor, producing ${linker_script_gen}
|
||||||
|
# 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})
|
||||||
|
|
||||||
|
# Different generators deal with depfiles differently.
|
||||||
|
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
|
||||||
|
# Note that the IMPLICIT_DEPENDS option is currently supported only
|
||||||
|
# for Makefile generators and will be ignored by other generators.
|
||||||
|
set(linker_script_dep IMPLICIT_DEPENDS C ${LINKER_SCRIPT})
|
||||||
|
elseif(CMAKE_GENERATOR STREQUAL "Ninja")
|
||||||
|
# Using DEPFILE with other generators than Ninja is an error.
|
||||||
|
set(linker_script_dep DEPFILE ${PROJECT_BINARY_DIR}/${linker_script_gen}.dep)
|
||||||
|
else()
|
||||||
|
# TODO: How would the linker script dependencies work for non-linker
|
||||||
|
# script generators.
|
||||||
|
message(STATUS "Warning; this generator is not well supported. The
|
||||||
|
Linker script may not be regenerated when it should.")
|
||||||
|
set(linker_script_dep "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
zephyr_get_include_directories_for_lang(C current_includes)
|
||||||
|
get_filename_component(base_name ${CMAKE_CURRENT_BINARY_DIR} NAME)
|
||||||
|
get_property(current_defines GLOBAL PROPERTY PROPERTY_LINKER_SCRIPT_DEFINES)
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${linker_script_gen}
|
||||||
|
DEPENDS
|
||||||
|
${LINKER_SCRIPT}
|
||||||
|
${extra_dependencies}
|
||||||
|
# NB: 'linker_script_dep' will use a keyword that ends 'DEPENDS'
|
||||||
|
${linker_script_dep}
|
||||||
|
COMMAND ${CMAKE_C_COMPILER}
|
||||||
|
-x assembler-with-cpp
|
||||||
|
${NOSYSDEF_CFLAG}
|
||||||
|
-MD -MF ${linker_script_gen}.dep -MT ${base_name}/${linker_script_gen}
|
||||||
|
${current_includes}
|
||||||
|
${current_defines}
|
||||||
|
${linker_pass_define}
|
||||||
|
-E ${LINKER_SCRIPT}
|
||||||
|
-P # Prevent generation of debug `#line' directives.
|
||||||
|
-o ${linker_script_gen}
|
||||||
|
VERBATIM
|
||||||
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
||||||
|
)
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
|
||||||
# Load toolchain_ld-family macros
|
# Load toolchain_ld-family macros
|
||||||
include(${ZEPHYR_BASE}/cmake/linker/${LINKER}/target_base.cmake)
|
include(${ZEPHYR_BASE}/cmake/linker/${LINKER}/target_base.cmake)
|
||||||
include(${ZEPHYR_BASE}/cmake/linker/${LINKER}/target_baremetal.cmake)
|
include(${ZEPHYR_BASE}/cmake/linker/${LINKER}/target_baremetal.cmake)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue