Hi Jerome, On Wed, 28 May 2025 at 04:25, Jerome Forissier <jerome.foriss...@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....@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