Use LLVM LDD with clang

pull/730/head
Mattia Moffa 2026-04-03 17:40:00 +02:00
parent 9778552534
commit 8572e207f2
14 changed files with 21 additions and 34 deletions

View File

@ -42,6 +42,10 @@ OBJS:= \
./src/libwolfboot.o \
./hal/hal.o
ifeq ($(USE_CLANG),1)
OBJS+=./src/clang_sections.o
endif
ifeq ($(WOLFCRYPT_TZ_PSA),1)
OBJS+=./src/dice/dice.o
endif

View File

@ -1288,9 +1288,7 @@ ifeq ($(USE_CLANG),1)
CLANG_NEWLIB_INCLUDE?=$(abspath $(dir $(CLANG_LIBC_A))/../include)
CC=$(CLANG_DRIVER)
# Keep clang for compilation, but use the GNU linker driver so linker-script
# LMAs for RAM sections are preserved and objcopy does not emit sparse images.
LD=$(CLANG_GCC_NAME)
LD=$(CLANG_DRIVER) -fuse-ld=lld
AS=$(CLANG_DRIVER)
AR=$(CROSS_COMPILE)ar
OBJCOPY?=$(CROSS_COMPILE)objcopy
@ -1300,7 +1298,7 @@ ifeq ($(USE_CLANG),1)
CFLAGS+=-DWOLFSSL_NO_ATOMIC -DWOLFSSL_NO_ATOMICS
CFLAGS+=-Wno-unknown-attributes -Wno-error=unknown-attributes
CFLAGS+=-fno-unwind-tables -fno-asynchronous-unwind-tables
LSCRIPT_FLAGS+=-T $(abspath $(WOLFBOOT_ROOT)/hal/clang-discard.ld)
LDFLAGS+=-nostdlib
endif
ifeq ($(USE_GCC),1)

View File

@ -1,14 +0,0 @@
SECTIONS
{
/DISCARD/ :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
*(.eh_frame* .gcc_except_table*)
*(.preinit_array*)
*(.init_array*)
*(.fini_array*)
*(.ctors*)
*(.dtors*)
*(.jcr*)
}
}

View File

@ -30,7 +30,7 @@ SECTIONS
*(.ARM.exidx*)
} > FLASH
.gnu.sgstubs :
.gnu.sgstubs ORIGIN(FLASH_NSC) :
{
. += 0x400;
. = ALIGN(4);

View File

@ -30,7 +30,7 @@ SECTIONS
*(.ARM.exidx*)
} > FLASH
.gnu.sgstubs :
.gnu.sgstubs ORIGIN(FLASH_NSC) :
{
. += 0x400;
. = ALIGN(4);

View File

@ -30,7 +30,7 @@ SECTIONS
*(.ARM.exidx*)
} > FLASH
.gnu.sgstubs :
.gnu.sgstubs ORIGIN(FLASH_NSC) :
{
. += 0x400;
. = ALIGN(4);

View File

@ -29,7 +29,7 @@ SECTIONS
*(.ARM.exidx*)
} > FLASH
.gnu.sgstubs :
.gnu.sgstubs ORIGIN(FLASH_NSC) :
{
. += 0x400;
. = ALIGN(4);

View File

@ -29,7 +29,7 @@ SECTIONS
*(.ARM.exidx*)
} > FLASH
.gnu.sgstubs :
.gnu.sgstubs ORIGIN(FLASH_NSC) :
{
. += 0x400;
. = ALIGN(4);

View File

@ -102,7 +102,7 @@ SECTIONS
. = ALIGN(4);
} > FLASH
.gnu.sgstubs :
.gnu.sgstubs ORIGIN(FLASH_NSC) :
{
*(.gnu.sgstubs*) /* Secure Gateway stubs */
. = ALIGN(4);

View File

@ -25,7 +25,7 @@ SECTIONS
*(.ARM.exidx*)
} > FLASH
.gnu.sgstubs :
.gnu.sgstubs ORIGIN(FLASH_NSC) :
{
. = ALIGN(32);
*(.gnu.sgstubs*) /* Secure Gateway stubs */

View File

@ -25,7 +25,7 @@ SECTIONS
*(.ARM.exidx*)
} > FLASH
.gnu.sgstubs :
.gnu.sgstubs ORIGIN(FLASH_NSC) :
{
. += 0x400;
. = ALIGN(4);

View File

@ -25,7 +25,7 @@ SECTIONS
*(.ARM.exidx*)
} > FLASH
.gnu.sgstubs :
.gnu.sgstubs ORIGIN(FLASH_NSC) :
{
. += 0x400;
. = ALIGN(4);

View File

@ -102,10 +102,9 @@ LDFLAGS+=-T $(LSCRIPT) -Wl,-gc-sections -Wl,-Map=image.map -nostartfiles
# Setup default objcopy flags
OBJCOPY_FLAGS+=--gap-fill $(FILL_BYTE)
OBJCOPY_IMAGE_FLAGS?=
ifeq ($(USE_CLANG),1)
APP_OBJS+=clang_sections.o
APP_OBJS+=../src/clang_sections.o
endif
ifeq ($(DEBUG_UART),1)
@ -925,15 +924,15 @@ delta-extra-data:LDFLAGS=-Wl,-Map=image.map
image.bin: image.elf
@echo "\t[BIN] $@"
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) $(OBJCOPY_IMAGE_FLAGS) -O binary $^ $@
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) -O binary $^ $@
image.hex: image.elf
@echo "\t[HEX] $@"
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) $(OBJCOPY_IMAGE_FLAGS) -O ihex $^ $@
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) -O ihex $^ $@
image.srec: image.elf
@echo "\t[SREC] $@"
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) $(OBJCOPY_IMAGE_FLAGS) -O srec $^ $@
$(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) -O srec $^ $@
APP_OBJS := $(patsubst $(WOLFBOOT_LIB_WOLFSSL)/%, \
$(WOLFSSL_LOCAL_OBJDIR)/%, $(APP_OBJS))
@ -943,7 +942,7 @@ ifeq ($(ELF_FLASH_SCATTER),1)
SQUASHELF_TOOL = ../tools/squashelf/squashelf
image-orig.elf: $(APP_OBJS) $(LSCRIPT)
@echo "\t[LD] $@"
$(Q)$(LD) $(LDFLAGS) $(LSCRIPT_FLAGS) $(APP_OBJS) $(LIBS) $(OUTPUT_FLAG) $@
$(Q)$(LD) $(LDFLAGS) $(APP_OBJS) $(LIBS) $(OUTPUT_FLAG) $@
image.elf: image-orig.elf
@echo "\t[SQUASHELF] $@"
@ -952,7 +951,7 @@ else
# Default behavior when ELF_FLASH_SCATTER is not set
image.elf: $(APP_OBJS) $(LSCRIPT)
@echo "\t[LD] $@"
$(Q)$(LD) $(LDFLAGS) $(LSCRIPT_FLAGS) $(APP_OBJS) $(LIBS) $(OUTPUT_FLAG) $@
$(Q)$(LD) $(LDFLAGS) $(APP_OBJS) $(LIBS) $(OUTPUT_FLAG) $@
endif
standalone: image.bin