This ReadMe.md describes the Azure DevOps based Platform CI for OvmfPkg and how to use the same Pytools based build infrastructure locally.
This solution for building and running OvmfPkg has only been validated with Windows 10 with VS2019 and Ubuntu 18.04 with GCC5 toolchain. Four different firmware builds are supported and are described below.
Configuration name | Architectures | DSC File | Additional Flags |
---|---|---|---|
IA32 | IA32 | OvmfPkgIa32.dsc | None |
X64 | X64 | OvmfPkgIa64.dsc | None |
IA32 X64 | PEI-IA32 DXE-X64 | OvmfPkgIa32X64.dsc | None |
IA32 X64 Full | PEI-IA32 DXE-X64 | OvmfPkgIa32X64.dsc | SECURE_BOOT_ENABLE=1 SMM_REQUIRE=1 TPM_ENABLE=1 TPM_CONFIG_ENABLE=1 NETWORK_TLS_ENABLE=1 NETWORK_IP6_ENABLE=1 NETWORK_HTTP_BOOT_ENABLE=1 |
Note: edksetup, Submodule initialization and manual installation of NASM, iASL, or the required cross-compiler toolchains are not required, this is handled by the Pytools build system.
[Optional] Create a Python Virtual Environment - generally once per workspace
python -m venv <name of virtual environment>
[Optional] Activate Virtual Environment - each time new shell opened
Linux
source <name of virtual environment>/bin/activate
Windows
<name of virtual environment>/Scripts/activate.bat
Install Pytools - generally once per virtual env or whenever pip-requirements.txt changes
pip install --upgrade -r pip-requirements.txt
Initialize & Update Submodules - only when submodules updated
stuart_setup -c OvmfPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a <TARGET_ARCH>
Initialize & Update Dependencies - only as needed when ext_deps change
stuart_update -c OvmfPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a <TARGET_ARCH>
Compile the basetools if necessary - only when basetools C source files change
python BaseTools/Edk2ToolsBuild.py -t <ToolChainTag>
Compile Firmware
stuart_build -c OvmfPkg/PlatformCI/PlatformBuild.py -a IA32 TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG>
stuart_build -c OvmfPkg/PlatformCI/PlatformBuild.py -a X64 TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG>
stuart_build -c OvmfPkg/PlatformCI/PlatformBuild.py -a IA32,X64 TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG>
stuart_build -c OvmfPkg/PlatformCI/PlatformBuild.py -h
option to see additional
options like --clean
Running Emulator
You can add --FlashRom
to the end of your build command and the emulator will run after the
build is complete.
or use the --FlashOnly
feature to just run the emulator.
stuart_build -c OvmfPkg/PlatformCI/PlatformBuild.py TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a <TARGET_ARCH> --FlashOnly
[-a <TARGET_ARCH>]
parameter.NOTE: Logging the execution output will be in the normal stuart log as well as to your console.
MAKE_STARTUP_NSH=TRUE will output a startup.nsh file to the location mapped as fs0. This is
used in CI in combination with the --FlashOnly
feature to run QEMU to the UEFI shell and then execute
the contents of startup.nsh.
QEMU_HEADLESS=TRUE Since CI servers run headless QEMU must be told to run with no display otherwise an error occurs. Locally you don't need to set this.
To pass build defines through stuart_build, prepend BLD_*_
to the define name and pass it on the
command-line. stuart_build currently requires values to be assigned, so add an=1
suffix for bare defines.
For example, to enable the TPM2 support, instead of the traditional "-D E1000_ENABLE", the stuart_build
command-line would be:
stuart_build -c OvmfPkg/PlatformCI/PlatformBuild.py BLD_*_E1000_ENABLE=1
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。