From a2c0773089d56881522ce98e89a720e73546c2c2 Mon Sep 17 00:00:00 2001 From: Zhaoqi Xu Date: Mon, 31 Aug 2026 16:23:12 +0800 Subject: [PATCH] tools/export: prefix each linker script in toolchain.cmake. make export writes several names into LDNAME for boards that use more than one linker script. The exported toolchain.cmake only prefixed the first file, so ld searched for the rest in the application build directory. Normalize NUTTX_PATH so the generated -T arguments do not keep the scripts/../scripts form. Fixes apache/nuttx#19820. Signed-off-by: Zhaoqi Xu --- tools/toolchain.cmake.export | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tools/toolchain.cmake.export b/tools/toolchain.cmake.export index 7cf06b4d65e..bb11bbf8311 100644 --- a/tools/toolchain.cmake.export +++ b/tools/toolchain.cmake.export @@ -4,10 +4,17 @@ set(NUTTX 1) set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) -set(NUTTX_PATH ${CMAKE_CURRENT_LIST_DIR}/..) +set(NUTTX_PATH "${CMAKE_CURRENT_LIST_DIR}/..") +get_filename_component(NUTTX_PATH "${NUTTX_PATH}" ABSOLUTE) include(${NUTTX_PATH}/scripts/target.cmake) -set(LINKER_SCRIPT ${NUTTX_PATH}/scripts/${LDNAME}) +# LDNAME may list several space-separated linker scripts. Prefix each one. +separate_arguments(_ldname_list UNIX_COMMAND "${LDNAME}") +set(_ldscripts) +foreach(_ld IN LISTS _ldname_list) + list(APPEND _ldscripts "-T${NUTTX_PATH}/scripts/${_ld}") +endforeach() +string(REPLACE ";" " " LINKER_SCRIPT "${_ldscripts}") set(CMAKE_C_FLAGS "${ARCHCPUFLAGS} ${ARCHCFLAGS} -D__NuttX__") set(CMAKE_CXX_FLAGS "${ARCHCPUFLAGS} ${ARCHCXXFLAGS} -D__NuttX__") @@ -27,10 +34,10 @@ add_compile_options(-ffunction-sections -fdata-sections) set(ENTRY_NAME "_start") set(CMAKE_C_LINK_EXECUTABLE - " ${LDFLAGS} --entry=${ENTRY_NAME} -T${LINKER_SCRIPT} -o -L${NUTTX_PATH}/libs --start-group ${LDLIBS} ${EXTRA_LIBS} --end-group" + " ${LDFLAGS} --entry=${ENTRY_NAME} ${LINKER_SCRIPT} -o -L${NUTTX_PATH}/libs --start-group ${LDLIBS} ${EXTRA_LIBS} --end-group" ) set(CMAKE_CXX_LINK_EXECUTABLE - " ${LDFLAGS} --entry=${ENTRY_NAME} -T${LINKER_SCRIPT} -o -L${NUTTX_PATH}/libs --start-group ${LDLIBS} ${EXTRA_LIBS} --end-group" + " ${LDFLAGS} --entry=${ENTRY_NAME} ${LINKER_SCRIPT} -o -L${NUTTX_PATH}/libs --start-group ${LDLIBS} ${EXTRA_LIBS} --end-group" ) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)