Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame^] | 1 | # Makefile for making bootable images on various OpenFirmware machines. |
| 2 | # |
| 3 | # Paul Mackerras January 1997 |
| 4 | # XCOFF bootable images for PowerMacs |
| 5 | # Geert Uytterhoeven September 1997 |
| 6 | # ELF bootable iamges for CHRP machines. |
| 7 | # Tom Rini January 2001 |
| 8 | # Cleaned up, moved into arch/ppc/boot/pmac |
| 9 | # Tom Rini July/August 2002 |
| 10 | # Merged 'chrp' and 'pmac' into 'openfirmware', and cleaned up the |
| 11 | # rules. |
| 12 | |
| 13 | zImage.initrd znetboot.initrd: del-ramdisk-sec := -R .ramdisk |
| 14 | zImage.initrd znetboot.initrd: initrd := .initrd |
| 15 | |
| 16 | |
| 17 | boot := arch/ppc/boot |
| 18 | common := $(boot)/common |
| 19 | utils := $(boot)/utils |
| 20 | bootlib := $(boot)/lib |
| 21 | of1275 := $(boot)/of1275 |
| 22 | images := $(boot)/images |
| 23 | |
| 24 | OBJCOPY_ARGS := -O aixcoff-rs6000 -R .stab -R .stabstr -R .comment |
| 25 | COFF_LD_ARGS := -T $(srctree)/$(boot)/ld.script -e _start -Ttext 0x00500000 \ |
| 26 | -Bstatic |
| 27 | CHRP_LD_ARGS := -T $(srctree)/$(boot)/ld.script -e _start -Ttext 0x00800000 |
| 28 | NEWWORLD_LD_ARGS:= -T $(srctree)/$(boot)/ld.script -e _start -Ttext 0x01000000 |
| 29 | |
| 30 | COMMONOBJS := start.o misc.o common.o |
| 31 | COFFOBJS := coffcrt0.o $(COMMONOBJS) coffmain.o |
| 32 | CHRPOBJS := crt0.o $(COMMONOBJS) chrpmain.o |
| 33 | NEWWORLDOBJS := crt0.o $(COMMONOBJS) newworldmain.o |
| 34 | |
| 35 | targets := $(COFFOBJS) $(CHRPOBJS) $(NEWWORLDOBJS) dummy.o |
| 36 | COFFOBJS := $(addprefix $(obj)/, $(COFFOBJS)) |
| 37 | CHRPOBJS := $(addprefix $(obj)/, $(CHRPOBJS)) |
| 38 | NEWWORLDOBJS := $(addprefix $(obj)/, $(NEWWORLDOBJS)) |
| 39 | |
| 40 | LIBS := lib/lib.a $(bootlib)/lib.a $(of1275)/lib.a $(common)/lib.a |
| 41 | |
| 42 | HACKCOFF := $(utils)/hack-coff |
| 43 | |
| 44 | ifdef CONFIG_SMP |
| 45 | END := .smp |
| 46 | endif |
| 47 | ifdef CONFIG_PPC64BRIDGE |
| 48 | END += .64 |
| 49 | endif |
| 50 | |
| 51 | |
| 52 | $(images)/ramdisk.image.gz: |
| 53 | @echo ' MISSING $@' |
| 54 | @echo ' RAM disk image must be provided separately' |
| 55 | @/bin/false |
| 56 | |
| 57 | objcpxmon-$(CONFIG_XMON) := --add-section=.sysmap=System.map \ |
| 58 | --set-section-flags=.sysmap=contents,alloc,load,readonly,data |
| 59 | quiet_cmd_genimage = GEN $@ |
| 60 | cmd_genimage = $(OBJCOPY) -R .comment \ |
| 61 | --add-section=.image=$(images)/vmlinux.gz \ |
| 62 | --set-section-flags=.image=contents,alloc,load,readonly,data \ |
| 63 | $(objcpxmon-y) $< $@ |
| 64 | |
| 65 | targets += image.o |
| 66 | $(obj)/image.o: $(obj)/dummy.o $(images)/vmlinux.gz FORCE |
| 67 | $(call if_changed,genimage) |
| 68 | |
| 69 | # Place the ramdisk in the initrd image. |
| 70 | quiet_cmd_genimage-initrd = GEN $@ |
| 71 | cmd_genimage-initrd = $(OBJCOPY) $< $@ \ |
| 72 | --add-section=.ramdisk=$(images)/ramdisk.image.gz \ |
| 73 | --set-section-flags=.ramdisk=contents,alloc,load,readonly,data |
| 74 | targets += image.initrd.o |
| 75 | $(obj)/image.initrd.o: $(obj)/image.o $(images)/ramdisk.image.gz FORCE |
| 76 | $(call if_changed,genimage-initrd) |
| 77 | |
| 78 | # Create the note section for New-World PowerMacs. |
| 79 | quiet_cmd_mknote = MKNOTE $@ |
| 80 | cmd_mknote = $(utils)/mknote > $@ |
| 81 | targets += note |
| 82 | $(obj)/note: $(utils)/mknote FORCE |
| 83 | $(call if_changed,mknote) |
| 84 | |
| 85 | |
| 86 | $(obj)/coffcrt0.o: EXTRA_AFLAGS := -traditional -DXCOFF |
| 87 | $(obj)/crt0.o: EXTRA_AFLAGS := -traditional |
| 88 | targets += coffcrt0.o crt0.o |
| 89 | $(obj)/coffcrt0.o $(obj)/crt0.o: $(common)/crt0.S FORCE |
| 90 | $(call if_changed_dep,as_o_S) |
| 91 | |
| 92 | quiet_cmd_gencoffb = COFF $@ |
| 93 | cmd_gencoffb = $(LD) -o $@ $(COFF_LD_ARGS) $(COFFOBJS) $< $(LIBS) && \ |
| 94 | $(OBJCOPY) $@ $@ -R .comment $(del-ramdisk-sec) |
| 95 | targets += coffboot |
| 96 | $(obj)/coffboot: $(obj)/image.o $(COFFOBJS) $(LIBS) $(srctree)/$(boot)/ld.script FORCE |
| 97 | $(call if_changed,gencoffb) |
| 98 | targets += coffboot.initrd |
| 99 | $(obj)/coffboot.initrd: $(obj)/image.initrd.o $(COFFOBJS) $(LIBS) \ |
| 100 | $(srctree)/$(boot)/ld.script FORCE |
| 101 | $(call if_changed,gencoffb) |
| 102 | |
| 103 | |
| 104 | quiet_cmd_gen-coff = COFF $@ |
| 105 | cmd_gen-coff = $(OBJCOPY) $(OBJCOPY_ARGS) $< $@ && \ |
| 106 | $(HACKCOFF) $@ && \ |
| 107 | ln -sf $(notdir $@) $(images)/zImage$(initrd).pmac |
| 108 | |
| 109 | $(images)/vmlinux.coff: $(obj)/coffboot |
| 110 | $(call cmd,gen-coff) |
| 111 | |
| 112 | $(images)/vmlinux.initrd.coff: $(obj)/coffboot.initrd |
| 113 | $(call cmd,gen-coff) |
| 114 | |
| 115 | quiet_cmd_gen-elf-pmac = ELF $@ |
| 116 | cmd_gen-elf-pmac = $(LD) $(NEWWORLD_LD_ARGS) -o $@ \ |
| 117 | $(NEWWORLDOBJS) $(LIBS) $< && \ |
| 118 | $(OBJCOPY) $@ $@ --add-section=.note=$(obj)/note \ |
| 119 | -R .comment $(del-ramdisk-sec) |
| 120 | |
| 121 | $(images)/vmlinux.elf-pmac: $(obj)/image.o $(NEWWORLDOBJS) $(LIBS) \ |
| 122 | $(obj)/note $(srctree)/$(boot)/ld.script |
| 123 | $(call cmd,gen-elf-pmac) |
| 124 | $(images)/vmlinux.initrd.elf-pmac: $(obj)/image.initrd.o $(NEWWORLDOBJS) \ |
| 125 | $(LIBS) $(obj)/note \ |
| 126 | $(srctree)/$(boot)/ld.script |
| 127 | $(call cmd,gen-elf-pmac) |
| 128 | |
| 129 | quiet_cmd_gen-chrp = CHRP $@ |
| 130 | cmd_gen-chrp = $(LD) $(CHRP_LD_ARGS) -o $@ $(CHRPOBJS) $< $(LIBS) && \ |
| 131 | $(OBJCOPY) $@ $@ -R .comment $(del-ramdisk-sec) |
| 132 | |
| 133 | $(images)/zImage.chrp: $(obj)/image.o $(CHRPOBJS) $(LIBS) \ |
| 134 | $(srctree)/$(boot)/ld.script |
| 135 | $(call cmd,gen-chrp) |
| 136 | $(images)/zImage.initrd.chrp: $(obj)/image.initrd.o $(CHRPOBJS) $(LIBS) \ |
| 137 | $(srctree)/$(boot)/ld.script |
| 138 | $(call cmd,gen-chrp) |
| 139 | |
| 140 | quiet_cmd_addnote = ADDNOTE $@ |
| 141 | cmd_addnote = cat $< > $@ && $(utils)/addnote $@ |
| 142 | $(images)/zImage.chrp-rs6k $(images)/zImage.initrd.chrp-rs6k: \ |
| 143 | %-rs6k: % |
| 144 | $(call cmd,addnote) |
| 145 | |
| 146 | quiet_cmd_gen-miboot = GEN $@ |
| 147 | cmd_gen-miboot = $(OBJCOPY) $(OBJCOPY_ARGS) \ |
| 148 | --add-section=$1=$(word 2, $^) $< $@ |
| 149 | $(images)/miboot.image: $(obj)/dummy.o $(images)/vmlinux.gz |
| 150 | $(call cmd,gen-miboot,image) |
| 151 | |
| 152 | $(images)/miboot.initrd.image: $(images)/miboot.image $(images)/ramdisk.image.gz |
| 153 | $(call cmd,gen-miboot,initrd) |
| 154 | |
| 155 | # The targets used on the make command-line |
| 156 | |
| 157 | .PHONY: zImage zImage.initrd |
| 158 | zImage: $(images)/vmlinux.coff \ |
| 159 | $(images)/vmlinux.elf-pmac \ |
| 160 | $(images)/zImage.chrp \ |
| 161 | $(images)/zImage.chrp-rs6k \ |
| 162 | $(images)/miboot.image |
| 163 | @echo ' kernel: $@ is ready ($<)' |
| 164 | zImage.initrd: $(images)/vmlinux.initrd.coff \ |
| 165 | $(images)/vmlinux.initrd.elf-pmac \ |
| 166 | $(images)/zImage.initrd.chrp \ |
| 167 | $(images)/zImage.initrd.chrp-rs6k \ |
| 168 | $(images)/miboot.initrd.image |
| 169 | @echo ' kernel: $@ is ready ($<)' |
| 170 | |
| 171 | TFTPIMAGE := /tftpboot/zImage |
| 172 | |
| 173 | .PHONY: znetboot znetboot.initrd |
| 174 | znetboot: $(images)/vmlinux.coff \ |
| 175 | $(images)/vmlinux.elf-pmac \ |
| 176 | $(images)/zImage.chrp |
| 177 | cp $(images)/vmlinux.coff $(TFTPIMAGE).pmac$(END) |
| 178 | cp $(images)/vmlinux.elf-pmac $(TFTPIMAGE).pmac$(END).elf |
| 179 | cp $(images)/zImage.chrp $(TFTPIMAGE).chrp$(END) |
| 180 | @echo ' kernel: $@ is ready ($<)' |
| 181 | znetboot.initrd:$(images)/vmlinux.initrd.coff \ |
| 182 | $(images)/vmlinux.initrd.elf-pmac \ |
| 183 | $(images)/zImage.initrd.chrp |
| 184 | cp $(images)/vmlinux.initrd.coff $(TFTPIMAGE).pmac$(END) |
| 185 | cp $(images)/vmlinux.initrd.elf-pmac $(TFTPIMAGE).pmac$(END).elf |
| 186 | cp $(images)/zImage.initrd.chrp $(TFTPIMAGE).chrp$(END) |
| 187 | @echo ' kernel: $@ is ready ($<)' |
| 188 | |