1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# This file is subject to the terms and conditions of the GNU General Public 3*4882a593Smuzhiyun# License. 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# Adapted for MIPS Pete Popov, Dan Malek 6*4882a593Smuzhiyun# 7*4882a593Smuzhiyun# Copyright (C) 1994 by Linus Torvalds 8*4882a593Smuzhiyun# Adapted for PowerPC by Gary Thomas 9*4882a593Smuzhiyun# modified by Cort (cort@cs.nmt.edu) 10*4882a593Smuzhiyun# 11*4882a593Smuzhiyun# Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University 12*4882a593Smuzhiyun# Author: Wu Zhangjin <wuzhangjin@gmail.com> 13*4882a593Smuzhiyun# 14*4882a593Smuzhiyun 15*4882a593Smuzhiyuninclude $(srctree)/arch/mips/Kbuild.platforms 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun# set the default size of the mallocing area for decompressing 18*4882a593SmuzhiyunBOOT_HEAP_SIZE := 0x400000 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun# Disable Function Tracer 21*4882a593SmuzhiyunKBUILD_CFLAGS := $(filter-out -pg, $(KBUILD_CFLAGS)) 22*4882a593Smuzhiyun 23*4882a593SmuzhiyunKBUILD_CFLAGS := $(filter-out -fstack-protector, $(KBUILD_CFLAGS)) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun# Disable lq/sq in zboot 26*4882a593Smuzhiyunifdef CONFIG_CPU_LOONGSON64 27*4882a593SmuzhiyunKBUILD_CFLAGS := $(filter-out -march=loongson3a, $(KBUILD_CFLAGS)) -march=mips64r2 28*4882a593Smuzhiyunendif 29*4882a593Smuzhiyun 30*4882a593SmuzhiyunKBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ -D__DISABLE_EXPORTS \ 31*4882a593Smuzhiyun -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" 32*4882a593Smuzhiyun 33*4882a593SmuzhiyunKBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ 34*4882a593Smuzhiyun -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \ 35*4882a593Smuzhiyun -DKERNEL_ENTRY=$(VMLINUX_ENTRY_ADDRESS) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. 38*4882a593SmuzhiyunKCOV_INSTRUMENT := n 39*4882a593SmuzhiyunUBSAN_SANITIZE := n 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun# decompressor objects (linked with vmlinuz) 42*4882a593Smuzhiyunvmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/bswapsi.o 43*4882a593Smuzhiyun 44*4882a593Smuzhiyunifdef CONFIG_DEBUG_ZBOOT 45*4882a593Smuzhiyunvmlinuzobjs-$(CONFIG_DEBUG_ZBOOT) += $(obj)/dbg.o 46*4882a593Smuzhiyunvmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o 47*4882a593Smuzhiyunvmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART_PROM) += $(obj)/uart-prom.o 48*4882a593Smuzhiyunvmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o 49*4882a593Smuzhiyunvmlinuzobjs-$(CONFIG_ATH79) += $(obj)/uart-ath79.o 50*4882a593Smuzhiyunendif 51*4882a593Smuzhiyun 52*4882a593Smuzhiyunextra-y += uart-ath79.c 53*4882a593Smuzhiyun$(obj)/uart-ath79.c: $(srctree)/arch/mips/ath79/early_printk.c 54*4882a593Smuzhiyun $(call cmd,shipped) 55*4882a593Smuzhiyun 56*4882a593Smuzhiyunvmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o 57*4882a593Smuzhiyun 58*4882a593Smuzhiyunextra-y += ashldi3.c 59*4882a593Smuzhiyun$(obj)/ashldi3.c: $(obj)/%.c: $(srctree)/lib/%.c FORCE 60*4882a593Smuzhiyun $(call if_changed,shipped) 61*4882a593Smuzhiyun 62*4882a593Smuzhiyunextra-y += bswapsi.c 63*4882a593Smuzhiyun$(obj)/bswapsi.c: $(obj)/%.c: $(srctree)/arch/mips/lib/%.c FORCE 64*4882a593Smuzhiyun $(call if_changed,shipped) 65*4882a593Smuzhiyun 66*4882a593Smuzhiyuntargets := $(notdir $(vmlinuzobjs-y)) 67*4882a593Smuzhiyun 68*4882a593Smuzhiyuntargets += vmlinux.bin 69*4882a593SmuzhiyunOBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S 70*4882a593Smuzhiyun$(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE 71*4882a593Smuzhiyun $(call if_changed,objcopy) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyuntool_$(CONFIG_KERNEL_GZIP) = gzip 74*4882a593Smuzhiyuntool_$(CONFIG_KERNEL_BZIP2) = bzip2 75*4882a593Smuzhiyuntool_$(CONFIG_KERNEL_LZ4) = lz4 76*4882a593Smuzhiyuntool_$(CONFIG_KERNEL_LZMA) = lzma 77*4882a593Smuzhiyuntool_$(CONFIG_KERNEL_LZO) = lzo 78*4882a593Smuzhiyuntool_$(CONFIG_KERNEL_XZ) = xzkern 79*4882a593Smuzhiyuntool_$(CONFIG_KERNEL_ZSTD) = zstd22 80*4882a593Smuzhiyun 81*4882a593Smuzhiyuntargets += vmlinux.bin.z 82*4882a593Smuzhiyun$(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE 83*4882a593Smuzhiyun $(call if_changed,$(tool_y)) 84*4882a593Smuzhiyun 85*4882a593Smuzhiyuntargets += piggy.o dummy.o 86*4882a593SmuzhiyunOBJCOPYFLAGS_piggy.o := --add-section=.image=$(obj)/vmlinux.bin.z \ 87*4882a593Smuzhiyun --set-section-flags=.image=contents,alloc,load,readonly,data 88*4882a593Smuzhiyun$(obj)/piggy.o: $(obj)/dummy.o $(obj)/vmlinux.bin.z FORCE 89*4882a593Smuzhiyun $(call if_changed,objcopy) 90*4882a593Smuzhiyun 91*4882a593SmuzhiyunHOSTCFLAGS_calc_vmlinuz_load_addr.o += $(LINUXINCLUDE) 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun# Calculate the load address of the compressed kernel image 94*4882a593Smuzhiyunhostprogs := calc_vmlinuz_load_addr 95*4882a593Smuzhiyun 96*4882a593Smuzhiyunifneq ($(zload-y),) 97*4882a593SmuzhiyunVMLINUZ_LOAD_ADDRESS := $(zload-y) 98*4882a593Smuzhiyunelse 99*4882a593SmuzhiyunVMLINUZ_LOAD_ADDRESS = $(shell $(obj)/calc_vmlinuz_load_addr \ 100*4882a593Smuzhiyun $(obj)/vmlinux.bin $(LINKER_LOAD_ADDRESS)) 101*4882a593Smuzhiyunendif 102*4882a593SmuzhiyunUIMAGE_LOADADDR = $(VMLINUZ_LOAD_ADDRESS) 103*4882a593Smuzhiyun 104*4882a593Smuzhiyunvmlinuzobjs-y += $(obj)/piggy.o 105*4882a593Smuzhiyun 106*4882a593Smuzhiyunquiet_cmd_zld = LD $@ 107*4882a593Smuzhiyun cmd_zld = $(LD) $(KBUILD_LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T $< $(vmlinuzobjs-y) -o $@ 108*4882a593Smuzhiyunquiet_cmd_strip = STRIP $@ 109*4882a593Smuzhiyun cmd_strip = $(STRIP) -s $@ 110*4882a593Smuzhiyunvmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr 111*4882a593Smuzhiyun $(call cmd,zld) 112*4882a593Smuzhiyun $(call cmd,strip) 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun# 115*4882a593Smuzhiyun# Some DECstations need all possible sections of an ECOFF executable 116*4882a593Smuzhiyun# 117*4882a593Smuzhiyunifdef CONFIG_MACH_DECSTATION 118*4882a593Smuzhiyun e2eflag := -a 119*4882a593Smuzhiyunendif 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun# elf2ecoff can only handle 32bit image 122*4882a593Smuzhiyunhostprogs += ../elf2ecoff 123*4882a593Smuzhiyun 124*4882a593Smuzhiyunifdef CONFIG_32BIT 125*4882a593Smuzhiyun VMLINUZ = vmlinuz 126*4882a593Smuzhiyunelse 127*4882a593Smuzhiyun VMLINUZ = vmlinuz.32 128*4882a593Smuzhiyunendif 129*4882a593Smuzhiyun 130*4882a593Smuzhiyunquiet_cmd_32 = OBJCOPY $@ 131*4882a593Smuzhiyun cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@ 132*4882a593Smuzhiyunvmlinuz.32: vmlinuz 133*4882a593Smuzhiyun $(call cmd,32) 134*4882a593Smuzhiyun 135*4882a593Smuzhiyunquiet_cmd_ecoff = ECOFF $@ 136*4882a593Smuzhiyun cmd_ecoff = $< $(VMLINUZ) $@ $(e2eflag) 137*4882a593Smuzhiyunvmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ) 138*4882a593Smuzhiyun $(call cmd,ecoff) 139*4882a593Smuzhiyun 140*4882a593SmuzhiyunOBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary 141*4882a593Smuzhiyunvmlinuz.bin: vmlinuz 142*4882a593Smuzhiyun $(call cmd,objcopy) 143*4882a593Smuzhiyun 144*4882a593SmuzhiyunOBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec 145*4882a593Smuzhiyunvmlinuz.srec: vmlinuz 146*4882a593Smuzhiyun $(call cmd,objcopy) 147*4882a593Smuzhiyun 148*4882a593SmuzhiyunuzImage.bin: vmlinuz.bin FORCE 149*4882a593Smuzhiyun $(call if_changed,uimage,none) 150*4882a593Smuzhiyun 151*4882a593Smuzhiyunclean-files += $(objtree)/vmlinuz 152*4882a593Smuzhiyunclean-files += $(objtree)/vmlinuz.32 153*4882a593Smuzhiyunclean-files += $(objtree)/vmlinuz.ecoff 154*4882a593Smuzhiyunclean-files += $(objtree)/vmlinuz.bin 155*4882a593Smuzhiyunclean-files += $(objtree)/vmlinuz.srec 156