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? > > 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? Thanks, -- Jerome > endif > endif > +undefine MK_ARCH > PLATFORM_LIBS += $(PLATFORM_LIBGCC) > > ifdef CONFIG_CC_COVERAGE