Makefile 19 KB
Newer Older
1
# SPDX-License-Identifier: GPL-2.0
Linus Torvalds's avatar
Linus Torvalds committed
2 3 4 5 6 7 8 9
# Makefile for making ELF bootable images for booting on CHRP
# using Open Firmware.
#
# Geert Uytterhoeven	September 1997
#
# Based on coffboot by Paul Mackerras
# Simplified for ppc64 by Todd Inglett
#
10
# NOTE:	this code may be built for 32 bit in ELF32 format even though
Linus Torvalds's avatar
Linus Torvalds committed
11 12 13 14
#	it packages a 64 bit kernel.  We do this to simplify the
#	bootloader and increase compatibility with OpenFirmware.
#
#	To this end we need to define BOOTCC, etc, as the tools
15 16
#	needed to build the 32 bit image.  That's normally the same
#	compiler for the rest of the kernel, with the -m32 flag added.
Linus Torvalds's avatar
Linus Torvalds committed
17 18 19 20
#	To make it easier to setup a cross compiler,
#	CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE
#	in the toplevel makefile.

21
all: $(obj)/zImage
Linus Torvalds's avatar
Linus Torvalds committed
22

23
ifdef CROSS32_COMPILE
24 25 26
ifdef CONFIG_CC_IS_CLANG
    BOOTCC := $(CROSS32_COMPILE)clang
else
27
    BOOTCC := $(CROSS32_COMPILE)gcc
28
endif
29 30 31 32 33 34
    BOOTAR := $(CROSS32_COMPILE)ar
else
    BOOTCC := $(CC)
    BOOTAR := $(AR)
endif

35
BOOTCFLAGS    := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
36
		 -fno-strict-aliasing -O2 -msoft-float -mno-altivec -mno-vsx \
37
		 -pipe -fomit-frame-pointer -fno-builtin -fPIC -nostdinc \
38
		 -include $(srctree)/include/linux/compiler_attributes.h \
39
		 $(LINUXINCLUDE)
40

41 42
ifdef CONFIG_PPC64_BOOT_WRAPPER
BOOTCFLAGS	+= -m64
43 44
else
BOOTCFLAGS	+= -m32
45
endif
46 47 48

BOOTCFLAGS	+= -isystem $(shell $(BOOTCC) -print-file-name=include)

49 50
ifdef CONFIG_CPU_BIG_ENDIAN
BOOTCFLAGS	+= -mbig-endian
51 52 53
else
BOOTCFLAGS	+= -mlittle-endian
BOOTCFLAGS	+= $(call cc-option,-mabi=elfv2)
54 55
endif

56
BOOTAFLAGS	:= -D__ASSEMBLY__ $(BOOTCFLAGS) -nostdinc
57

58
BOOTARFLAGS	:= -crD
59

60 61 62 63 64
ifdef CONFIG_CC_IS_CLANG
BOOTCFLAGS += $(CLANG_FLAGS)
BOOTAFLAGS += $(CLANG_FLAGS)
endif

65 66 67 68
ifdef CONFIG_DEBUG_INFO
BOOTCFLAGS	+= -g
endif

69 70 71 72
ifeq ($(call cc-option-yn, -fstack-protector),y)
BOOTCFLAGS	+= -fno-stack-protector
endif

73
BOOTCFLAGS	+= -I$(objtree)/$(obj) -I$(srctree)/$(obj)
Linus Torvalds's avatar
Linus Torvalds committed
74

75
DTC_FLAGS	?= -p 1024
76

77
$(obj)/4xx.o: BOOTCFLAGS += -mcpu=405
78
$(obj)/ebony.o: BOOTCFLAGS += -mcpu=440
79
$(obj)/cuboot-hotfoot.o: BOOTCFLAGS += -mcpu=405
80 81
$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=440
$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=440
82
$(obj)/cuboot-acadia.o: BOOTCFLAGS += -mcpu=405
83
$(obj)/treeboot-iss4xx.o: BOOTCFLAGS += -mcpu=405
84
$(obj)/treeboot-currituck.o: BOOTCFLAGS += -mcpu=405
85
$(obj)/treeboot-akebono.o: BOOTCFLAGS += -mcpu=405
86

87 88 89 90 91 92 93 94 95
# The pre-boot decompressors pull in a lot of kernel headers and other source
# files. This creates a bit of a dependency headache since we need to copy
# these files into the build dir, fix up any includes and ensure that dependent
# files are copied in the right order.

# these need to be seperate variables because they are copied out of different
# directories in the kernel tree. Sure you COULd merge them, but it's a
# cure-is-worse-than-disease situation.
zlib-decomp-$(CONFIG_KERNEL_GZIP) := decompress_inflate.c
96 97 98
zlib-$(CONFIG_KERNEL_GZIP) := inffast.c inflate.c inftrees.c
zlibheader-$(CONFIG_KERNEL_GZIP) := inffast.h inffixed.h inflate.h inftrees.h infutil.h
zliblinuxheader-$(CONFIG_KERNEL_GZIP) := zlib.h zconf.h zutil.h
99

100 101 102 103 104 105 106 107 108
$(addprefix $(obj)/, decompress.o): \
	$(addprefix $(obj)/,$(zlib-decomp-y))

$(addprefix $(obj)/, $(zlib-decomp-y)): \
	$(addprefix $(obj)/,$(zliblinuxheader-y)) \
	$(addprefix $(obj)/,$(zlibheader-y)) \
	$(addprefix $(obj)/,$(zlib-y))

$(addprefix $(obj)/,$(zlib-y)): \
109 110
	$(addprefix $(obj)/,$(zliblinuxheader-y)) \
	$(addprefix $(obj)/,$(zlibheader-y))
111

112 113 114
libfdt       := fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c
libfdtheader := fdt.h libfdt.h libfdt_internal.h

115 116
$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o epapr.o opal.o \
	treeboot-akebono.o treeboot-currituck.o treeboot-iss4xx.o): \
117 118
	$(addprefix $(obj)/,$(libfdtheader))

119
src-wlib-y := string.S crt0.S stdio.c decompress.c main.c \
120
		$(libfdt) libfdt-wrapper.c \
121
		ns16550.c serial.c simple_alloc.c div64.S util.S \
122
		elf_util.c $(zlib-y) devtree.c stdlib.c \
123
		oflib.c ofconsole.c cuboot.c
124

125
src-wlib-$(CONFIG_PPC_MPC52xx) += mpc52xx-psc.c
126
src-wlib-$(CONFIG_PPC64_BOOT_WRAPPER) += opal-calls.S opal.c
127 128 129
ifndef CONFIG_PPC64_BOOT_WRAPPER
src-wlib-y += crtsavres.S
endif
130 131
src-wlib-$(CONFIG_40x) += 4xx.c planetcore.c
src-wlib-$(CONFIG_44x) += 4xx.c ebony.c bamboo.c
132
src-wlib-$(CONFIG_PPC_8xx) += mpc8xx.c planetcore.c fsl-soc.c
133
src-wlib-$(CONFIG_PPC_82xx) += pq2.c fsl-soc.c planetcore.c
134
src-wlib-$(CONFIG_EMBEDDED6xx) += ugecon.c fsl-soc.c
135
src-wlib-$(CONFIG_CPM) += cpm-serial.c
136

137
src-plat-y := of.c epapr.c
138
src-plat-$(CONFIG_40x) += fixed-head.S cuboot-hotfoot.c \
139
				cuboot-acadia.c \
140
				cuboot-kilauea.c simpleboot.c
141 142 143 144 145 146
src-plat-$(CONFIG_44x) += treeboot-ebony.c cuboot-ebony.c treeboot-bamboo.c \
				cuboot-bamboo.c cuboot-sam440ep.c \
				cuboot-sequoia.c cuboot-rainier.c \
				cuboot-taishan.c cuboot-katmai.c \
				cuboot-warp.c cuboot-yosemite.c \
				treeboot-iss4xx.c treeboot-currituck.c \
147
				treeboot-akebono.c \
148
				simpleboot.c fixed-head.S
149
src-plat-$(CONFIG_PPC_8xx) += cuboot-8xx.c fixed-head.S ep88xc.c redboot-8xx.c
150 151 152 153 154
src-plat-$(CONFIG_PPC_MPC52xx) += cuboot-52xx.c
src-plat-$(CONFIG_PPC_82xx) += cuboot-pq2.c fixed-head.S ep8248e.c cuboot-824x.c
src-plat-$(CONFIG_PPC_83xx) += cuboot-83xx.c fixed-head.S redboot-83xx.c
src-plat-$(CONFIG_FSL_SOC_BOOKE) += cuboot-85xx.c cuboot-85xx-cpm2.c
src-plat-$(CONFIG_EMBEDDED6xx) += cuboot-pq2.c cuboot-mpc7448hpc2.c \
155 156
					gamecube-head.S gamecube.c \
					wii-head.S wii.c holly.c \
157
					fixed-head.S mvme5100.c
158 159
src-plat-$(CONFIG_AMIGAONE) += cuboot-amigaone.c
src-plat-$(CONFIG_PPC_PS3) += ps3-head.S ps3-hvcall.S ps3.c
160
src-plat-$(CONFIG_EPAPR_BOOT) += epapr.c epapr-wrapper.c
161 162 163
src-plat-$(CONFIG_PPC_PSERIES) += pseries-head.S
src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S
src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S
164
src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c
165 166 167

src-wlib := $(sort $(src-wlib-y))
src-plat := $(sort $(src-plat-y))
168
src-boot := $(src-wlib) $(src-plat) empty.c
169

Linus Torvalds's avatar
Linus Torvalds committed
170 171
src-boot := $(addprefix $(obj)/, $(src-boot))
obj-boot := $(addsuffix .o, $(basename $(src-boot)))
172 173
obj-wlib := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-wlib))))
obj-plat := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-plat))))
174
obj-plat: $(libfdt)
175

176 177
quiet_cmd_copy_kern_src = COPY    $@
      cmd_copy_kern_src = sed -f $(srctree)/arch/powerpc/boot/fixup-headers.sed $< > $@
178

179
$(addprefix $(obj)/,$(zlib-y)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
180
	$(call cmd,copy_kern_src)
181

182
$(addprefix $(obj)/,$(zlibheader-y)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
183
	$(call cmd,copy_kern_src)
184

185
$(addprefix $(obj)/,$(zliblinuxheader-y)): $(obj)/%: $(srctree)/include/linux/%
186
	$(call cmd,copy_kern_src)
187

188 189 190
$(addprefix $(obj)/,$(zlib-decomp-y)): $(obj)/%: $(srctree)/lib/%
	$(call cmd,copy_kern_src)

191 192 193 194 195 196
quiet_cmd_copy_libfdt = COPY    $@
      cmd_copy_libfdt = cp $< $@

$(addprefix $(obj)/,$(libfdt) $(libfdtheader)): $(obj)/%: $(srctree)/scripts/dtc/libfdt/%
	$(call cmd,copy_libfdt)

197
$(obj)/empty.c:
198
	$(Q)touch $@
199

200
$(obj)/zImage.coff.lds $(obj)/zImage.ps3.lds : $(obj)/%: $(srctree)/$(src)/%.S
201
	$(Q)cp $< $@
202

203
clean-files := $(zlib-) $(zlibheader-) $(zliblinuxheader-) \
204
		$(zlib-decomp-) $(libfdt) $(libfdtheader) \
205
		empty.c zImage.coff.lds zImage.ps3.lds zImage.lds
206

Linus Torvalds's avatar
Linus Torvalds committed
207
quiet_cmd_bootcc = BOOTCC  $@
208
      cmd_bootcc = $(BOOTCC) -Wp,-MD,$(depfile) $(BOOTCFLAGS) -c -o $@ $<
Linus Torvalds's avatar
Linus Torvalds committed
209 210

quiet_cmd_bootas = BOOTAS  $@
211
      cmd_bootas = $(BOOTCC) -Wp,-MD,$(depfile) $(BOOTAFLAGS) -c -o $@ $<
Linus Torvalds's avatar
Linus Torvalds committed
212

213
quiet_cmd_bootar = BOOTAR  $@
214
      cmd_bootar = $(BOOTAR) $(BOOTARFLAGS) $@.$$$$ $(real-prereqs); mv $@.$$$$ $@
215

216 217
$(obj-libfdt): $(obj)/%.o: $(srctree)/scripts/dtc/libfdt/%.c FORCE
	$(call if_changed_dep,bootcc)
Milton Miller's avatar
Milton Miller committed
218
$(patsubst %.c,%.o, $(filter %.c, $(src-boot))): %.o: %.c FORCE
219
	$(Q)mkdir -p $(dir $@)
Linus Torvalds's avatar
Linus Torvalds committed
220
	$(call if_changed_dep,bootcc)
Milton Miller's avatar
Milton Miller committed
221
$(patsubst %.S,%.o, $(filter %.S, $(src-boot))): %.o: %.S FORCE
222
	$(Q)mkdir -p $(dir $@)
Linus Torvalds's avatar
Linus Torvalds committed
223 224
	$(call if_changed_dep,bootas)

Milton Miller's avatar
Milton Miller committed
225 226
$(obj)/wrapper.a: $(obj-wlib) FORCE
	$(call if_changed,bootar)
Linus Torvalds's avatar
Linus Torvalds committed
227

228
hostprogs	:= addnote hack-coff mktree
Linus Torvalds's avatar
Linus Torvalds committed
229

230
targets		+= $(patsubst $(obj)/%,%,$(obj-boot) wrapper.a) zImage.lds
231
extra-y		:= $(obj)/wrapper.a $(obj-plat) $(obj)/empty.o \
232
		   $(obj)/zImage.lds $(obj)/zImage.coff.lds $(obj)/zImage.ps3.lds
233

234 235
dtstree		:= $(srctree)/$(src)/dts

236
wrapper		:=$(srctree)/$(src)/wrapper
237
wrapperbits	:= $(extra-y) $(addprefix $(obj)/,addnote hack-coff mktree) \
Milton Miller's avatar
Milton Miller committed
238
			$(wrapper) FORCE
Linus Torvalds's avatar
Linus Torvalds committed
239

240 241
#############
# Bits for building various flavours of zImage
Linus Torvalds's avatar
Linus Torvalds committed
242

243
ifneq ($(CROSS32_COMPILE),)
244
CROSSWRAP := -C "$(CROSS32_COMPILE)"
245 246
else
ifneq ($(CROSS_COMPILE),)
247
CROSSWRAP := -C "$(CROSS_COMPILE)"
248 249
endif
endif
Linus Torvalds's avatar
Linus Torvalds committed
250

251
compressor-$(CONFIG_KERNEL_GZIP) := gz
252
compressor-$(CONFIG_KERNEL_XZ)   := xz
253
compressor-$(CONFIG_KERNEL_LZMA)   := lzma
254
compressor-$(CONFIG_KERNEL_LZO) := lzo
255

256
# args (to if_changed): 1 = (this rule), 2 = platform, 3 = dts 4=dtb 5=initrd
257
quiet_cmd_wrap	= WRAP    $@
258 259 260
      cmd_wrap	=$(CONFIG_SHELL) $(wrapper) -Z $(compressor-y) -c -o $@ -p $2 \
		$(CROSSWRAP) $(if $3, -s $3)$(if $4, -d $4)$(if $5, -i $5) \
		vmlinux
261

262
image-$(CONFIG_PPC_PSERIES)		+= zImage.pseries
263
image-$(CONFIG_PPC_POWERNV)		+= zImage.pseries
264
image-$(CONFIG_PPC_MAPLE)		+= zImage.maple
265
image-$(CONFIG_PPC_IBM_CELL_BLADE)	+= zImage.pseries
266
image-$(CONFIG_PPC_PS3)			+= dtbImage.ps3
267
image-$(CONFIG_PPC_CHRP)		+= zImage.chrp
268
image-$(CONFIG_PPC_EFIKA)		+= zImage.chrp
269
image-$(CONFIG_PPC_PMAC)		+= zImage.pmac
270
image-$(CONFIG_PPC_HOLLY)		+= dtbImage.holly
271
image-$(CONFIG_DEFAULT_UIMAGE)		+= uImage
272
image-$(CONFIG_EPAPR_BOOT)		+= zImage.epapr
273

274 275 276 277 278
#
# Targets which embed a device tree blob
#
# Theses are default targets to build images which embed device tree blobs.
# They are only required on boards which do not have FDT support in firmware.
279
# Boards with newish u-boot firmware can use the uImage target above
280 281 282
#

# Board ports in arch/powerpc/platform/40x/Kconfig
283
image-$(CONFIG_HOTFOOT)			+= cuImage.hotfoot
284
image-$(CONFIG_ACADIA)			+= cuImage.acadia
285
image-$(CONFIG_OBS600)			+= uImage.obs600
286 287

# Board ports in arch/powerpc/platform/44x/Kconfig
288
image-$(CONFIG_EBONY)			+= treeImage.ebony cuImage.ebony
289
image-$(CONFIG_BAMBOO)			+= treeImage.bamboo cuImage.bamboo
290
image-$(CONFIG_SAM440EP)		+= cuImage.sam440ep
291
image-$(CONFIG_SEQUOIA)			+= cuImage.sequoia
292
image-$(CONFIG_RAINIER)			+= cuImage.rainier
293
image-$(CONFIG_TAISHAN)			+= cuImage.taishan
294
image-$(CONFIG_KATMAI)			+= cuImage.katmai
295
image-$(CONFIG_WARP)			+= cuImage.warp
296
image-$(CONFIG_YOSEMITE)		+= cuImage.yosemite
297 298
image-$(CONFIG_ISS4xx)			+= treeImage.iss4xx \
					   treeImage.iss4xx-mpic
299
image-$(CONFIG_CURRITUCK)			+= treeImage.currituck
300
image-$(CONFIG_AKEBONO)			+= treeImage.akebono
301

302
# Board ports in arch/powerpc/platform/8xx/Kconfig
303 304
image-$(CONFIG_MPC86XADS)		+= cuImage.mpc866ads
image-$(CONFIG_MPC885ADS)		+= cuImage.mpc885ads
305
image-$(CONFIG_PPC_EP88XC)		+= dtbImage.ep88xc
306
image-$(CONFIG_PPC_ADDER875)		+= cuImage.adder875-uboot \
307
					   dtbImage.adder875-redboot
308 309

# Board ports in arch/powerpc/platform/52xx/Kconfig
310 311 312
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200b
image-$(CONFIG_PPC_MEDIA5200)		+= cuImage.media5200
313 314 315 316

# Board ports in arch/powerpc/platform/82xx/Kconfig
image-$(CONFIG_MPC8272_ADS)		+= cuImage.mpc8272ads
image-$(CONFIG_PQ2FADS)			+= cuImage.pq2fads
317
image-$(CONFIG_EP8248E)			+= dtbImage.ep8248e
318 319 320 321 322 323 324 325

# Board ports in arch/powerpc/platform/83xx/Kconfig
image-$(CONFIG_MPC832x_MDS)		+= cuImage.mpc832x_mds
image-$(CONFIG_MPC832x_RDB)		+= cuImage.mpc832x_rdb
image-$(CONFIG_MPC834x_ITX)		+= cuImage.mpc8349emitx \
					   cuImage.mpc8349emitxgp
image-$(CONFIG_MPC834x_MDS)		+= cuImage.mpc834x_mds
image-$(CONFIG_MPC836x_MDS)		+= cuImage.mpc836x_mds
326
image-$(CONFIG_ASP834x)			+= dtbImage.asp834x-redboot
327 328 329 330 331

# Board ports in arch/powerpc/platform/85xx/Kconfig
image-$(CONFIG_MPC8540_ADS)		+= cuImage.mpc8540ads
image-$(CONFIG_MPC8560_ADS)		+= cuImage.mpc8560ads
image-$(CONFIG_MPC85xx_CDS)		+= cuImage.mpc8541cds \
332
					   cuImage.mpc8548cds_32b \
333 334 335 336 337 338
					   cuImage.mpc8555cds
image-$(CONFIG_MPC85xx_MDS)		+= cuImage.mpc8568mds
image-$(CONFIG_MPC85xx_DS)		+= cuImage.mpc8544ds \
					   cuImage.mpc8572ds
image-$(CONFIG_TQM8540)			+= cuImage.tqm8540
image-$(CONFIG_TQM8541)			+= cuImage.tqm8541
339
image-$(CONFIG_TQM8548)			+= cuImage.tqm8548
340 341
image-$(CONFIG_TQM8555)			+= cuImage.tqm8555
image-$(CONFIG_TQM8560)			+= cuImage.tqm8560
342
image-$(CONFIG_SBC8548)			+= cuImage.sbc8548
343
image-$(CONFIG_KSI8560)			+= cuImage.ksi8560
344

345 346 347
# Board ports in arch/powerpc/platform/86xx/Kconfig
image-$(CONFIG_MVME7100)                += dtbImage.mvme7100

348 349 350
# Board ports in arch/powerpc/platform/embedded6xx/Kconfig
image-$(CONFIG_STORCENTER)		+= cuImage.storcenter
image-$(CONFIG_MPC7448HPC2)		+= cuImage.mpc7448hpc2
351
image-$(CONFIG_GAMECUBE)		+= dtbImage.gamecube
352
image-$(CONFIG_WII)			+= dtbImage.wii
353
image-$(CONFIG_MVME5100)		+= dtbImage.mvme5100
354

355 356 357
# Board port in arch/powerpc/platform/amigaone/Kconfig
image-$(CONFIG_AMIGAONE)		+= cuImage.amigaone

358 359
# For 32-bit powermacs, build the COFF and miboot images
# as well as the ELF images.
360
ifdef CONFIG_PPC32
361 362 363
image-$(CONFIG_PPC_PMAC)	+= zImage.coff zImage.miboot
endif

364 365 366
# Allow extra targets to be added to the defconfig
image-y	+= $(subst ",,$(CONFIG_EXTRA_TARGETS))

367
initrd-  := $(patsubst zImage%, zImage.initrd%, $(image-))
368
initrd-y := $(patsubst zImage%, zImage.initrd%, \
369
		$(patsubst dtbImage%, dtbImage.initrd%, \
370 371
		$(patsubst simpleImage%, simpleImage.initrd%, \
		$(patsubst treeImage%, treeImage.initrd%, $(image-y)))))
372
initrd-y := $(filter-out $(image-y), $(initrd-y))
Milton Miller's avatar
Milton Miller committed
373
targets	+= $(image-y) $(initrd-y)
374 375
targets += $(foreach x, dtbImage uImage cuImage simpleImage treeImage, \
		$(patsubst $(x).%, dts/%.dtb, $(filter $(x).%, $(image-y))))
376 377
targets += $(foreach x, dtbImage uImage cuImage simpleImage treeImage, \
		$(patsubst $(x).%, dts/fsl/%.dtb, $(filter $(x).%, $(image-y))))
378

379 380 381 382 383
$(addprefix $(obj)/, $(initrd-y)): $(obj)/ramdisk.image.gz

# Don't put the ramdisk on the pattern rule; when its missing make will try
# the pattern rule with less dependencies that also matches (even with the
# hard dependency listed).
384
$(obj)/zImage.initrd.%: vmlinux $(wrapperbits) FORCE
385
	$(call if_changed,wrap,$*,,,$(obj)/ramdisk.image.gz)
386

387
$(addprefix $(obj)/, $(sort $(filter zImage.%, $(image-y)))): vmlinux $(wrapperbits) FORCE
388
	$(call if_changed,wrap,$(subst $(obj)/zImage.,,$@))
389

390
# dtbImage% - a dtbImage is a zImage with an embedded device tree blob
391 392
$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(obj)/dts/%.dtb FORCE
	$(call if_changed,wrap,$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz)
393

394 395
$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/dts/%.dtb FORCE
	$(call if_changed,wrap,$*,,$(obj)/dts/$*.dtb)
396

397 398 399 400 401
# This cannot be in the root of $(src) as the zImage rule always adds a $(obj)
# prefix
$(obj)/vmlinux.strip: vmlinux
	$(STRIP) -s -R .comment $< -o $@

402
$(obj)/uImage: vmlinux $(wrapperbits) FORCE
403 404
	$(call if_changed,wrap,uboot)

405 406
$(obj)/uImage.initrd.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE
	$(call if_changed,wrap,uboot-$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz)
407

408 409
$(obj)/uImage.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE
	$(call if_changed,wrap,uboot-$*,,$(obj)/dts/$*.dtb)
410

411 412
$(obj)/cuImage.initrd.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE
	$(call if_changed,wrap,cuboot-$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz)
413

414 415
$(obj)/cuImage.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE
	$(call if_changed,wrap,cuboot-$*,,$(obj)/dts/$*.dtb)
416

417 418
$(obj)/simpleImage.initrd.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE
	$(call if_changed,wrap,simpleboot-$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz)
419

420 421
$(obj)/simpleImage.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE
	$(call if_changed,wrap,simpleboot-$*,,$(obj)/dts/$*.dtb)
422

423 424
$(obj)/treeImage.initrd.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE
	$(call if_changed,wrap,treeboot-$*,,$(obj)/dts/$*.dtb,$(obj)/ramdisk.image.gz)
425

426 427
$(obj)/treeImage.%: vmlinux $(obj)/dts/%.dtb $(wrapperbits) FORCE
	$(call if_changed,wrap,treeboot-$*,,$(obj)/dts/$*.dtb)
428

429 430 431
# Needed for the above targets to work with dts/fsl/ files
$(obj)/dts/%.dtb: $(obj)/dts/fsl/%.dtb
	@cp $< $@
432

433 434 435 436 437
# If there isn't a platform selected then just strip the vmlinux.
ifeq (,$(image-y))
image-y := vmlinux.strip
endif

438
$(obj)/zImage:		$(addprefix $(obj)/, $(image-y))
439
	$(Q)rm -f $@; ln $< $@
440
$(obj)/zImage.initrd:	$(addprefix $(obj)/, $(initrd-y))
441
	$(Q)rm -f $@; ln $< $@
442

443
# Only install the vmlinux
Akinobu Mita's avatar
Akinobu Mita committed
444
install: $(CONFIGURE) $(addprefix $(obj)/, $(image-y))
445 446 447 448
	sh -x $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" vmlinux System.map "$(INSTALL_PATH)"

# Install the vmlinux and other built boot targets.
zInstall: $(CONFIGURE) $(addprefix $(obj)/, $(image-y))
449
	sh -x $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" vmlinux System.map "$(INSTALL_PATH)" $^
450

451 452
PHONY += install zInstall

453
# anything not in $(targets)
454 455
clean-files += $(image-) $(initrd-) cuImage.* dtbImage.* treeImage.* \
	zImage zImage.initrd zImage.chrp zImage.coff zImage.holly \
456
	zImage.miboot zImage.pmac zImage.pseries \
457
	zImage.maple simpleImage.* otheros.bld
458 459

# clean up files cached by wrapper
460 461
clean-kernel-base := vmlinux.strip vmlinux.bin
clean-kernel := $(addsuffix .gz,$(clean-kernel-base))
462
clean-kernel += $(addsuffix .xz,$(clean-kernel-base))
463 464
# If not absolute clean-files are relative to $(obj).
clean-files += $(addprefix $(objtree)/, $(clean-kernel))
465 466 467 468 469 470 471

WRAPPER_OBJDIR := /usr/lib/kernel-wrapper
WRAPPER_DTSDIR := /usr/lib/kernel-wrapper/dts
WRAPPER_BINDIR := /usr/sbin
INSTALL := install

extra-installed		:= $(patsubst $(obj)/%, $(DESTDIR)$(WRAPPER_OBJDIR)/%, $(extra-y))
472
hostprogs-installed	:= $(patsubst %, $(DESTDIR)$(WRAPPER_BINDIR)/%, $(hostprogs))
473
wrapper-installed	:= $(DESTDIR)$(WRAPPER_BINDIR)/wrapper
474
dts-installed		:= $(patsubst $(dtstree)/%, $(DESTDIR)$(WRAPPER_DTSDIR)/%, $(wildcard $(dtstree)/*.dts))
475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511

all-installed		:= $(extra-installed) $(hostprogs-installed) $(wrapper-installed) $(dts-installed)

quiet_cmd_mkdir           = MKDIR   $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
      cmd_mkdir           = mkdir -p $@

quiet_cmd_install	  = INSTALL $(patsubst $(DESTDIR)$(WRAPPER_OBJDIR)/%,%,$@)
      cmd_install	  = $(INSTALL)  -m0644 $(patsubst $(DESTDIR)$(WRAPPER_OBJDIR)/%,$(obj)/%,$@) $@

quiet_cmd_install_dts	  = INSTALL $(patsubst $(DESTDIR)$(WRAPPER_DTSDIR)/%,dts/%,$@)
      cmd_install_dts	  = $(INSTALL)  -m0644 $(patsubst $(DESTDIR)$(WRAPPER_DTSDIR)/%,$(srctree)/$(obj)/dts/%,$@) $@

quiet_cmd_install_exe	  = INSTALL $(patsubst $(DESTDIR)$(WRAPPER_BINDIR)/%,%,$@)
      cmd_install_exe	  = $(INSTALL)  -m0755 $(patsubst $(DESTDIR)$(WRAPPER_BINDIR)/%,$(obj)/%,$@) $@

quiet_cmd_install_wrapper = INSTALL $(patsubst $(DESTDIR)$(WRAPPER_BINDIR)/%,%,$@)
      cmd_install_wrapper = $(INSTALL)  -m0755 $(patsubst $(DESTDIR)$(WRAPPER_BINDIR)/%,$(srctree)/$(obj)/%,$@) $@ ;\
				sed -i $@ -e 's%^object=.*%object=$(WRAPPER_OBJDIR)%' \
					  -e 's%^objbin=.*%objbin=$(WRAPPER_BINDIR)%' \


$(DESTDIR)$(WRAPPER_OBJDIR) $(DESTDIR)$(WRAPPER_DTSDIR) $(DESTDIR)$(WRAPPER_BINDIR):
	$(call cmd,mkdir)

$(extra-installed)	: $(DESTDIR)$(WRAPPER_OBJDIR)/% : $(obj)/% | $(DESTDIR)$(WRAPPER_OBJDIR)
	$(call cmd,install)

$(hostprogs-installed)  : $(DESTDIR)$(WRAPPER_BINDIR)/% : $(obj)/% | $(DESTDIR)$(WRAPPER_BINDIR)
	$(call cmd,install_exe)

$(dts-installed)	: $(DESTDIR)$(WRAPPER_DTSDIR)/% : $(srctree)/$(obj)/dts/% | $(DESTDIR)$(WRAPPER_DTSDIR)
	$(call cmd,install_dts)

$(wrapper-installed): $(DESTDIR)$(WRAPPER_BINDIR) $(srctree)/$(obj)/wrapper | $(DESTDIR)$(WRAPPER_BINDIR)
	$(call cmd,install_wrapper)

$(obj)/bootwrapper_install: $(all-installed)