From e84a3b7f73fff13a891ee4dc0c97937308703532 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 7cf06b4d65e1a..bb11bbf8311af 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)