Makefile 11.2 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)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
41

42 43
zlib       := inffast.c inflate.c inftrees.c
zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h
O
Olaf Hering 已提交
44 45
zliblinuxheader := zlib.h zconf.h zutil.h

46 47
$(addprefix $(obj)/,$(zlib) gunzip_util.o main.o): \
	$(addprefix $(obj)/,$(zliblinuxheader)) $(addprefix $(obj)/,$(zlibheader))
48

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

L
Linus Torvalds 已提交
64 65
src-boot := $(addprefix $(obj)/, $(src-boot))
obj-boot := $(addsuffix .o, $(basename $(src-boot)))
66 67
obj-wlib := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-wlib))))
obj-plat := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-plat))))
O
Olaf Hering 已提交
68 69

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

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

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

87 88 89
$(obj)/empty.c:
	@touch $@

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

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

L
Linus Torvalds 已提交
96 97 98 99 100 101
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 $@ $<

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

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

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

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

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

121
wrapper		:=$(srctree)/$(src)/wrapper
122
wrapperbits	:= $(extra-y) $(addprefix $(obj)/,addnote hack-coff mktree) \
M
Milton Miller 已提交
123
			$(wrapper) FORCE
L
Linus Torvalds 已提交
124

125 126
#############
# Bits for building various flavours of zImage
L
Linus Torvalds 已提交
127

128
ifneq ($(CROSS32_COMPILE),)
129
CROSSWRAP := -C "$(CROSS32_COMPILE)"
130 131
else
ifneq ($(CROSS_COMPILE),)
132
CROSSWRAP := -C "$(CROSS_COMPILE)"
133 134
endif
endif
L
Linus Torvalds 已提交
135

136
# args (to if_changed): 1 = (this rule), 2 = platform, 3 = dts 4=dtb 5=initrd
137
quiet_cmd_wrap	= WRAP    $@
138 139
      cmd_wrap	=$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \
		$(if $3, -s $3)$(if $4, -d $4)$(if $5, -i $5) vmlinux
140

141 142 143
image-$(CONFIG_PPC_PSERIES)		+= zImage.pseries
image-$(CONFIG_PPC_MAPLE)		+= zImage.pseries
image-$(CONFIG_PPC_IBM_CELL_BLADE)	+= zImage.pseries
144
image-$(CONFIG_PPC_PS3)			+= zImage.ps3
I
Ishizaki Kou 已提交
145
image-$(CONFIG_PPC_CELLEB)		+= zImage.pseries
146
image-$(CONFIG_PPC_CHRP)		+= zImage.chrp
147
image-$(CONFIG_PPC_EFIKA)		+= zImage.chrp
148
image-$(CONFIG_PPC_PMAC)		+= zImage.pmac
149
image-$(CONFIG_PPC_HOLLY)		+= zImage.holly
150
image-$(CONFIG_PPC_PRPMC2800)		+= zImage.prpmc2800
151
image-$(CONFIG_PPC_ISERIES)		+= zImage.iseries
152 153 154
image-$(CONFIG_DEFAULT_UIMAGE)		+= uImage

ifneq ($(CONFIG_DEVICE_TREE),"")
155
image-$(CONFIG_PPC_8xx)			+= cuImage.8xx
156
image-$(CONFIG_PPC_EP88XC)		+= zImage.ep88xc
157
image-$(CONFIG_8260)			+= cuImage.pq2
158
image-$(CONFIG_PPC_MPC52xx)		+= cuImage.52xx
159 160
image-$(CONFIG_PPC_83xx)		+= cuImage.83xx
image-$(CONFIG_PPC_85xx)		+= cuImage.85xx
161
image-$(CONFIG_MPC7448HPC2)		+= cuImage.hpc2
162
image-$(CONFIG_EBONY)			+= treeImage.ebony cuImage.ebony
J
Josh Boyer 已提交
163
image-$(CONFIG_BAMBOO)			+= treeImage.bamboo cuImage.bamboo
164
image-$(CONFIG_SEQUOIA)			+= cuImage.sequoia
J
Josh Boyer 已提交
165
image-$(CONFIG_WALNUT)			+= treeImage.walnut
166
endif
167

168 169
# For 32-bit powermacs, build the COFF and miboot images
# as well as the ELF images.
170 171 172 173
ifeq ($(CONFIG_PPC32),y)
image-$(CONFIG_PPC_PMAC)	+= zImage.coff zImage.miboot
endif

M
Milton Miller 已提交
174
initrd-  := $(patsubst zImage%, zImage.initrd%, $(image-n) $(image-))
175 176
initrd-y := $(patsubst zImage%, zImage.initrd%, \
		$(patsubst treeImage%, treeImage.initrd%, $(image-y)))
177
initrd-y := $(filter-out $(image-y), $(initrd-y))
M
Milton Miller 已提交
178
targets	+= $(image-y) $(initrd-y)
179

180 181
$(addprefix $(obj)/, $(initrd-y)): $(obj)/ramdisk.image.gz

182 183 184 185 186 187 188 189 190 191
# 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

192 193 194
# 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).
195 196
$(obj)/zImage.initrd.%: vmlinux $(wrapperbits) $(dts)
	$(call if_changed,wrap,$*,$(dts),,$(obj)/ramdisk.image.gz)
197

198 199
$(obj)/zImage.%: vmlinux $(wrapperbits) $(dts)
	$(call if_changed,wrap,$*,$(dts))
200

201 202 203 204 205
# 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 $@

206 207 208
$(obj)/zImage.iseries: vmlinux
	$(STRIP) -s -R .comment $< -o $@

209 210 211
$(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,,)
212

213 214
$(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)
215 216 217 218

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

219
$(obj)/cuImage.%: vmlinux $(dts) $(wrapperbits)
220
	$(call if_changed,wrap,cuboot-$*,$(dts))
221

222 223 224
$(obj)/treeImage.initrd.%: vmlinux $(dts) $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,$(dts),,$(obj)/ramdisk.image.gz)

225 226 227
$(obj)/treeImage.%: vmlinux $(dts) $(wrapperbits)
	$(call if_changed,wrap,treeboot-$*,$(dts))

228 229 230 231 232
# If there isn't a platform selected then just strip the vmlinux.
ifeq (,$(image-y))
image-y := vmlinux.strip
endif

233 234 235 236 237
$(obj)/zImage:		$(addprefix $(obj)/, $(image-y))
	@rm -f $@; ln $< $@
$(obj)/zImage.initrd:	$(addprefix $(obj)/, $(initrd-y))
	@rm -f $@; ln $< $@

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

241
# anything not in $(targets)
242 243
clean-files += $(image-) $(initrd-) zImage zImage.initrd cuImage.* treeImage.* \
	otheros.bld
244 245 246 247 248 249

# 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))
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297

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)