mirror of https://github.com/xemu-project/xemu.git
Advance the roms/edk2 submodule to the "edk2-stable201903" release, and
build and capture platform firmware binaries from that release. The binaries are meant to be used by both end-users and by the "BIOS tables" unit tests in qtest ("make check"). -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABCAAGBQJcvgXYAAoJENOdpx4NSWz6tZMP/jHBTOmKfQhBOupSHl5QUN4/ 3NFzyIjZht2Pdn5ckAI7VbWzYqNFnI8C/Ffvs+WGc9+uUj930zR1UaWGWZ+Cpr/Z DQlKBfGL1BTfyPGZFlJ6alDHV9Ka9RsSyIADsQkAoYsaR5Q+hOrT8YmMsCf6/94I 3wnQQZpIOUTG1PuwQiezvrb4dwdXbSQpMNeirza2ftcDya3ctu7bIfuBj9dCD6xb dcIMKDBLO047c97ILVQC5rvonk3BZmGi9iY6Wp7uiUoZc4lcVIvqBHYPpOaJj3Ws x2c+OyVriTMdYEtS7eqWkwu6yhf4ts5L5AdNtE1p3hlPAdJiZ1j5T/y70MD15cQO UGztNoSekeZRGngLZzOsE9ZfMbGMwYnFgx6MPjJHun2rrYSoHtiaQR5OeV2PIGth Wk/MRub901B8qqbPCeatdSiIyyzBav/NjA49hUA0HJ4QarbEN+BviALGMZf7wXLL YRvFCqDfvOEzFjqFTDhv/BwmcbgT68pAjE3vUKplyKisVb4o01aYZ6CNQAYWLnKc ndVHyapbhe5ZF7JY29D0oWfmu0UYRxyfTyS9AY+D0J+FoJgi927uC9jZk3qpze5i lljnH5C7iF974YeLB75xsdPfnsARSSC8kehCFFBVWqAa/ZsLR0PEZCUnwyf+QTvk pej6tCtrEFTwhPcfbvnc =k5c2 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/lersek/tags/edk2-pull-2019-04-22' into staging Advance the roms/edk2 submodule to the "edk2-stable201903" release, and build and capture platform firmware binaries from that release. The binaries are meant to be used by both end-users and by the "BIOS tables" unit tests in qtest ("make check"). # gpg: Signature made Mon 22 Apr 2019 19:20:08 BST # gpg: using RSA key D39DA71E0D496CFA # gpg: Good signature from "Laszlo Ersek <lersek@redhat.com>" [marginal] # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: F5D9 660F 1BA5 F310 A95A C5E0 466A EAE0 6125 3988 # Subkey fingerprint: B3A5 5D3F 88A8 90ED 2E63 3E8D D39D A71E 0D49 6CFA * remotes/lersek/tags/edk2-pull-2019-04-22: MAINTAINERS: add the "EDK2 Firmware" subsystem Makefile: install the edk2 firmware images and their descriptors tests: add missing dependency to build QTEST_QEMU_BINARY, round 2 pc-bios: document the edk2 firmware images; add firmware descriptors pc-bios: add edk2 firmware binaries and variable store templates roms: build edk2 firmware binaries and variable store templates roms/Makefile: replace the $(EDK2_EFIROM) target with "edk2-basetools" roms/edk2-funcs.sh: add the qemu_edk2_get_thread_count() function roms/edk2: advance to tag edk2-stable201903 tests/uefi-test-tools/build.sh: work around TianoCore#1607 roms/edk2-funcs.sh: require gcc-4.8+ for building i386 and x86_64 roms: lift "edk2-funcs.sh" from "tests/uefi-test-tools/build.sh" Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
3284aa1281
|
@ -97,6 +97,7 @@
|
|||
*.gcno
|
||||
*.gcov
|
||||
/pc-bios/bios-pq/status
|
||||
/pc-bios/edk2-*.fd
|
||||
/pc-bios/vgabios-pq/status
|
||||
/pc-bios/optionrom/linuxboot.asm
|
||||
/pc-bios/optionrom/linuxboot.bin
|
||||
|
|
12
MAINTAINERS
12
MAINTAINERS
|
@ -2224,6 +2224,18 @@ F: include/hw/i2c/smbus_master.h
|
|||
F: include/hw/i2c/smbus_slave.h
|
||||
F: include/hw/i2c/smbus_eeprom.h
|
||||
|
||||
EDK2 Firmware
|
||||
M: Laszlo Ersek <lersek@redhat.com>
|
||||
M: Philippe Mathieu-Daudé <philmd@redhat.com>
|
||||
S: Supported
|
||||
F: pc-bios/descriptors/??-edk2-*.json
|
||||
F: pc-bios/edk2-*
|
||||
F: roms/Makefile.edk2
|
||||
F: roms/edk2
|
||||
F: roms/edk2-*
|
||||
F: tests/data/uefi-boot-images/
|
||||
F: tests/uefi-test-tools/
|
||||
|
||||
Usermode Emulation
|
||||
------------------
|
||||
Overall
|
||||
|
|
29
Makefile
29
Makefile
|
@ -296,6 +296,10 @@ ui/input-keymap-%.c: $(KEYCODEMAP_GEN) $(KEYCODEMAP_CSV) $(SRC_PATH)/ui/Makefile
|
|||
$(KEYCODEMAP_GEN): .git-submodule-status
|
||||
$(KEYCODEMAP_CSV): .git-submodule-status
|
||||
|
||||
edk2-decompressed = $(basename $(wildcard pc-bios/edk2-*.fd.bz2))
|
||||
pc-bios/edk2-%.fd: pc-bios/edk2-%.fd.bz2
|
||||
$(call quiet-command,bzip2 -d -c $< > $@,"BUNZIP2",$<)
|
||||
|
||||
# Don't try to regenerate Makefile or configure
|
||||
# We don't generate any of them
|
||||
Makefile: ;
|
||||
|
@ -445,6 +449,7 @@ $(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
|
|||
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
|
||||
$(SOFTMMU_SUBDIR_RULES): $(io-obj-y)
|
||||
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
|
||||
$(SOFTMMU_SUBDIR_RULES): $(edk2-decompressed)
|
||||
|
||||
subdir-%:
|
||||
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" all,)
|
||||
|
@ -633,6 +638,7 @@ clean:
|
|||
! -path ./roms/edk2/ArmPkg/Library/GccLto/liblto-arm.a \
|
||||
! -path ./roms/edk2/BaseTools/Source/Python/UPT/Dll/sqlite3.dll \
|
||||
-exec rm {} +
|
||||
rm -f $(edk2-decompressed)
|
||||
rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
|
||||
rm -f fsdev/*.pod scsi/*.pod
|
||||
rm -f qemu-img-cmds.h
|
||||
|
@ -723,9 +729,14 @@ spapr-rtas.bin slof.bin skiboot.lid \
|
|||
palcode-clipper \
|
||||
u-boot.e500 u-boot-sam460-20100605.bin \
|
||||
qemu_vga.ndrv \
|
||||
edk2-licenses.txt \
|
||||
hppa-firmware.img
|
||||
|
||||
DESCS=50-edk2-i386-secure.json 50-edk2-x86_64-secure.json \
|
||||
60-edk2-aarch64.json 60-edk2-arm.json 60-edk2-i386.json 60-edk2-x86_64.json
|
||||
else
|
||||
BLOBS=
|
||||
DESCS=
|
||||
endif
|
||||
|
||||
# Note that we manually filter-out the non-Sphinx documentation which
|
||||
|
@ -786,7 +797,8 @@ endif
|
|||
|
||||
ICON_SIZES=16x16 24x24 32x32 48x48 64x64 128x128 256x256 512x512
|
||||
|
||||
install: all $(if $(BUILD_DOCS),install-doc) install-datadir install-localstatedir
|
||||
install: all $(if $(BUILD_DOCS),install-doc) install-datadir install-localstatedir \
|
||||
$(if $(INSTALL_BLOBS),$(edk2-decompressed))
|
||||
ifneq ($(TOOLS),)
|
||||
$(call install-prog,$(subst qemu-ga,qemu-ga$(EXESUF),$(TOOLS)),$(DESTDIR)$(bindir))
|
||||
endif
|
||||
|
@ -808,6 +820,21 @@ ifneq ($(BLOBS),)
|
|||
set -e; for x in $(BLOBS); do \
|
||||
$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(qemu_datadir)"; \
|
||||
done
|
||||
endif
|
||||
ifdef INSTALL_BLOBS
|
||||
set -e; for x in $(edk2-decompressed); do \
|
||||
$(INSTALL_DATA) $$x "$(DESTDIR)$(qemu_datadir)"; \
|
||||
done
|
||||
endif
|
||||
ifneq ($(DESCS),)
|
||||
$(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/firmware"
|
||||
set -e; tmpf=$$(mktemp); trap 'rm -f -- "$$tmpf"' EXIT; \
|
||||
for x in $(DESCS); do \
|
||||
sed -e 's,@DATADIR@,$(DESTDIR)$(qemu_datadir),' \
|
||||
"$(SRC_PATH)/pc-bios/descriptors/$$x" > "$$tmpf"; \
|
||||
$(INSTALL_DATA) "$$tmpf" \
|
||||
"$(DESTDIR)$(qemu_datadir)/firmware/$$x"; \
|
||||
done
|
||||
endif
|
||||
for s in $(ICON_SIZES); do \
|
||||
mkdir -p "$(DESTDIR)/$(qemu_icondir)/hicolor/$${s}/apps"; \
|
||||
|
|
|
@ -7892,6 +7892,7 @@ for bios_file in \
|
|||
$source_path/pc-bios/*.img \
|
||||
$source_path/pc-bios/openbios-* \
|
||||
$source_path/pc-bios/u-boot.* \
|
||||
$source_path/pc-bios/edk2-*.fd.bz2 \
|
||||
$source_path/pc-bios/palcode-*
|
||||
do
|
||||
LINKS="$LINKS pc-bios/$(basename $bios_file)"
|
||||
|
|
|
@ -50,3 +50,14 @@
|
|||
|
||||
- QemuMacDrivers (https://github.com/ozbenh/QemuMacDrivers) is a project to
|
||||
provide virtualised drivers for PPC MacOS guests.
|
||||
|
||||
- The "edk2-*.fd.bz2" images are platform firmware binaries and matching UEFI
|
||||
variable store templates built from the TianoCore community's EFI Development
|
||||
Kit II project
|
||||
<https://github.com/tianocore/tianocore.github.io/wiki/EDK-II>. The images
|
||||
were built at git tag "edk2-stable201903". The firmware binaries bundle parts
|
||||
of the OpenSSL project, at git tag "OpenSSL_1_1_0j" (the OpenSSL tag is a
|
||||
function of the edk2 tag). Licensing information is given in
|
||||
"edk2-licenses.txt". The image files are described by the JSON documents in
|
||||
the "pc-bios/descriptors" directory, which conform to the
|
||||
"docs/interop/firmware.json" schema.
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"description": "UEFI firmware for i386, with Secure Boot and SMM",
|
||||
"interface-types": [
|
||||
"uefi"
|
||||
],
|
||||
"mapping": {
|
||||
"device": "flash",
|
||||
"executable": {
|
||||
"filename": "@DATADIR@/edk2-i386-secure-code.fd",
|
||||
"format": "raw"
|
||||
},
|
||||
"nvram-template": {
|
||||
"filename": "@DATADIR@/edk2-i386-vars.fd",
|
||||
"format": "raw"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"architecture": "i386",
|
||||
"machines": [
|
||||
"pc-q35-*"
|
||||
]
|
||||
}
|
||||
],
|
||||
"features": [
|
||||
"acpi-s3",
|
||||
"requires-smm",
|
||||
"secure-boot",
|
||||
"verbose-dynamic"
|
||||
],
|
||||
"tags": [
|
||||
|
||||
]
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"description": "UEFI firmware for x86_64, with Secure Boot and SMM",
|
||||
"interface-types": [
|
||||
"uefi"
|
||||
],
|
||||
"mapping": {
|
||||
"device": "flash",
|
||||
"executable": {
|
||||
"filename": "@DATADIR@/edk2-x86_64-secure-code.fd",
|
||||
"format": "raw"
|
||||
},
|
||||
"nvram-template": {
|
||||
"filename": "@DATADIR@/edk2-i386-vars.fd",
|
||||
"format": "raw"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"architecture": "x86_64",
|
||||
"machines": [
|
||||
"pc-q35-*"
|
||||
]
|
||||
}
|
||||
],
|
||||
"features": [
|
||||
"acpi-s3",
|
||||
"amd-sev",
|
||||
"requires-smm",
|
||||
"secure-boot",
|
||||
"verbose-dynamic"
|
||||
],
|
||||
"tags": [
|
||||
|
||||
]
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"description": "UEFI firmware for aarch64",
|
||||
"interface-types": [
|
||||
"uefi"
|
||||
],
|
||||
"mapping": {
|
||||
"device": "flash",
|
||||
"executable": {
|
||||
"filename": "@DATADIR@/edk2-aarch64-code.fd",
|
||||
"format": "raw"
|
||||
},
|
||||
"nvram-template": {
|
||||
"filename": "@DATADIR@/edk2-arm-vars.fd",
|
||||
"format": "raw"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"architecture": "aarch64",
|
||||
"machines": [
|
||||
"virt-*"
|
||||
]
|
||||
}
|
||||
],
|
||||
"features": [
|
||||
"verbose-static"
|
||||
],
|
||||
"tags": [
|
||||
|
||||
]
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"description": "UEFI firmware for arm",
|
||||
"interface-types": [
|
||||
"uefi"
|
||||
],
|
||||
"mapping": {
|
||||
"device": "flash",
|
||||
"executable": {
|
||||
"filename": "@DATADIR@/edk2-arm-code.fd",
|
||||
"format": "raw"
|
||||
},
|
||||
"nvram-template": {
|
||||
"filename": "@DATADIR@/edk2-arm-vars.fd",
|
||||
"format": "raw"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"architecture": "arm",
|
||||
"machines": [
|
||||
"virt-*"
|
||||
]
|
||||
}
|
||||
],
|
||||
"features": [
|
||||
"verbose-static"
|
||||
],
|
||||
"tags": [
|
||||
|
||||
]
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"description": "UEFI firmware for i386",
|
||||
"interface-types": [
|
||||
"uefi"
|
||||
],
|
||||
"mapping": {
|
||||
"device": "flash",
|
||||
"executable": {
|
||||
"filename": "@DATADIR@/edk2-i386-code.fd",
|
||||
"format": "raw"
|
||||
},
|
||||
"nvram-template": {
|
||||
"filename": "@DATADIR@/edk2-i386-vars.fd",
|
||||
"format": "raw"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"architecture": "i386",
|
||||
"machines": [
|
||||
"pc-i440fx-*",
|
||||
"pc-q35-*"
|
||||
]
|
||||
}
|
||||
],
|
||||
"features": [
|
||||
"acpi-s3",
|
||||
"verbose-dynamic"
|
||||
],
|
||||
"tags": [
|
||||
|
||||
]
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"description": "UEFI firmware for x86_64",
|
||||
"interface-types": [
|
||||
"uefi"
|
||||
],
|
||||
"mapping": {
|
||||
"device": "flash",
|
||||
"executable": {
|
||||
"filename": "@DATADIR@/edk2-x86_64-code.fd",
|
||||
"format": "raw"
|
||||
},
|
||||
"nvram-template": {
|
||||
"filename": "@DATADIR@/edk2-i386-vars.fd",
|
||||
"format": "raw"
|
||||
}
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"architecture": "x86_64",
|
||||
"machines": [
|
||||
"pc-i440fx-*",
|
||||
"pc-q35-*"
|
||||
]
|
||||
}
|
||||
],
|
||||
"features": [
|
||||
"acpi-s3",
|
||||
"amd-sev",
|
||||
"verbose-dynamic"
|
||||
],
|
||||
"tags": [
|
||||
|
||||
]
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,209 @@
|
|||
==> edk2/License.txt <==
|
||||
Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.
|
||||
Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.
|
||||
Copyright (c) 2011 - 2015, ARM Limited. All rights reserved.
|
||||
Copyright (c) 2014 - 2015, Linaro Limited. All rights reserved.
|
||||
Copyright (c) 2013 - 2015, Red Hat, Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
==> edk2/OvmfPkg/License.txt <==
|
||||
Copyright (c) 2012, Intel Corporation. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
Some files are subject to the following license, the MIT license. Those files
|
||||
are located in:
|
||||
- OvmfPkg/Include/IndustryStandard/Xen/
|
||||
- OvmfPkg/XenBusDxe/
|
||||
- OvmfPkg/XenPvBlkDxe/
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
==> edk2/CryptoPkg/Library/OpensslLib/openssl/LICENSE <==
|
||||
|
||||
LICENSE ISSUES
|
||||
==============
|
||||
|
||||
The OpenSSL toolkit stays under a double license, i.e. both the conditions of
|
||||
the OpenSSL License and the original SSLeay license apply to the toolkit.
|
||||
See below for the actual license texts.
|
||||
|
||||
OpenSSL License
|
||||
---------------
|
||||
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2018 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@openssl.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
* This product includes cryptographic software written by Eric Young
|
||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||
* Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
*/
|
||||
|
||||
Original SSLeay License
|
||||
-----------------------
|
||||
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
Binary file not shown.
Binary file not shown.
|
@ -61,6 +61,7 @@ default:
|
|||
@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"
|
||||
|
||||
bios: build-seabios-config-seabios-128k build-seabios-config-seabios-256k
|
||||
cp seabios/builds/seabios-128k/bios.bin ../pc-bios/bios.bin
|
||||
|
@ -102,7 +103,7 @@ pxe-rom-%: build-pxe-roms
|
|||
|
||||
efirom: $(patsubst %,efi-rom-%,$(pxerom_variants))
|
||||
|
||||
efi-rom-%: build-pxe-roms build-efi-roms $(EDK2_EFIROM)
|
||||
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 \
|
||||
|
@ -131,7 +132,7 @@ build-efi-roms: build-pxe-roms
|
|||
# EDK2_BASETOOLS_LDFLAGS='...' \
|
||||
# efirom
|
||||
#
|
||||
$(EDK2_EFIROM):
|
||||
edk2-basetools:
|
||||
$(MAKE) -C edk2/BaseTools \
|
||||
EXTRA_OPTFLAGS='$(EDK2_BASETOOLS_OPTFLAGS)' \
|
||||
EXTRA_LDFLAGS='$(EDK2_BASETOOLS_LDFLAGS)'
|
||||
|
@ -156,6 +157,9 @@ skiboot:
|
|||
$(MAKE) -C skiboot CROSS=$(powerpc64_cross_prefix)
|
||||
cp skiboot/skiboot.lid ../pc-bios/skiboot.lid
|
||||
|
||||
efi: edk2-basetools
|
||||
$(MAKE) -f Makefile.edk2
|
||||
|
||||
clean:
|
||||
rm -rf seabios/.config seabios/out seabios/builds
|
||||
$(MAKE) -C sgabios clean
|
||||
|
@ -166,3 +170,4 @@ clean:
|
|||
rm -rf u-boot/build.e500
|
||||
$(MAKE) -C u-boot-sam460ex distclean
|
||||
$(MAKE) -C skiboot clean
|
||||
$(MAKE) -f Makefile.edk2 clean
|
||||
|
|
|
@ -0,0 +1,148 @@
|
|||
# Makefile for building firmware binaries and variable store templates for a
|
||||
# number of virtual platforms in edk2.
|
||||
#
|
||||
# Copyright (C) 2019 Red Hat, Inc.
|
||||
#
|
||||
# This program and the accompanying materials are licensed and made available
|
||||
# under the terms and conditions of the BSD License that accompanies this
|
||||
# distribution. The full text of the license may be found at
|
||||
# <http://opensource.org/licenses/bsd-license.php>.
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
SHELL = /bin/bash
|
||||
|
||||
toolchain = $(shell source ./edk2-funcs.sh && qemu_edk2_get_toolchain $(1))
|
||||
|
||||
licenses := \
|
||||
edk2/License.txt \
|
||||
edk2/OvmfPkg/License.txt \
|
||||
edk2/CryptoPkg/Library/OpensslLib/openssl/LICENSE
|
||||
|
||||
# The "edk2-arm-vars.fd" varstore template is suitable for aarch64 as well.
|
||||
# Similarly, the "edk2-i386-vars.fd" varstore template is suitable for x86_64
|
||||
# as well, independently of "secure" too.
|
||||
flashdevs := \
|
||||
aarch64-code \
|
||||
arm-code \
|
||||
i386-code \
|
||||
i386-secure-code \
|
||||
x86_64-code \
|
||||
x86_64-secure-code \
|
||||
\
|
||||
arm-vars \
|
||||
i386-vars
|
||||
|
||||
all: $(foreach flashdev,$(flashdevs),../pc-bios/edk2-$(flashdev).fd.bz2) \
|
||||
../pc-bios/edk2-licenses.txt
|
||||
|
||||
../pc-bios/edk2-%.fd.bz2: ../pc-bios/edk2-%.fd
|
||||
bzip2 -9 -c $< > $@
|
||||
|
||||
# When the build completes, we need not keep the uncompressed flash device
|
||||
# files.
|
||||
.INTERMEDIATE: $(foreach flashdev,$(flashdevs),../pc-bios/edk2-$(flashdev).fd)
|
||||
|
||||
submodules:
|
||||
cd edk2 && git submodule update --init --force
|
||||
|
||||
# See notes on the ".NOTPARALLEL" target and the "+" indicator in
|
||||
# "tests/uefi-test-tools/Makefile".
|
||||
.NOTPARALLEL:
|
||||
|
||||
../pc-bios/edk2-aarch64-code.fd: submodules
|
||||
+./edk2-build.sh \
|
||||
aarch64 \
|
||||
--arch=AARCH64 \
|
||||
--platform=ArmVirtPkg/ArmVirtQemu.dsc \
|
||||
-D NETWORK_IP6_ENABLE \
|
||||
-D HTTP_BOOT_ENABLE
|
||||
cp edk2/Build/ArmVirtQemu-AARCH64/DEBUG_$(call toolchain,aarch64)/FV/QEMU_EFI.fd \
|
||||
$@
|
||||
truncate --size=64M $@
|
||||
|
||||
../pc-bios/edk2-arm-code.fd: submodules
|
||||
+./edk2-build.sh \
|
||||
arm \
|
||||
--arch=ARM \
|
||||
--platform=ArmVirtPkg/ArmVirtQemu.dsc \
|
||||
-D NETWORK_IP6_ENABLE \
|
||||
-D HTTP_BOOT_ENABLE
|
||||
cp edk2/Build/ArmVirtQemu-ARM/DEBUG_$(call toolchain,arm)/FV/QEMU_EFI.fd \
|
||||
$@
|
||||
truncate --size=64M $@
|
||||
|
||||
../pc-bios/edk2-i386-code.fd: submodules
|
||||
+./edk2-build.sh \
|
||||
i386 \
|
||||
--arch=IA32 \
|
||||
--platform=OvmfPkg/OvmfPkgIa32.dsc \
|
||||
-D NETWORK_IP6_ENABLE \
|
||||
-D HTTP_BOOT_ENABLE \
|
||||
-D TLS_ENABLE \
|
||||
-D TPM2_ENABLE \
|
||||
-D TPM2_CONFIG_ENABLE
|
||||
cp edk2/Build/OvmfIa32/DEBUG_$(call toolchain,i386)/FV/OVMF_CODE.fd $@
|
||||
|
||||
../pc-bios/edk2-i386-secure-code.fd: submodules
|
||||
+./edk2-build.sh \
|
||||
i386 \
|
||||
--arch=IA32 \
|
||||
--platform=OvmfPkg/OvmfPkgIa32.dsc \
|
||||
-D NETWORK_IP6_ENABLE \
|
||||
-D HTTP_BOOT_ENABLE \
|
||||
-D TLS_ENABLE \
|
||||
-D TPM2_ENABLE \
|
||||
-D TPM2_CONFIG_ENABLE \
|
||||
-D SECURE_BOOT_ENABLE \
|
||||
-D SMM_REQUIRE
|
||||
cp edk2/Build/OvmfIa32/DEBUG_$(call toolchain,i386)/FV/OVMF_CODE.fd $@
|
||||
|
||||
../pc-bios/edk2-x86_64-code.fd: submodules
|
||||
+./edk2-build.sh \
|
||||
x86_64 \
|
||||
--arch=X64 \
|
||||
--platform=OvmfPkg/OvmfPkgX64.dsc \
|
||||
-D NETWORK_IP6_ENABLE \
|
||||
-D HTTP_BOOT_ENABLE \
|
||||
-D TLS_ENABLE \
|
||||
-D TPM2_ENABLE \
|
||||
-D TPM2_CONFIG_ENABLE
|
||||
cp edk2/Build/OvmfX64/DEBUG_$(call toolchain,x86_64)/FV/OVMF_CODE.fd $@
|
||||
|
||||
../pc-bios/edk2-x86_64-secure-code.fd: submodules
|
||||
+./edk2-build.sh \
|
||||
x86_64 \
|
||||
--arch=IA32 \
|
||||
--arch=X64 \
|
||||
--platform=OvmfPkg/OvmfPkgIa32X64.dsc \
|
||||
-D NETWORK_IP6_ENABLE \
|
||||
-D HTTP_BOOT_ENABLE \
|
||||
-D TLS_ENABLE \
|
||||
-D TPM2_ENABLE \
|
||||
-D TPM2_CONFIG_ENABLE \
|
||||
-D SECURE_BOOT_ENABLE \
|
||||
-D SMM_REQUIRE
|
||||
cp edk2/Build/Ovmf3264/DEBUG_$(call toolchain,x86_64)/FV/OVMF_CODE.fd $@
|
||||
|
||||
../pc-bios/edk2-arm-vars.fd: ../pc-bios/edk2-arm-code.fd
|
||||
cp edk2/Build/ArmVirtQemu-ARM/DEBUG_$(call toolchain,arm)/FV/QEMU_VARS.fd \
|
||||
$@
|
||||
truncate --size=64M $@
|
||||
|
||||
../pc-bios/edk2-i386-vars.fd: ../pc-bios/edk2-i386-code.fd
|
||||
cp edk2/Build/OvmfIa32/DEBUG_$(call toolchain,i386)/FV/OVMF_VARS.fd $@
|
||||
|
||||
# The license file accumulates several individual licenses from under edk2,
|
||||
# prefixing each individual license with a header (generated by "tail") that
|
||||
# states its pathname.
|
||||
../pc-bios/edk2-licenses.txt: submodules
|
||||
tail -n $(shell cat $(licenses) | wc -l) $(licenses) > $@
|
||||
dos2unix $@
|
||||
|
||||
clean:
|
||||
rm -rf edk2/Build
|
||||
cd edk2/Conf && \
|
||||
rm -rf .cache BuildEnv.sh build_rule.txt target.txt \
|
||||
tools_def.txt
|
|
@ -1 +1 @@
|
|||
Subproject commit 85588389222a3636baf0f9ed8227f2434af4c3f9
|
||||
Subproject commit 89910a39dcfd788057caa5d88b7e76e112d187b5
|
|
@ -0,0 +1,55 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Wrapper shell script for building a virtual platform firmware in edk2.
|
||||
#
|
||||
# Copyright (C) 2019 Red Hat, Inc.
|
||||
#
|
||||
# This program and the accompanying materials are licensed and made available
|
||||
# under the terms and conditions of the BSD License that accompanies this
|
||||
# distribution. The full text of the license may be found at
|
||||
# <http://opensource.org/licenses/bsd-license.php>.
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
set -e -u -C
|
||||
|
||||
# Save the command line arguments. We need to reset $# to 0 before sourcing
|
||||
# "edksetup.sh", as it will inherit $@.
|
||||
emulation_target=$1
|
||||
shift
|
||||
num_args=0
|
||||
args=()
|
||||
for arg in "$@"; do
|
||||
args[num_args++]="$arg"
|
||||
done
|
||||
shift $num_args
|
||||
|
||||
cd edk2
|
||||
|
||||
# Work around <https://bugzilla.tianocore.org/show_bug.cgi?id=1607>.
|
||||
export PYTHON_COMMAND=python2
|
||||
|
||||
# Source "edksetup.sh" carefully.
|
||||
set +e +u +C
|
||||
source ./edksetup.sh
|
||||
ret=$?
|
||||
set -e -u -C
|
||||
if [ $ret -ne 0 ]; then
|
||||
exit $ret
|
||||
fi
|
||||
|
||||
# Fetch some option arguments, and set the cross-compilation environment (if
|
||||
# any), for the edk2 "build" utility.
|
||||
source ../edk2-funcs.sh
|
||||
edk2_toolchain=$(qemu_edk2_get_toolchain "$emulation_target")
|
||||
edk2_thread_count=$(qemu_edk2_get_thread_count "$MAKEFLAGS")
|
||||
qemu_edk2_set_cross_env "$emulation_target"
|
||||
|
||||
# Build the platform firmware.
|
||||
build \
|
||||
--cmd-len=65536 \
|
||||
-n "$edk2_thread_count" \
|
||||
--buildtarget=DEBUG \
|
||||
--tagname="$edk2_toolchain" \
|
||||
"${args[@]}"
|
|
@ -0,0 +1,253 @@
|
|||
# Shell script that defines functions for determining some environmental
|
||||
# characteristics for the edk2 "build" utility.
|
||||
#
|
||||
# This script is meant to be sourced, in a bash environment.
|
||||
#
|
||||
# Copyright (C) 2019 Red Hat, Inc.
|
||||
#
|
||||
# This program and the accompanying materials are licensed and made available
|
||||
# under the terms and conditions of the BSD License that accompanies this
|
||||
# distribution. The full text of the license may be found at
|
||||
# <http://opensource.org/licenses/bsd-license.php>.
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
# Verify whether the QEMU system emulation target is supported by the UEFI spec
|
||||
# and edk2. Print a message to the standard error, and return with nonzero
|
||||
# status, if verification fails.
|
||||
#
|
||||
# Parameters:
|
||||
# $1: QEMU system emulation target
|
||||
qemu_edk2_verify_arch()
|
||||
{
|
||||
local emulation_target="$1"
|
||||
local program_name=$(basename -- "$0")
|
||||
|
||||
case "$emulation_target" in
|
||||
(arm|aarch64|i386|x86_64)
|
||||
;;
|
||||
(*)
|
||||
printf '%s: unknown/unsupported QEMU system emulation target "%s"\n' \
|
||||
"$program_name" "$emulation_target" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# Translate the QEMU system emulation target to the edk2 architecture
|
||||
# identifier. Print the result to the standard output.
|
||||
#
|
||||
# Parameters:
|
||||
# $1: QEMU system emulation target
|
||||
qemu_edk2_get_arch()
|
||||
{
|
||||
local emulation_target="$1"
|
||||
|
||||
if ! qemu_edk2_verify_arch "$emulation_target"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
case "$emulation_target" in
|
||||
(arm)
|
||||
printf 'ARM\n'
|
||||
;;
|
||||
(aarch64)
|
||||
printf 'AARCH64\n'
|
||||
;;
|
||||
(i386)
|
||||
printf 'IA32\n'
|
||||
;;
|
||||
(x86_64)
|
||||
printf 'X64\n'
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# Translate the QEMU system emulation target to the gcc cross-compilation
|
||||
# architecture identifier. Print the result to the standard output.
|
||||
#
|
||||
# Parameters:
|
||||
# $1: QEMU system emulation target
|
||||
qemu_edk2_get_gcc_arch()
|
||||
{
|
||||
local emulation_target="$1"
|
||||
|
||||
if ! qemu_edk2_verify_arch "$emulation_target"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
case "$emulation_target" in
|
||||
(arm|aarch64|x86_64)
|
||||
printf '%s\n' "$emulation_target"
|
||||
;;
|
||||
(i386)
|
||||
printf 'i686\n'
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# Determine the gcc cross-compiler prefix (if any) for use with the edk2
|
||||
# toolchain. Print the result to the standard output.
|
||||
#
|
||||
# Parameters:
|
||||
# $1: QEMU system emulation target
|
||||
qemu_edk2_get_cross_prefix()
|
||||
{
|
||||
local emulation_target="$1"
|
||||
local gcc_arch
|
||||
local host_arch
|
||||
|
||||
if ! gcc_arch=$(qemu_edk2_get_gcc_arch "$emulation_target"); then
|
||||
return 1
|
||||
fi
|
||||
|
||||
host_arch=$(uname -m)
|
||||
|
||||
if [ "$gcc_arch" == "$host_arch" ] ||
|
||||
( [ "$gcc_arch" == i686 ] && [ "$host_arch" == x86_64 ] ); then
|
||||
# no cross-compiler needed
|
||||
:
|
||||
else
|
||||
printf '%s-linux-gnu-\n' "$gcc_arch"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Determine the edk2 toolchain tag for the QEMU system emulation target. Print
|
||||
# the result to the standard output. Print a message to the standard error, and
|
||||
# return with nonzero status, if the (conditional) gcc version check fails.
|
||||
#
|
||||
# Parameters:
|
||||
# $1: QEMU system emulation target
|
||||
qemu_edk2_get_toolchain()
|
||||
{
|
||||
local emulation_target="$1"
|
||||
local program_name=$(basename -- "$0")
|
||||
local cross_prefix
|
||||
local gcc_version
|
||||
|
||||
if ! qemu_edk2_verify_arch "$emulation_target"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
case "$emulation_target" in
|
||||
(arm|aarch64)
|
||||
printf 'GCC5\n'
|
||||
;;
|
||||
|
||||
(i386|x86_64)
|
||||
if ! cross_prefix=$(qemu_edk2_get_cross_prefix "$emulation_target"); then
|
||||
return 1
|
||||
fi
|
||||
|
||||
gcc_version=$("${cross_prefix}gcc" -v 2>&1 | tail -1 | awk '{print $3}')
|
||||
# Run "git-blame" on "OvmfPkg/build.sh" in edk2 for more information on
|
||||
# the mapping below.
|
||||
case "$gcc_version" in
|
||||
([1-3].*|4.[0-7].*)
|
||||
printf '%s: unsupported gcc version "%s"\n' \
|
||||
"$program_name" "$gcc_version" >&2
|
||||
return 1
|
||||
;;
|
||||
(4.8.*)
|
||||
printf 'GCC48\n'
|
||||
;;
|
||||
(4.9.*|6.[0-2].*)
|
||||
printf 'GCC49\n'
|
||||
;;
|
||||
(*)
|
||||
printf 'GCC5\n'
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# Determine the name of the environment variable that exposes the
|
||||
# cross-compiler prefix to the edk2 "build" utility. Print the result to the
|
||||
# standard output.
|
||||
#
|
||||
# Parameters:
|
||||
# $1: QEMU system emulation target
|
||||
qemu_edk2_get_cross_prefix_var()
|
||||
{
|
||||
local emulation_target="$1"
|
||||
local edk2_toolchain
|
||||
local edk2_arch
|
||||
|
||||
if ! edk2_toolchain=$(qemu_edk2_get_toolchain "$emulation_target"); then
|
||||
return 1
|
||||
fi
|
||||
|
||||
case "$emulation_target" in
|
||||
(arm|aarch64)
|
||||
if ! edk2_arch=$(qemu_edk2_get_arch "$emulation_target"); then
|
||||
return 1
|
||||
fi
|
||||
printf '%s_%s_PREFIX\n' "$edk2_toolchain" "$edk2_arch"
|
||||
;;
|
||||
(i386|x86_64)
|
||||
printf '%s_BIN\n' "$edk2_toolchain"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# Set and export the environment variable(s) necessary for cross-compilation,
|
||||
# whenever needed by the edk2 "build" utility.
|
||||
#
|
||||
# Parameters:
|
||||
# $1: QEMU system emulation target
|
||||
qemu_edk2_set_cross_env()
|
||||
{
|
||||
local emulation_target="$1"
|
||||
local cross_prefix
|
||||
local cross_prefix_var
|
||||
|
||||
if ! cross_prefix=$(qemu_edk2_get_cross_prefix "$emulation_target"); then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -z "$cross_prefix" ]; then
|
||||
# Nothing to do.
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! cross_prefix_var=$(qemu_edk2_get_cross_prefix_var \
|
||||
"$emulation_target"); then
|
||||
return 1
|
||||
fi
|
||||
|
||||
eval "export $cross_prefix_var=\$cross_prefix"
|
||||
}
|
||||
|
||||
|
||||
# Determine the "-n" option argument (that is, the number of modules to build
|
||||
# in parallel) for the edk2 "build" utility. Print the result to the standard
|
||||
# output.
|
||||
#
|
||||
# Parameters:
|
||||
# $1: the value of the MAKEFLAGS variable
|
||||
qemu_edk2_get_thread_count()
|
||||
{
|
||||
local makeflags="$1"
|
||||
|
||||
if [[ "$makeflags" == *--jobserver-auth=* ]] ||
|
||||
[[ "$makeflags" == *--jobserver-fds=* ]]; then
|
||||
# If there is a job server, allow the edk2 "build" utility to parallelize
|
||||
# as many module builds as there are logical CPUs in the system. The "make"
|
||||
# instances forked by "build" are supposed to limit themselves through the
|
||||
# job server. The zero value below causes the edk2 "build" utility to fetch
|
||||
# the logical CPU count with Python's multiprocessing.cpu_count() method.
|
||||
printf '0\n'
|
||||
else
|
||||
# Build a single module at a time.
|
||||
printf '1\n'
|
||||
fi
|
||||
}
|
|
@ -912,7 +912,7 @@ check-speed: $(check-speed-y)
|
|||
|
||||
# gtester tests with TAP output
|
||||
|
||||
$(patsubst %, check-report-qtest-%.tap, $(QTEST_TARGETS)): check-report-qtest-%.tap: $(check-qtest-y)
|
||||
$(patsubst %, check-report-qtest-%.tap, $(QTEST_TARGETS)): check-report-qtest-%.tap: subdir-%-softmmu $(check-qtest-y)
|
||||
$(call do_test_tap, $(check-qtest-$*-y) $(check-qtest-generic-y), \
|
||||
QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \
|
||||
QTEST_QEMU_IMG=qemu-img$(EXESUF))
|
||||
|
|
|
@ -29,6 +29,9 @@ export PACKAGES_PATH=$(realpath -- "$edk2_dir")
|
|||
export WORKSPACE=$PWD
|
||||
mkdir -p Conf
|
||||
|
||||
# Work around <https://bugzilla.tianocore.org/show_bug.cgi?id=1607>.
|
||||
export PYTHON_COMMAND=python2
|
||||
|
||||
# Source "edksetup.sh" carefully.
|
||||
set +e +u +C
|
||||
source "$PACKAGES_PATH/edksetup.sh"
|
||||
|
@ -38,97 +41,12 @@ if [ $ret -ne 0 ]; then
|
|||
exit $ret
|
||||
fi
|
||||
|
||||
# Map the QEMU system emulation target to the following types of architecture
|
||||
# identifiers:
|
||||
# - edk2,
|
||||
# - gcc cross-compilation.
|
||||
# Cover only those targets that are supported by the UEFI spec and edk2.
|
||||
case "$emulation_target" in
|
||||
(arm)
|
||||
edk2_arch=ARM
|
||||
gcc_arch=arm
|
||||
;;
|
||||
(aarch64)
|
||||
edk2_arch=AARCH64
|
||||
gcc_arch=aarch64
|
||||
;;
|
||||
(i386)
|
||||
edk2_arch=IA32
|
||||
gcc_arch=i686
|
||||
;;
|
||||
(x86_64)
|
||||
edk2_arch=X64
|
||||
gcc_arch=x86_64
|
||||
;;
|
||||
(*)
|
||||
printf '%s: unknown/unsupported QEMU system emulation target "%s"\n' \
|
||||
"$program_name" "$emulation_target" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Check if cross-compilation is needed.
|
||||
host_arch=$(uname -m)
|
||||
if [ "$gcc_arch" == "$host_arch" ] ||
|
||||
( [ "$gcc_arch" == i686 ] && [ "$host_arch" == x86_64 ] ); then
|
||||
cross_prefix=
|
||||
else
|
||||
cross_prefix=${gcc_arch}-linux-gnu-
|
||||
fi
|
||||
|
||||
# Expose cross_prefix (which is possibly empty) to the edk2 tools. While at it,
|
||||
# determine the suitable edk2 toolchain as well.
|
||||
# - For ARM and AARCH64, edk2 only offers the GCC5 toolchain tag, which covers
|
||||
# the gcc-5+ releases.
|
||||
# - For IA32 and X64, edk2 offers the GCC44 through GCC49 toolchain tags, in
|
||||
# addition to GCC5. Unfortunately, the mapping between the toolchain tags and
|
||||
# the actual gcc releases isn't entirely trivial. Run "git-blame" on
|
||||
# "OvmfPkg/build.sh" in edk2 for more information.
|
||||
# And, because the above is too simple, we have to assign cross_prefix to an
|
||||
# edk2 build variable that is specific to both the toolchain tag and the target
|
||||
# architecture.
|
||||
case "$edk2_arch" in
|
||||
(ARM)
|
||||
edk2_toolchain=GCC5
|
||||
export GCC5_ARM_PREFIX=$cross_prefix
|
||||
;;
|
||||
(AARCH64)
|
||||
edk2_toolchain=GCC5
|
||||
export GCC5_AARCH64_PREFIX=$cross_prefix
|
||||
;;
|
||||
(IA32|X64)
|
||||
gcc_version=$("${cross_prefix}gcc" -v 2>&1 | tail -1 | awk '{print $3}')
|
||||
case "$gcc_version" in
|
||||
([1-3].*|4.[0-3].*)
|
||||
printf '%s: unsupported gcc version "%s"\n' \
|
||||
"$program_name" "$gcc_version" >&2
|
||||
exit 1
|
||||
;;
|
||||
(4.4.*)
|
||||
edk2_toolchain=GCC44
|
||||
;;
|
||||
(4.5.*)
|
||||
edk2_toolchain=GCC45
|
||||
;;
|
||||
(4.6.*)
|
||||
edk2_toolchain=GCC46
|
||||
;;
|
||||
(4.7.*)
|
||||
edk2_toolchain=GCC47
|
||||
;;
|
||||
(4.8.*)
|
||||
edk2_toolchain=GCC48
|
||||
;;
|
||||
(4.9.*|6.[0-2].*)
|
||||
edk2_toolchain=GCC49
|
||||
;;
|
||||
(*)
|
||||
edk2_toolchain=GCC5
|
||||
;;
|
||||
esac
|
||||
eval "export ${edk2_toolchain}_BIN=\$cross_prefix"
|
||||
;;
|
||||
esac
|
||||
# Fetch some option arguments, and set the cross-compilation environment (if
|
||||
# any), for the edk2 "build" utility.
|
||||
source "$edk2_dir/../edk2-funcs.sh"
|
||||
edk2_arch=$(qemu_edk2_get_arch "$emulation_target")
|
||||
edk2_toolchain=$(qemu_edk2_get_toolchain "$emulation_target")
|
||||
qemu_edk2_set_cross_env "$emulation_target"
|
||||
|
||||
# Build the UEFI binary
|
||||
mkdir -p log
|
||||
|
|
Loading…
Reference in New Issue