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 39
DTS_FLAGS	?= -p 1024

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 61 62 63
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

$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o): \
	$(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
		cuboot-ebony.c cuboot-hotfoot.c treeboot-ebony.c prpmc2800.c \
73
		ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \
74 75
		cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c \
		cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \
R
Remi Machet 已提交
76
		fixed-head.S ep88xc.c ep405.c cuboot-c2k.c \
77
		cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \
78
		cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \
79
		virtex405-head.S virtex.c redboot-83xx.c cuboot-sam440ep.c \
80
		cuboot-acadia.c cuboot-amigaone.c cuboot-kilauea.c \
81
		gamecube-head.S gamecube.c wii-head.S wii.c treeboot-iss4xx.c
82
src-boot := $(src-wlib) $(src-plat) empty.c
O
Olaf Hering 已提交
83

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

264 265 266
# Board port in arch/powerpc/platform/amigaone/Kconfig
image-$(CONFIG_AMIGAONE)		+= cuImage.amigaone

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

273 274 275
# Allow extra targets to be added to the defconfig
image-y	+= $(subst ",,$(CONFIG_EXTRA_TARGETS))

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

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

292 293 294
$(obj)/zImage.%: vmlinux $(wrapperbits)
	$(call if_changed,wrap,$*)

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

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

302 303 304 305 306
# 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 $@

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

313 314 315
$(obj)/uImage: vmlinux $(wrapperbits)
	$(call if_changed,wrap,uboot)

316 317 318
$(obj)/cuImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)

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

322 323 324 325 326 327
$(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)

328 329
$(obj)/treeImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
330

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

# Rule to build device tree blobs
335 336 337 338
DTC = $(objtree)/scripts/dtc/dtc

$(obj)/%.dtb: $(dtstree)/%.dts
	$(DTC) -O dtb -o $(obj)/$*.dtb -b 0 $(DTS_FLAGS) $(dtstree)/$*.dts
339

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

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

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

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

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

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
dts-installed		:= $(patsubst $(obj)/dts/%, $(DESTDIR)$(WRAPPER_DTSDIR)/%, $(wildcard $(obj)/dts/*.dts))

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)