qemu/roms/Makefile
<<
>>
Prefs
   1
   2vgabios_variants := stdvga cirrus vmware qxl isavga virtio
   3vgabios_targets  := $(subst -isavga,,$(patsubst %,vgabios-%.bin,$(vgabios_variants)))
   4pxerom_variants  := e1000 eepro100 ne2k_pci pcnet rtl8139 virtio
   5pxerom_targets   := 8086100e 80861209 10500940 10222000 10ec8139 1af41000
   6
   7pxe-rom-e1000    efi-rom-e1000    : VID := 8086
   8pxe-rom-e1000    efi-rom-e1000    : DID := 100e
   9pxe-rom-eepro100 efi-rom-eepro100 : VID := 8086
  10pxe-rom-eepro100 efi-rom-eepro100 : DID := 1209
  11pxe-rom-ne2k_pci efi-rom-ne2k_pci : VID := 1050
  12pxe-rom-ne2k_pci efi-rom-ne2k_pci : DID := 0940
  13pxe-rom-pcnet    efi-rom-pcnet    : VID := 1022
  14pxe-rom-pcnet    efi-rom-pcnet    : DID := 2000
  15pxe-rom-rtl8139  efi-rom-rtl8139  : VID := 10ec
  16pxe-rom-rtl8139  efi-rom-rtl8139  : DID := 8139
  17pxe-rom-virtio   efi-rom-virtio   : VID := 1af4
  18pxe-rom-virtio   efi-rom-virtio   : DID := 1000
  19
  20#
  21# cross compiler auto detection
  22#
  23path := $(subst :, ,$(PATH))
  24system := $(shell uname -s | tr "A-Z" "a-z")
  25
  26# first find cross binutils in path
  27find-cross-ld = $(firstword $(wildcard $(patsubst %,%/$(1)-*$(system)*-ld,$(path))))
  28# then check we have cross gcc too
  29find-cross-gcc = $(firstword $(wildcard $(patsubst %ld,%gcc,$(call find-cross-ld,$(1)))))
  30# finally strip off path + toolname so we get the prefix
  31find-cross-prefix = $(subst gcc,,$(notdir $(call find-cross-gcc,$(1))))
  32
  33powerpc64_cross_prefix := $(call find-cross-prefix,powerpc64)
  34powerpc_cross_prefix := $(call find-cross-prefix,powerpc)
  35x86_64_cross_prefix := $(call find-cross-prefix,x86_64)
  36
  37# tag our seabios builds
  38SEABIOS_EXTRAVERSION="-prebuilt.qemu-project.org"
  39
  40#
  41# EfiRom utility is shipped with edk2 / tianocore, in BaseTools/
  42#
  43# We need that to combine multiple images (legacy bios,
  44# efi ia32, efi x64) into a single rom binary.
  45#
  46# We try to find it in the path.  You can also pass the location on
  47# the command line, i.e. "make EFIROM=/path/to/EfiRom efirom"
  48#
  49EFIROM ?= $(shell which EfiRom 2>/dev/null)
  50
  51default:
  52        @echo "nothing is build by default"
  53        @echo "available build targets:"
  54        @echo "  bios           -- update bios.bin (seabios)"
  55        @echo "  seavgabios     -- update vgabios binaries (seabios)"
  56        @echo "  lgplvgabios    -- update vgabios binaries (lgpl)"
  57        @echo "  sgabios        -- update sgabios binaries"
  58        @echo "  pxerom         -- update nic roms (bios only)"
  59        @echo "  efirom         -- update nic roms (bios+efi, this needs"
  60        @echo "                    the EfiRom utility from edk2 / tianocore)"
  61        @echo "  slof           -- update slof.bin"
  62        @echo "  u-boot.e500    -- update u-boot.e500"
  63
  64bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k
  65        cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin
  66        cp seabios/builds/seabios-256k/bios.bin ../pc-bios/bios-256k.bin
  67
  68seavgabios: $(patsubst %,seavgabios-%,$(vgabios_variants))
  69
  70seavgabios-isavga: build-seabios-config-vga-isavga
  71        cp seabios/builds/vga-isavga/vgabios.bin ../pc-bios/vgabios.bin
  72
  73seavgabios-%: build-seabios-config-vga-%
  74        cp seabios/builds/vga-$*/vgabios.bin ../pc-bios/vgabios-$*.bin
  75
  76build-seabios-config-%: config.%
  77        mkdir -p seabios/builds/$*
  78        cp $< seabios/builds/$*/.config
  79        $(MAKE) -C seabios \
  80                EXTRAVERSION=$(SEABIOS_EXTRAVERSION) \
  81                CROSS_COMPILE=$(x86_64_cross_prefix) \
  82                KCONFIG_CONFIG=$(CURDIR)/seabios/builds/$*/.config \
  83                OUT=$(CURDIR)/seabios/builds/$*/ oldnoconfig
  84        $(MAKE) -C seabios \
  85                EXTRAVERSION=$(SEABIOS_EXTRAVERSION) \
  86                CROSS_COMPILE=$(x86_64_cross_prefix) \
  87                KCONFIG_CONFIG=$(CURDIR)/seabios/builds/$*/.config \
  88                OUT=$(CURDIR)/seabios/builds/$*/ all
  89
  90
  91lgplvgabios: $(patsubst %,lgplvgabios-%,$(vgabios_variants))
  92
  93lgplvgabios-isavga: build-lgplvgabios
  94        cp vgabios/VGABIOS-lgpl-latest.bin ../pc-bios/vgabios.bin
  95lgplvgabios-%: build-lgplvgabios
  96        cp vgabios/VGABIOS-lgpl-latest.$*.bin ../pc-bios/vgabios-$*.bin
  97
  98build-lgplvgabios:
  99        $(MAKE) -C vgabios $(vgabios_targets)
 100
 101
 102.PHONY: sgabios
 103sgabios:
 104        $(MAKE) -C sgabios
 105        cp sgabios/sgabios.bin ../pc-bios
 106
 107
 108pxerom: $(patsubst %,pxe-rom-%,$(pxerom_variants))
 109
 110pxe-rom-%: build-pxe-roms
 111        cp ipxe/src/bin/$(VID)$(DID).rom ../pc-bios/pxe-$*.rom
 112
 113efirom: $(patsubst %,efi-rom-%,$(pxerom_variants))
 114
 115efi-rom-%: build-pxe-roms build-efi-roms
 116        $(EFIROM) -f "0x$(VID)" -i "0x$(DID)" -l 0x02 \
 117                -b ipxe/src/bin/$(VID)$(DID).rom \
 118                -ec ipxe/src/bin-i386-efi/$(VID)$(DID).efidrv \
 119                -ec ipxe/src/bin-x86_64-efi/$(VID)$(DID).efidrv \
 120                -o ../pc-bios/efi-$*.rom
 121
 122build-pxe-roms:
 123        $(MAKE) -C ipxe/src CONFIG=qemu \
 124                CROSS_COMPILE=$(x86_64_cross_prefix) \
 125                $(patsubst %,bin/%.rom,$(pxerom_targets))
 126
 127build-efi-roms: build-pxe-roms
 128        $(MAKE) -C ipxe/src CONFIG=qemu \
 129                CROSS_COMPILE=$(x86_64_cross_prefix) \
 130                $(patsubst %,bin-i386-efi/%.efidrv,$(pxerom_targets)) \
 131                $(patsubst %,bin-x86_64-efi/%.efidrv,$(pxerom_targets))
 132
 133
 134slof:
 135        $(MAKE) -C SLOF CROSS=$(powerpc64_cross_prefix) qemu
 136        cp SLOF/boot_rom.bin ../pc-bios/slof.bin
 137
 138u-boot.e500:
 139        $(MAKE) -C u-boot O=build.e500 qemu-ppce500_config
 140        $(MAKE) -C u-boot CROSS_COMPILE=$(powerpc_cross_prefix) \
 141                O=build.e500
 142        $(powerpc_cross_prefix)strip u-boot/build.e500/u-boot -o \
 143                ../pc-bios/u-boot.e500
 144
 145clean:
 146        rm -rf seabios/.config seabios/out seabios/builds
 147        $(MAKE) -C vgabios clean
 148        rm -f vgabios/VGABIOS-lgpl-latest*
 149        $(MAKE) -C sgabios clean
 150        rm -f sgabios/.depend
 151        $(MAKE) -C ipxe/src veryclean
 152        $(MAKE) -C SLOF clean
 153        rm -rf u-boot/build.e500
 154