Makefile 18.8 KB
Newer Older
1
# SPDX-License-Identifier: GPL-2.0
L
Linus Torvalds 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14
# 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
#
# NOTE:	this code is built for 32 bit in ELF32 format even though
#	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.
L
Linus Torvalds 已提交
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
L
Linus Torvalds 已提交
22

23
compress-$(CONFIG_KERNEL_GZIP) := CONFIG_KERNEL_GZIP
24
compress-$(CONFIG_KERNEL_XZ)   := CONFIG_KERNEL_XZ
25

26
BOOTCFLAGS    := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
27
		 -fno-strict-aliasing -Os -msoft-float -pipe \
28
		 -fomit-frame-pointer -fno-builtin -fPIC -nostdinc \
29 30
		 -D$(compress-y)

31
BOOTCC := $(CC)
32 33
ifdef CONFIG_PPC64_BOOT_WRAPPER
BOOTCFLAGS	+= -m64
34 35 36 37 38
else
BOOTCFLAGS	+= -m32
ifdef CROSS32_COMPILE
    BOOTCC := $(CROSS32_COMPILE)gcc
endif
39
endif
40 41 42

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

43 44
ifdef CONFIG_CPU_BIG_ENDIAN
BOOTCFLAGS	+= -mbig-endian
45 46 47
else
BOOTCFLAGS	+= -mlittle-endian
BOOTCFLAGS	+= $(call cc-option,-mabi=elfv2)
48 49
endif

50
BOOTAFLAGS	:= -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
51

52 53 54 55
ifdef CONFIG_DEBUG_INFO
BOOTCFLAGS	+= -g
endif

56 57 58 59
ifeq ($(call cc-option-yn, -fstack-protector),y)
BOOTCFLAGS	+= -fno-stack-protector
endif

60
BOOTCFLAGS	+= -I$(objtree)/$(obj) -I$(srctree)/$(obj)
L
Linus Torvalds 已提交
61

62
DTC_FLAGS	?= -p 1024
63

64 65
$(obj)/4xx.o: BOOTCFLAGS += -mcpu=405
$(obj)/ebony.o: BOOTCFLAGS += -mcpu=405
66
$(obj)/cuboot-hotfoot.o: BOOTCFLAGS += -mcpu=405
67 68
$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405
$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
69
$(obj)/cuboot-acadia.o: BOOTCFLAGS += -mcpu=405
70
$(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
71
$(obj)/treeboot-iss4xx.o: BOOTCFLAGS += -mcpu=405
72
$(obj)/treeboot-currituck.o: BOOTCFLAGS += -mcpu=405
73
$(obj)/treeboot-akebono.o: BOOTCFLAGS += -mcpu=405
74
$(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405
75

76 77 78 79 80 81 82 83 84
# 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
85 86 87
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
88

89 90 91 92 93 94 95 96 97
$(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)): \
98 99
	$(addprefix $(obj)/,$(zliblinuxheader-y)) \
	$(addprefix $(obj)/,$(zlibheader-y))
100

101 102 103
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

104 105
$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o epapr.o opal.o \
	treeboot-akebono.o treeboot-currituck.o treeboot-iss4xx.o): \
106 107
	$(addprefix $(obj)/,$(libfdtheader))

108
src-wlib-y := string.S crt0.S stdio.c decompress.c main.c \
109
		$(libfdt) libfdt-wrapper.c \
110
		ns16550.c serial.c simple_alloc.c div64.S util.S \
111
		elf_util.c $(zlib-y) devtree.c stdlib.c \
112
		oflib.c ofconsole.c cuboot.c
113

114
src-wlib-$(CONFIG_PPC_MPC52XX) += mpc52xx-psc.c
115
src-wlib-$(CONFIG_PPC64_BOOT_WRAPPER) += opal-calls.S opal.c
116 117 118
ifndef CONFIG_PPC64_BOOT_WRAPPER
src-wlib-y += crtsavres.S
endif
119 120
src-wlib-$(CONFIG_40x) += 4xx.c planetcore.c
src-wlib-$(CONFIG_44x) += 4xx.c ebony.c bamboo.c
121
src-wlib-$(CONFIG_PPC_8xx) += mpc8xx.c planetcore.c fsl-soc.c
122
src-wlib-$(CONFIG_PPC_82xx) += pq2.c fsl-soc.c planetcore.c
123
src-wlib-$(CONFIG_EMBEDDED6xx) += mpsc.c mv64x60.c mv64x60_i2c.c ugecon.c fsl-soc.c
124
src-wlib-$(CONFIG_XILINX_VIRTEX) += uartlite.c
125
src-wlib-$(CONFIG_CPM) += cpm-serial.c
126

127
src-plat-y := of.c epapr.c
128 129 130 131 132 133 134 135 136 137
src-plat-$(CONFIG_40x) += fixed-head.S ep405.c cuboot-hotfoot.c \
				treeboot-walnut.c cuboot-acadia.c \
				cuboot-kilauea.c simpleboot.c \
				virtex405-head.S virtex.c
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 \
138
				treeboot-akebono.c \
139
				simpleboot.c fixed-head.S virtex.c
140
src-plat-$(CONFIG_PPC_8xx) += cuboot-8xx.c fixed-head.S ep88xc.c redboot-8xx.c
141 142 143 144 145 146 147
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 \
					cuboot-c2k.c gamecube-head.S \
					gamecube.c wii-head.S wii.c holly.c \
148
					fixed-head.S mvme5100.c
149 150
src-plat-$(CONFIG_AMIGAONE) += cuboot-amigaone.c
src-plat-$(CONFIG_PPC_PS3) += ps3-head.S ps3-hvcall.S ps3.c
151
src-plat-$(CONFIG_EPAPR_BOOT) += epapr.c epapr-wrapper.c
152 153 154
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
155
src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c
156 157 158

src-wlib := $(sort $(src-wlib-y))
src-plat := $(sort $(src-plat-y))
159
src-boot := $(src-wlib) $(src-plat) empty.c
O
Olaf Hering 已提交
160

L
Linus Torvalds 已提交
161 162
src-boot := $(addprefix $(obj)/, $(src-boot))
obj-boot := $(addsuffix .o, $(basename $(src-boot)))
163 164
obj-wlib := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-wlib))))
obj-plat := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-plat))))
165
obj-plat: $(libfdt)
O
Olaf Hering 已提交
166

O
Oliver O'Halloran 已提交
167 168
quiet_cmd_copy_kern_src = COPY    $@
      cmd_copy_kern_src = sed -f $(srctree)/arch/powerpc/boot/fixup-headers.sed $< > $@
O
Olaf Hering 已提交
169

170
$(addprefix $(obj)/,$(zlib-y)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
O
Oliver O'Halloran 已提交
171
	$(call cmd,copy_kern_src)
O
Olaf Hering 已提交
172

173
$(addprefix $(obj)/,$(zlibheader-y)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
O
Oliver O'Halloran 已提交
174
	$(call cmd,copy_kern_src)
O
Olaf Hering 已提交
175

176
$(addprefix $(obj)/,$(zliblinuxheader-y)): $(obj)/%: $(srctree)/include/linux/%
O
Oliver O'Halloran 已提交
177
	$(call cmd,copy_kern_src)
O
Olaf Hering 已提交
178

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

182 183 184 185 186 187
quiet_cmd_copy_libfdt = COPY    $@
      cmd_copy_libfdt = cp $< $@

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

188
$(obj)/empty.c:
189
	$(Q)touch $@
190

191
$(obj)/zImage.coff.lds $(obj)/zImage.ps3.lds : $(obj)/%: $(srctree)/$(src)/%.S
192
	$(Q)cp $< $@
O
Olaf Hering 已提交
193

194
clean-files := $(zlib-) $(zlibheader-) $(zliblinuxheader-) \
195
		$(zlib-decomp-) $(libfdt) $(libfdtheader) \
196
		empty.c zImage.coff.lds zImage.ps3.lds zImage.lds
O
Olaf Hering 已提交
197

L
Linus Torvalds 已提交
198
quiet_cmd_bootcc = BOOTCC  $@
199
      cmd_bootcc = $(BOOTCC) -Wp,-MD,$(depfile) $(BOOTCFLAGS) -c -o $@ $<
L
Linus Torvalds 已提交
200 201

quiet_cmd_bootas = BOOTAS  $@
202
      cmd_bootas = $(BOOTCC) -Wp,-MD,$(depfile) $(BOOTAFLAGS) -c -o $@ $<
L
Linus Torvalds 已提交
203

204
quiet_cmd_bootar = BOOTAR  $@
205
      cmd_bootar = $(CROSS32AR) -cr$(KBUILD_ARFLAGS) $@.$$$$ $(filter-out FORCE,$^); mv $@.$$$$ $@
G
Geoff Levand 已提交
206

207 208
$(obj-libfdt): $(obj)/%.o: $(srctree)/scripts/dtc/libfdt/%.c FORCE
	$(call if_changed_dep,bootcc)
M
Milton Miller 已提交
209
$(patsubst %.c,%.o, $(filter %.c, $(src-boot))): %.o: %.c FORCE
210
	$(Q)mkdir -p $(dir $@)
L
Linus Torvalds 已提交
211
	$(call if_changed_dep,bootcc)
M
Milton Miller 已提交
212
$(patsubst %.S,%.o, $(filter %.S, $(src-boot))): %.o: %.S FORCE
213
	$(Q)mkdir -p $(dir $@)
L
Linus Torvalds 已提交
214 215
	$(call if_changed_dep,bootas)

M
Milton Miller 已提交
216 217
$(obj)/wrapper.a: $(obj-wlib) FORCE
	$(call if_changed,bootar)
L
Linus Torvalds 已提交
218

219
hostprogs-y	:= addnote hack-coff mktree
L
Linus Torvalds 已提交
220

M
Milton Miller 已提交
221
targets		+= $(patsubst $(obj)/%,%,$(obj-boot) wrapper.a)
222
extra-y		:= $(obj)/wrapper.a $(obj-plat) $(obj)/empty.o \
223
		   $(obj)/zImage.lds $(obj)/zImage.coff.lds $(obj)/zImage.ps3.lds
224

225 226
dtstree		:= $(srctree)/$(src)/dts

227
wrapper		:=$(srctree)/$(src)/wrapper
228
wrapperbits	:= $(extra-y) $(addprefix $(obj)/,addnote hack-coff mktree) \
M
Milton Miller 已提交
229
			$(wrapper) FORCE
L
Linus Torvalds 已提交
230

231 232
#############
# Bits for building various flavours of zImage
L
Linus Torvalds 已提交
233

234
ifneq ($(CROSS32_COMPILE),)
235
CROSSWRAP := -C "$(CROSS32_COMPILE)"
236 237
else
ifneq ($(CROSS_COMPILE),)
238
CROSSWRAP := -C "$(CROSS_COMPILE)"
239 240
endif
endif
L
Linus Torvalds 已提交
241

242
compressor-$(CONFIG_KERNEL_GZIP) := gz
243
compressor-$(CONFIG_KERNEL_XZ)   := xz
244

245
# args (to if_changed): 1 = (this rule), 2 = platform, 3 = dts 4=dtb 5=initrd
246
quiet_cmd_wrap	= WRAP    $@
247 248 249
      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
250

251
image-$(CONFIG_PPC_PSERIES)		+= zImage.pseries
252
image-$(CONFIG_PPC_POWERNV)		+= zImage.pseries
253
image-$(CONFIG_PPC_MAPLE)		+= zImage.maple
254
image-$(CONFIG_PPC_IBM_CELL_BLADE)	+= zImage.pseries
255
image-$(CONFIG_PPC_PS3)			+= dtbImage.ps3
256
image-$(CONFIG_PPC_CHRP)		+= zImage.chrp
257
image-$(CONFIG_PPC_EFIKA)		+= zImage.chrp
258
image-$(CONFIG_PPC_PMAC)		+= zImage.pmac
259
image-$(CONFIG_PPC_HOLLY)		+= dtbImage.holly
260
image-$(CONFIG_DEFAULT_UIMAGE)		+= uImage
261
image-$(CONFIG_EPAPR_BOOT)		+= zImage.epapr
262

263 264 265 266 267
#
# 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.
268
# Boards with newish u-boot firmware can use the uImage target above
269 270 271
#

# Board ports in arch/powerpc/platform/40x/Kconfig
272
image-$(CONFIG_EP405)			+= dtbImage.ep405
273
image-$(CONFIG_HOTFOOT)			+= cuImage.hotfoot
274
image-$(CONFIG_WALNUT)			+= treeImage.walnut
275
image-$(CONFIG_ACADIA)			+= cuImage.acadia
276
image-$(CONFIG_OBS600)			+= uImage.obs600
277 278

# Board ports in arch/powerpc/platform/44x/Kconfig
279
image-$(CONFIG_EBONY)			+= treeImage.ebony cuImage.ebony
J
Josh Boyer 已提交
280
image-$(CONFIG_BAMBOO)			+= treeImage.bamboo cuImage.bamboo
281
image-$(CONFIG_SAM440EP)		+= cuImage.sam440ep
282
image-$(CONFIG_SEQUOIA)			+= cuImage.sequoia
283
image-$(CONFIG_RAINIER)			+= cuImage.rainier
284
image-$(CONFIG_TAISHAN)			+= cuImage.taishan
285
image-$(CONFIG_KATMAI)			+= cuImage.katmai
286
image-$(CONFIG_WARP)			+= cuImage.warp
287
image-$(CONFIG_YOSEMITE)		+= cuImage.yosemite
288 289
image-$(CONFIG_ISS4xx)			+= treeImage.iss4xx \
					   treeImage.iss4xx-mpic
290
image-$(CONFIG_CURRITUCK)			+= treeImage.currituck
291
image-$(CONFIG_AKEBONO)			+= treeImage.akebono
292

293
# Board ports in arch/powerpc/platform/8xx/Kconfig
294 295
image-$(CONFIG_MPC86XADS)		+= cuImage.mpc866ads
image-$(CONFIG_MPC885ADS)		+= cuImage.mpc885ads
296
image-$(CONFIG_PPC_EP88XC)		+= dtbImage.ep88xc
297
image-$(CONFIG_PPC_ADDER875)		+= cuImage.adder875-uboot \
298
					   dtbImage.adder875-redboot
299 300

# Board ports in arch/powerpc/platform/52xx/Kconfig
301 302 303
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200 lite5200.dtb
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200b lite5200b.dtb
image-$(CONFIG_PPC_MEDIA5200)		+= cuImage.media5200 media5200.dtb
304 305 306 307

# Board ports in arch/powerpc/platform/82xx/Kconfig
image-$(CONFIG_MPC8272_ADS)		+= cuImage.mpc8272ads
image-$(CONFIG_PQ2FADS)			+= cuImage.pq2fads
308
image-$(CONFIG_EP8248E)			+= dtbImage.ep8248e
309 310 311 312 313 314 315 316

# 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
317
image-$(CONFIG_ASP834x)			+= dtbImage.asp834x-redboot
318 319 320 321 322

# 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 \
323
					   cuImage.mpc8548cds_32b \
324 325 326 327 328 329
					   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
330
image-$(CONFIG_TQM8548)			+= cuImage.tqm8548
331 332
image-$(CONFIG_TQM8555)			+= cuImage.tqm8555
image-$(CONFIG_TQM8560)			+= cuImage.tqm8560
333
image-$(CONFIG_SBC8548)			+= cuImage.sbc8548
334
image-$(CONFIG_KSI8560)			+= cuImage.ksi8560
335

336 337 338
# Board ports in arch/powerpc/platform/86xx/Kconfig
image-$(CONFIG_MVME7100)                += dtbImage.mvme7100

339 340 341
# Board ports in arch/powerpc/platform/embedded6xx/Kconfig
image-$(CONFIG_STORCENTER)		+= cuImage.storcenter
image-$(CONFIG_MPC7448HPC2)		+= cuImage.mpc7448hpc2
R
Remi Machet 已提交
342
image-$(CONFIG_PPC_C2K)			+= cuImage.c2k
343
image-$(CONFIG_GAMECUBE)		+= dtbImage.gamecube
A
Albert Herranz 已提交
344
image-$(CONFIG_WII)			+= dtbImage.wii
345
image-$(CONFIG_MVME5100)		+= dtbImage.mvme5100
346

347 348 349
# Board port in arch/powerpc/platform/amigaone/Kconfig
image-$(CONFIG_AMIGAONE)		+= cuImage.amigaone

350 351
# For 32-bit powermacs, build the COFF and miboot images
# as well as the ELF images.
352 353 354 355
ifeq ($(CONFIG_PPC32),y)
image-$(CONFIG_PPC_PMAC)	+= zImage.coff zImage.miboot
endif

356 357 358
# Allow extra targets to be added to the defconfig
image-y	+= $(subst ",,$(CONFIG_EXTRA_TARGETS))

M
Michal Marek 已提交
359
initrd-  := $(patsubst zImage%, zImage.initrd%, $(image-))
360
initrd-y := $(patsubst zImage%, zImage.initrd%, \
361
		$(patsubst dtbImage%, dtbImage.initrd%, \
362 363
		$(patsubst simpleImage%, simpleImage.initrd%, \
		$(patsubst treeImage%, treeImage.initrd%, $(image-y)))))
364
initrd-y := $(filter-out $(image-y), $(initrd-y))
M
Milton Miller 已提交
365
targets	+= $(image-y) $(initrd-y)
366

367 368 369 370 371
$(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).
372
$(obj)/zImage.initrd.%: vmlinux $(wrapperbits) FORCE
373
	$(call if_changed,wrap,$*,,,$(obj)/ramdisk.image.gz)
374

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

378
# dtbImage% - a dtbImage is a zImage with an embedded device tree blob
379
$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(obj)/%.dtb FORCE
380
	$(call if_changed,wrap,$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
381

382
$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/%.dtb FORCE
383
	$(call if_changed,wrap,$*,,$(obj)/$*.dtb)
384

385 386 387 388 389
# 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 $@

390
$(obj)/uImage: vmlinux $(wrapperbits) FORCE
391 392
	$(call if_changed,wrap,uboot)

393
$(obj)/uImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE
394 395
	$(call if_changed,wrap,uboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)

396
$(obj)/uImage.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE
397 398
	$(call if_changed,wrap,uboot-$*,,$(obj)/$*.dtb)

399
$(obj)/cuImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE
400 401
	$(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)

402
$(obj)/cuImage.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE
403
	$(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb)
404

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

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

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

414
$(obj)/treeImage.%: vmlinux $(obj)/%.dtb $(wrapperbits) FORCE
415 416 417
	$(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb)

# Rule to build device tree blobs
418 419
$(obj)/%.dtb: $(src)/dts/%.dts FORCE
	$(call if_changed_dep,dtc)
420

421 422 423
$(obj)/%.dtb: $(src)/dts/fsl/%.dts FORCE
	$(call if_changed_dep,dtc)

424 425 426 427 428
# If there isn't a platform selected then just strip the vmlinux.
ifeq (,$(image-y))
image-y := vmlinux.strip
endif

429
$(obj)/zImage:		$(addprefix $(obj)/, $(image-y))
430
	$(Q)rm -f $@; ln $< $@
431
$(obj)/zImage.initrd:	$(addprefix $(obj)/, $(initrd-y))
432
	$(Q)rm -f $@; ln $< $@
433

434
# Only install the vmlinux
A
Akinobu Mita 已提交
435
install: $(CONFIGURE) $(addprefix $(obj)/, $(image-y))
436 437 438 439
	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))
440
	sh -x $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" vmlinux System.map "$(INSTALL_PATH)" $^
441

442
# anything not in $(targets)
443 444
clean-files += $(image-) $(initrd-) cuImage.* dtbImage.* treeImage.* \
	zImage zImage.initrd zImage.chrp zImage.coff zImage.holly \
445
	zImage.miboot zImage.pmac zImage.pseries \
446
	zImage.maple simpleImage.* otheros.bld
447 448

# clean up files cached by wrapper
449 450
clean-kernel-base := vmlinux.strip vmlinux.bin
clean-kernel := $(addsuffix .gz,$(clean-kernel-base))
451
clean-kernel += $(addsuffix .xz,$(clean-kernel-base))
452 453
# If not absolute clean-files are relative to $(obj).
clean-files += $(addprefix $(objtree)/, $(clean-kernel))
454 455 456 457 458 459 460 461 462

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))
hostprogs-installed	:= $(patsubst %, $(DESTDIR)$(WRAPPER_BINDIR)/%, $(hostprogs-y))
wrapper-installed	:= $(DESTDIR)$(WRAPPER_BINDIR)/wrapper
463
dts-installed		:= $(patsubst $(dtstree)/%, $(DESTDIR)$(WRAPPER_DTSDIR)/%, $(wildcard $(dtstree)/*.dts))
464 465 466 467 468 469 470 471 472 473 474 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

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)