1# Makefile for making ELF bootable images for booting on CHRP
2# using Open Firmware.
3#
4# Geert Uytterhoeven	September 1997
5#
6# Based on coffboot by Paul Mackerras
7# Simplified for ppc64 by Todd Inglett
8#
9# NOTE:	this code is built for 32 bit in ELF32 format even though
10#	it packages a 64 bit kernel.  We do this to simplify the
11#	bootloader and increase compatibility with OpenFirmware.
12#
13#	To this end we need to define BOOTCC, etc, as the tools
14#	needed to build the 32 bit image.  These are normally HOSTCC,
15#	but may be a third compiler if, for example, you are cross
16#	compiling from an intel box.  Once the 64bit ppc gcc is
17#	stable it will probably simply be a compiler switch to
18#	compile for 32bit mode.
19#	To make it easier to setup a cross compiler,
20#	CROSS32_COMPILE is setup as a prefix just like CROSS_COMPILE
21#	in the toplevel makefile.
22
23CROSS32_COMPILE =
24#CROSS32_COMPILE = /usr/local/ppc/bin/powerpc-linux-
25
26BOOTCC = $(CROSS32_COMPILE)gcc
27BOOTCFLAGS = $(HOSTCFLAGS) -I$(HPATH)
28BOOTLD = $(CROSS32_COMPILE)ld
29BOOTAS = $(CROSS32_COMPILE)as
30BOOTAFLAGS = -D__ASSEMBLY__ $(HOSTCFLAGS) -I$(HPATH)
31
32OBJCOPYFLAGS = contents,alloc,load,readonly,data
33
34.c.o:
35	$(BOOTCC) $(BOOTCFLAGS) -c -o $*.o $<
36.S.o:
37	$(BOOTCC) $(BOOTAFLAGS) -traditional -c -o $*.o $<
38
39CFLAGS	= $(CPPFLAGS) -O -fno-builtin -DSTDC_HEADERS
40LD_ARGS = -Ttext 0x00400000 -e _start
41
42OBJS = crt0.o string.o prom.o zImage.o zlib.o imagesize.o
43#LIBS = $(TOPDIR)/lib/lib.a
44LIBS =
45
46ifeq ($(CONFIG_SMP),y)
47TFTPIMAGE=/tftpboot/zImage.chrp.smp
48else
49TFTPIMAGE=/tftpboot/zImage.chrp
50endif
51
52
53ifeq ($(CONFIG_PPC_ISERIES),y)
54all:	vmlinux.sm
55else
56all:	$(TOPDIR)/zImage
57endif
58
59
60znetboot: zImage
61	cp zImage $(TFTPIMAGE)
62
63
64ifeq ($(CONFIG_PPC_ISERIES),y)
65
66addSystemMap: addSystemMap.c
67	$(HOSTCC) $(HOSTCFLAGS) -o addSystemMap addSystemMap.c
68
69vmlinux.sm: $(TOPDIR)/vmlinux addSystemMap
70	./addSystemMap $(TOPDIR)/System.map $(TOPDIR)/vmlinux vmlinux.sm
71
72
73addRamDisk: addRamDisk.c
74	$(HOSTCC) $(HOSTCFLAGS) -o addRamDisk addRamDisk.c
75
76vmlinux.initrd: $(TOPDIR)/vmlinux addRamDisk ramdisk.image.gz $(TOPDIR)/System.map
77	./addRamDisk ramdisk.image.gz $(TOPDIR)/System.map $(TOPDIR)/vmlinux vmlinux.initrd
78
79vmlinux.sminitrd: vmlinux.sm addRamDisk ramdisk.image.gz $(TOPDIR)/System.map
80	./addRamDisk ramdisk.image.gz $(TOPDIR)/System.map vmlinux.sm vmlinux.sminitrd
81
82endif
83
84
85znetboot.initrd: zImage.initrd
86	cp zImage.initrd $(TFTPIMAGE)
87
88addnote: addnote.c
89	$(HOSTCC) $(HOSTCFLAGS) -o addnote addnote.c
90
91
92imagesize.c: $(TOPDIR)/vmlinux
93	ls -l $(TOPDIR)/vmlinux | awk '{printf "/* generated -- do not edit! */\nunsigned long vmlinux_filesize = %d;\n", $$5}' > imagesize.c
94	$(CROSS_COMPILE)nm -n $(TOPDIR)/vmlinux | tail -1 | awk '{printf "unsigned long vmlinux_memsize = 0x%s;\n", substr($$1,8)}' >> imagesize.c
95
96vmlinux .config System.map: % : $(TOPDIR)/%
97	gzip -cvf9 $(TOPDIR)/$@ > kernel-$@.gz
98	$(OBJCOPY) zImage.o \
99		--add-section=.kernel:$@=kernel-$@.gz \
100		--set-section-flags=.kernel:$@=$(OBJCOPYFLAGS)
101
102initrd: ramdisk.image.gz
103	$(OBJCOPY) zImage.o \
104		--add-section=.kernel:$@=ramdisk.image.gz \
105		--set-section-flags=.kernel:$@=$(OBJCOPYFLAGS)
106
107zImage: $(OBJS) addnote vmlinux .config System.map
108	$(BOOTLD) $(LD_ARGS) -T zImage.lds -o $@ $(OBJS) $(LIBS)
109	./addnote $@
110
111zImage.initrd: $(OBJS) addnote vmlinux .config System.map initrd
112	$(BOOTLD) $(LD_ARGS) -T zImage.lds -o $@ $(OBJS) $(LIBS)
113	./addnote $@
114
115clean:
116	rm -f add{note,RamDisk,SystemMap} $(OBJS) initrd.o \
117		vmlinux.{sm,initrd} zImage{,.initrd} imagesize.c \
118		kernel-{vmlinux,.config,System.map}.gz
119
120fastdep:
121	$(TOPDIR)/scripts/mkdep *.[Sch] > .depend
122
123dep:
124	$(CPP) $(CPPFLAGS) -M *.S *.c > .depend
125
126