In order to enable code relocation, we use a custom target (code_data_relocation_target), and add files we wish to relocate, as well as which sections should be relocated to the COMPILE_DEFINITIONS property for the target. This approach has been fragile, because COMPILE_DEFINITIONS can also be added to for all targets using `add_definitions`. This means if another part of the project uses `add_definitions` and CONFIG_CODE_DATA_RELOCATION is on, a warning will appear about the "file" not being found. The "file" of course, is just the definition added by `add_definitions`. To work around this, switch to overloading the INTERFACE_SOURCES property. This property should be a bit more robust, because nobody else will add sources to the code_data_relocation_target. However, this approach has the downside that the CMake documentation pstates targets created with `add_custom_target()` (which the code_data_relocation_target is) do not have an INTERFACE scope for their sources- so while this approach works, it is not officially supported by CMake Fixes #60220 Signed-off-by: Daniel DeGrasse <daniel.degrasse@nxp.com>
42 lines
1.5 KiB
CMake
42 lines
1.5 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# See root CMakeLists.txt for description and expectations of these macros
|
|
|
|
macro(toolchain_ld_relocation)
|
|
set(MEM_RELOCATION_LD "${PROJECT_BINARY_DIR}/include/generated/linker_relocate.ld")
|
|
set(MEM_RELOCATION_SRAM_DATA_LD
|
|
"${PROJECT_BINARY_DIR}/include/generated/linker_sram_data_relocate.ld")
|
|
set(MEM_RELOCATION_SRAM_BSS_LD
|
|
"${PROJECT_BINARY_DIR}/include/generated/linker_sram_bss_relocate.ld")
|
|
set(MEM_RELOCATION_CODE "${PROJECT_BINARY_DIR}/code_relocation.c")
|
|
set(MEM_REGION_DEFAULT_RAM RAM)
|
|
set(DICT_FILE "${PROJECT_BINARY_DIR}/relocation_dict.txt")
|
|
|
|
file(GENERATE
|
|
OUTPUT
|
|
${DICT_FILE}
|
|
CONTENT
|
|
$<TARGET_PROPERTY:code_data_relocation_target,INTERFACE_SOURCES>
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${MEM_RELOCATION_CODE} ${MEM_RELOCATION_LD}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/gen_relocate_app.py
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
|
-d ${APPLICATION_BINARY_DIR}
|
|
-i ${DICT_FILE}
|
|
-o ${MEM_RELOCATION_LD}
|
|
-s ${MEM_RELOCATION_SRAM_DATA_LD}
|
|
-b ${MEM_RELOCATION_SRAM_BSS_LD}
|
|
-c ${MEM_RELOCATION_CODE}
|
|
--default_ram_region ${MEM_REGION_DEFAULT_RAM}
|
|
DEPENDS app kernel ${ZEPHYR_LIBS_PROPERTY} ${DICT_FILE}
|
|
)
|
|
|
|
add_library(code_relocation_source_lib STATIC ${MEM_RELOCATION_CODE})
|
|
target_include_directories(code_relocation_source_lib PRIVATE
|
|
${ZEPHYR_BASE}/kernel/include ${ARCH_DIR}/${ARCH}/include)
|
|
target_link_libraries(code_relocation_source_lib zephyr_interface)
|
|
endmacro()
|