Makefile 15.7 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)/virtex405-head.o: BOOTAFLAGS += -mcpu=405
49

50

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

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

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

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

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

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

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

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

$(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)

108 109 110 111 112 113
quiet_cmd_copy_libfdt = COPY    $@
      cmd_copy_libfdt = cp $< $@

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

114 115 116
$(obj)/empty.c:
	@touch $@

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

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

L
Linus Torvalds 已提交
124 125 126 127 128 129
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 $@ $<

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

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

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

145
hostprogs-y	:= addnote hack-coff mktree
L
Linus Torvalds 已提交
146

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

151 152
dtstree		:= $(srctree)/$(src)/dts

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

157 158
#############
# Bits for building various flavours of zImage
L
Linus Torvalds 已提交
159

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

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

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

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

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

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

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

# Board ports in arch/powerpc/platform/52xx/Kconfig
224 225 226
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200 lite5200.dtb
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200b lite5200b.dtb
image-$(CONFIG_PPC_MEDIA5200)		+= cuImage.media5200 media5200.dtb
227 228 229 230

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

# 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
240
image-$(CONFIG_ASP834x)			+= dtbImage.asp834x-redboot
241 242 243 244 245 246 247 248 249 250 251 252

# 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
253
image-$(CONFIG_TQM8548)			+= cuImage.tqm8548
254 255
image-$(CONFIG_TQM8555)			+= cuImage.tqm8555
image-$(CONFIG_TQM8560)			+= cuImage.tqm8560
256 257
image-$(CONFIG_SBC8548)			+= cuImage.sbc8548
image-$(CONFIG_SBC8560)			+= cuImage.sbc8560
258
image-$(CONFIG_KSI8560)			+= cuImage.ksi8560
259 260 261 262

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

267 268 269
# Board port in arch/powerpc/platform/amigaone/Kconfig
image-$(CONFIG_AMIGAONE)		+= cuImage.amigaone

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

276 277 278
# Allow extra targets to be added to the defconfig
image-y	+= $(subst ",,$(CONFIG_EXTRA_TARGETS))

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

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

295 296 297
$(obj)/zImage.%: vmlinux $(wrapperbits)
	$(call if_changed,wrap,$*)

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

302 303
$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/%.dtb
	$(call if_changed,wrap,$*,,$(obj)/$*.dtb)
304

305 306 307 308 309
# 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 $@

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

316 317 318
$(obj)/uImage: vmlinux $(wrapperbits)
	$(call if_changed,wrap,uboot)

319 320 321
$(obj)/cuImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)

322 323
$(obj)/cuImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb)
324

325 326 327 328 329 330
$(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)

331 332
$(obj)/treeImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
333

334 335 336 337
$(obj)/treeImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb)

# Rule to build device tree blobs
338 339
$(obj)/%.dtb: $(src)/dts/%.dts
	$(call cmd,dtc)
340

341 342 343 344 345
# If there isn't a platform selected then just strip the vmlinux.
ifeq (,$(image-y))
image-y := vmlinux.strip
endif

346 347 348 349 350
$(obj)/zImage:		$(addprefix $(obj)/, $(image-y))
	@rm -f $@; ln $< $@
$(obj)/zImage.initrd:	$(addprefix $(obj)/, $(initrd-y))
	@rm -f $@; ln $< $@

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

354
# anything not in $(targets)
355 356 357
clean-files += $(image-) $(initrd-) cuImage.* dtbImage.* treeImage.* \
	zImage zImage.initrd zImage.chrp zImage.coff zImage.holly \
	zImage.iseries zImage.miboot zImage.pmac zImage.pseries \
358
	zImage.maple simpleImage.* otheros.bld *.dtb
359 360 361 362 363 364

# 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))
365 366 367 368 369 370 371 372 373

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
374
dts-installed		:= $(patsubst $(dtstree)/%, $(DESTDIR)$(WRAPPER_DTSDIR)/%, $(wildcard $(dtstree)/*.dts))
375 376 377 378 379 380 381 382 383 384 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

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)