From 6887581728c9eddf858e7458b6eacbfe3ac68302 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 20 Sep 2013 15:34:27 +0200 Subject: [PATCH 1/9] roms: add 'make clean' Signed-off-by: Gerd Hoffmann --- roms/Makefile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/roms/Makefile b/roms/Makefile index 7a228aed8..b64606067 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -75,3 +75,10 @@ efi-rom-%: ipxe/src/config/local/general.h ipxe/src/config/local/%: config.ipxe.% cp $< $@ + + +clean: + rm -rf seabios/.config seabios/out + $(MAKE) $(MAKEFLAGS) -C vgabios clean + rm -f vgabios/VGABIOS-lgpl-latest* + $(MAKE) $(MAKEFLAGS) -C ipxe/src veryclean From 1ede4dd04b4f16a281a92d6a44905c63fb1635cf Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 20 Sep 2013 14:29:29 +0200 Subject: [PATCH 2/9] roms: enable parallel builds for 'make lgplvgabios' Recurse into vgabios once, adjust dependencies, call make using $(MAKE) $(MAKEFLAGS) so jobserver mode works. Signed-off-by: Gerd Hoffmann --- roms/Makefile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/roms/Makefile b/roms/Makefile index b64606067..6d4330fb2 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -1,5 +1,6 @@ vgabios_variants := stdvga cirrus vmware qxl +vgabios_targets := $(patsubst %,vgabios-%.bin,$(vgabios_variants)) pxerom_variants := e1000 eepro100 ne2k_pci pcnet rtl8139 virtio pxe-rom-e1000 efi-rom-e1000 : VID := 8086 @@ -49,12 +50,16 @@ seavgabios-%: config.vga.% make -C seabios out/vgabios.bin cp seabios/out/vgabios.bin ../pc-bios/vgabios-$*.bin + lgplvgabios: $(patsubst %,lgplvgabios-%,$(vgabios_variants)) -lgplvgabios-%: - make -C vgabios vgabios-$*.bin +lgplvgabios-%: build-lgplvgabios cp vgabios/VGABIOS-lgpl-latest.$*.bin ../pc-bios/vgabios-$*.bin +build-lgplvgabios: + $(MAKE) $(MAKEFLAGS) -C vgabios $(vgabios_targets) + + pxerom: $(patsubst %,pxe-rom-%,$(pxerom_variants)) pxe-rom-%: ipxe/src/config/local/general.h From 5a7bd33385f25ccd09725899b380e0c62f6d5733 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 20 Sep 2013 14:35:31 +0200 Subject: [PATCH 3/9] roms: build lgplvgabios isavga variant Add logic to also build+install the isavga vgabios variant. Signed-off-by: Gerd Hoffmann --- roms/Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/roms/Makefile b/roms/Makefile index 6d4330fb2..11d783711 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -1,6 +1,6 @@ -vgabios_variants := stdvga cirrus vmware qxl -vgabios_targets := $(patsubst %,vgabios-%.bin,$(vgabios_variants)) +vgabios_variants := stdvga cirrus vmware qxl isavga +vgabios_targets := $(subst -isavga,,$(patsubst %,vgabios-%.bin,$(vgabios_variants))) pxerom_variants := e1000 eepro100 ne2k_pci pcnet rtl8139 virtio pxe-rom-e1000 efi-rom-e1000 : VID := 8086 @@ -53,6 +53,8 @@ seavgabios-%: config.vga.% lgplvgabios: $(patsubst %,lgplvgabios-%,$(vgabios_variants)) +lgplvgabios-isavga: build-lgplvgabios + cp vgabios/VGABIOS-lgpl-latest.bin ../pc-bios/vgabios.bin lgplvgabios-%: build-lgplvgabios cp vgabios/VGABIOS-lgpl-latest.$*.bin ../pc-bios/vgabios-$*.bin From 46ef7f33a200a903dfcf7174ef5db4a09dc84f06 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 20 Sep 2013 15:26:26 +0200 Subject: [PATCH 4/9] roms: parallel ipxe builds Enable parallel ipxe builds. Reduce the recursive make calls. Call recursive make properly using $(MAKE) $(MAKEFLAGS). Signed-off-by: Gerd Hoffmann --- roms/Makefile | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/roms/Makefile b/roms/Makefile index 11d783711..9672625a9 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -2,6 +2,7 @@ vgabios_variants := stdvga cirrus vmware qxl isavga vgabios_targets := $(subst -isavga,,$(patsubst %,vgabios-%.bin,$(vgabios_variants))) pxerom_variants := e1000 eepro100 ne2k_pci pcnet rtl8139 virtio +pxerom_targets := 8086100e 80861209 10500940 10222000 10ec8139 1af41000 pxe-rom-e1000 efi-rom-e1000 : VID := 8086 pxe-rom-e1000 efi-rom-e1000 : DID := 100e @@ -64,22 +65,27 @@ build-lgplvgabios: pxerom: $(patsubst %,pxe-rom-%,$(pxerom_variants)) -pxe-rom-%: ipxe/src/config/local/general.h - make -C ipxe/src bin/$(VID)$(DID).rom +pxe-rom-%: build-pxe-roms cp ipxe/src/bin/$(VID)$(DID).rom ../pc-bios/pxe-$*.rom efirom: $(patsubst %,efi-rom-%,$(pxerom_variants)) -efi-rom-%: ipxe/src/config/local/general.h - make -C ipxe/src bin/$(VID)$(DID).rom - make -C ipxe/src bin-i386-efi/$(VID)$(DID).efidrv - make -C ipxe/src bin-x86_64-efi/$(VID)$(DID).efidrv +efi-rom-%: build-pxe-roms build-efi-roms $(EFIROM) -f "0x$(VID)" -i "0x$(DID)" -l 0x02 \ -b ipxe/src/bin/$(VID)$(DID).rom \ -ec ipxe/src/bin-i386-efi/$(VID)$(DID).efidrv \ -ec ipxe/src/bin-x86_64-efi/$(VID)$(DID).efidrv \ -o ../pc-bios/efi-$*.rom +build-pxe-roms: ipxe/src/config/local/general.h + $(MAKE) $(MAKEFLAGS) -C ipxe/src GITVERSION="" \ + $(patsubst %,bin/%.rom,$(pxerom_targets)) + +build-efi-roms: build-pxe-roms ipxe/src/config/local/general.h + $(MAKE) $(MAKEFLAGS) -C ipxe/src GITVERSION="" \ + $(patsubst %,bin-i386-efi/%.efidrv,$(pxerom_targets)) \ + $(patsubst %,bin-x86_64-efi/%.efidrv,$(pxerom_targets)) + ipxe/src/config/local/%: config.ipxe.% cp $< $@ From 93a2b3c470cbf1523478e8272816e3a22400775d Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Mon, 23 Sep 2013 10:24:10 +0200 Subject: [PATCH 5/9] roms: rewrite scripts/refresh-pxe-roms.sh Just use the Makefile in roms/ Signed-off-by: Gerd Hoffmann --- scripts/refresh-pxe-roms.sh | 80 +++---------------------------------- 1 file changed, 6 insertions(+), 74 deletions(-) diff --git a/scripts/refresh-pxe-roms.sh b/scripts/refresh-pxe-roms.sh index 14d586070..90fc0b374 100755 --- a/scripts/refresh-pxe-roms.sh +++ b/scripts/refresh-pxe-roms.sh @@ -21,79 +21,11 @@ # Usage: Run from root of qemu tree # ./scripts/refresh-pxe-roms.sh -QEMU_DIR=$PWD -ROM_DIR="pc-bios" -BUILD_DIR="roms/ipxe" -LOCAL_CONFIG="src/config/local/general.h" - -function cleanup () -{ - if [ -n "$SAVED_CONFIG" ]; then - cp "$SAVED_CONFIG" "$BUILD_DIR"/"$LOCAL_CONFIG" - rm "$SAVED_CONFIG" - fi - cd "$QEMU_DIR" -} - -function make_rom () -{ - cd "$BUILD_DIR"/src - - BUILD_LOG=$(mktemp) - - echo Building "$2"... - make bin/"$1".rom > "$BUILD_LOG" 2>&1 - if [ $? -ne 0 ]; then - echo Build failed - tail --lines=100 "$BUILD_LOG" - rm "$BUILD_LOG" - cleanup - exit 1 - fi - rm "$BUILD_LOG" - - cp bin/"$1".rom "$QEMU_DIR"/"$ROM_DIR"/"$2" - - cd "$QEMU_DIR" -} - -if [ ! -d "$QEMU_DIR"/"$ROM_DIR" ]; then - echo "error: can't find $ROM_DIR directory," \ - "run me from the root of the qemu tree" - exit 1 +targets="pxerom" +if test -x "$(which EfiRom 2>/dev/null)"; then + targets="$targets efirom" fi -if [ ! -d "$BUILD_DIR"/src ]; then - echo "error: $BUILD_DIR not populated, try:" - echo " git submodule init $BUILD_DIR" - echo " git submodule update $BUILD_DIR" - exit 1 -fi - -if [ -e "$BUILD_DIR"/"$LOCAL_CONFIG" ]; then - SAVED_CONFIG=$(mktemp) - cp "$BUILD_DIR"/"$LOCAL_CONFIG" "$SAVED_CONFIG" -fi - -echo "#undef BANNER_TIMEOUT" > "$BUILD_DIR"/"$LOCAL_CONFIG" -echo "#define BANNER_TIMEOUT 0" >> "$BUILD_DIR"/"$LOCAL_CONFIG" - -IPXE_VERSION=$(cd "$BUILD_DIR" && git describe --tags) -if [ -z "$IPXE_VERSION" ]; then - echo "error: unable to retrieve git version" - cleanup - exit 1 -fi - -echo "#undef PRODUCT_NAME" >> "$BUILD_DIR"/"$LOCAL_CONFIG" -echo "#define PRODUCT_NAME \"iPXE $IPXE_VERSION\"" >> "$BUILD_DIR"/"$LOCAL_CONFIG" - -make_rom 8086100e pxe-e1000.rom -make_rom 80861209 pxe-eepro100.rom -make_rom 10500940 pxe-ne2k_pci.rom -make_rom 10222000 pxe-pcnet.rom -make_rom 10ec8139 pxe-rtl8139.rom -make_rom 1af41000 pxe-virtio.rom - -echo done -cleanup +cd roms +make -j4 $targets || exit 1 +make clean From bcf06c15e7beb31a9839951ee24a809b6919a85e Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 20 Sep 2013 14:51:10 +0200 Subject: [PATCH 6/9] roms: add rules to build slof Add some logic to detect cross compilers. Add support for "make slof", which should JustWork[tm] if you are on a ppx64 machine or have a ppc64 cross compiler installed somewhere in your path. Signed-off-by: Gerd Hoffmann --- roms/Makefile | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/roms/Makefile b/roms/Makefile index 9672625a9..5fcc77d7c 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -17,6 +17,21 @@ pxe-rom-rtl8139 efi-rom-rtl8139 : DID := 8139 pxe-rom-virtio efi-rom-virtio : VID := 1af4 pxe-rom-virtio efi-rom-virtio : DID := 1000 +# +# cross compiler auto detection +# +path := $(subst :, ,$(PATH)) +system := $(shell uname -s | tr "A-Z" "a-z") + +# first find cross binutils in path +find-cross-ld = $(firstword $(wildcard $(patsubst %,%/$(1)-*$(system)*-ld,$(path)))) +# then check we have cross gcc too +find-cross-gcc = $(firstword $(wildcard $(patsubst %ld,%gcc,$(call find-cross-ld,$(1))))) +# finally strip off path + toolname so we get the prefix +find-cross-prefix = $(subst gcc,,$(notdir $(call find-cross-gcc,$(1)))) + +powerpc64_cross_prefix := $(call find-cross-prefix,powerpc64) + # # EfiRom utility is shipped with edk2 / tianocore, in BaseTools/ # @@ -37,6 +52,7 @@ default: @echo " pxerom -- update nic roms (bios only)" @echo " efirom -- update nic roms (bios+efi, this needs" @echo " the EfiRom utility from edk2 / tianocore)" + @echo " slof -- update slof.bin" bios: config.seabios sh configure-seabios.sh $< @@ -90,8 +106,14 @@ ipxe/src/config/local/%: config.ipxe.% cp $< $@ +slof: + $(MAKE) $(MAKEFLAGS) -C SLOF CROSS=$(powerpc64_cross_prefix) qemu + cp SLOF/boot_rom.bin ../pc-bios/slof.bin + + clean: rm -rf seabios/.config seabios/out $(MAKE) $(MAKEFLAGS) -C vgabios clean rm -f vgabios/VGABIOS-lgpl-latest* $(MAKE) $(MAKEFLAGS) -C ipxe/src veryclean + $(MAKE) $(MAKEFLAGS) -C SLOF clean From 779fa9d7060c547059ff1993dd38bea565d7f2e7 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Mon, 23 Sep 2013 11:05:48 +0200 Subject: [PATCH 7/9] roms: enable ipxe cross builds --- roms/Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/roms/Makefile b/roms/Makefile index 5fcc77d7c..1966f0408 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -31,6 +31,7 @@ find-cross-gcc = $(firstword $(wildcard $(patsubst %ld,%gcc,$(call find-cross-ld find-cross-prefix = $(subst gcc,,$(notdir $(call find-cross-gcc,$(1)))) powerpc64_cross_prefix := $(call find-cross-prefix,powerpc64) +x86_64_cross_prefix := $(call find-cross-prefix,x86_64) # # EfiRom utility is shipped with edk2 / tianocore, in BaseTools/ @@ -95,10 +96,12 @@ efi-rom-%: build-pxe-roms build-efi-roms build-pxe-roms: ipxe/src/config/local/general.h $(MAKE) $(MAKEFLAGS) -C ipxe/src GITVERSION="" \ + CROSS_COMPILE=$(x86_64_cross_prefix) \ $(patsubst %,bin/%.rom,$(pxerom_targets)) build-efi-roms: build-pxe-roms ipxe/src/config/local/general.h $(MAKE) $(MAKEFLAGS) -C ipxe/src GITVERSION="" \ + CROSS_COMPILE=$(x86_64_cross_prefix) \ $(patsubst %,bin-i386-efi/%.efidrv,$(pxerom_targets)) \ $(patsubst %,bin-x86_64-efi/%.efidrv,$(pxerom_targets)) From 95f7c6803c71ca6f74e8d59da3fd189230d1c466 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 24 Sep 2013 15:38:28 +0200 Subject: [PATCH 8/9] roms: enable parallel seabios / seavgabios builds Signed-off-by: Gerd Hoffmann --- roms/Makefile | 29 ++++++++++++------- roms/{config.vga.cirrus => config.vga-cirrus} | 0 roms/{config.vga.isavga => config.vga-isavga} | 0 roms/{config.vga.qxl => config.vga-qxl} | 0 roms/{config.vga.stdvga => config.vga-stdvga} | 0 roms/{config.vga.vmware => config.vga-vmware} | 0 6 files changed, 19 insertions(+), 10 deletions(-) rename roms/{config.vga.cirrus => config.vga-cirrus} (100%) rename roms/{config.vga.isavga => config.vga-isavga} (100%) rename roms/{config.vga.qxl => config.vga-qxl} (100%) rename roms/{config.vga.stdvga => config.vga-stdvga} (100%) rename roms/{config.vga.vmware => config.vga-vmware} (100%) diff --git a/roms/Makefile b/roms/Makefile index 1966f0408..699487331 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -55,18 +55,27 @@ default: @echo " the EfiRom utility from edk2 / tianocore)" @echo " slof -- update slof.bin" -bios: config.seabios - sh configure-seabios.sh $< - make -C seabios out/bios.bin - cp seabios/out/bios.bin ../pc-bios/bios.bin - cp seabios/out/*dsdt.aml ../pc-bios/ +bios: build-seabios-config-seabios + cp seabios/builds/seabios/bios.bin ../pc-bios/bios.bin + cp seabios/builds/seabios/*dsdt.aml ../pc-bios/ seavgabios: $(patsubst %,seavgabios-%,$(vgabios_variants)) -seavgabios-%: config.vga.% - sh configure-seabios.sh $< - make -C seabios out/vgabios.bin - cp seabios/out/vgabios.bin ../pc-bios/vgabios-$*.bin +seavgabios-isavga: build-seabios-config-vga-isavga + cp seabios/builds/vga-isavga/vgabios.bin ../pc-bios/vgabios.bin + +seavgabios-%: build-seabios-config-vga-% + cp seabios/builds/vga-$*/vgabios.bin ../pc-bios/vgabios-$*.bin + +build-seabios-config-%: config.% + mkdir -p seabios/builds/$* + cp $< seabios/builds/$*/.config + $(MAKE) $(MAKEFLAGS) -C seabios \ + KCONFIG_CONFIG=$(CURDIR)/seabios/builds/$*/.config \ + OUT=$(CURDIR)/seabios/builds/$*/ oldnoconfig + $(MAKE) $(MAKEFLAGS) -C seabios \ + KCONFIG_CONFIG=$(CURDIR)/seabios/builds/$*/.config \ + OUT=$(CURDIR)/seabios/builds/$*/ all lgplvgabios: $(patsubst %,lgplvgabios-%,$(vgabios_variants)) @@ -115,7 +124,7 @@ slof: clean: - rm -rf seabios/.config seabios/out + rm -rf seabios/.config seabios/out seabios/builds $(MAKE) $(MAKEFLAGS) -C vgabios clean rm -f vgabios/VGABIOS-lgpl-latest* $(MAKE) $(MAKEFLAGS) -C ipxe/src veryclean diff --git a/roms/config.vga.cirrus b/roms/config.vga-cirrus similarity index 100% rename from roms/config.vga.cirrus rename to roms/config.vga-cirrus diff --git a/roms/config.vga.isavga b/roms/config.vga-isavga similarity index 100% rename from roms/config.vga.isavga rename to roms/config.vga-isavga diff --git a/roms/config.vga.qxl b/roms/config.vga-qxl similarity index 100% rename from roms/config.vga.qxl rename to roms/config.vga-qxl diff --git a/roms/config.vga.stdvga b/roms/config.vga-stdvga similarity index 100% rename from roms/config.vga.stdvga rename to roms/config.vga-stdvga diff --git a/roms/config.vga.vmware b/roms/config.vga-vmware similarity index 100% rename from roms/config.vga.vmware rename to roms/config.vga-vmware From 774e80ea1d080c608ab06a3b68d9f583644b8d85 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 24 Sep 2013 15:46:52 +0200 Subject: [PATCH 9/9] roms: add support for building sgabios Signed-off-by: Gerd Hoffmann --- roms/Makefile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/roms/Makefile b/roms/Makefile index 699487331..10d5a65d6 100644 --- a/roms/Makefile +++ b/roms/Makefile @@ -50,6 +50,7 @@ default: @echo " bios -- update bios.bin (seabios)" @echo " seavgabios -- update vgabios binaries (seabios)" @echo " lgplvgabios -- update vgabios binaries (lgpl)" + @echo " sgabios -- update sgabios binaries" @echo " pxerom -- update nic roms (bios only)" @echo " efirom -- update nic roms (bios+efi, this needs" @echo " the EfiRom utility from edk2 / tianocore)" @@ -89,6 +90,12 @@ build-lgplvgabios: $(MAKE) $(MAKEFLAGS) -C vgabios $(vgabios_targets) +.PHONY: sgabios +sgabios: + $(MAKE) $(MAKEFLAGS) -C sgabios + cp sgabios/sgabios.bin ../pc-bios + + pxerom: $(patsubst %,pxe-rom-%,$(pxerom_variants)) pxe-rom-%: build-pxe-roms @@ -127,5 +134,7 @@ clean: rm -rf seabios/.config seabios/out seabios/builds $(MAKE) $(MAKEFLAGS) -C vgabios clean rm -f vgabios/VGABIOS-lgpl-latest* + $(MAKE) $(MAKEFLAGS) -C sgabios clean + rm -f sgabios/.depend $(MAKE) $(MAKEFLAGS) -C ipxe/src veryclean $(MAKE) $(MAKEFLAGS) -C SLOF clean