Makefile 16.2 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13
# 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
14 15
#	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 已提交
16 17 18 19
#	To make it easier to setup a cross compiler,
#	CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE
#	in the toplevel makefile.

20
all: $(obj)/zImage
L
Linus Torvalds 已提交
21

22
BOOTCFLAGS    := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
23
		 -fno-strict-aliasing -Os -msoft-float -pipe \
24 25
		 -fomit-frame-pointer -fno-builtin -fPIC -nostdinc \
		 -isystem $(shell $(CROSS32CC) -print-file-name=include)
26
BOOTAFLAGS	:= -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
27

28 29 30 31
ifdef CONFIG_DEBUG_INFO
BOOTCFLAGS	+= -g
endif

32 33 34 35
ifeq ($(call cc-option-yn, -fstack-protector),y)
BOOTCFLAGS	+= -fno-stack-protector
endif

36
BOOTCFLAGS	+= -I$(obj) -I$(srctree)/$(obj)
L
Linus Torvalds 已提交
37

38
DTC_FLAGS	?= -p 1024
39

40 41
$(obj)/4xx.o: BOOTCFLAGS += -mcpu=405
$(obj)/ebony.o: BOOTCFLAGS += -mcpu=405
42
$(obj)/cuboot-hotfoot.o: BOOTCFLAGS += -mcpu=405
43 44
$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405
$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
45
$(obj)/cuboot-acadia.o: BOOTCFLAGS += -mcpu=405
46
$(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
47
$(obj)/treeboot-iss4xx.o: BOOTCFLAGS += -mcpu=405
48
$(obj)/treeboot-currituck.o: BOOTCFLAGS += -mcpu=405
49
$(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405
50

51

52 53
zlib       := inffast.c inflate.c inftrees.c
zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h
O
Olaf Hering 已提交
54 55
zliblinuxheader := zlib.h zconf.h zutil.h

56
$(addprefix $(obj)/,$(zlib) cuboot-c2k.o gunzip_util.o main.o prpmc2800.o): \
57
	$(addprefix $(obj)/,$(zliblinuxheader)) $(addprefix $(obj)/,$(zlibheader))
58

59 60 61
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

62
$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o epapr.o): \
63 64
	$(addprefix $(obj)/,$(libfdtheader))

65
src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \
66
		$(libfdt) libfdt-wrapper.c \
67
		ns16550.c serial.c simple_alloc.c div64.S util.S \
68
		gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \
69
		4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \
70
		cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \
71
		fsl-soc.c mpc8xx.c pq2.c ugecon.c
72
src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c \
73 74
		cuboot-ebony.c cuboot-hotfoot.c epapr.c treeboot-ebony.c \
		prpmc2800.c \
75
		ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \
76 77
		cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c \
		cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \
R
Remi Machet 已提交
78
		fixed-head.S ep88xc.c ep405.c cuboot-c2k.c \
79
		cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \
80
		cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \
81
		virtex405-head.S virtex.c redboot-83xx.c cuboot-sam440ep.c \
82
		cuboot-acadia.c cuboot-amigaone.c cuboot-kilauea.c \
83 84
		gamecube-head.S gamecube.c wii-head.S wii.c treeboot-iss4xx.c \
		treeboot-currituck.c
85
src-boot := $(src-wlib) $(src-plat) empty.c
O
Olaf Hering 已提交
86

L
Linus Torvalds 已提交
87 88
src-boot := $(addprefix $(obj)/, $(src-boot))
obj-boot := $(addsuffix .o, $(basename $(src-boot)))
89 90
obj-wlib := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-wlib))))
obj-plat := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-plat))))
O
Olaf Hering 已提交
91 92

quiet_cmd_copy_zlib = COPY    $@
A
Adrian Bunk 已提交
93
      cmd_copy_zlib = sed "s@__used@@;s@<linux/\([^>]*\).*@\"\1\"@" $< > $@
O
Olaf Hering 已提交
94 95

quiet_cmd_copy_zlibheader = COPY    $@
96
      cmd_copy_zlibheader = sed "s@<linux/\([^>]*\).*@\"\1\"@" $< > $@
O
Olaf Hering 已提交
97 98
# stddef.h for NULL
quiet_cmd_copy_zliblinuxheader = COPY    $@
99
      cmd_copy_zliblinuxheader = sed "s@<linux/string.h>@\"string.h\"@;s@<linux/kernel.h>@<stddef.h>@;s@<linux/\([^>]*\).*@\"\1\"@" $< > $@
O
Olaf Hering 已提交
100 101 102 103 104 105 106 107 108 109

$(addprefix $(obj)/,$(zlib)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
	$(call cmd,copy_zlib)

$(addprefix $(obj)/,$(zlibheader)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
	$(call cmd,copy_zlibheader)

$(addprefix $(obj)/,$(zliblinuxheader)): $(obj)/%: $(srctree)/include/linux/%
	$(call cmd,copy_zliblinuxheader)

110 111 112 113 114 115
quiet_cmd_copy_libfdt = COPY    $@
      cmd_copy_libfdt = cp $< $@

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

116 117 118
$(obj)/empty.c:
	@touch $@

119
$(obj)/zImage.lds $(obj)/zImage.coff.lds $(obj)/zImage.ps3.lds: $(obj)/%: $(srctree)/$(src)/%.S
120
	@cp $< $@
O
Olaf Hering 已提交
121

122
clean-files := $(zlib) $(zlibheader) $(zliblinuxheader) \
123
		$(libfdt) $(libfdtheader) \
124
		empty.c zImage.coff.lds zImage.ps3.lds zImage.lds
O
Olaf Hering 已提交
125

L
Linus Torvalds 已提交
126 127 128 129 130 131
quiet_cmd_bootcc = BOOTCC  $@
      cmd_bootcc = $(CROSS32CC) -Wp,-MD,$(depfile) $(BOOTCFLAGS) -c -o $@ $<

quiet_cmd_bootas = BOOTAS  $@
      cmd_bootas = $(CROSS32CC) -Wp,-MD,$(depfile) $(BOOTAFLAGS) -c -o $@ $<

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

135 136
$(obj-libfdt): $(obj)/%.o: $(srctree)/scripts/dtc/libfdt/%.c FORCE
	$(call if_changed_dep,bootcc)
M
Milton Miller 已提交
137
$(patsubst %.c,%.o, $(filter %.c, $(src-boot))): %.o: %.c FORCE
138
	$(Q)mkdir -p $(dir $@)
L
Linus Torvalds 已提交
139
	$(call if_changed_dep,bootcc)
M
Milton Miller 已提交
140
$(patsubst %.S,%.o, $(filter %.S, $(src-boot))): %.o: %.S FORCE
141
	$(Q)mkdir -p $(dir $@)
L
Linus Torvalds 已提交
142 143
	$(call if_changed_dep,bootas)

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

147
hostprogs-y	:= addnote hack-coff mktree
L
Linus Torvalds 已提交
148

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

153 154
dtstree		:= $(srctree)/$(src)/dts

155
wrapper		:=$(srctree)/$(src)/wrapper
156
wrapperbits	:= $(extra-y) $(addprefix $(obj)/,addnote hack-coff mktree) \
M
Milton Miller 已提交
157
			$(wrapper) FORCE
L
Linus Torvalds 已提交
158

159 160
#############
# Bits for building various flavours of zImage
L
Linus Torvalds 已提交
161

162
ifneq ($(CROSS32_COMPILE),)
163
CROSSWRAP := -C "$(CROSS32_COMPILE)"
164 165
else
ifneq ($(CROSS_COMPILE),)
166
CROSSWRAP := -C "$(CROSS_COMPILE)"
167 168
endif
endif
L
Linus Torvalds 已提交
169

170
# args (to if_changed): 1 = (this rule), 2 = platform, 3 = dts 4=dtb 5=initrd
171
quiet_cmd_wrap	= WRAP    $@
172 173
      cmd_wrap	=$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \
		$(if $3, -s $3)$(if $4, -d $4)$(if $5, -i $5) vmlinux
174

175
image-$(CONFIG_PPC_PSERIES)		+= zImage.pseries
176
image-$(CONFIG_PPC_POWERNV)		+= zImage.pseries
177
image-$(CONFIG_PPC_MAPLE)		+= zImage.maple
178
image-$(CONFIG_PPC_IBM_CELL_BLADE)	+= zImage.pseries
179
image-$(CONFIG_PPC_PS3)			+= dtbImage.ps3
I
Ishizaki Kou 已提交
180
image-$(CONFIG_PPC_CELLEB)		+= zImage.pseries
181
image-$(CONFIG_PPC_CELL_QPACE)		+= zImage.pseries
182
image-$(CONFIG_PPC_CHRP)		+= zImage.chrp
183
image-$(CONFIG_PPC_EFIKA)		+= zImage.chrp
184
image-$(CONFIG_PPC_PMAC)		+= zImage.pmac
185
image-$(CONFIG_PPC_HOLLY)		+= dtbImage.holly
186
image-$(CONFIG_PPC_PRPMC2800)		+= dtbImage.prpmc2800
187
image-$(CONFIG_PPC_ISERIES)		+= zImage.iseries
188
image-$(CONFIG_DEFAULT_UIMAGE)		+= uImage
189
image-$(CONFIG_EPAPR_BOOT)		+= zImage.epapr
190

191 192 193 194 195
#
# 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.
196
# Boards with newish u-boot firmware can use the uImage target above
197 198 199
#

# Board ports in arch/powerpc/platform/40x/Kconfig
200
image-$(CONFIG_EP405)			+= dtbImage.ep405
201
image-$(CONFIG_HOTFOOT)			+= cuImage.hotfoot
202
image-$(CONFIG_WALNUT)			+= treeImage.walnut
203
image-$(CONFIG_ACADIA)			+= cuImage.acadia
204
image-$(CONFIG_OBS600)			+= uImage.obs600
205 206

# Board ports in arch/powerpc/platform/44x/Kconfig
207
image-$(CONFIG_EBONY)			+= treeImage.ebony cuImage.ebony
J
Josh Boyer 已提交
208
image-$(CONFIG_BAMBOO)			+= treeImage.bamboo cuImage.bamboo
209
image-$(CONFIG_SAM440EP)		+= cuImage.sam440ep
210
image-$(CONFIG_SEQUOIA)			+= cuImage.sequoia
211
image-$(CONFIG_RAINIER)			+= cuImage.rainier
212
image-$(CONFIG_TAISHAN)			+= cuImage.taishan
213
image-$(CONFIG_KATMAI)			+= cuImage.katmai
214
image-$(CONFIG_WARP)			+= cuImage.warp
215
image-$(CONFIG_YOSEMITE)		+= cuImage.yosemite
216 217
image-$(CONFIG_ISS4xx)			+= treeImage.iss4xx \
					   treeImage.iss4xx-mpic
218
image-$(CONFIG_CURRITUCK)			+= treeImage.currituck
219

220
# Board ports in arch/powerpc/platform/8xx/Kconfig
221 222
image-$(CONFIG_MPC86XADS)		+= cuImage.mpc866ads
image-$(CONFIG_MPC885ADS)		+= cuImage.mpc885ads
223
image-$(CONFIG_PPC_EP88XC)		+= dtbImage.ep88xc
224
image-$(CONFIG_PPC_ADDER875)		+= cuImage.adder875-uboot \
225
					   dtbImage.adder875-redboot
226 227

# Board ports in arch/powerpc/platform/52xx/Kconfig
228 229 230
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200 lite5200.dtb
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200b lite5200b.dtb
image-$(CONFIG_PPC_MEDIA5200)		+= cuImage.media5200 media5200.dtb
231 232 233 234

# Board ports in arch/powerpc/platform/82xx/Kconfig
image-$(CONFIG_MPC8272_ADS)		+= cuImage.mpc8272ads
image-$(CONFIG_PQ2FADS)			+= cuImage.pq2fads
235
image-$(CONFIG_EP8248E)			+= dtbImage.ep8248e
236 237 238 239 240 241 242 243

# 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
244
image-$(CONFIG_ASP834x)			+= dtbImage.asp834x-redboot
245 246 247 248 249 250 251 252 253 254 255 256

# 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 \
					   cuImage.mpc8548cds \
					   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
257
image-$(CONFIG_TQM8548)			+= cuImage.tqm8548
258 259
image-$(CONFIG_TQM8555)			+= cuImage.tqm8555
image-$(CONFIG_TQM8560)			+= cuImage.tqm8560
260 261
image-$(CONFIG_SBC8548)			+= cuImage.sbc8548
image-$(CONFIG_SBC8560)			+= cuImage.sbc8560
262
image-$(CONFIG_KSI8560)			+= cuImage.ksi8560
263 264 265 266

# Board ports in arch/powerpc/platform/embedded6xx/Kconfig
image-$(CONFIG_STORCENTER)		+= cuImage.storcenter
image-$(CONFIG_MPC7448HPC2)		+= cuImage.mpc7448hpc2
R
Remi Machet 已提交
267
image-$(CONFIG_PPC_C2K)			+= cuImage.c2k
268
image-$(CONFIG_GAMECUBE)		+= dtbImage.gamecube
A
Albert Herranz 已提交
269
image-$(CONFIG_WII)			+= dtbImage.wii
270

271 272 273
# Board port in arch/powerpc/platform/amigaone/Kconfig
image-$(CONFIG_AMIGAONE)		+= cuImage.amigaone

274 275
# For 32-bit powermacs, build the COFF and miboot images
# as well as the ELF images.
276 277 278 279
ifeq ($(CONFIG_PPC32),y)
image-$(CONFIG_PPC_PMAC)	+= zImage.coff zImage.miboot
endif

280 281 282
# Allow extra targets to be added to the defconfig
image-y	+= $(subst ",,$(CONFIG_EXTRA_TARGETS))

M
Milton Miller 已提交
283
initrd-  := $(patsubst zImage%, zImage.initrd%, $(image-n) $(image-))
284
initrd-y := $(patsubst zImage%, zImage.initrd%, \
285
		$(patsubst dtbImage%, dtbImage.initrd%, \
286 287
		$(patsubst simpleImage%, simpleImage.initrd%, \
		$(patsubst treeImage%, treeImage.initrd%, $(image-y)))))
288
initrd-y := $(filter-out $(image-y), $(initrd-y))
M
Milton Miller 已提交
289
targets	+= $(image-y) $(initrd-y)
290

291 292 293 294 295
$(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).
296 297
$(obj)/zImage.initrd.%: vmlinux $(wrapperbits)
	$(call if_changed,wrap,$*,,,$(obj)/ramdisk.image.gz)
298

299 300 301
$(obj)/zImage.%: vmlinux $(wrapperbits)
	$(call if_changed,wrap,$*)

302
# dtbImage% - a dtbImage is a zImage with an embedded device tree blob
303 304
$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(obj)/%.dtb
	$(call if_changed,wrap,$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
305

306 307
$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/%.dtb
	$(call if_changed,wrap,$*,,$(obj)/$*.dtb)
308

309 310 311 312 313
# 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 $@

314 315
# The iseries hypervisor won't take an ET_DYN executable, so this
# changes the type (byte 17) in the file to ET_EXEC (2).
316 317
$(obj)/zImage.iseries: vmlinux
	$(STRIP) -s -R .comment $< -o $@
318
	printf "\x02" | dd of=$@ conv=notrunc bs=1 seek=17
319

320 321 322
$(obj)/uImage: vmlinux $(wrapperbits)
	$(call if_changed,wrap,uboot)

323 324 325 326 327 328
$(obj)/uImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,uboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)

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

329 330 331
$(obj)/cuImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)

332 333
$(obj)/cuImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb)
334

335 336 337 338 339 340
$(obj)/simpleImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)

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

341 342
$(obj)/treeImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
343

344 345 346 347
$(obj)/treeImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb)

# Rule to build device tree blobs
348 349
$(obj)/%.dtb: $(src)/dts/%.dts FORCE
	$(call if_changed_dep,dtc)
350

351 352 353 354 355
# If there isn't a platform selected then just strip the vmlinux.
ifeq (,$(image-y))
image-y := vmlinux.strip
endif

356 357 358 359 360
$(obj)/zImage:		$(addprefix $(obj)/, $(image-y))
	@rm -f $@; ln $< $@
$(obj)/zImage.initrd:	$(addprefix $(obj)/, $(initrd-y))
	@rm -f $@; ln $< $@

A
Akinobu Mita 已提交
361
install: $(CONFIGURE) $(addprefix $(obj)/, $(image-y))
362
	sh -x $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" vmlinux System.map "$(INSTALL_PATH)" $^
363

364
# anything not in $(targets)
365 366 367
clean-files += $(image-) $(initrd-) cuImage.* dtbImage.* treeImage.* \
	zImage zImage.initrd zImage.chrp zImage.coff zImage.holly \
	zImage.iseries zImage.miboot zImage.pmac zImage.pseries \
368
	zImage.maple simpleImage.* otheros.bld *.dtb
369 370 371 372 373 374

# clean up files cached by wrapper
clean-kernel := vmlinux.strip vmlinux.bin
clean-kernel += $(addsuffix .gz,$(clean-kernel))
# If not absolute clean-files are relative to $(obj).
clean-files += $(addprefix $(objtree)/, $(clean-kernel))
375 376 377 378 379 380 381 382 383

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
384
dts-installed		:= $(patsubst $(dtstree)/%, $(DESTDIR)$(WRAPPER_DTSDIR)/%, $(wildcard $(dtstree)/*.dts))
385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422

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)