037973bb0d
It turns out that forcing python2 for running the edk2 "build" utility is neither necessary nor sufficient. Forcing python2 is not sufficient for two reasons: - QEMU is moving away from python2, with python2 nearing EOL, - according to my most recent testing, the lacking dependency information in the makefiles that are generated by edk2's "build" utility can cause parallel build failures even when "build" is executed by python2. And forcing python2 is not necessary because we can still return to the original idea of filtering out jobserver-related options from MAKEFLAGS. So do that. While at it, cut short edk2's auto-detection of the python3.* minor version, by setting PYTHON_COMMAND to "python3" (which we expect to be available wherever we intend to build edk2). With this patch, the guest UEFI binaries that are used as part of the BIOS tables test, and the OVMF and ArmVirtQemu platform firmwares, will be built strictly in a single job, regardless of an outermost "-jN" make option. Alas, there appears to be no reliable way to build edk2 in an (outer make, inner make) environment, with a jobserver enabled. Cc: Eduardo Habkost <ehabkost@redhat.com> Cc: John Snow <jsnow@redhat.com> Cc: Philippe Mathieu-Daudé <philmd@redhat.com> Reported-by: John Snow <jsnow@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com> Signed-off-by: Laszlo Ersek <lersek@redhat.com> Message-Id: <20190920083808.21399-3-lersek@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
201 lines
7.1 KiB
Makefile
201 lines
7.1 KiB
Makefile
|
|
vgabios_variants := stdvga cirrus vmware qxl isavga virtio bochs-display ramfb
|
|
vgabios_targets := $(subst -isavga,,$(patsubst %,vgabios-%.bin,$(vgabios_variants)))
|
|
pxerom_variants := e1000 e1000e eepro100 ne2k_pci pcnet rtl8139 virtio vmxnet3
|
|
pxerom_targets := 8086100e 808610d3 80861209 10500940 10222000 10ec8139 1af41000 15ad07b0
|
|
|
|
pxe-rom-e1000 efi-rom-e1000 : VID := 8086
|
|
pxe-rom-e1000 efi-rom-e1000 : DID := 100e
|
|
pxe-rom-e1000e efi-rom-e1000e : VID := 8086
|
|
pxe-rom-e1000e efi-rom-e1000e : DID := 10d3
|
|
pxe-rom-eepro100 efi-rom-eepro100 : VID := 8086
|
|
pxe-rom-eepro100 efi-rom-eepro100 : DID := 1209
|
|
pxe-rom-ne2k_pci efi-rom-ne2k_pci : VID := 1050
|
|
pxe-rom-ne2k_pci efi-rom-ne2k_pci : DID := 0940
|
|
pxe-rom-pcnet efi-rom-pcnet : VID := 1022
|
|
pxe-rom-pcnet efi-rom-pcnet : DID := 2000
|
|
pxe-rom-rtl8139 efi-rom-rtl8139 : VID := 10ec
|
|
pxe-rom-rtl8139 efi-rom-rtl8139 : DID := 8139
|
|
pxe-rom-virtio efi-rom-virtio : VID := 1af4
|
|
pxe-rom-virtio efi-rom-virtio : DID := 1000
|
|
pxe-rom-vmxnet3 efi-rom-vmxnet3 : VID := 15ad
|
|
pxe-rom-vmxnet3 efi-rom-vmxnet3 : DID := 07b0
|
|
|
|
#
|
|
# 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)
|
|
powerpc_cross_prefix := $(call find-cross-prefix,powerpc)
|
|
x86_64_cross_prefix := $(call find-cross-prefix,x86_64)
|
|
riscv32_cross_prefix := $(call find-cross-prefix,riscv32)
|
|
riscv64_cross_prefix := $(call find-cross-prefix,riscv64)
|
|
|
|
# tag our seabios builds
|
|
SEABIOS_EXTRAVERSION="-prebuilt.qemu.org"
|
|
|
|
#
|
|
# EfiRom utility is shipped with edk2 / tianocore, in BaseTools/
|
|
#
|
|
# We need that to combine multiple images (legacy bios,
|
|
# efi ia32, efi x64) into a single rom binary.
|
|
#
|
|
EDK2_EFIROM = edk2/BaseTools/Source/C/bin/EfiRom
|
|
|
|
default help:
|
|
@echo "nothing is build by default"
|
|
@echo "available build targets:"
|
|
@echo " bios -- update bios.bin (seabios)"
|
|
@echo " vgabios -- update vgabios binaries (seabios)"
|
|
@echo " sgabios -- update sgabios binaries"
|
|
@echo " pxerom -- update nic roms (bios only)"
|
|
@echo " efirom -- update nic roms (bios+efi)"
|
|
@echo " slof -- update slof.bin"
|
|
@echo " skiboot -- update skiboot.lid"
|
|
@echo " u-boot.e500 -- update u-boot.e500"
|
|
@echo " u-boot.sam460 -- update u-boot.sam460"
|
|
@echo " efi -- update UEFI (edk2) platform firmware"
|
|
@echo " opensbi32-virt -- update OpenSBI for 32-bit virt machine"
|
|
@echo " opensbi64-virt -- update OpenSBI for 64-bit virt machine"
|
|
@echo " opensbi64-sifive_u -- update OpenSBI for 64-bit sifive_u machine"
|
|
@echo " clean -- delete the files generated by the previous" \
|
|
"build targets"
|
|
|
|
bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k
|
|
cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin
|
|
cp seabios/builds/seabios-256k/bios.bin ../pc-bios/bios-256k.bin
|
|
|
|
vgabios seavgabios: $(patsubst %,seavgabios-%,$(vgabios_variants))
|
|
|
|
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) -C seabios \
|
|
EXTRAVERSION=$(SEABIOS_EXTRAVERSION) \
|
|
CROSS_PREFIX=$(x86_64_cross_prefix) \
|
|
KCONFIG_CONFIG=$(CURDIR)/seabios/builds/$*/.config \
|
|
OUT=$(CURDIR)/seabios/builds/$*/ oldnoconfig
|
|
$(MAKE) -C seabios \
|
|
EXTRAVERSION=$(SEABIOS_EXTRAVERSION) \
|
|
CROSS_PREFIX=$(x86_64_cross_prefix) \
|
|
KCONFIG_CONFIG=$(CURDIR)/seabios/builds/$*/.config \
|
|
OUT=$(CURDIR)/seabios/builds/$*/ all
|
|
|
|
|
|
.PHONY: sgabios skiboot
|
|
sgabios:
|
|
$(MAKE) -C sgabios
|
|
cp sgabios/sgabios.bin ../pc-bios
|
|
|
|
|
|
pxerom: $(patsubst %,pxe-rom-%,$(pxerom_variants))
|
|
|
|
pxe-rom-%: build-pxe-roms
|
|
cp ipxe/src/bin/$(VID)$(DID).rom ../pc-bios/pxe-$*.rom
|
|
|
|
efirom: $(patsubst %,efi-rom-%,$(pxerom_variants))
|
|
|
|
efi-rom-%: build-pxe-roms build-efi-roms edk2-basetools
|
|
$(EDK2_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:
|
|
$(MAKE) -C ipxe/src CONFIG=qemu \
|
|
CROSS_COMPILE=$(x86_64_cross_prefix) \
|
|
$(patsubst %,bin/%.rom,$(pxerom_targets))
|
|
|
|
build-efi-roms: build-pxe-roms
|
|
$(MAKE) -C ipxe/src CONFIG=qemu \
|
|
CROSS_COMPILE=$(x86_64_cross_prefix) \
|
|
$(patsubst %,bin-i386-efi/%.efidrv,$(pxerom_targets)) \
|
|
$(patsubst %,bin-x86_64-efi/%.efidrv,$(pxerom_targets))
|
|
|
|
# Build scripts can pass compiler/linker flags to the EDK2
|
|
# build tools via the EDK2_BASETOOLS_OPTFLAGS (CFLAGS) and
|
|
# EDK2_BASETOOLS_LDFLAGS (LDFLAGS) environment variables.
|
|
#
|
|
# Example:
|
|
#
|
|
# make -C roms \
|
|
# EDK2_BASETOOLS_OPTFLAGS='...' \
|
|
# EDK2_BASETOOLS_LDFLAGS='...' \
|
|
# efirom
|
|
#
|
|
edk2-basetools:
|
|
$(MAKE) -C edk2/BaseTools \
|
|
PYTHON_COMMAND=$${EDK2_PYTHON_COMMAND:-python3} \
|
|
EXTRA_OPTFLAGS='$(EDK2_BASETOOLS_OPTFLAGS)' \
|
|
EXTRA_LDFLAGS='$(EDK2_BASETOOLS_LDFLAGS)'
|
|
|
|
slof:
|
|
$(MAKE) -C SLOF CROSS=$(powerpc64_cross_prefix) qemu
|
|
cp SLOF/boot_rom.bin ../pc-bios/slof.bin
|
|
|
|
u-boot.e500:
|
|
$(MAKE) -C u-boot O=build.e500 qemu-ppce500_config
|
|
$(MAKE) -C u-boot CROSS_COMPILE=$(powerpc_cross_prefix) \
|
|
O=build.e500
|
|
$(powerpc_cross_prefix)strip u-boot/build.e500/u-boot -o \
|
|
../pc-bios/u-boot.e500
|
|
|
|
u-boot.sam460:
|
|
$(MAKE) -C u-boot-sam460ex Sam460ex_config
|
|
$(MAKE) -C u-boot-sam460ex CROSS_COMPILE=$(powerpc_cross_prefix)
|
|
cp u-boot-sam460ex/u-boot.bin ../pc-bios/u-boot-sam460-20100605.bin
|
|
|
|
skiboot:
|
|
$(MAKE) -C skiboot CROSS=$(powerpc64_cross_prefix)
|
|
cp skiboot/skiboot.lid ../pc-bios/skiboot.lid
|
|
|
|
efi: edk2-basetools
|
|
$(MAKE) -f Makefile.edk2
|
|
|
|
opensbi32-virt:
|
|
$(MAKE) -C opensbi \
|
|
CROSS_COMPILE=$(riscv32_cross_prefix) \
|
|
PLATFORM="qemu/virt"
|
|
cp opensbi/build/platform/qemu/virt/firmware/fw_jump.bin ../pc-bios/opensbi-riscv32-virt-fw_jump.bin
|
|
|
|
opensbi64-virt:
|
|
$(MAKE) -C opensbi \
|
|
CROSS_COMPILE=$(riscv64_cross_prefix) \
|
|
PLATFORM="qemu/virt"
|
|
cp opensbi/build/platform/qemu/virt/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-virt-fw_jump.bin
|
|
|
|
opensbi64-sifive_u:
|
|
$(MAKE) -C opensbi \
|
|
CROSS_COMPILE=$(riscv64_cross_prefix) \
|
|
PLATFORM="sifive/fu540"
|
|
cp opensbi/build/platform/sifive/fu540/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin
|
|
|
|
clean:
|
|
rm -rf seabios/.config seabios/out seabios/builds
|
|
$(MAKE) -C sgabios clean
|
|
rm -f sgabios/.depend
|
|
$(MAKE) -C ipxe/src veryclean
|
|
$(MAKE) -C edk2/BaseTools clean
|
|
$(MAKE) -C SLOF clean
|
|
rm -rf u-boot/build.e500
|
|
$(MAKE) -C u-boot-sam460ex distclean
|
|
$(MAKE) -C skiboot clean
|
|
$(MAKE) -f Makefile.edk2 clean
|
|
$(MAKE) -C opensbi clean
|