[PATCH] makefile: fix Clang link error when RSA_PUBLIC_KEY_PARSER is selected

Raymond Mao raymond.mao at linaro.org
Wed May 28 17:22:00 CEST 2025


Hi Jerome,

On Wed, 28 May 2025 at 04:25, Jerome Forissier
<jerome.forissier at linaro.org> wrote:
>
> Hi Rayond,
>
> On 5/27/25 23:05, Raymond Mao wrote:
> > MbedTLS bignum module needs '__udivti3' which is a 128-bit division
> > function provided by the compiler runtime, typically libgcc for GCC or
> > clang_rt.builtins for Clang.
> > Thus 'clang_rt.builtins' library is required when building using Clang.
>
> How do you reproduce the problem? Can you give the config and build
> command you are using?
>
I am using this:
CROSS_COMPILE=aarch64-none-linux-gnu- make O=out CC="clang -target
aarch64-none-linux-gnu" all

> >
> > Fixes: 13de8483388c ("mbedtls: add mbedtls into the build system")
> > Signed-off-by: Raymond Mao <raymond.mao at linaro.org>
> > ---
> >  Makefile | 6 +++++-
> >  1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/Makefile b/Makefile
> > index f88684947ee..16506dcaec6 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -37,7 +37,6 @@ else ifeq ("riscv32", $(MK_ARCH))
> >  else ifeq ("riscv64", $(MK_ARCH))
> >    export HOST_ARCH=$(HOST_ARCH_RISCV64)
> >  endif
> > -undefine MK_ARCH
> >
> >  # Avoid funny character set dependencies
> >  unexport LC_ALL
> > @@ -915,8 +914,13 @@ PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a
> >  else
> >  ifndef CONFIG_CC_IS_CLANG
> >  PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
> > +else ifeq ($(CONFIG_RSA_PUBLIC_KEY_PARSER_MBEDTLS),y)
> > +# mbedtls bignum needs '__udivti3' - a 128-bit division function that's provided by clang-rt.
> > +CLANG_RT_DIR := $(shell $(CC) --print-resource-dir)/lib/linux
> > +PLATFORM_LIBGCC := -L$(CLANG_RT_DIR) -lclang_rt.builtins-$(MK_ARCH)
>
> I'm afraid this won't work when cross-compiling because the compiler-rt
> builtins libraries are usually not installed with the compiler.
> For example on my Ubuntu 24.04 machine:
>
> $ clang --version
> Ubuntu clang version 18.1.3 (1ubuntu1)
> Target: x86_64-pc-linux-gnu
> Thread model: posix
> InstalledDir: /usr/bin
> $ clang --print-targets
>
>   Registered Targets:
>     aarch64     - AArch64 (little endian)
>     aarch64_32  - AArch64 (little endian ILP32)
>     aarch64_be  - AArch64 (big endian)
>     amdgcn      - AMD GCN GPUs
>     arm         - ARM
>     arm64       - ARM64 (little endian)
>     arm64_32    - ARM64 (little endian ILP32)
>     armeb       - ARM (big endian)
>     avr         - Atmel AVR Microcontroller
>     bpf         - BPF (host endian)
>     bpfeb       - BPF (big endian)
>     bpfel       - BPF (little endian)
>     hexagon     - Hexagon
>     lanai       - Lanai
>     loongarch32 - 32-bit LoongArch
>     loongarch64 - 64-bit LoongArch
>     m68k        - Motorola 68000 family
>     mips        - MIPS (32-bit big endian)
>     mips64      - MIPS (64-bit big endian)
>     mips64el    - MIPS (64-bit little endian)
>     mipsel      - MIPS (32-bit little endian)
>     msp430      - MSP430 [experimental]
>     nvptx       - NVIDIA PTX 32-bit
>     nvptx64     - NVIDIA PTX 64-bit
>     ppc32       - PowerPC 32
>     ppc32le     - PowerPC 32 LE
>     ppc64       - PowerPC 64
>     ppc64le     - PowerPC 64 LE
>     r600        - AMD GPUs HD2XXX-HD6XXX
>     riscv32     - 32-bit RISC-V
>     riscv64     - 64-bit RISC-V
>     sparc       - Sparc
>     sparcel     - Sparc LE
>     sparcv9     - Sparc V9
>     systemz     - SystemZ
>     thumb       - Thumb
>     thumbeb     - Thumb (big endian)
>     ve          - VE
>     wasm32      - WebAssembly 32-bit
>     wasm64      - WebAssembly 64-bit
>     x86         - 32-bit X86: Pentium-Pro and above
>     x86-64      - 64-bit X86: EM64T and AMD64
>     xcore       - XCore
>     xtensa      - Xtensa 32
> $ clang --print-resource-dir
> /usr/lib/llvm-18/lib/clang/18
> $ ls /usr/lib/llvm-18/lib/clang/18/lib/linux/libclang_rt.builtins*
> /usr/lib/llvm-18/lib/clang/18/lib/linux/libclang_rt.builtins-i386.a  /usr/lib/llvm-18/lib/clang/18/lib/linux/libclang_rt.builtins-x86_64.a
>
>
> Are you doing cross compilation for arm or arm64? Did you have to
> install the compiler-rt libraries separately from the compiler?
>
I installed clang manually.

This is what I have:
$ which clang
/home/raymond/toolchain/clang-12.0.0/bin/clang
$ clang --version
clang version 12.0.0
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/raymond/toolchain/clang-12.0.0/bin
$ clang --print-targets
  Registered Targets:
    aarch64    - AArch64 (little endian)
    aarch64_32 - AArch64 (little endian ILP32)
    aarch64_be - AArch64 (big endian)
    amdgcn     - AMD GCN GPUs
    arm        - ARM
    arm64      - ARM64 (little endian)
    arm64_32   - ARM64 (little endian ILP32)
    armeb      - ARM (big endian)
    avr        - Atmel AVR Microcontroller
    bpf        - BPF (host endian)
    bpfeb      - BPF (big endian)
    bpfel      - BPF (little endian)
    hexagon    - Hexagon
    lanai      - Lanai
    mips       - MIPS (32-bit big endian)
    mips64     - MIPS (64-bit big endian)
    mips64el   - MIPS (64-bit little endian)
    mipsel     - MIPS (32-bit little endian)
    msp430     - MSP430 [experimental]
    nvptx      - NVIDIA PTX 32-bit
    nvptx64    - NVIDIA PTX 64-bit
    ppc32      - PowerPC 32
    ppc32le    - PowerPC 32 LE
    ppc64      - PowerPC 64
    ppc64le    - PowerPC 64 LE
    r600       - AMD GPUs HD2XXX-HD6XXX
    riscv32    - 32-bit RISC-V
    riscv64    - 64-bit RISC-V
    sparc      - Sparc
    sparcel    - Sparc LE
    sparcv9    - Sparc V9
    systemz    - SystemZ
    thumb      - Thumb
    thumbeb    - Thumb (big endian)
    wasm32     - WebAssembly 32-bit
    wasm64     - WebAssembly 64-bit
    x86        - 32-bit X86: Pentium-Pro and above
    x86-64     - 64-bit X86: EM64T and AMD64
    xcore      - XCore
$ clang --print-resource-dir
/home/raymond/toolchain/clang-12.0.0/lib/clang/12.0.0
$ ls /home/raymond/toolchain/clang-12.0.0/lib/clang/12.0.0/lib/linux/libclang_rt.builtins*
/home/raymond/toolchain/clang-12.0.0/lib/clang/12.0.0/lib/linux/libclang_rt.builtins-aarch64.a
 /home/raymond/toolchain/clang-12.0.0/lib/clang/12.0.0/lib/linux/libclang_rt.builtins-x86_64.a
/home/raymond/toolchain/clang-12.0.0/lib/clang/12.0.0/lib/linux/libclang_rt.builtins-armhf.a

Regards,
Raymond

> Thanks,
> --
> Jerome
>
> >  endif
> >  endif
> > +undefine MK_ARCH
> >  PLATFORM_LIBS += $(PLATFORM_LIBGCC)
> >
> >  ifdef CONFIG_CC_COVERAGE


More information about the U-Boot mailing list