Makefile 15.9 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 23 24 25
BOOTCFLAGS    := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
		 -fno-strict-aliasing -Os -msoft-float -pipe \
		 -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) -I$(srctree)/$(src)/libfdt
L
Linus Torvalds 已提交
37

38 39
DTS_FLAGS	?= -p 1024

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

48

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

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

56
src-libfdt := fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c
57
src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \
58
		$(addprefix libfdt/,$(src-libfdt)) libfdt-wrapper.c \
59
		ns16550.c serial.c simple_alloc.c div64.S util.S \
60
		gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \
61
		4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \
62 63
		cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \
		fsl-soc.c mpc8xx.c pq2.c
64
src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c \
65
		cuboot-ebony.c treeboot-ebony.c prpmc2800.c \
66
		ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \
67 68
		cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c \
		cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \
R
Remi Machet 已提交
69
		fixed-head.S ep88xc.c ep405.c cuboot-c2k.c \
70
		cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \
71
		cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \
72 73
		virtex405-head.S virtex.c redboot-83xx.c cuboot-sam440ep.c \
		cuboot-acadia.c
74
src-boot := $(src-wlib) $(src-plat) empty.c
O
Olaf Hering 已提交
75

L
Linus Torvalds 已提交
76 77
src-boot := $(addprefix $(obj)/, $(src-boot))
obj-boot := $(addsuffix .o, $(basename $(src-boot)))
78 79
obj-wlib := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-wlib))))
obj-plat := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-plat))))
O
Olaf Hering 已提交
80 81

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

quiet_cmd_copy_zlibheader = COPY    $@
85
      cmd_copy_zlibheader = sed "s@<linux/\([^>]*\).*@\"\1\"@" $< > $@
O
Olaf Hering 已提交
86 87
# stddef.h for NULL
quiet_cmd_copy_zliblinuxheader = COPY    $@
88
      cmd_copy_zliblinuxheader = sed "s@<linux/string.h>@\"string.h\"@;s@<linux/kernel.h>@<stddef.h>@;s@<linux/\([^>]*\).*@\"\1\"@" $< > $@
O
Olaf Hering 已提交
89 90 91 92 93 94 95 96 97 98

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

99 100 101
$(obj)/empty.c:
	@touch $@

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

105
clean-files := $(zlib) $(zlibheader) $(zliblinuxheader) \
106
		empty.c zImage.coff.lds zImage.ps3.lds zImage.lds
O
Olaf Hering 已提交
107

L
Linus Torvalds 已提交
108 109 110 111 112 113
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 $@ $<

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

M
Milton Miller 已提交
117
$(patsubst %.c,%.o, $(filter %.c, $(src-boot))): %.o: %.c FORCE
118
	$(Q)mkdir -p $(dir $@)
L
Linus Torvalds 已提交
119
	$(call if_changed_dep,bootcc)
M
Milton Miller 已提交
120
$(patsubst %.S,%.o, $(filter %.S, $(src-boot))): %.o: %.S FORCE
121
	$(Q)mkdir -p $(dir $@)
L
Linus Torvalds 已提交
122 123
	$(call if_changed_dep,bootas)

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

127
hostprogs-y	:= addnote addRamDisk hack-coff mktree dtc
L
Linus Torvalds 已提交
128

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

133 134
dtstree		:= $(srctree)/$(src)/dts

135
wrapper		:=$(srctree)/$(src)/wrapper
136
wrapperbits	:= $(extra-y) $(addprefix $(obj)/,addnote hack-coff mktree dtc) \
M
Milton Miller 已提交
137
			$(wrapper) FORCE
L
Linus Torvalds 已提交
138

139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
#############
# Bits for building dtc
# DTC_GENPARSER      := 1    # Uncomment to rebuild flex/bison output

dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o srcpos.o checks.o
dtc-objs += dtc-lexer.lex.o dtc-parser.tab.o
dtc-objs := $(addprefix dtc-src/, $(dtc-objs))

# prerequisites on generated files needs to be explicit
$(obj)/dtc-src/dtc-parser.tab.o: $(obj)/dtc-src/dtc-parser.tab.c $(obj)/dtc-src/dtc-parser.tab.h
$(obj)/dtc-src/dtc-lexer.lex.o:  $(obj)/dtc-src/dtc-lexer.lex.c $(obj)/dtc-src/dtc-parser.tab.h

HOSTCFLAGS += -I$(src)/dtc-src/ -I$(src)/libfdt/

targets += dtc-src/dtc-parser.tab.c
targets += dtc-src/dtc-lexer.lex.c

156 157
clean-files += dtc-src/dtc-parser.tab.h

158 159 160 161 162 163 164 165 166 167
ifdef DTC_GENPARSER
BISON = bison
FLEX = flex

quiet_cmd_bison = BISON   $@
      cmd_bison = $(BISON) -o$@ -d $<; cp $@ $@_shipped
quiet_cmd_flex = FLEX    $@
      cmd_flex = $(FLEX) -o$@ $<; cp $@ $@_shipped

$(obj)/dtc-src/dtc-parser.tab.c: $(src)/dtc-src/dtc-parser.y FORCE
168
	$(call if_changed,bison)
169 170 171 172

$(obj)/dtc-src/dtc-parser.tab.h: $(obj)/dtc-src/dtc-parser.tab.c

$(obj)/dtc-src/dtc-lexer.lex.c: $(src)/dtc-src/dtc-lexer.l FORCE
173
	$(call if_changed,flex)
174 175
endif

176 177
#############
# Bits for building various flavours of zImage
L
Linus Torvalds 已提交
178

179
ifneq ($(CROSS32_COMPILE),)
180
CROSSWRAP := -C "$(CROSS32_COMPILE)"
181 182
else
ifneq ($(CROSS_COMPILE),)
183
CROSSWRAP := -C "$(CROSS_COMPILE)"
184 185
endif
endif
L
Linus Torvalds 已提交
186

187
# args (to if_changed): 1 = (this rule), 2 = platform, 3 = dts 4=dtb 5=initrd
188
quiet_cmd_wrap	= WRAP    $@
189 190
      cmd_wrap	=$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \
		$(if $3, -s $3)$(if $4, -d $4)$(if $5, -i $5) vmlinux
191

192 193 194
image-$(CONFIG_PPC_PSERIES)		+= zImage.pseries
image-$(CONFIG_PPC_MAPLE)		+= zImage.pseries
image-$(CONFIG_PPC_IBM_CELL_BLADE)	+= zImage.pseries
195
image-$(CONFIG_PPC_PS3)			+= dtbImage.ps3
I
Ishizaki Kou 已提交
196
image-$(CONFIG_PPC_CELLEB)		+= zImage.pseries
197
image-$(CONFIG_PPC_CELL_QPACE)		+= zImage.pseries
198
image-$(CONFIG_PPC_CHRP)		+= zImage.chrp
199
image-$(CONFIG_PPC_EFIKA)		+= zImage.chrp
200
image-$(CONFIG_PPC_PMAC)		+= zImage.pmac
201
image-$(CONFIG_PPC_HOLLY)		+= dtbImage.holly
202
image-$(CONFIG_PPC_PRPMC2800)		+= dtbImage.prpmc2800
203
image-$(CONFIG_PPC_ISERIES)		+= zImage.iseries
204 205
image-$(CONFIG_DEFAULT_UIMAGE)		+= uImage

206 207 208 209 210
#
# 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.
211
# Boards with newish u-boot firmware can use the uImage target above
212 213 214
#

# Board ports in arch/powerpc/platform/40x/Kconfig
215
image-$(CONFIG_EP405)			+= dtbImage.ep405
216
image-$(CONFIG_WALNUT)			+= treeImage.walnut
217
image-$(CONFIG_ACADIA)			+= cuImage.acadia
218 219

# Board ports in arch/powerpc/platform/44x/Kconfig
220
image-$(CONFIG_EBONY)			+= treeImage.ebony cuImage.ebony
J
Josh Boyer 已提交
221
image-$(CONFIG_BAMBOO)			+= treeImage.bamboo cuImage.bamboo
222
image-$(CONFIG_SAM440EP)		+= cuImage.sam440ep
223
image-$(CONFIG_SEQUOIA)			+= cuImage.sequoia
224
image-$(CONFIG_RAINIER)			+= cuImage.rainier
225
image-$(CONFIG_TAISHAN)			+= cuImage.taishan
226
image-$(CONFIG_KATMAI)			+= cuImage.katmai
227
image-$(CONFIG_WARP)			+= cuImage.warp
228
image-$(CONFIG_YOSEMITE)		+= cuImage.yosemite
229

230
# Board ports in arch/powerpc/platform/8xx/Kconfig
231 232
image-$(CONFIG_MPC86XADS)		+= cuImage.mpc866ads
image-$(CONFIG_MPC885ADS)		+= cuImage.mpc885ads
233
image-$(CONFIG_PPC_EP88XC)		+= dtbImage.ep88xc
234
image-$(CONFIG_PPC_ADDER875)		+= cuImage.adder875-uboot \
235
					   dtbImage.adder875-redboot
236 237

# Board ports in arch/powerpc/platform/52xx/Kconfig
238 239 240
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200 lite5200.dtb
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200b lite5200b.dtb
image-$(CONFIG_PPC_MEDIA5200)		+= cuImage.media5200 media5200.dtb
241 242 243 244

# Board ports in arch/powerpc/platform/82xx/Kconfig
image-$(CONFIG_MPC8272_ADS)		+= cuImage.mpc8272ads
image-$(CONFIG_PQ2FADS)			+= cuImage.pq2fads
245
image-$(CONFIG_EP8248E)			+= dtbImage.ep8248e
246 247 248 249 250 251 252 253

# 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
254
image-$(CONFIG_ASP834x)			+= dtbImage.asp834x-redboot
255 256 257 258 259 260 261 262 263 264 265 266

# 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
267
image-$(CONFIG_TQM8548)			+= cuImage.tqm8548
268 269
image-$(CONFIG_TQM8555)			+= cuImage.tqm8555
image-$(CONFIG_TQM8560)			+= cuImage.tqm8560
270 271
image-$(CONFIG_SBC8548)			+= cuImage.sbc8548
image-$(CONFIG_SBC8560)			+= cuImage.sbc8560
272
image-$(CONFIG_KSI8560)			+= cuImage.ksi8560
273 274 275 276

# Board ports in arch/powerpc/platform/embedded6xx/Kconfig
image-$(CONFIG_STORCENTER)		+= cuImage.storcenter
image-$(CONFIG_MPC7448HPC2)		+= cuImage.mpc7448hpc2
R
Remi Machet 已提交
277
image-$(CONFIG_PPC_C2K)			+= cuImage.c2k
278

279 280
# For 32-bit powermacs, build the COFF and miboot images
# as well as the ELF images.
281 282 283 284
ifeq ($(CONFIG_PPC32),y)
image-$(CONFIG_PPC_PMAC)	+= zImage.coff zImage.miboot
endif

285 286 287
# Allow extra targets to be added to the defconfig
image-y	+= $(subst ",,$(CONFIG_EXTRA_TARGETS))

M
Milton Miller 已提交
288
initrd-  := $(patsubst zImage%, zImage.initrd%, $(image-n) $(image-))
289
initrd-y := $(patsubst zImage%, zImage.initrd%, \
290
		$(patsubst dtbImage%, dtbImage.initrd%, \
291 292
		$(patsubst simpleImage%, simpleImage.initrd%, \
		$(patsubst treeImage%, treeImage.initrd%, $(image-y)))))
293
initrd-y := $(filter-out $(image-y), $(initrd-y))
M
Milton Miller 已提交
294
targets	+= $(image-y) $(initrd-y)
295

296 297 298 299 300
$(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).
301 302
$(obj)/zImage.initrd.%: vmlinux $(wrapperbits)
	$(call if_changed,wrap,$*,,,$(obj)/ramdisk.image.gz)
303

304 305 306
$(obj)/zImage.%: vmlinux $(wrapperbits)
	$(call if_changed,wrap,$*)

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

311 312
$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/%.dtb
	$(call if_changed,wrap,$*,,$(obj)/$*.dtb)
313

314 315 316 317 318
# 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 $@

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

325 326 327
$(obj)/uImage: vmlinux $(wrapperbits)
	$(call if_changed,wrap,uboot)

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

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

334 335 336 337 338 339
$(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)

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

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

# Rule to build device tree blobs
$(obj)/%.dtb: $(dtstree)/%.dts $(obj)/dtc
	$(obj)/dtc -O dtb -o $(obj)/$*.dtb -b 0 $(DTS_FLAGS) $(dtstree)/$*.dts
349

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

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

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

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

# 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))
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 412 413 414 415 416 417 418 419 420 421

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)