@@ -364,6 +364,7 @@ KERNEL_ELF_NAME = $(KERNEL_NAME).elf
364
364
KERNEL_BIN_NAME = $(KERNEL_NAME ) .bin
365
365
KERNEL_HEX_NAME = $(KERNEL_NAME ) .hex
366
366
KERNEL_STAT_NAME = $(KERNEL_NAME ) .stat
367
+ PREBUILT_KERNEL = $(KERNEL_NAME ) _prebuilt.elf
367
368
368
369
export SOC_FAMILY SOC_SERIES SOC_PATH SOC_NAME BOARD_NAME
369
370
export ARCH KERNEL_NAME KERNEL_ELF_NAME KERNEL_BIN_NAME KERNEL_HEX_NAME
@@ -852,13 +853,14 @@ $(KERNEL_NAME).lnk: $(zephyr-deps)
852
853
853
854
linker.cmd : $(zephyr-deps )
854
855
$(Q )$(CC ) -x assembler-with-cpp -nostdinc -undef -E -P \
855
- $(LDFLAG_LINKERCMD ) $(LD_TOOLCHAIN ) -I$(srctree ) /include \
856
- -I$(SOURCE_DIR ) \
857
- -I$(objtree ) /include/generated $(EXTRA_LINKER_CMD_OPT ) $(KBUILD_LDS ) -o $@
856
+ $(LDFLAG_LINKERCMD ) $(LD_TOOLCHAIN ) \
857
+ -I$(srctree ) /include -I$(SOURCE_DIR ) \
858
+ -I$(objtree ) /include/generated \
859
+ $(EXTRA_LINKER_CMD_OPT ) $(KBUILD_LDS ) -o $@
858
860
859
- PREBUILT_KERNEL = $(KERNEL_NAME ) _prebuilt.elf
860
861
861
- $(PREBUILT_KERNEL ) : $(zephyr-deps ) libzephyr.a $(KBUILD_ZEPHYR_APP ) $(app-y ) linker.cmd $(KERNEL_NAME ) .lnk
862
+ $(PREBUILT_KERNEL ) : $(zephyr-deps ) libzephyr.a $(KBUILD_ZEPHYR_APP ) $(app-y ) \
863
+ linker.cmd $(KERNEL_NAME ) .lnk
862
864
$(Q )$(CC ) -T linker.cmd @$(KERNEL_NAME ) .lnk -o $@
863
865
864
866
ASSERT_WARNING_STR := \
@@ -878,15 +880,39 @@ WARN_ABOUT_DEPRECATION := $(if $(CONFIG_BOARD_DEPRECATED),echo -e \
878
880
-n $(DEPRECATION_WARNING_STR ) ,true)
879
881
880
882
ifeq ($(ARCH ) ,x86)
881
- # X86 with its IDT has very special handling for interrupt tables
882
883
include $(srctree ) /arch/x86/Makefile.idt
883
- else ifeq ($(CONFIG_GEN_ISR_TABLES),y)
884
- # Logic for interrupt tables created by scripts/gen_isr_tables.py
884
+ endif
885
+
886
+ ifeq ($(CONFIG_GEN_ISR_TABLES ) ,y)
885
887
include $(srctree ) /arch/common/Makefile.gen_isr_tables
886
- else
888
+ endif
889
+
890
+ ifneq ($(GENERATED_KERNEL_OBJECT_FILES ) ,)
891
+
892
+ # Identical rule to linker.cmd, but we also define preprocessor LINKER_PASS2.
893
+ # For arches that place special metadata in $(PREBUILT_KERNEL) not intended
894
+ # for the final binary, it can be #ifndef'd around this.
895
+ linker-pass2.cmd : $(zephyr-deps )
896
+ $(Q )$(CC ) -x assembler-with-cpp -nostdinc -undef -E -P \
897
+ -DLINKER_PASS2 \
898
+ $(LDFLAG_LINKERCMD ) $(LD_TOOLCHAIN ) \
899
+ -I$(srctree ) /include -I$(SOURCE_DIR ) \
900
+ -I$(objtree ) /include/generated \
901
+ $(EXTRA_LINKER_CMD_OPT ) $(KBUILD_LDS ) -o $@
902
+
903
+ $(KERNEL_ELF_NAME ) : $(GENERATED_KERNEL_OBJECT_FILES ) linker-pass2.cmd
904
+ $(Q )$(CC ) -T linker-pass2.cmd $(GENERATED_KERNEL_OBJECT_FILES ) \
905
+ @$(KERNEL_NAME ) .lnk -o $@
906
+ $(Q )$(srctree ) /scripts/check_link_map.py $(KERNEL_NAME ) .map
907
+ @$(WARN_ABOUT_ASSERT )
908
+ @$(WARN_ABOUT_DEPRECATION )
909
+
910
+ else # GENERATED_KERNEL_OBJECT_FILES
911
+
887
912
# Otherwise, nothing to do, prebuilt kernel is the real one
888
913
$(KERNEL_ELF_NAME ) : $(PREBUILT_KERNEL )
889
- @cp $(PREBUILT_KERNEL ) $(KERNEL_ELF_NAME )
914
+ $(Q ) cp $(PREBUILT_KERNEL ) $(KERNEL_ELF_NAME )
915
+ $(Q )$(srctree ) /scripts/check_link_map.py $(KERNEL_NAME ) .map
890
916
@$(WARN_ABOUT_ASSERT )
891
917
@$(WARN_ABOUT_DEPRECATION )
892
918
endif
@@ -1066,7 +1092,8 @@ CLEAN_DIRS += $(MODVERDIR)
1066
1092
CLEAN_FILES += include/generated/generated_dts_board.h \
1067
1093
.old_version .tmp_System.map .tmp_version \
1068
1094
.tmp_* System.map *.lnk *.map *.elf *.lst \
1069
- *.bin *.hex *.stat *.strip staticIdt.o linker.cmd
1095
+ *.bin *.hex *.stat *.strip staticIdt.o linker.cmd \
1096
+ linker-pass2.cmd
1070
1097
1071
1098
# Directories & files removed with 'make mrproper'
1072
1099
MRPROPER_DIRS += bin include/config usr/include include/generated \
0 commit comments