@@ -582,6 +582,16 @@ ifeq ($(ARCH),RISCV)
582582 CFLAGS+=-march =rv32imac$(RISCV32_ZICSR )$(RISCV32_ZIFENCEI ) -mabi=ilp32 -mcmodel=medany
583583 # Linking: base march (no extension suffixes) for multilib lookup
584584 LDFLAGS+=-march =rv32imac -mabi=ilp32 -mcmodel=medany
585+ # Some prebuilt toolchains lack rv32imac/ilp32 multilib (only ship the
586+ # default rv32gc/ilp32d). Detect and fall back to -nostdlib with the
587+ # default-multilib libgcc.
588+ RISCV_LINK_TEST := $(shell echo "void _start(void) {}" | \
589+ $(CROSS_COMPILE ) gcc -march=rv32imac -mabi=ilp32 -nostartfiles \
590+ -x c - -o /dev/null 2>/dev/null && echo ok)
591+ ifneq ($(RISCV_LINK_TEST),ok)
592+ LDFLAGS+ =-nostdlib -Wl,--no-warn-mismatch
593+ LIBS+ =$(shell $(CROSS_COMPILE ) gcc -print-libgcc-file-name)
594+ endif
585595 MATH_OBJS += $(WOLFBOOT_LIB_WOLFSSL ) /wolfcrypt/src/sp_c32.o
586596
587597 # Prune unused functions and data
@@ -639,6 +649,14 @@ ifeq ($(ARCH),RISCV64)
639649 # E51 core: rv64imac (no FPU, no crypto extensions)
640650 CFLAGS+=-march =rv64imac$(RISCV64_ZICSR )$(RISCV64_ZIFENCEI ) -mabi=lp64 -mcmodel=medany
641651 LDFLAGS+=-march =rv64imac -mabi=lp64 -mcmodel=medany
652+ # Multilib fallback (see RISCV 32-bit section comment)
653+ RISCV_LINK_TEST := $(shell echo "void _start(void) {}" | \
654+ $(CROSS_COMPILE ) gcc -march=rv64imac -mabi=lp64 -nostartfiles \
655+ -x c - -o /dev/null 2>/dev/null && echo ok)
656+ ifneq ($(RISCV_LINK_TEST),ok)
657+ LDFLAGS+ =-nostdlib -Wl,--no-warn-mismatch
658+ LIBS+ =$(shell $(CROSS_COMPILE ) gcc -print-libgcc-file-name)
659+ endif
642660 else
643661 # U54 cores: rv64gc (with FPU)
644662 CFLAGS+=-march =rv64imafd$(RISCV64_ZICSR )$(RISCV64_ZIFENCEI ) -mabi=lp64d -mcmodel=medany
0 commit comments