CMake: support older ARM linker versions

This commit is contained in:
2026-10-12 11:39:42 +08:00
parent c9aa41685f
commit 60908a7709
+16 -2
View File
@@ -88,11 +88,25 @@ target_link_options(${PROJECT_NAME} PRIVATE
# 容量宏(代码中如需按容量分支使用 GD32_FLASH_SIZE_KB)
target_compile_definitions(${PROJECT_NAME} PRIVATE GD32_FLASH_SIZE_KB=${GD32_FLASH_SIZE_KB})
# 生成 map 文件等
# 生成 map 文件等。`--no-warn-rwx-segments` 仅用于抑制新版本
# binutils 的 RWX 段警告,旧版(例如 xPack GCC 11.3 搭配 binutils 2.38)
# 不认识该选项,因此先探测链接器能力,避免因工具链版本差异导致链接失败。
target_link_options(${PROJECT_NAME} PRIVATE
-Wl,-Map=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Application.map
-Wl,--no-warn-rwx-segments
)
execute_process(
COMMAND "${CMAKE_LINKER}" --help
OUTPUT_VARIABLE FILMFORGE_LINKER_HELP
ERROR_VARIABLE FILMFORGE_LINKER_HELP_ERROR
RESULT_VARIABLE FILMFORGE_LINKER_HELP_RESULT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(FILMFORGE_LINKER_HELP_RESULT EQUAL 0 AND
FILMFORGE_LINKER_HELP MATCHES "no-warn-rwx-segments")
target_link_options(${PROJECT_NAME} PRIVATE -Wl,--no-warn-rwx-segments)
else()
message(STATUS "Linker does not support --no-warn-rwx-segments; skipping it")
endif()
# 链接SDK库
target_link_libraries(${PROJECT_NAME} PRIVATE CMSIS)