Skip to content

Commit 6b12eec

Browse files
committed
make: treat empty LSCRIPT_IN as unset at every target default
Copilot review follow-up: ?= considers a defined-but-empty LSCRIPT_IN (stale LSCRIPT_IN?= line in .config, exported empty env var) already set, so it skipped every target-specific default and fell through to the last-resort hal/$(TARGET).ld - e.g. TARGET=stm32l5 TZEN=0 lost its hal/stm32l5-ns.ld layout. The strip-based last-resort check only fixed that one line, not the 32 target sites. Add the LSCRIPT_IN_DEFAULT helper in tools/config.mk (assigns only when LSCRIPT_IN is undefined or empty) and convert all 29 arch.mk, 2 board.mk and 1 stage1/Makefile sites to it.
1 parent 7f3236c commit 6b12eec

6 files changed

Lines changed: 42 additions & 34 deletions

File tree

‎Makefile‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@ SECURE_LDFLAGS:=
3939
LD_START_GROUP:=-Wl,--start-group
4040
LD_END_GROUP:=-Wl,--end-group
4141
# Linker script: capture the user value (command line, environment, .config)
42-
# here; target defaults in arch.mk/options.mk/board.mk use ?= so a user
43-
# value wins. Last-resort default is applied after options.mk below.
42+
# here; target defaults in arch.mk/options.mk/board.mk use the
43+
# LSCRIPT_IN_DEFAULT helper (see tools/config.mk), which only assigns when
44+
# LSCRIPT_IN is undefined or empty, so a user value wins. Last-resort
45+
# default is applied after options.mk below.
4446
LSCRIPT_IN_USER:=$(LSCRIPT_IN)
4547
L2SRAM_ADDR?=0xF8F00000
4648
V?=0

‎arch.mk‎

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ ifeq ($(ARCH),AARCH64)
109109
ZYNQMP_PSU_INIT_DIR?=hal/board/zynqmp
110110
CFLAGS+=-DWOLFBOOT_ZYNQMP_FSBL
111111
CFLAGS+=-Ihal/zynqmp -I$(ZYNQMP_PSU_INIT_DIR)
112-
LSCRIPT_IN?=hal/zynqmp_ocm.ld
112+
$(call LSCRIPT_IN_DEFAULT,hal/zynqmp_ocm.ld)
113113
OBJS+=hal/zynqmp_psu_shim.o
114114
OBJS+=hal/zynqmp_atf.o
115115
OBJS+=$(ZYNQMP_PSU_INIT_DIR)/psu_init_gpl.o
@@ -510,7 +510,7 @@ ifeq ($(ARCH),ARM)
510510
SPI_TARGET=stm32
511511
# Partition trailers in sectors 1-2, see hal/stm32f4.c
512512
ifeq ($(CUSTOM_PARTITION_TRAILER),1)
513-
LSCRIPT_IN?=hal/stm32f4-trailer.ld
513+
$(call LSCRIPT_IN_DEFAULT,hal/stm32f4-trailer.ld)
514514
endif
515515
endif
516516

@@ -682,7 +682,7 @@ ifeq ($(ARCH),ARM)
682682
WOLFBOOT_ORIGIN=0x0C000000
683683
else
684684
WOLFBOOT_ORIGIN=0x08000000
685-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
685+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
686686
endif
687687
endif
688688

@@ -694,7 +694,7 @@ ifeq ($(ARCH),ARM)
694694
WOLFBOOT_ORIGIN=0x0C000000
695695
else
696696
WOLFBOOT_ORIGIN=0x08000000
697-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
697+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
698698
endif
699699
SPI_TARGET=stm32
700700
endif
@@ -704,7 +704,7 @@ ifeq ($(ARCH),ARM)
704704
CFLAGS+=-Ihal
705705
ARCH_FLASH_OFFSET=0x08000000
706706
WOLFBOOT_ORIGIN=0x08000000
707-
LSCRIPT_IN?=hal/$(TARGET).ld
707+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET).ld)
708708
SPI_TARGET=stm32
709709
endif
710710

@@ -713,7 +713,7 @@ ifeq ($(ARCH),ARM)
713713
CFLAGS+=-Ihal
714714
ARCH_FLASH_OFFSET=0x08000000
715715
WOLFBOOT_ORIGIN=0x08000000
716-
LSCRIPT_IN?=hal/$(TARGET).ld
716+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET).ld)
717717
SPI_TARGET=stm32
718718
endif
719719

@@ -724,7 +724,7 @@ ifeq ($(ARCH),ARM)
724724
# reached through the Secure SBUS alias, which the HAL derives from it.
725725
ARCH_FLASH_OFFSET=0x12000000
726726
WOLFBOOT_ORIGIN=0x12000000
727-
LSCRIPT_IN?=hal/$(TARGET).ld
727+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET).ld)
728728
SPI_TARGET=psoc_c3
729729
# Board wiring. Defaults match the PSOC Control C3 evaluation kit; override
730730
# for another variant.
@@ -782,13 +782,13 @@ ifeq ($(ARCH),ARM)
782782
BOOTLOADER_PARTITION_SIZE=$$(( ($(WOLFBOOT_PARTITION_BOOT_ADDRESS) | 0x10000000) - $(WOLFBOOT_ORIGIN) - 0x40))
783783
endif
784784
ifeq ($(TZEN),1)
785-
LSCRIPT_IN?=hal/$(TARGET)-tz.ld
785+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-tz.ld)
786786
OBJS+=hal/psoc_e8_tz.o
787787
# wolfHSM NVM in the RRAM user area, Secure.
788788
WOLFBOOT_KEYVAULT_ADDRESS?=0x32040000
789789
WOLFBOOT_KEYVAULT_SIZE?=0x10000
790790
else
791-
LSCRIPT_IN?=hal/$(TARGET).ld
791+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET).ld)
792792
endif
793793
# Board wiring, defaulted for KIT_PSE84_AI.
794794
PSOC_E8_UART_SCB?=2
@@ -830,7 +830,7 @@ ifeq ($(ARCH),ARM)
830830
ARCH_FLASH_OFFSET=0x00000000
831831
WOLFBOOT_ORIGIN=0x00000000
832832
ifneq ($(TZEN),1)
833-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
833+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
834834
endif
835835
endif
836836

@@ -842,7 +842,7 @@ ifeq ($(ARCH),ARM)
842842
WOLFBOOT_ORIGIN=0x0C000000
843843
else
844844
WOLFBOOT_ORIGIN=0x08000000
845-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
845+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
846846
endif
847847
SPI_TARGET=stm32
848848
ifneq ($(DEBUG),0)
@@ -869,9 +869,9 @@ ifeq ($(ARCH),ARM)
869869
ARCH_FLASH_OFFSET=0x10000000
870870
WOLFBOOT_ORIGIN=0x10000000
871871
ifeq ($(TZEN),1)
872-
LSCRIPT_IN?=hal/$(TARGET).ld
872+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET).ld)
873873
else
874-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
874+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
875875
endif
876876
SPI_TARGET=raspberrypi_pico
877877
CFLAGS+=-DPICO_SDK_PATH=$(PICO_SDK_PATH)
@@ -1420,7 +1420,7 @@ ifeq ($(ARCH),RISCV64)
14201420
OBJS+=src/riscv_sbi.o
14211421
endif
14221422
# Use M-mode specific linker script
1423-
LSCRIPT_IN?=hal/$(TARGET)-m.ld
1423+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-m.ld)
14241424
# Boot mode 2: reserve the last eNVM page for the signed manifest the UBL
14251425
# stub verifies (hal/mpfs250-m.ld); `make wolfboot_envm_signed.bin` fills it.
14261426
ifeq ($(MPFS_ENVM_MANIFEST),1)
@@ -1458,7 +1458,7 @@ ifeq ($(ARCH),RISCV64)
14581458
CFLAGS+=-DWOLFBOOT_DUALBOOT
14591459
ifeq ($(MPFS_L2LIM),1)
14601460
# L2-LIM mode: wolfBoot in on-chip SRAM, loaded by HSS (no DDR)
1461-
LSCRIPT_IN?=hal/$(TARGET)-hss.ld
1461+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-hss.ld)
14621462
else
14631463
# DDR mode (default): full MMU and FDT support
14641464
CFLAGS+=-DMMU
@@ -1713,7 +1713,7 @@ endif
17131713
ifeq ($(TARGET),mcxw)
17141714
CORTEX_M33=1
17151715
ifneq ($(TZEN),1)
1716-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
1716+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
17171717
endif
17181718
CFLAGS+=\
17191719
-I$(MCUXPRESSO_DRIVERS) \
@@ -1766,7 +1766,7 @@ endif
17661766
ifeq ($(TARGET),mcxn)
17671767
CORTEX_M33=1
17681768
ifneq ($(TZEN),1)
1769-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
1769+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
17701770
endif
17711771
CFLAGS+=\
17721772
-I$(MCUXPRESSO_DRIVERS) \
@@ -1821,7 +1821,7 @@ ifeq ($(TARGET),rw612)
18211821
CORTEX_M33=1
18221822
ARCH_FLASH_OFFSET=0x08000000
18231823
ifneq ($(TZEN),1)
1824-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
1824+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
18251825
endif
18261826
MCUXPRESSO_FLASH_CONFIG?=$(MCUXPRESSO_PROJECT_TEMPLATE)/../flash_config
18271827
CFLAGS+=\
@@ -1862,13 +1862,13 @@ endif
18621862

18631863
ifeq ($(TARGET),nrf5340)
18641864
ifneq ($(TZEN), 1)
1865-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
1865+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
18661866
endif
18671867
endif
18681868

18691869
ifeq ($(TARGET),nrf54l)
18701870
ifneq ($(TZEN), 1)
1871-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
1871+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
18721872
endif
18731873
endif
18741874

@@ -1930,9 +1930,9 @@ ifeq ($(TARGET),imx_rt)
19301930
endif
19311931

19321932
ifeq ($(TARGET_IMX_HAB),1)
1933-
LSCRIPT_IN?=hal/$(TARGET)_hab.ld
1933+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)_hab.ld)
19341934
else
1935-
LSCRIPT_IN?=hal/$(TARGET).ld
1935+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET).ld)
19361936
endif
19371937

19381938
ifeq ($(MCUXPRESSO_CPU),MIMXRT1064DVL6A)
@@ -2255,7 +2255,7 @@ endif
22552255

22562256
ifeq ($(TARGET),lpc55s69)
22572257
ifneq ($(TZEN),1)
2258-
LSCRIPT_IN?=hal/$(TARGET)-ns.ld
2258+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET)-ns.ld)
22592259
endif
22602260
CFLAGS+=\
22612261
-I$(MCUXPRESSO_PROJECT_TEMPLATE) \
@@ -2463,9 +2463,9 @@ ifeq ("${FSP}", "1")
24632463
ifeq ($(filter-out $(STAGE1),1),)
24642464
# building stage1
24652465
ifeq ($(FSP_TGL), 1)
2466-
LSCRIPT_IN ?= ../hal/x86_fsp_tgl_stage1.ld
2466+
$(call LSCRIPT_IN_DEFAULT,../hal/x86_fsp_tgl_stage1.ld)
24672467
else
2468-
LSCRIPT_IN ?= ../hal/$(TARGET)_stage1.ld
2468+
$(call LSCRIPT_IN_DEFAULT,../hal/$(TARGET)_stage1.ld)
24692469
endif
24702470
# using ../wolfboot.map as stage1 is built from stage1 sub-directory
24712471
LDFLAGS = --defsym main=0x`nm ../wolfboot.elf | grep -w main | awk '{print $$1}'` \
@@ -2508,9 +2508,9 @@ ifeq ("${FSP}", "1")
25082508
else
25092509
# building wolfBoot
25102510
ifeq ($(FSP_TGL), 1)
2511-
LSCRIPT_IN ?= hal/x86_fsp_tgl.ld.in
2511+
$(call LSCRIPT_IN_DEFAULT,hal/x86_fsp_tgl.ld.in)
25122512
else
2513-
LSCRIPT_IN ?= hal/$(TARGET).ld.in
2513+
$(call LSCRIPT_IN_DEFAULT,hal/$(TARGET).ld.in)
25142514
endif
25152515
LDFLAGS = --gc-sections --entry=main -T $(LSCRIPT) -Map=wolfboot.map
25162516
CFLAGS += -fno-stack-protector -fno-PIC -fno-pie -mno-mmx -mno-sse -Os -DDEBUG_UART
@@ -3092,9 +3092,9 @@ ifeq ($(ARCH), AURIX)
30923092

30933093
# Linker scripts ship with the port, not in hal/.
30943094
ifeq ($(TARGET), aurix_tc4xx_csrm)
3095-
LSCRIPT_IN?=$(TC4_WB_DIR)/csrm/aurix_tc4xx_csrm.ld
3095+
$(call LSCRIPT_IN_DEFAULT,$(TC4_WB_DIR)/csrm/aurix_tc4xx_csrm.ld)
30963096
else
3097-
LSCRIPT_IN?=$(TC4_WB_DIR)/aurix_tc4xx.ld
3097+
$(call LSCRIPT_IN_DEFAULT,$(TC4_WB_DIR)/aurix_tc4xx.ld)
30983098
endif
30993099
CFLAGS += \
31003100
-I$(TC4_LLD_DIR) \

‎hal/boards/stm32wb_nucleo/board.mk‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
ARCH_FLASH_OFFSET=0x08000000
2-
LSCRIPT_IN?=hal/stm32wb.ld
2+
$(call LSCRIPT_IN_DEFAULT,hal/stm32wb.ld)
33

44
CFLAGS+=-DWHAL_CFG_NO_TIMEOUT
55

‎hal/boards/stm32wba55cg_nucleo/board.mk‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
ARCH_FLASH_OFFSET=0x08000000
2-
LSCRIPT_IN?=hal/stm32wba.ld
2+
$(call LSCRIPT_IN_DEFAULT,hal/stm32wba.ld)
33

44
CFLAGS+=-DWHAL_CFG_NO_TIMEOUT
55

‎stage1/Makefile‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ LSCRIPT_IN_USER:=$(LSCRIPT_IN)
2525
# boards use hal/x86_fsp_tgl_stage1.ld) set LSCRIPT_IN in arch.mk, so
2626
# only default when the per-target file (or its .ld.in template) exists.
2727
ifneq ($(wildcard ../hal/$(TARGET)_stage1.ld ../hal/$(TARGET)_stage1.ld.in),)
28-
LSCRIPT_IN?=../hal/$(TARGET)_stage1.ld
28+
$(call LSCRIPT_IN_DEFAULT,../hal/$(TARGET)_stage1.ld)
2929
endif
3030
LSCRIPT_FLAGS:=
3131
LD_START_GROUP:=-Wl,--start-group

‎tools/config.mk‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,9 @@ CONFIG_VARS:= ARCH TARGET SIGN HASH MCUXSDK MCUXPRESSO MCUXPRESSO_CPU MCUXPRESSO
171171
CERT_CHAIN_GEN_CA_HASH \
172172
CERT_CHAIN_NAME_CONSTRAINTS \
173173
ENCRYPT_CACHE
174+
175+
# ?= treats a defined-but-empty value as already set, so a stale
176+
# LSCRIPT_IN?= line in .config (or an exported empty env var) would skip
177+
# every target default. Assign $1 to LSCRIPT_IN only when it is undefined
178+
# or empty.
179+
LSCRIPT_IN_DEFAULT=$(if $(strip $(LSCRIPT_IN)),,$(eval LSCRIPT_IN:=$1))

0 commit comments

Comments
 (0)