Makefile 12.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

J
Josh Boyer 已提交
38
$(obj)/4xx.o: BOOTCFLAGS += -mcpu=440
39
$(obj)/ebony.o: BOOTCFLAGS += -mcpu=440
40
$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=440
41
$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=440
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
		cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c cuboot-bamboo.c \
64
		fixed-head.S ep88xc.c cuboot-hpc2.c ep405.c cuboot-taishan.c \
65 66
		cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \
		cuboot-warp.c
67
src-boot := $(src-wlib) $(src-plat) empty.c
O
Olaf Hering 已提交
68

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

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

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

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

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

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

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

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

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

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

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

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

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

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

130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
#############
# 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

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

165 166
#############
# Bits for building various flavours of zImage
L
Linus Torvalds 已提交
167

168
ifneq ($(CROSS32_COMPILE),)
169
CROSSWRAP := -C "$(CROSS32_COMPILE)"
170 171
else
ifneq ($(CROSS_COMPILE),)
172
CROSSWRAP := -C "$(CROSS_COMPILE)"
173 174
endif
endif
L
Linus Torvalds 已提交
175

176
# args (to if_changed): 1 = (this rule), 2 = platform, 3 = dts 4=dtb 5=initrd
177
quiet_cmd_wrap	= WRAP    $@
178 179
      cmd_wrap	=$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \
		$(if $3, -s $3)$(if $4, -d $4)$(if $5, -i $5) vmlinux
180

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

ifneq ($(CONFIG_DEVICE_TREE),"")
195
image-$(CONFIG_PPC_8xx)			+= cuImage.8xx
196
image-$(CONFIG_PPC_EP88XC)		+= zImage.ep88xc
197
image-$(CONFIG_EP405)			+= zImage.ep405
198
image-$(CONFIG_8260)			+= cuImage.pq2
199
image-$(CONFIG_EP8248E)			+= zImage.ep8248e
200
image-$(CONFIG_PPC_MPC52xx)		+= cuImage.52xx
201
image-$(CONFIG_STORCENTER)		+= cuImage.824x
202 203
image-$(CONFIG_PPC_83xx)		+= cuImage.83xx
image-$(CONFIG_PPC_85xx)		+= cuImage.85xx
204
image-$(CONFIG_MPC7448HPC2)		+= cuImage.hpc2
205
image-$(CONFIG_EBONY)			+= treeImage.ebony cuImage.ebony
J
Josh Boyer 已提交
206
image-$(CONFIG_BAMBOO)			+= treeImage.bamboo cuImage.bamboo
207
image-$(CONFIG_SEQUOIA)			+= cuImage.sequoia
208
image-$(CONFIG_RAINIER)			+= cuImage.rainier
J
Josh Boyer 已提交
209
image-$(CONFIG_WALNUT)			+= treeImage.walnut
210
image-$(CONFIG_TAISHAN)			+= cuImage.taishan
211
image-$(CONFIG_KATMAI)			+= cuImage.katmai
212
image-$(CONFIG_WARP)			+= cuImage.warp
213
endif
214

215 216 217 218
ifneq ($(CONFIG_REDBOOT),"")
image-$(CONFIG_PPC_8xx)			+= zImage.redboot-8xx
endif

219 220
# For 32-bit powermacs, build the COFF and miboot images
# as well as the ELF images.
221 222 223 224
ifeq ($(CONFIG_PPC32),y)
image-$(CONFIG_PPC_PMAC)	+= zImage.coff zImage.miboot
endif

M
Milton Miller 已提交
225
initrd-  := $(patsubst zImage%, zImage.initrd%, $(image-n) $(image-))
226 227
initrd-y := $(patsubst zImage%, zImage.initrd%, \
		$(patsubst treeImage%, treeImage.initrd%, $(image-y)))
228
initrd-y := $(filter-out $(image-y), $(initrd-y))
M
Milton Miller 已提交
229
targets	+= $(image-y) $(initrd-y)
230

231 232
$(addprefix $(obj)/, $(initrd-y)): $(obj)/ramdisk.image.gz

233 234 235 236 237 238 239 240 241 242
# If CONFIG_WANT_DEVICE_TREE is set and CONFIG_DEVICE_TREE isn't an
# empty string, define 'dts' to be path to the dts
# CONFIG_DEVICE_TREE will have "" around it, make sure to strip them
ifeq ($(CONFIG_WANT_DEVICE_TREE),y)
ifneq ($(CONFIG_DEVICE_TREE),"")
dts = $(if $(shell echo $(CONFIG_DEVICE_TREE) | grep '^/'),\
	,$(srctree)/$(src)/dts/)$(CONFIG_DEVICE_TREE:"%"=%)
endif
endif

243 244 245
# 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).
246 247
$(obj)/zImage.initrd.%: vmlinux $(wrapperbits) $(dts)
	$(call if_changed,wrap,$*,$(dts),,$(obj)/ramdisk.image.gz)
248

249 250
$(obj)/zImage.%: vmlinux $(wrapperbits) $(dts)
	$(call if_changed,wrap,$*,$(dts))
251

252 253 254 255 256
# 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 $@

257 258 259
$(obj)/zImage.iseries: vmlinux
	$(STRIP) -s -R .comment $< -o $@

260 261 262
$(obj)/zImage.ps3: vmlinux  $(wrapper) $(wrapperbits) $(srctree)/$(src)/dts/ps3.dts
	$(STRIP) -s -R .comment $< -o vmlinux.strip
	$(call cmd,wrap,ps3,$(srctree)/$(src)/dts/ps3.dts,,)
263

264 265
$(obj)/zImage.initrd.ps3: vmlinux  $(wrapper) $(wrapperbits) $(srctree)/$(src)/dts/ps3.dts $(obj)/ramdisk.image.gz
	$(call cmd,wrap,ps3,$(srctree)/$(src)/dts/ps3.dts,,$(obj)/ramdisk.image.gz)
266 267 268 269

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

270
$(obj)/cuImage.%: vmlinux $(dts) $(wrapperbits)
271
	$(call if_changed,wrap,cuboot-$*,$(dts))
272

273 274 275
$(obj)/treeImage.initrd.%: vmlinux $(dts) $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,$(dts),,$(obj)/ramdisk.image.gz)

276 277 278
$(obj)/treeImage.%: vmlinux $(dts) $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,$(dts))

279 280 281 282 283
# If there isn't a platform selected then just strip the vmlinux.
ifeq (,$(image-y))
image-y := vmlinux.strip
endif

284 285 286 287 288
$(obj)/zImage:		$(addprefix $(obj)/, $(image-y))
	@rm -f $@; ln $< $@
$(obj)/zImage.initrd:	$(addprefix $(obj)/, $(initrd-y))
	@rm -f $@; ln $< $@

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

292
# anything not in $(targets)
293 294
clean-files += $(image-) $(initrd-) zImage zImage.initrd cuImage.* treeImage.* \
	otheros.bld
295 296 297 298 299 300

# 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))
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348

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)