CMake AMRCC + enlazador personalizado
Estoy tratando de usarcmake
en un proyecto que se compila utilizandoarmcc
, pero use un enlazador patentado personalizado (noarmlink
)
He cambiado las variables en eltoolchain.cmake
archivo de la siguiente manera:
unset (CMAKE_LINKER CACHE)
set (CMAKE_LINKER "my_linker" CACHE STRING "" FORCE)
unset (CMAKE_ARMCC_LINKER CACHE)
set (CMAKE_ARMCC_LINKER "my_linker" CACHE STRING "" FORCE)
unset (CMAKE_EXE_LINKER_FLAGS CACHE )
set (CMAKE_EXE_LINKER_FLAGS "-flag1 -flag2" CACHE STRING "" FORCE)
unset (CMAKE_C_LINK_EXECUTABLE)
set (CMAKE_C_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_EXE_LINKER_FLAGS> <OBJECTS> <LINK_LIBRARIES> -o <TARGET>")
unset (CMAKE_CXX_LINK_EXECUTABLE)
set (CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_EXE_LINKER_FLAGS> <OBJECTS> <LINK_LIBRARIES> -o <TARGET>")
Pero cuandocmake
intenta verificar mi paquete de compiladores, falla en el paso de vinculación:
-- Check for working C compiler: armcc.exe -- broken
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.6/Modules/CMakeTestCCompiler.cmake:61 (message):
The C compiler "armcc.exe" is not able to compile a simple test program.
... (compiling commands that worked hidden here)
Linking C executable cmTC_c08ef.elf
"C:\Program Files (x86)\CMake\bin\cmake.exe" -E cmake_link_script CMakeFiles\cmTC_c08ef.dir\link.txt --verbose=1
my_linker -flag1 -flag2 CMakeFiles/cmTC_c08ef.dir/testCCompiler.o -o cmTC_c08ef.elf --list cmTC_c08ef.map
El problema es el--list cmTC_c08ef.map
al final de la línea de comando (que no existe en eltoolchain.cmake
archivo).
Para que funcione, necesito cambiar el archivo<cmake_install_dir>\Modules\Compiler\ARMCC.cmake
de la siguiente manera:
set(CMAKE_${lang}_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS> -o <TARGET> --list <TARGET_BASE>.map")
# set(CMAKE_${lang}_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS> -o <TARGET>")
¿Hay un mejor enfoque para resolver este problema o es la única manera?
Editar: Aparentemente, este es un error en el soporte de armcc de cmake, por lo que mantendré mi cambio en el archivo ARMCC.cmake.