diff --git a/arch/arm/src/cmake/ghs.cmake b/arch/arm/src/cmake/ghs.cmake index c7529eb9a96..f640084f1c7 100644 --- a/arch/arm/src/cmake/ghs.cmake +++ b/arch/arm/src/cmake/ghs.cmake @@ -219,12 +219,31 @@ function(nuttx_generate_preprocess_target) ARGN ${ARGN}) + # in greenhills, for file to pre-process, if the file name is ends with + # "*.ld", will report error, and we need to change the target file name to + # "*.ld.i" or "*.ld.tmp", this is a special corner case, and the official + # greenhills reference manual do not have explanation about why the only + # "*.ld" should handle + set(EXPECT_TARGET_FILE_NAME ${TARGET_FILE}) + string(REGEX MATCH ".*\.ld$" ends_with_ld ${TARGET_FILE}) + + if(ends_with_ld STREQUAL ${TARGET_FILE}) + set(EXPECT_TARGET_FILE_NAME "${TARGET_FILE}.i") + endif() + add_custom_command( - OUTPUT ${TARGET_FILE} + OUTPUT ${EXPECT_TARGET_FILE_NAME} COMMAND ${PREPROCESS} -I${CMAKE_BINARY_DIR}/include -filetype.cpp - ${SOURCE_FILE} -o ${TARGET_FILE} + ${SOURCE_FILE} -o ${EXPECT_TARGET_FILE_NAME} DEPENDS ${SOURCE_FILE} ${DEPENDS}) + if(NOT ${EXPECT_TARGET_FILE_NAME} STREQUAL ${TARGET_FILE}) + add_custom_command( + OUTPUT ${TARGET_FILE} + COMMAND ${CMAKE_COMMAND} -E copy ${EXPECT_TARGET_FILE_NAME} ${TARGET_FILE} + DEPENDS ${EXPECT_TARGET_FILE_NAME}) + endif() + endfunction() # override nuttx_find_toolchain_lib