Makefile 15.3 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)
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 57 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

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

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

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

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

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

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

104 105 106 107 108 109
quiet_cmd_copy_libfdt = COPY    $@
      cmd_copy_libfdt = cp $< $@

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

110 111 112
$(obj)/empty.c:
	@touch $@

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

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

L
Linus Torvalds 已提交
120 121 122 123 124 125
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 $@ $<

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

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

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

141
hostprogs-y	:= addnote addRamDisk hack-coff mktree
L
Linus Torvalds 已提交
142

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

147 148
dtstree		:= $(srctree)/$(src)/dts

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

153 154
#############
# Bits for building various flavours of zImage
L
Linus Torvalds 已提交
155

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

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

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

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

# Board ports in arch/powerpc/platform/40x/Kconfig
192
image-$(CONFIG_EP405)			+= dtbImage.ep405
193
image-$(CONFIG_WALNUT)			+= treeImage.walnut
194
image-$(CONFIG_ACADIA)			+= cuImage.acadia
195 196

# Board ports in arch/powerpc/platform/44x/Kconfig
197
image-$(CONFIG_EBONY)			+= treeImage.ebony cuImage.ebony
J
Josh Boyer 已提交
198
image-$(CONFIG_BAMBOO)			+= treeImage.bamboo cuImage.bamboo
199
image-$(CONFIG_SAM440EP)		+= cuImage.sam440ep
200
image-$(CONFIG_SEQUOIA)			+= cuImage.sequoia
201
image-$(CONFIG_RAINIER)			+= cuImage.rainier
202
image-$(CONFIG_TAISHAN)			+= cuImage.taishan
203
image-$(CONFIG_KATMAI)			+= cuImage.katmai
204
image-$(CONFIG_WARP)			+= cuImage.warp
205
image-$(CONFIG_YOSEMITE)		+= cuImage.yosemite
206

207
# Board ports in arch/powerpc/platform/8xx/Kconfig
208 209
image-$(CONFIG_MPC86XADS)		+= cuImage.mpc866ads
image-$(CONFIG_MPC885ADS)		+= cuImage.mpc885ads
210
image-$(CONFIG_PPC_EP88XC)		+= dtbImage.ep88xc
211
image-$(CONFIG_PPC_ADDER875)		+= cuImage.adder875-uboot \
212
					   dtbImage.adder875-redboot
213 214

# Board ports in arch/powerpc/platform/52xx/Kconfig
215 216 217
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200 lite5200.dtb
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200b lite5200b.dtb
image-$(CONFIG_PPC_MEDIA5200)		+= cuImage.media5200 media5200.dtb
218 219 220 221

# Board ports in arch/powerpc/platform/82xx/Kconfig
image-$(CONFIG_MPC8272_ADS)		+= cuImage.mpc8272ads
image-$(CONFIG_PQ2FADS)			+= cuImage.pq2fads
222
image-$(CONFIG_EP8248E)			+= dtbImage.ep8248e
223 224 225 226 227 228 229 230

# 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
231
image-$(CONFIG_ASP834x)			+= dtbImage.asp834x-redboot
232 233 234 235 236 237 238 239 240 241 242 243

# 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
244
image-$(CONFIG_TQM8548)			+= cuImage.tqm8548
245 246
image-$(CONFIG_TQM8555)			+= cuImage.tqm8555
image-$(CONFIG_TQM8560)			+= cuImage.tqm8560
247 248
image-$(CONFIG_SBC8548)			+= cuImage.sbc8548
image-$(CONFIG_SBC8560)			+= cuImage.sbc8560
249
image-$(CONFIG_KSI8560)			+= cuImage.ksi8560
250 251 252 253

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

256 257 258
# Board port in arch/powerpc/platform/amigaone/Kconfig
image-$(CONFIG_AMIGAONE)		+= cuImage.amigaone

259 260
# For 32-bit powermacs, build the COFF and miboot images
# as well as the ELF images.
261 262 263 264
ifeq ($(CONFIG_PPC32),y)
image-$(CONFIG_PPC_PMAC)	+= zImage.coff zImage.miboot
endif

265 266 267
# Allow extra targets to be added to the defconfig
image-y	+= $(subst ",,$(CONFIG_EXTRA_TARGETS))

M
Milton Miller 已提交
268
initrd-  := $(patsubst zImage%, zImage.initrd%, $(image-n) $(image-))
269
initrd-y := $(patsubst zImage%, zImage.initrd%, \
270
		$(patsubst dtbImage%, dtbImage.initrd%, \
271 272
		$(patsubst simpleImage%, simpleImage.initrd%, \
		$(patsubst treeImage%, treeImage.initrd%, $(image-y)))))
273
initrd-y := $(filter-out $(image-y), $(initrd-y))
M
Milton Miller 已提交
274
targets	+= $(image-y) $(initrd-y)
275

276 277 278 279 280
$(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).
281 282
$(obj)/zImage.initrd.%: vmlinux $(wrapperbits)
	$(call if_changed,wrap,$*,,,$(obj)/ramdisk.image.gz)
283

284 285 286
$(obj)/zImage.%: vmlinux $(wrapperbits)
	$(call if_changed,wrap,$*)

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

291 292
$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/%.dtb
	$(call if_changed,wrap,$*,,$(obj)/$*.dtb)
293

294 295 296 297 298
# 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 $@

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

305 306 307
$(obj)/uImage: vmlinux $(wrapperbits)
	$(call if_changed,wrap,uboot)

308 309 310
$(obj)/cuImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)

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

314 315 316 317 318 319
$(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)

320 321
$(obj)/treeImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
322

323 324 325 326
$(obj)/treeImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb)

# Rule to build device tree blobs
327 328 329 330
DTC = $(objtree)/scripts/dtc/dtc

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

332 333 334 335 336
# If there isn't a platform selected then just strip the vmlinux.
ifeq (,$(image-y))
image-y := vmlinux.strip
endif

337 338 339 340 341
$(obj)/zImage:		$(addprefix $(obj)/, $(image-y))
	@rm -f $@; ln $< $@
$(obj)/zImage.initrd:	$(addprefix $(obj)/, $(initrd-y))
	@rm -f $@; ln $< $@

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

345
# anything not in $(targets)
346 347 348
clean-files += $(image-) $(initrd-) cuImage.* dtbImage.* treeImage.* \
	zImage zImage.initrd zImage.chrp zImage.coff zImage.holly \
	zImage.iseries zImage.miboot zImage.pmac zImage.pseries \
349
	simpleImage.* otheros.bld *.dtb
350 351 352 353 354 355

# 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))
356 357 358 359 360 361 362 363 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

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)