Skip to content

Linker issue with Clang LLVM latest release #616

@navinreddy23

Description

@navinreddy23

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions