-
Notifications
You must be signed in to change notification settings - Fork 102
Open
Description
Hi,
I am trying to compile an existing project with Clang-LLVM instead of GCC. Compilation works fine, but fails at Linker.
The toolchain was downloaded from the releases on GitHub.
Compilation works fine, but I am unable to figure out why libclang_rt.builtins.a
is required.
Linker error
clang: warning: argument unused during compilation: '--specs=picolib.specs' [-Wunused-command-line-argument]
ld.lld: error: cannot open /home/navin/Downloads/LLVM-ET-Arm-19.1.5-Linux-x86_64/lib/clang/19/lib/arm-unknown-none-eabi/libclang_rt.builtins.a: No such file or directory
clang: error: ld.lld command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
Linker options
/home/navin/Downloads/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin/clang --target=arm-none-eabi -mthumb -mcpu=cortex-m4 -march=armv7em -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fdata-sections -ffunction-sections --sysroot=/opt/gcc-arm-none-v12/arm-none-eabi -isystem /opt/gcc-arm-none-v12/arm-none-eabi/arm-none-eabi/include -g --specs=picolib.specs -Wl,--gc-sections,-print-memory-usage -T/home/navin/STM32CubeIDE/STM32WB5MMGHX_FLASH.ld -Wl,-Map=MY_APP.map BSP_Kite/Drivers/CMakeFiles/stm32wb5_bsp_hal.dir/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c.ob...
CMake toolchain file
# Define the CPU architecture for Threadx
set(THREADX_ARCH "cortex_m4")
set(THREADX_TOOLCHAIN "gnu")
set(MCPU_FLAGS "-mthumb -mcpu=cortex-m4 -march=armv7em")
set(VFP_FLAGS "-mfloat-abi=hard -mfpu=fpv4-sp-d16")
set(CLANG_COMPILER_PATH_PREFIX /home/navin/Downloads/LLVM-ET-Arm-19.1.5-Linux-x86_64/bin)
# Without that you will get linking error related to no _exit symbol when CMake tests gcc compile.
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_C_COMPILER ${CLANG_COMPILER_PATH_PREFIX}/clang)
set(CMAKE_CXX_COMPILER ${CLANG_COMPILER_PATH_PREFIX}/clang++)
set(CMAKE_ASM_COMPILER ${CLANG_COMPILER_PATH_PREFIX}/clang)
set(CMAKE_LINKER ${CLANG_COMPILER_PATH_PREFIX}/ld.lld)
set(CMAKE_AR ${CLANG_COMPILER_PATH_PREFIX}/llvm-ar)
set(CMAKE_OBJCOPY ${CLANG_COMPILER_PATH_PREFIX}/llvm-objcopy)
set(CMAKE_OBJCOPY_BIN ${CLANG_COMPILER_PATH_PREFIX}/llvm-objcopy)
set(CMAKE_RANLIB ${CLANG_COMPILER_PATH_PREFIX}/llvm-ranlib)
set(CMAKE_STRIP ${CLANG_COMPILER_PATH_PREFIX}/llvm-strip)
set(CMAKE_SIZE_BIN ${CLANG_COMPILER_PATH_PREFIX}/llvm-size)
set(CMAKE_NM ${CLANG_COMPILER_PATH_PREFIX}/llvm-nm)
set(LLVM_CONFIG_PATH ${CLANG_COMPILER_PATH_PREFIX}/llvm-config)
set(COMPILER_RT_OS_DIR "baremetal")
set(COMPILER_RT_BUILD_BUILTINS ON)
set(COMPILER_RT_BUILD_SANITIZERS OFF)
set(COMPILER_RT_BUILD_XRAY OFF)
set(COMPILER_RT_BUILD_LIBFUZZER OFF)
set(COMPILER_RT_BUILD_PROFILE OFF)
set(COMPILER_RT_BAREMETAL_BUILD ON)
set(COMPILER_RT_DEFAULT_TARGET_ONLY ON)
set(BAREMETAL_ARMV7M_SYSROOT /opt/gcc-arm-none-v12/arm-none-eabi)
set(LLVM_BAREMETAL_ARM_TARGET_COMPILE_FLAGS "${MCPU_FLAGS} ${VFP_FLAGS} ${ASM_FLAGS_M4} ${CMAKE_COMMON_FLAGS}")
string(CONCAT basic_flags
${LLVM_BAREMETAL_ARM_TARGET_COMPILE_FLAGS}
" -fdata-sections -ffunction-sections"
# Those flags are needed to use newlib from the ARM GNU GCC toolchain
" --sysroot=/opt/gcc-arm-none-v12/arm-none-eabi"
" -isystem /opt/gcc-arm-none-v12/arm-none-eabi/arm-none-eabi/include"
)
set(CMAKE_C_FLAGS "${basic_flags}")
set(CMAKE_CXX_FLAGS "${basic_flags}")
set(CMAKE_ASM_FLAGS "${basic_flags}")
set(CMAKE_C_COMPILER_TARGET arm-none-eabi)
set(CMAKE_CXX_COMPILER_TARGET arm-none-eabi)
set(CMAKE_ASM_COMPILER_TARGET arm-none-eabi)
set(CMAKE_ASM_FLAGS_MINSIZEREL "-Oz -DNDEBUG" CACHE STRING "")
set(CMAKE_C_FLAGS_MINSIZEREL "-Oz -DNDEBUG" CACHE STRING "")
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Oz -DNDEBUG" CACHE STRING "")
set(CMAKE_EXE_LINKER_FLAGS "${LD_FLAGS} --specs=picolib.specs -Wl,--gc-sections,-print-memory-usage")
Metadata
Metadata
Assignees
Labels
No labels