nuttx/tools/toolchain.cmake.export
Zhaoqi Xu a2c0773089 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 <lzy00419@outlook.com>
2026-09-01 17:41:42 +08:00

46 lines
1.7 KiB
Text

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
set(NUTTX 1)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(NUTTX_PATH "${CMAKE_CURRENT_LIST_DIR}/..")
get_filename_component(NUTTX_PATH "${NUTTX_PATH}" ABSOLUTE)
include(${NUTTX_PATH}/scripts/target.cmake)
# 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__")
set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES ${NUTTX_PATH}/include
${NUTTX_PATH}/arch/chip)
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES
${NUTTX_PATH}/include/${NUTTX_CXX} ${NUTTX_PATH}/include
${NUTTX_PATH}/arch/chip)
add_compile_options(-nostdlib)
add_compile_options(-ffunction-sections -fdata-sections)
# same entry used for all build modes in crt0.c
set(ENTRY_NAME "_start")
set(CMAKE_C_LINK_EXECUTABLE
"<CMAKE_LINKER> ${LDFLAGS} --entry=${ENTRY_NAME} ${LINKER_SCRIPT} <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -L${NUTTX_PATH}/libs --start-group ${LDLIBS} ${EXTRA_LIBS} --end-group"
)
set(CMAKE_CXX_LINK_EXECUTABLE
"<CMAKE_LINKER> ${LDFLAGS} --entry=${ENTRY_NAME} ${LINKER_SCRIPT} <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -L${NUTTX_PATH}/libs --start-group ${LDLIBS} ${EXTRA_LIBS} --end-group"
)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)