18c2ecf20Sopenharmony_ci#
28c2ecf20Sopenharmony_ci# This file is subject to the terms and conditions of the GNU General Public
38c2ecf20Sopenharmony_ci# License.
48c2ecf20Sopenharmony_ci#
58c2ecf20Sopenharmony_ci# Adapted for MIPS Pete Popov, Dan Malek
68c2ecf20Sopenharmony_ci#
78c2ecf20Sopenharmony_ci# Copyright (C) 1994 by Linus Torvalds
88c2ecf20Sopenharmony_ci# Adapted for PowerPC by Gary Thomas
98c2ecf20Sopenharmony_ci# modified by Cort (cort@cs.nmt.edu)
108c2ecf20Sopenharmony_ci#
118c2ecf20Sopenharmony_ci# Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University
128c2ecf20Sopenharmony_ci# Author: Wu Zhangjin <wuzhangjin@gmail.com>
138c2ecf20Sopenharmony_ci#
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ciinclude $(srctree)/arch/mips/Kbuild.platforms
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci# set the default size of the mallocing area for decompressing
188c2ecf20Sopenharmony_ciBOOT_HEAP_SIZE := 0x400000
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci# Disable Function Tracer
218c2ecf20Sopenharmony_ciKBUILD_CFLAGS := $(filter-out -pg, $(KBUILD_CFLAGS))
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ciKBUILD_CFLAGS := $(filter-out -fstack-protector, $(KBUILD_CFLAGS))
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_ci# Disable lq/sq in zboot
268c2ecf20Sopenharmony_ciifdef CONFIG_CPU_LOONGSON64
278c2ecf20Sopenharmony_ciKBUILD_CFLAGS := $(filter-out -march=loongson3a, $(KBUILD_CFLAGS)) -march=mips64r2
288c2ecf20Sopenharmony_ciendif
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ciKBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ -D__DISABLE_EXPORTS \
318c2ecf20Sopenharmony_ci	-DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull"
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ciKBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \
348c2ecf20Sopenharmony_ci	-DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \
358c2ecf20Sopenharmony_ci	-DKERNEL_ENTRY=$(VMLINUX_ENTRY_ADDRESS)
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in.
388c2ecf20Sopenharmony_ciKCOV_INSTRUMENT		:= n
398c2ecf20Sopenharmony_ciUBSAN_SANITIZE := n
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci# decompressor objects (linked with vmlinuz)
428c2ecf20Sopenharmony_civmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/bswapsi.o
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ciifdef CONFIG_DEBUG_ZBOOT
458c2ecf20Sopenharmony_civmlinuzobjs-$(CONFIG_DEBUG_ZBOOT)		   += $(obj)/dbg.o
468c2ecf20Sopenharmony_civmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o
478c2ecf20Sopenharmony_civmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART_PROM) += $(obj)/uart-prom.o
488c2ecf20Sopenharmony_civmlinuzobjs-$(CONFIG_MIPS_ALCHEMY)		   += $(obj)/uart-alchemy.o
498c2ecf20Sopenharmony_civmlinuzobjs-$(CONFIG_ATH79)			   += $(obj)/uart-ath79.o
508c2ecf20Sopenharmony_ciendif
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ciextra-y += uart-ath79.c
538c2ecf20Sopenharmony_ci$(obj)/uart-ath79.c: $(srctree)/arch/mips/ath79/early_printk.c
548c2ecf20Sopenharmony_ci	$(call cmd,shipped)
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_civmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ciextra-y += ashldi3.c
598c2ecf20Sopenharmony_ci$(obj)/ashldi3.c: $(obj)/%.c: $(srctree)/lib/%.c FORCE
608c2ecf20Sopenharmony_ci	$(call if_changed,shipped)
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ciextra-y += bswapsi.c
638c2ecf20Sopenharmony_ci$(obj)/bswapsi.c: $(obj)/%.c: $(srctree)/arch/mips/lib/%.c FORCE
648c2ecf20Sopenharmony_ci	$(call if_changed,shipped)
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_citargets := $(notdir $(vmlinuzobjs-y))
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_citargets += vmlinux.bin
698c2ecf20Sopenharmony_ciOBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S
708c2ecf20Sopenharmony_ci$(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE
718c2ecf20Sopenharmony_ci	$(call if_changed,objcopy)
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_citool_$(CONFIG_KERNEL_GZIP)    = gzip
748c2ecf20Sopenharmony_citool_$(CONFIG_KERNEL_BZIP2)   = bzip2
758c2ecf20Sopenharmony_citool_$(CONFIG_KERNEL_LZ4)     = lz4
768c2ecf20Sopenharmony_citool_$(CONFIG_KERNEL_LZMA)    = lzma
778c2ecf20Sopenharmony_citool_$(CONFIG_KERNEL_LZO)     = lzo
788c2ecf20Sopenharmony_citool_$(CONFIG_KERNEL_XZ)      = xzkern
798c2ecf20Sopenharmony_citool_$(CONFIG_KERNEL_ZSTD)    = zstd22
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_citargets += vmlinux.bin.z
828c2ecf20Sopenharmony_ci$(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE
838c2ecf20Sopenharmony_ci	$(call if_changed,$(tool_y))
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_citargets += piggy.o dummy.o
868c2ecf20Sopenharmony_ciOBJCOPYFLAGS_piggy.o := --add-section=.image=$(obj)/vmlinux.bin.z \
878c2ecf20Sopenharmony_ci			--set-section-flags=.image=contents,alloc,load,readonly,data
888c2ecf20Sopenharmony_ci$(obj)/piggy.o: $(obj)/dummy.o $(obj)/vmlinux.bin.z FORCE
898c2ecf20Sopenharmony_ci	$(call if_changed,objcopy)
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ciHOSTCFLAGS_calc_vmlinuz_load_addr.o += $(LINUXINCLUDE)
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci# Calculate the load address of the compressed kernel image
948c2ecf20Sopenharmony_cihostprogs := calc_vmlinuz_load_addr
958c2ecf20Sopenharmony_ci
968c2ecf20Sopenharmony_ciifneq ($(zload-y),)
978c2ecf20Sopenharmony_ciVMLINUZ_LOAD_ADDRESS := $(zload-y)
988c2ecf20Sopenharmony_cielse
998c2ecf20Sopenharmony_ciVMLINUZ_LOAD_ADDRESS = $(shell $(obj)/calc_vmlinuz_load_addr \
1008c2ecf20Sopenharmony_ci		$(obj)/vmlinux.bin $(LINKER_LOAD_ADDRESS))
1018c2ecf20Sopenharmony_ciendif
1028c2ecf20Sopenharmony_ciUIMAGE_LOADADDR = $(VMLINUZ_LOAD_ADDRESS)
1038c2ecf20Sopenharmony_ci
1048c2ecf20Sopenharmony_civmlinuzobjs-y += $(obj)/piggy.o
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ciquiet_cmd_zld = LD      $@
1078c2ecf20Sopenharmony_ci      cmd_zld = $(LD) $(KBUILD_LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T $< $(vmlinuzobjs-y) -o $@
1088c2ecf20Sopenharmony_ciquiet_cmd_strip = STRIP	  $@
1098c2ecf20Sopenharmony_ci      cmd_strip = $(STRIP) -s $@
1108c2ecf20Sopenharmony_civmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr
1118c2ecf20Sopenharmony_ci	$(call cmd,zld)
1128c2ecf20Sopenharmony_ci	$(call cmd,strip)
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ci#
1158c2ecf20Sopenharmony_ci# Some DECstations need all possible sections of an ECOFF executable
1168c2ecf20Sopenharmony_ci#
1178c2ecf20Sopenharmony_ciifdef CONFIG_MACH_DECSTATION
1188c2ecf20Sopenharmony_ci  e2eflag := -a
1198c2ecf20Sopenharmony_ciendif
1208c2ecf20Sopenharmony_ci
1218c2ecf20Sopenharmony_ci# elf2ecoff can only handle 32bit image
1228c2ecf20Sopenharmony_cihostprogs += ../elf2ecoff
1238c2ecf20Sopenharmony_ci
1248c2ecf20Sopenharmony_ciifdef CONFIG_32BIT
1258c2ecf20Sopenharmony_ci	VMLINUZ = vmlinuz
1268c2ecf20Sopenharmony_cielse
1278c2ecf20Sopenharmony_ci	VMLINUZ = vmlinuz.32
1288c2ecf20Sopenharmony_ciendif
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_ciquiet_cmd_32 = OBJCOPY $@
1318c2ecf20Sopenharmony_ci      cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@
1328c2ecf20Sopenharmony_civmlinuz.32: vmlinuz
1338c2ecf20Sopenharmony_ci	$(call cmd,32)
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ciquiet_cmd_ecoff = ECOFF	  $@
1368c2ecf20Sopenharmony_ci      cmd_ecoff = $< $(VMLINUZ) $@ $(e2eflag)
1378c2ecf20Sopenharmony_civmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ)
1388c2ecf20Sopenharmony_ci	$(call cmd,ecoff)
1398c2ecf20Sopenharmony_ci
1408c2ecf20Sopenharmony_ciOBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary
1418c2ecf20Sopenharmony_civmlinuz.bin: vmlinuz
1428c2ecf20Sopenharmony_ci	$(call cmd,objcopy)
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ciOBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec
1458c2ecf20Sopenharmony_civmlinuz.srec: vmlinuz
1468c2ecf20Sopenharmony_ci	$(call cmd,objcopy)
1478c2ecf20Sopenharmony_ci
1488c2ecf20Sopenharmony_ciuzImage.bin: vmlinuz.bin FORCE
1498c2ecf20Sopenharmony_ci	$(call if_changed,uimage,none)
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_ciclean-files += $(objtree)/vmlinuz
1528c2ecf20Sopenharmony_ciclean-files += $(objtree)/vmlinuz.32
1538c2ecf20Sopenharmony_ciclean-files += $(objtree)/vmlinuz.ecoff
1548c2ecf20Sopenharmony_ciclean-files += $(objtree)/vmlinuz.bin
1558c2ecf20Sopenharmony_ciclean-files += $(objtree)/vmlinuz.srec
156