Makefile 12.8 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
		cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c
66
src-boot := $(src-wlib) $(src-plat) empty.c
O
Olaf Hering 已提交
67

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
#############
# 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

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

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

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

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

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

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

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

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

229 230
$(addprefix $(obj)/, $(initrd-y)): $(obj)/ramdisk.image.gz

231 232 233 234 235 236 237 238 239 240
# 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

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

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

250 251 252 253 254
# 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 $@

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

258 259 260
$(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,,)
261

262 263
$(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)
264 265 266 267

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

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

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

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

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

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

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

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

# 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))
299 300 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

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)