Makefile 14.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) -I$(srctree)/$(src)/libfdt
L
Linus Torvalds 已提交
37

38 39 40 41
$(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
42
$(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
43

44

45 46
zlib       := inffast.c inflate.c inftrees.c
zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h
O
Olaf Hering 已提交
47 48
zliblinuxheader := zlib.h zconf.h zutil.h

49 50
$(addprefix $(obj)/,$(zlib) gunzip_util.o main.o): \
	$(addprefix $(obj)/,$(zliblinuxheader)) $(addprefix $(obj)/,$(zlibheader))
51

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

L
Linus Torvalds 已提交
70 71
src-boot := $(addprefix $(obj)/, $(src-boot))
obj-boot := $(addsuffix .o, $(basename $(src-boot)))
72 73
obj-wlib := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-wlib))))
obj-plat := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-plat))))
O
Olaf Hering 已提交
74 75

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

quiet_cmd_copy_zlibheader = COPY    $@
79
      cmd_copy_zlibheader = sed "s@<linux/\([^>]*\).*@\"\1\"@" $< > $@
O
Olaf Hering 已提交
80 81
# stddef.h for NULL
quiet_cmd_copy_zliblinuxheader = COPY    $@
82
      cmd_copy_zliblinuxheader = sed "s@<linux/string.h>@\"string.h\"@;s@<linux/kernel.h>@<stddef.h>@;s@<linux/\([^>]*\).*@\"\1\"@" $< > $@
O
Olaf Hering 已提交
83 84 85 86 87 88 89 90 91 92

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

93 94 95
$(obj)/empty.c:
	@touch $@

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

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

L
Linus Torvalds 已提交
102 103 104 105 106 107
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 $@ $<

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

M
Milton Miller 已提交
111
$(patsubst %.c,%.o, $(filter %.c, $(src-boot))): %.o: %.c FORCE
112
	$(Q)mkdir -p $(dir $@)
L
Linus Torvalds 已提交
113
	$(call if_changed_dep,bootcc)
M
Milton Miller 已提交
114
$(patsubst %.S,%.o, $(filter %.S, $(src-boot))): %.o: %.S FORCE
115
	$(Q)mkdir -p $(dir $@)
L
Linus Torvalds 已提交
116 117
	$(call if_changed_dep,bootas)

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

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

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

127 128
dtstree		:= $(srctree)/$(src)/dts

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

133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
#############
# 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

150 151
clean-files += dtc-src/dtc-parser.tab.h

152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
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
     $(call if_changed,bison)

$(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
     $(call if_changed,flex)
endif

170 171
#############
# Bits for building various flavours of zImage
L
Linus Torvalds 已提交
172

173
ifneq ($(CROSS32_COMPILE),)
174
CROSSWRAP := -C "$(CROSS32_COMPILE)"
175 176
else
ifneq ($(CROSS_COMPILE),)
177
CROSSWRAP := -C "$(CROSS_COMPILE)"
178 179
endif
endif
L
Linus Torvalds 已提交
180

181
# args (to if_changed): 1 = (this rule), 2 = platform, 3 = dts 4=dtb 5=initrd
182
quiet_cmd_wrap	= WRAP    $@
183 184
      cmd_wrap	=$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \
		$(if $3, -s $3)$(if $4, -d $4)$(if $5, -i $5) vmlinux
185

186 187 188
image-$(CONFIG_PPC_PSERIES)		+= zImage.pseries
image-$(CONFIG_PPC_MAPLE)		+= zImage.pseries
image-$(CONFIG_PPC_IBM_CELL_BLADE)	+= zImage.pseries
189
image-$(CONFIG_PPC_PS3)			+= dtbImage.ps3
I
Ishizaki Kou 已提交
190
image-$(CONFIG_PPC_CELLEB)		+= zImage.pseries
191
image-$(CONFIG_PPC_CHRP)		+= zImage.chrp
192
image-$(CONFIG_PPC_EFIKA)		+= zImage.chrp
193
image-$(CONFIG_PPC_PMAC)		+= zImage.pmac
194
image-$(CONFIG_PPC_HOLLY)		+= zImage.holly
195
image-$(CONFIG_PPC_PRPMC2800)		+= zImage.prpmc2800
196
image-$(CONFIG_PPC_ISERIES)		+= zImage.iseries
197 198
image-$(CONFIG_DEFAULT_UIMAGE)		+= uImage

199 200 201 202 203 204 205 206 207
#
# 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.
# Boards with newish u-boot firmare can use the uImage target above
#

# Board ports in arch/powerpc/platform/40x/Kconfig
208
image-$(CONFIG_EP405)			+= dtbImage.ep405
209 210 211
image-$(CONFIG_WALNUT)			+= treeImage.walnut

# Board ports in arch/powerpc/platform/44x/Kconfig
212
image-$(CONFIG_EBONY)			+= treeImage.ebony cuImage.ebony
J
Josh Boyer 已提交
213
image-$(CONFIG_BAMBOO)			+= treeImage.bamboo cuImage.bamboo
214
image-$(CONFIG_SEQUOIA)			+= cuImage.sequoia
215
image-$(CONFIG_RAINIER)			+= cuImage.rainier
216
image-$(CONFIG_TAISHAN)			+= cuImage.taishan
217
image-$(CONFIG_KATMAI)			+= cuImage.katmai
218
image-$(CONFIG_WARP)			+= cuImage.warp
219
image-$(CONFIG_YOSEMITE)		+= cuImage.yosemite
220

221 222 223
# Board ports in arch/powerpc/platform/8xx/Kconfig
image-$(CONFIG_PPC_MPC86XADS)		+= cuImage.mpc866ads
image-$(CONFIG_PPC_MPC885ADS)		+= cuImage.mpc885ads
224
image-$(CONFIG_PPC_EP88XC)		+= dtbImage.ep88xc
225
image-$(CONFIG_PPC_ADDER875)		+= cuImage.adder875-uboot \
226
					   dtbImage.adder875-redboot
227 228 229 230 231 232 233

# Board ports in arch/powerpc/platform/52xx/Kconfig
image-$(CONFIG_PPC_LITE5200)		+= cuImage.lite5200 cuImage.lite5200b

# Board ports in arch/powerpc/platform/82xx/Kconfig
image-$(CONFIG_MPC8272_ADS)		+= cuImage.mpc8272ads
image-$(CONFIG_PQ2FADS)			+= cuImage.pq2fads
234
image-$(CONFIG_EP8248E)			+= dtbImage.ep8248e
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256

# 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

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

# Board ports in arch/powerpc/platform/embedded6xx/Kconfig
image-$(CONFIG_STORCENTER)		+= cuImage.storcenter
image-$(CONFIG_MPC7448HPC2)		+= cuImage.mpc7448hpc2
264

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

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

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

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

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

293
$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(dtstree)/%.dts
294
	$(call if_changed,wrap,$*,$(dtstree)/$*.dts)
295

296 297 298 299 300
# 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 $@

301 302 303
$(obj)/zImage.iseries: vmlinux
	$(STRIP) -s -R .comment $< -o $@

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

307 308
$(obj)/cuImage.%: vmlinux $(dtstree)/%.dts $(wrapperbits)
	$(call if_changed,wrap,cuboot-$*,$(dtstree)/$*.dts)
309

310 311
$(obj)/treeImage.initrd.%: vmlinux $(dtstree)/%.dts $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,$(dtstree)/$*.dts,,$(obj)/ramdisk.image.gz)
312

313 314
$(obj)/treeImage.%: vmlinux $(dtstree)/%.dts $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,$(dtstree)/$*.dts)
315

316 317 318 319 320
# If there isn't a platform selected then just strip the vmlinux.
ifeq (,$(image-y))
image-y := vmlinux.strip
endif

321 322 323 324 325
$(obj)/zImage:		$(addprefix $(obj)/, $(image-y))
	@rm -f $@; ln $< $@
$(obj)/zImage.initrd:	$(addprefix $(obj)/, $(initrd-y))
	@rm -f $@; ln $< $@

A
Akinobu Mita 已提交
326
install: $(CONFIGURE) $(addprefix $(obj)/, $(image-y))
327 328
	sh -x $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" vmlinux System.map "$(INSTALL_PATH)" $<

329
# anything not in $(targets)
330 331
clean-files += $(image-) $(initrd-) zImage zImage.initrd cuImage.* treeImage.* \
	otheros.bld
332 333 334 335 336 337

# 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))
338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 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

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)