2005-04-17 02:20:36 +04:00
# 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
# needed to build the 32 bit image. These are normally HOSTCC,
# but may be a third compiler if, for example, you are cross
# compiling from an intel box. Once the 64bit ppc gcc is
# stable it will probably simply be a compiler switch to
# compile for 32bit mode.
# To make it easier to setup a cross compiler,
# CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE
# in the toplevel makefile.
2006-09-27 16:47:03 +04:00
all : $( obj ) /zImage
2005-04-17 02:20:36 +04:00
HOSTCC := gcc
2005-11-16 05:38:21 +03:00
BOOTCFLAGS := $( HOSTCFLAGS) -fno-builtin -nostdinc -isystem \
$( shell $( CROSS32CC) -print-file-name= include) -fPIC
2005-08-08 07:24:38 +04:00
BOOTAFLAGS := -D__ASSEMBLY__ $( BOOTCFLAGS) -traditional -nostdinc
2006-09-27 16:47:03 +04:00
i f e q ( $( call cc -option -yn , -fstack -protector ) , y )
BOOTCFLAGS += -fno-stack-protector
e n d i f
BOOTCFLAGS += -I$( obj) -I$( srctree) /$( obj)
2005-04-17 02:20:36 +04:00
2006-06-23 01:47:34 +04:00
zlib := inffast.c inflate.c inftrees.c
zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h
2005-10-29 04:46:38 +04:00
zliblinuxheader := zlib.h zconf.h zutil.h
2006-09-27 16:47:03 +04:00
$(addprefix $(obj)/,$(zlib) main.o) : $( addprefix $ ( obj ) /,$ ( zliblinuxheader ) ) \
$( addprefix $( obj) /,$( zlibheader) )
2006-10-17 00:52:09 +04:00
src-wlib := string.S stdio.c main.c flatdevtree.c flatdevtree_misc.c \
2006-10-17 00:54:52 +04:00
ns16550.c serial.c simple_alloc.c div64.S util.S $( zlib)
2006-09-27 16:47:03 +04:00
src-plat := of.c
src-boot := crt0.S $( src-wlib) $( src-plat) empty.c
2005-10-29 04:46:38 +04:00
2005-04-17 02:20:36 +04:00
src-boot := $( addprefix $( obj) /, $( src-boot) )
obj-boot := $( addsuffix .o, $( basename $( src-boot) ) )
2006-09-27 16:47:03 +04:00
obj-wlib := $( addsuffix .o, $( basename $( addprefix $( obj) /, $( src-wlib) ) ) )
obj-plat := $( addsuffix .o, $( basename $( addprefix $( obj) /, $( src-plat) ) ) )
2005-10-29 04:46:38 +04:00
quiet_cmd_copy_zlib = COPY $@
cmd_copy_zlib = sed "s@__attribute_used__@@;s@<linux/\([^>]\+\).*@\"\1\"@" $< > $@
quiet_cmd_copy_zlibheader = COPY $@
cmd_copy_zlibheader = sed "s@<linux/\([^>]\+\).*@\"\1\"@" $< > $@
# stddef.h for NULL
quiet_cmd_copy_zliblinuxheader = COPY $@
cmd_copy_zliblinuxheader = sed "s@<linux/string.h>@\"string.h\"@;s@<linux/kernel.h>@<stddef.h>@;s@<linux/\([^>]\+\).*@\"\1\"@" $< > $@
$(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)
2006-09-27 16:47:03 +04:00
$(obj)/empty.c :
@touch $@
$(obj)/zImage.lds $(obj)/zImage.coff.lds : $( obj ) /%: $( srctree ) /$( src ) /%.S
@cp $< $@
2005-10-29 04:46:38 +04:00
2006-09-27 16:47:03 +04:00
clean-files := $( zlib) $( zlibheader) $( zliblinuxheader) \
2006-11-09 03:52:25 +03:00
empty.c zImage zImage.coff.lds zImage.lds zImage.sandpoint
2005-10-29 04:46:38 +04:00
2005-04-17 02:20:36 +04:00
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 $@ $<
2006-09-27 16:47:03 +04:00
quiet_cmd_bootar = BOOTAR $@
cmd_bootar = $( CROSS32AR) -cr $@ .$$ $$ $^; mv $@ .$$ $$ $@
2005-08-16 00:59:13 +04:00
2005-04-17 02:20:36 +04:00
$(patsubst %.c,%.o, $(filter %.c, $(src-boot))) : %.o : %.c
$( call if_changed_dep,bootcc)
$(patsubst %.S,%.o, $(filter %.S, $(src-boot))) : %.o : %.S
$( call if_changed_dep,bootas)
2006-09-27 16:47:03 +04:00
$(obj)/wrapper.a : $( obj -wlib )
$( call cmd,bootar)
2005-04-17 02:20:36 +04:00
2006-10-13 19:07:01 +04:00
hostprogs-y := addnote addRamDisk hack-coff mktree
2005-04-17 02:20:36 +04:00
2006-09-27 16:47:03 +04:00
extra-y := $( obj) /crt0.o $( obj) /wrapper.a $( obj-plat) $( obj) /empty.o \
$( obj) /zImage.lds $( obj) /zImage.coff.lds
2006-01-14 07:04:06 +03:00
2006-09-27 16:47:03 +04:00
wrapper := $( srctree) /$( src) /wrapper
2006-10-13 19:07:01 +04:00
wrapperbits := $( extra-y) $( addprefix $( obj) /,addnote hack-coff mktree)
2005-04-17 02:20:36 +04:00
2006-09-27 16:47:03 +04:00
#############
# Bits for building various flavours of zImage
2005-04-17 02:20:36 +04:00
2006-09-27 16:47:03 +04:00
i f n e q ( $( CROSS 32_COMPILE ) , )
2006-09-30 05:54:09 +04:00
CROSSWRAP := -C " $( CROSS32_COMPILE) "
2006-09-27 16:47:03 +04:00
e l s e
i f n e q ( $( CROSS_COMPILE ) , )
2006-09-30 05:54:09 +04:00
CROSSWRAP := -C " $( CROSS_COMPILE) "
2006-09-27 16:47:03 +04:00
e n d i f
e n d i f
2005-04-17 02:20:36 +04:00
2006-09-27 16:47:03 +04:00
quiet_cmd_wrap = WRAP $@
2006-10-04 13:17:32 +04:00
cmd_wrap = $( CONFIG_SHELL) $( wrapper) -c -o $@ -p $2 $( CROSSWRAP) vmlinux
2006-09-27 16:47:03 +04:00
quiet_cmd_wrap_initrd = WRAP $@
cmd_wrap_initrd = $( wrapper) -c -o $@ -p $2 $( CROSSWRAP) \
-i $( obj) /ramdisk.image.gz vmlinux
2005-04-17 02:20:36 +04:00
2006-09-27 16:47:03 +04:00
$(obj)/zImage.chrp : vmlinux $( wrapperbits )
$( call cmd,wrap,chrp)
2005-08-11 04:57:42 +04:00
2006-09-27 16:47:03 +04:00
$(obj)/zImage.initrd.chrp : vmlinux $( wrapperbits )
$( call cmd,wrap_initrd,chrp)
2005-04-17 02:20:36 +04:00
2006-09-27 16:47:03 +04:00
$(obj)/zImage.pseries : vmlinux $( wrapperbits )
$( call cmd,wrap,pseries)
2006-01-15 05:00:08 +03:00
2006-09-27 16:47:03 +04:00
$(obj)/zImage.initrd.pseries : vmlinux $( wrapperbits )
$( call cmd,wrap_initrd,pseries)
2006-01-14 07:04:06 +03:00
2006-09-27 16:47:03 +04:00
$(obj)/zImage.pmac : vmlinux $( wrapperbits )
$( call cmd,wrap,pmac)
2005-04-17 02:20:36 +04:00
2006-09-27 16:47:03 +04:00
$(obj)/zImage.initrd.pmac : vmlinux $( wrapperbits )
$( call cmd,wrap_initrd,pmac)
2005-04-17 02:20:36 +04:00
2006-09-27 16:47:03 +04:00
$(obj)/zImage.coff : vmlinux $( wrapperbits )
$( call cmd,wrap,pmaccoff)
2005-04-17 02:20:36 +04:00
2006-09-27 16:47:03 +04:00
$(obj)/zImage.initrd.coff : vmlinux $( wrapperbits )
$( call cmd,wrap_initrd,pmaccoff)
$(obj)/zImage.miboot : vmlinux $( wrapperbits )
$( call cmd,wrap,miboot)
2005-04-17 02:20:36 +04:00
2006-09-27 16:47:03 +04:00
$(obj)/zImage.initrd.miboot : vmlinux $( wrapperbits )
$( call cmd,wrap_initrd,miboot)
2005-08-16 00:59:13 +04:00
2006-09-27 16:47:03 +04:00
$(obj)/uImage : vmlinux $( wrapperbits )
$( call cmd,wrap,uboot)
2006-10-08 02:33:53 +04:00
image-$(CONFIG_PPC_PSERIES) += zImage.pseries
image-$(CONFIG_PPC_MAPLE) += zImage.pseries
image-$(CONFIG_PPC_IBM_CELL_BLADE) += zImage.pseries
image-$(CONFIG_PPC_CHRP) += zImage.chrp
image-$(CONFIG_PPC_PMAC) += zImage.pmac
image-$(CONFIG_DEFAULT_UIMAGE) += uImage
2006-01-14 07:04:06 +03:00
2006-01-15 05:00:08 +03:00
# For 32-bit powermacs, build the COFF and miboot images
# as well as the ELF images.
2006-09-27 16:47:03 +04:00
i f e q ( $( CONFIG_PPC 32) , y )
image-$(CONFIG_PPC_PMAC) += zImage.coff zImage.miboot
e n d i f
initrd-y := $( patsubst zImage%, zImage.initrd%, $( image-y) )
$(obj)/zImage : $( addprefix $ ( obj ) /, $ ( image -y ) )
@rm -f $@ ; ln $< $@
$(obj)/zImage.initrd : $( addprefix $ ( obj ) /, $ ( initrd -y ) )
@rm -f $@ ; ln $< $@
install : $( CONFIGURE ) $( image -y )
sh -x $( srctree) /$( src) /install.sh " $( KERNELRELEASE) " vmlinux System.map " $( INSTALL_PATH) " $<
clean-files += $( addprefix $( objtree) /, $( obj-boot) vmlinux.strip.gz)
clean-files += $( addprefix $( objtree) /, $( obj-boot) vmlinux.bin.gz)