CI: Constructed separate workflows for common, arm, x86 packages and CodeQL.

Signed-off-by: Savva Mitrofanov <savvamtr@gmail.com>
This commit is contained in:
Mikhail Krichanov 2024-07-18 11:33:40 +03:00
parent a986e4f61e
commit ae79fe0dc3
9 changed files with 2291 additions and 41 deletions

View File

@ -1,16 +1,10 @@
{
"image": "ghcr.io/tianocore/containers/fedora-35-dev:latest",
"postCreateCommand": "git config --global --add safe.directory * && pip install --upgrade -r pip-requirements.txt",
"customizations": {
"vscode": {
"extensions": [
"DavidAnson.vscode-markdownlint",
"ms-azuretools.vscode-docker",
"ms-vscode-remote.remote-containers",
"ms-vscode.cpptools",
"walonli.edk2-vscode",
"zachflower.uncrustify"
]
}
}
"name": "audk",
"build": {
"dockerfile": "../OpenCorePkg/Dockerfiles/oc-dev/Dockerfile",
"context": "../OpenCorePkg/Dockerfiles/oc-dev/",
"target": "oc-dev-edk2"
},
"workspaceMount": "source=${localWorkspaceFolder},target=/com.docker.devenvironments.code,type=bind,consistency=cached",
"workspaceFolder": "/com.docker.devenvironments.code"
}

312
.github/workflows/build_arm.yaml vendored Normal file
View File

@ -0,0 +1,312 @@
name: Build ARM Firmwares
on:
push:
pull_request:
workflow_dispatch:
release:
types: [published]
env:
PROJECT_TYPE: UEFI
FORCE_INSTALL: 1
WERROR: 1
QEMU_VERSION_TAG: qemu-ci-8.1.5-r1
WINPE_VERSION_TAG: images-winpe-1.0
jobs:
build-linux-gcc5:
name: Linux GCC5
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y lsb-release wget software-properties-common gnupg build-essential nasm uuid-dev libssl-dev iasl curl git zip gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu
- name: CI Bootstrap
run: |
src=$(/usr/bin/curl -Lfs https://raw.githubusercontent.com/acidanthera/ocbuild/master/ci-bootstrap.sh) && eval "$src" || exit 1
touch UDK.ready
- name: Prepare efibuild.sh
run: |
curl -o ./efibuild.sh https://raw.githubusercontent.com/acidanthera/ocbuild/master/efibuild.sh || exit 1
chmod +x ./efibuild.sh
ln -s `pwd` UDK
- name: Build BaseTools
run: ./efibuild.sh
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build ArmPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: ArmPkg
SELFPKG_DIR: ArmPkg
TOOLCHAINS: GCC5
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
GCC5_ARM_PREFIX: arm-linux-gnueabi-
GCC5_AARCH64_PREFIX: aarch64-linux-gnu-
- name: Build ArmPlatformPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: ArmPlatformPkg
SELFPKG_DIR: ArmPlatformPkg
TOOLCHAINS: GCC5
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
GCC5_ARM_PREFIX: arm-linux-gnueabi-
GCC5_AARCH64_PREFIX: aarch64-linux-gnu-
- name: Build ArmVirtQemu
if: always()
run: ./efibuild.sh
env:
SELFPKG: ArmVirtQemu
SELFPKG_DIR: ArmVirtPkg
TOOLCHAINS: GCC5
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
GCC5_ARM_PREFIX: arm-linux-gnueabi-
GCC5_AARCH64_PREFIX: aarch64-linux-gnu-
- name: Prepare artifacts with firmwares
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
mkdir -p ./firmware_artifacts/ArmVirtQemu/"$arch"/"$target"_"$TOOLCHAIN"
cp ./Build/ArmVirtQemu-"$arch"/"$target"_"$TOOLCHAIN"/FV/QEMU_EFI.fd ./firmware_artifacts/ArmVirtQemu/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG,NOOPT
TOOLCHAIN: GCC5
- name: Zip artifacts
run: zip GCC5_fw_arm_artifacts.zip ./firmware_artifacts/* -r
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: GCC5 Firmware ARM Artifacts
path: GCC5_fw_arm_artifacts.zip
build-linux-clangdwarf:
name: Linux CLANGDWARF
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y lsb-release wget software-properties-common gnupg build-essential nasm uuid-dev libssl-dev iasl curl git zip
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
yes '' | sudo ./llvm.sh 15
rm -f llvm.sh
echo "/usr/lib/llvm-15/bin" >> $GITHUB_PATH
- name: CI Bootstrap
run: |
src=$(/usr/bin/curl -Lfs https://raw.githubusercontent.com/acidanthera/ocbuild/master/ci-bootstrap.sh) && eval "$src" || exit 1
touch UDK.ready
- name: Prepare efibuild.sh
run: |
curl -o ./efibuild.sh https://raw.githubusercontent.com/acidanthera/ocbuild/master/efibuild.sh || exit 1
chmod +x ./efibuild.sh
ln -s `pwd` UDK
- name: Build BaseTools
run: ./efibuild.sh
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build ArmPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: ArmPkg
SELFPKG_DIR: ArmPkg
TOOLCHAINS: CLANGDWARF
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build ArmPlatformPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: ArmPlatformPkg
SELFPKG_DIR: ArmPlatformPkg
TOOLCHAINS: CLANGDWARF
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build ArmVirtQemu
if: always()
run: ./efibuild.sh
env:
SELFPKG: ArmVirtQemu
SELFPKG_DIR: ArmVirtPkg
TOOLCHAINS: CLANGDWARF
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Prepare artifacts with firmwares
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
mkdir -p ./firmware_artifacts/ArmVirtQemu/"$arch"/"$target"_"$TOOLCHAIN"
cp ./Build/ArmVirtQemu-"$arch"/"$target"_"$TOOLCHAIN"/FV/QEMU_EFI.fd ./firmware_artifacts/ArmVirtQemu/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG,NOOPT
TOOLCHAIN: CLANGDWARF
- name: Zip artifacts
run: zip CLANGDWARF_fw_arm_artifacts.zip ./firmware_artifacts/* -r
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: CLANGDWARF Firmware ARM Artifacts
path: CLANGDWARF_fw_arm_artifacts.zip
test-firmwares:
name: Test
runs-on: ubuntu-22.04
needs: [build-linux-gcc5, build-linux-clangdwarf]
strategy:
fail-fast: false
matrix:
package: [
{name: "ArmVirtQemu", archs: "ARM,AARCH64", toolchain: "GCC5", targets: "RELEASE,DEBUG,NOOPT"},
{name: "ArmVirtQemu", archs: "ARM,AARCH64", toolchain: "CLANGDWARF", targets: "RELEASE,DEBUG,NOOPT"},
]
steps:
- name: Checkout ocbuild repository
uses: actions/checkout@v4
with:
repository: acidanthera/ocbuild
ref: master
path: ./
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y python3 python3-pip libglib2.0-dev libfdt-dev libpixman-1-dev libepoxy-dev libcapstone-dev libsdl2-dev libnuma-dev libgtk-3-dev libvte-2.91-dev libbrlapi-dev libiscsi-dev libnfs-dev librbd-dev libxen-dev
python3 -m pip install -r requirements.txt
- name: Downloading QEMU
uses: robinraju/release-downloader@v1.7
with:
repository: "acidanthera/OcBinaryData"
tag: ${{ env.QEMU_VERSION_TAG }}
fileName: "qemu.tar.xz"
- name: Installing QEMU and add to PATH
run: |
echo "${HOME}/qemu/bin" >> $GITHUB_PATH
tar -xJf ./qemu.tar.xz -C $HOME
- name: Download a single artifact
uses: actions/download-artifact@v4
with:
name: ${{ matrix.package.toolchain }} Firmware ARM Artifacts
- name: Unzip artifacts
run: unzip "$TOOLCHAIN"_fw_arm_artifacts.zip
env:
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Downloading Windows PE AARCH64 iso
uses: robinraju/release-downloader@v1.7
with:
repository: "acidanthera/OcBinaryData"
tag: ${{ env.WINPE_VERSION_TAG }}
fileName: "winpe_AARCH64.iso"
- name: Run TestConsole
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
echo Checking "$PACKAGE""$arch" "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd --fw-arch "$arch"
done
done
env:
PACKAGE: ${{ matrix.package.name }}
ARCHS: ${{ matrix.package.archs }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Run TestLinux
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
echo Checking "$PACKAGE""$arch" "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd --test-linux --fw-arch "$arch"
done
done
env:
PACKAGE: ${{ matrix.package.name }}
ARCHS: ${{ matrix.package.archs }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Run Windows PE aarch64
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
echo Checking "$PACKAGE"AARCH64 "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/AARCH64/"$target"_"$TOOLCHAIN"/FW.fd --fw-arch AARCH64 --test-winpe --test-winpe-path ./winpe_AARCH64.iso
done
env:
PACKAGE: ${{ matrix.package.name }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}

622
.github/workflows/build_common.yml vendored Normal file
View File

@ -0,0 +1,622 @@
name: Build Common packages
on:
push:
pull_request:
workflow_dispatch:
release:
types: [published]
env:
PROJECT_TYPE: UEFI
FORCE_INSTALL: 1
WERROR: 1
jobs:
build-macos:
name: macOS XCODE5
runs-on: macos-latest
env:
JOB_TYPE: BUILD
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Add Linux Toolchain
run: brew tap FiloSottile/homebrew-musl-cross
- name: Install Linux Toolchain
run: brew install musl-cross
env:
HOMEBREW_NO_INSTALL_CLEANUP: 1
HOMEBREW_NO_AUTO_UPDATE: 1
- name: Install Dependencies
run: brew install openssl mingw-w64
env:
HOMEBREW_NO_INSTALL_CLEANUP: 1
HOMEBREW_NO_AUTO_UPDATE: 1
- name: CI Bootstrap
run: |
src=$(/usr/bin/curl -Lfs https://raw.githubusercontent.com/acidanthera/ocbuild/master/ci-bootstrap.sh) && eval "$src" || exit 1
touch UDK.ready
- name: Prepare efibuild.sh
run: |
curl -o ./efibuild.sh https://raw.githubusercontent.com/acidanthera/ocbuild/master/efibuild.sh || exit 1
chmod +x ./efibuild.sh
ln -s `pwd` UDK
- name: Build BaseTools
run: ./efibuild.sh
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build Ext4Pkg
run: ./efibuild.sh
env:
SELFPKG: Ext4Pkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build FatPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: FatPkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build IntelFsp2Pkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: IntelFsp2Pkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build IntelFsp2WrapperPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: IntelFsp2WrapperPkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build MdeModulePkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: MdeModulePkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build MdePkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: MdePkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiCpuPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: UefiCpuPkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UnitTestFrameworkPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: UnitTestFrameworkPkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build NetworkPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: NetworkPkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
build-windows:
name: Windows VS2019
runs-on: windows-latest
env:
CC: gcc
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Dependencies
run: |
choco install make nasm zip iasl --no-progress
- name: CI Bootstrap
run: |
src=$(curl -Lfs https://raw.githubusercontent.com/acidanthera/ocbuild/master/ci-bootstrap.sh) && eval "$src" || exit 1
touch UDK.ready
- name: Prepare efibuild.sh
run: |
curl -o ./efibuild.sh https://raw.githubusercontent.com/acidanthera/ocbuild/master/efibuild.sh || exit 1
chmod +x ./efibuild.sh
cmd <<< "mklink /D .\\UDK .\\" > /dev/null
- name: Build BaseTools
run: ./efibuild.sh
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build Ext4Pkg
run: ./efibuild.sh
env:
SELFPKG: Ext4Pkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build FatPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: FatPkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build IntelFsp2Pkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: IntelFsp2Pkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build IntelFsp2WrapperPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: IntelFsp2WrapperPkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build MdeModulePkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: MdeModulePkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build MdePkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: MdePkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiCpuPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: UefiCpuPkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UnitTestFrameworkPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: UnitTestFrameworkPkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build NetworkPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: NetworkPkg
ARCHS: IA32,X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
build-linux-clangpdb:
name: Linux CLANGPDB
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Use Docker in rootless mode.
uses: ScribeMD/rootless-docker@0.2.2
- name: Build BaseTools
run: docker compose run build-package
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build Ext4Pkg
run: docker compose run build-package
env:
SELFPKG: Ext4Pkg
SELFPKG_DIR: Ext4Pkg
TOOLCHAINS: CLANGPDB
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build FatPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: FatPkg
SELFPKG_DIR: FatPkg
TOOLCHAINS: CLANGPDB
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build IntelFsp2Pkg
if: always()
run: docker compose run build-package
env:
SELFPKG: IntelFsp2Pkg
SELFPKG_DIR: IntelFsp2Pkg
TOOLCHAINS: CLANGPDB
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build IntelFsp2WrapperPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: IntelFsp2WrapperPkg
SELFPKG_DIR: IntelFsp2WrapperPkg
TOOLCHAINS: CLANGPDB
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build MdeModulePkg
if: always()
run: docker compose run build-package
env:
SELFPKG: MdeModulePkg
SELFPKG_DIR: MdeModulePkg
TOOLCHAINS: CLANGPDB
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build MdePkg
if: always()
run: docker compose run build-package
env:
SELFPKG: MdePkg
SELFPKG_DIR: MdePkg
TOOLCHAINS: CLANGPDB
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiCpuPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiCpuPkg
SELFPKG_DIR: UefiCpuPkg
TOOLCHAINS: CLANGPDB
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UnitTestFrameworkPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: UnitTestFrameworkPkg
SELFPKG_DIR: UnitTestFrameworkPkg
TOOLCHAINS: CLANGPDB
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build NetworkPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: NetworkPkg
SELFPKG_DIR: NetworkPkg
TOOLCHAINS: CLANGPDB
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
build-linux-clangdwarf:
name: Linux CLANGDWARF
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Use Docker in rootless mode.
uses: ScribeMD/rootless-docker@0.2.2
- name: Build BaseTools
run: docker compose run build-package
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build Ext4Pkg
run: docker compose run build-package
env:
SELFPKG: Ext4Pkg
SELFPKG_DIR: Ext4Pkg
TOOLCHAINS: CLANGDWARF
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build FatPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: FatPkg
SELFPKG_DIR: FatPkg
TOOLCHAINS: CLANGDWARF
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build IntelFsp2Pkg
if: always()
run: docker compose run build-package
env:
SELFPKG: IntelFsp2Pkg
SELFPKG_DIR: IntelFsp2Pkg
TOOLCHAINS: CLANGDWARF
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build IntelFsp2WrapperPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: IntelFsp2WrapperPkg
SELFPKG_DIR: IntelFsp2WrapperPkg
TOOLCHAINS: CLANGDWARF
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build MdeModulePkg
if: always()
run: docker compose run build-package
env:
SELFPKG: MdeModulePkg
SELFPKG_DIR: MdeModulePkg
TOOLCHAINS: CLANGDWARF
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build MdePkg
if: always()
run: docker compose run build-package
env:
SELFPKG: MdePkg
SELFPKG_DIR: MdePkg
TOOLCHAINS: CLANGDWARF
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiCpuPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiCpuPkg
SELFPKG_DIR: UefiCpuPkg
TOOLCHAINS: CLANGDWARF
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UnitTestFrameworkPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: UnitTestFrameworkPkg
SELFPKG_DIR: UnitTestFrameworkPkg
TOOLCHAINS: CLANGDWARF
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build NetworkPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: NetworkPkg
SELFPKG_DIR: NetworkPkg
TOOLCHAINS: CLANGDWARF
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
build-linux-gcc5:
name: Linux GCC5
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Use Docker in rootless mode.
uses: ScribeMD/rootless-docker@0.2.2
- name: Build BaseTools
run: docker compose run build-package
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build Ext4Pkg
run: docker compose run build-package
env:
SELFPKG: Ext4Pkg
SELFPKG_DIR: Ext4Pkg
TOOLCHAINS: GCC5
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build FatPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: FatPkg
SELFPKG_DIR: FatPkg
TOOLCHAINS: GCC5
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build IntelFsp2Pkg
if: always()
run: docker compose run build-package
env:
SELFPKG: IntelFsp2Pkg
SELFPKG_DIR: IntelFsp2Pkg
TOOLCHAINS: GCC5
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build IntelFsp2WrapperPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: IntelFsp2WrapperPkg
SELFPKG_DIR: IntelFsp2WrapperPkg
TOOLCHAINS: GCC5
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build MdeModulePkg
if: always()
run: docker compose run build-package
env:
SELFPKG: MdeModulePkg
SELFPKG_DIR: MdeModulePkg
TOOLCHAINS: GCC5
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build MdePkg
if: always()
run: docker compose run build-package
env:
SELFPKG: MdePkg
SELFPKG_DIR: MdePkg
TOOLCHAINS: GCC5
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiCpuPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiCpuPkg
SELFPKG_DIR: UefiCpuPkg
TOOLCHAINS: GCC5
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UnitTestFrameworkPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: UnitTestFrameworkPkg
SELFPKG_DIR: UnitTestFrameworkPkg
TOOLCHAINS: GCC5
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build NetworkPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: NetworkPkg
SELFPKG_DIR: NetworkPkg
TOOLCHAINS: GCC5
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1

577
.github/workflows/build_nolto.yaml vendored Normal file
View File

@ -0,0 +1,577 @@
name: Build Firmwares using GCC without Link Time Optimization
on:
push:
pull_request:
workflow_dispatch:
release:
types: [published]
env:
PROJECT_TYPE: UEFI
FORCE_INSTALL: 1
WERROR: 1
QEMU_VERSION_TAG: qemu-ci-8.1.5-r1
WINPE_VERSION_TAG: images-winpe-1.0
jobs:
build-linux-arm:
name: Linux GCC ARM
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y lsb-release wget software-properties-common gnupg build-essential nasm uuid-dev libssl-dev iasl curl git zip gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu
- name: CI Bootstrap
run: |
src=$(/usr/bin/curl -Lfs https://raw.githubusercontent.com/acidanthera/ocbuild/master/ci-bootstrap.sh) && eval "$src" || exit 1
touch UDK.ready
- name: Prepare efibuild.sh
run: |
curl -o ./efibuild.sh https://raw.githubusercontent.com/acidanthera/ocbuild/master/efibuild.sh || exit 1
chmod +x ./efibuild.sh
ln -s `pwd` UDK
- name: Build BaseTools
run: ./efibuild.sh
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build ArmPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: ArmPkg
SELFPKG_DIR: ArmPkg
TOOLCHAINS: GCC
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
GCC_ARM_PREFIX: arm-linux-gnueabi-
GCC_AARCH64_PREFIX: aarch64-linux-gnu-
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build ArmPlatformPkg
if: always()
run: ./efibuild.sh
env:
SELFPKG: ArmPlatformPkg
SELFPKG_DIR: ArmPlatformPkg
TOOLCHAINS: GCC
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
GCC_ARM_PREFIX: arm-linux-gnueabi-
GCC_AARCH64_PREFIX: aarch64-linux-gnu-
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build ArmVirtQemu
if: always()
run: ./efibuild.sh
env:
SELFPKG: ArmVirtQemu
SELFPKG_DIR: ArmVirtPkg
TOOLCHAINS: GCC
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
GCC_ARM_PREFIX: arm-linux-gnueabi-
GCC_AARCH64_PREFIX: aarch64-linux-gnu-
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Prepare artifacts with firmwares
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
mkdir -p ./firmware_artifacts/ArmVirtQemu/"$arch"/"$target"_"$TOOLCHAIN"
cp ./Build/ArmVirtQemu-"$arch"/"$target"_"$TOOLCHAIN"/FV/QEMU_EFI.fd ./firmware_artifacts/ArmVirtQemu/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
ARCHS: ARM,AARCH64
TARGETS: RELEASE,DEBUG
TOOLCHAIN: GCC
- name: Zip artifacts
run: zip GCC_no_lto_artifacts.zip ./firmware_artifacts/* -r
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: GCC Firmware NO_LTO Artifacts
path: GCC_no_lto_artifacts.zip
build-linux-amd:
name: Linux GCC AMD
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Use Docker in rootless mode.
uses: ScribeMD/rootless-docker@0.2.2
- name: Build BaseTools
run: docker compose run build-package
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build OvmfPkgIa32
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgIa32
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: GCC
ARCHS: IA32
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D WINDOWS_10_IA32 -D EDK2_GCC_NOLTO
- name: Build OvmfPkgX64
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgX64
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: GCC
ARCHS: X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build OvmfPkgIa32X64
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgIa32X64
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: GCC
ARCHS: X64
ARCHS_EXT: IA32
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build UefiPayloadPkg with X64 PEI/DXE
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiPayloadPkg
SELFPKG_DIR: UefiPayloadPkg
TOOLCHAINS: GCC
ARCHS: X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build UefiPayloadPkg with Ia32 PEI and X64 DXE
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiPayloadPkg
SELFPKG_DIR: UefiPayloadPkg
TOOLCHAINS: GCC
ARCHS: X64
ARCHS_EXT: IA32
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Prepare artifacts with firmwares
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
mkdir -p ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"
cp ./Build/Ovmf"$arch"/"$target"_"$TOOLCHAIN"/FV/OVMF.fd ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
ARCHS: Ia32,X64,3264
TARGETS: RELEASE,DEBUG
TOOLCHAIN: GCC
- name: Zip artifacts
run: zip GCC_fw_artifacts.zip ./firmware_artifacts/* -r
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: GCC Firmware Artifacts
path: GCC_fw_artifacts.zip
build-linux-common:
name: Linux GCC Common
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Use Docker in rootless mode.
uses: ScribeMD/rootless-docker@0.2.2
- name: Build BaseTools
run: docker compose run build-package
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build Ext4Pkg
run: docker compose run build-package
env:
SELFPKG: Ext4Pkg
SELFPKG_DIR: Ext4Pkg
TOOLCHAINS: GCC
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build FatPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: FatPkg
SELFPKG_DIR: FatPkg
TOOLCHAINS: GCC
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build IntelFsp2Pkg
if: always()
run: docker compose run build-package
env:
SELFPKG: IntelFsp2Pkg
SELFPKG_DIR: IntelFsp2Pkg
TOOLCHAINS: GCC
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build IntelFsp2WrapperPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: IntelFsp2WrapperPkg
SELFPKG_DIR: IntelFsp2WrapperPkg
TOOLCHAINS: GCC
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build MdeModulePkg
if: always()
run: docker compose run build-package
env:
SELFPKG: MdeModulePkg
SELFPKG_DIR: MdeModulePkg
TOOLCHAINS: GCC
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build MdePkg
if: always()
run: docker compose run build-package
env:
SELFPKG: MdePkg
SELFPKG_DIR: MdePkg
TOOLCHAINS: GCC
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build UefiCpuPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiCpuPkg
SELFPKG_DIR: UefiCpuPkg
TOOLCHAINS: GCC
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build UnitTestFrameworkPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: UnitTestFrameworkPkg
SELFPKG_DIR: UnitTestFrameworkPkg
TOOLCHAINS: GCC
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
- name: Build NetworkPkg
if: always()
run: docker compose run build-package
env:
SELFPKG: NetworkPkg
SELFPKG_DIR: NetworkPkg
TOOLCHAINS: GCC
ARCHS: IA32,X64
TARGETS: RELEASE,DEBUG
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D EDK2_GCC_NOLTO
test-arm:
name: Test ARM
runs-on: ubuntu-22.04
needs: [build-linux-arm]
strategy:
fail-fast: false
matrix:
package: [
{name: "ArmVirtQemu", archs: "ARM,AARCH64", toolchain: "GCC", targets: "RELEASE,DEBUG"},
]
steps:
- name: Checkout ocbuild repository
uses: actions/checkout@v4
with:
repository: acidanthera/ocbuild
ref: master
path: ./
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y python3 python3-pip libglib2.0-dev libfdt-dev libpixman-1-dev libepoxy-dev libcapstone-dev libsdl2-dev libnuma-dev libgtk-3-dev libvte-2.91-dev libbrlapi-dev libiscsi-dev libnfs-dev librbd-dev libxen-dev
python3 -m pip install -r requirements.txt
- name: Downloading QEMU
uses: robinraju/release-downloader@v1.7
with:
repository: "acidanthera/OcBinaryData"
tag: ${{ env.QEMU_VERSION_TAG }}
fileName: "qemu.tar.xz"
- name: Installing QEMU and add to PATH
run: |
echo "${HOME}/qemu/bin" >> $GITHUB_PATH
tar -xJf ./qemu.tar.xz -C $HOME
- name: Download a single artifact
uses: actions/download-artifact@v4
with:
name: ${{ matrix.package.toolchain }} Firmware NO_LTO Artifacts
- name: Unzip artifacts
run: unzip "$TOOLCHAIN"_no_lto_artifacts.zip
env:
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Downloading Windows PE AARCH64 iso
uses: robinraju/release-downloader@v1.7
with:
repository: "acidanthera/OcBinaryData"
tag: ${{ env.WINPE_VERSION_TAG }}
fileName: "winpe_AARCH64.iso"
- name: Run TestConsole
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
echo Checking "$PACKAGE""$arch" "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd --fw-arch "$arch"
done
done
env:
PACKAGE: ${{ matrix.package.name }}
ARCHS: ${{ matrix.package.archs }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Run TestLinux
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
echo Checking "$PACKAGE""$arch" "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd --test-linux --fw-arch "$arch"
done
done
env:
PACKAGE: ${{ matrix.package.name }}
ARCHS: ${{ matrix.package.archs }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Run Windows PE aarch64
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
echo Checking "$PACKAGE"AARCH64 "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/AARCH64/"$target"_"$TOOLCHAIN"/FW.fd --fw-arch AARCH64 --test-winpe --test-winpe-path ./winpe_AARCH64.iso
done
env:
PACKAGE: ${{ matrix.package.name }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}
test-amd:
name: Test AMD
runs-on: ubuntu-22.04
needs: [build-linux-amd]
strategy:
fail-fast: false
matrix:
package: [
{name: "Ovmf", archs: "Ia32,X64,3264", toolchain: "GCC", targets: "RELEASE,DEBUG"},
]
steps:
- name: Checkout ocbuild repository
uses: actions/checkout@v4
with:
repository: acidanthera/ocbuild
ref: master
path: ./
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y python3 python3-pip libglib2.0-dev libfdt-dev libpixman-1-dev libepoxy-dev libcapstone-dev libsdl2-dev libnuma-dev libgtk-3-dev libvte-2.91-dev libbrlapi-dev libiscsi-dev libnfs-dev librbd-dev libxen-dev
python3 -m pip install -r requirements.txt
- name: Downloading QEMU
uses: robinraju/release-downloader@v1.7
with:
repository: "acidanthera/OcBinaryData"
tag: ${{ env.QEMU_VERSION_TAG }}
fileName: "qemu.tar.xz"
- name: Installing QEMU and add to PATH
run: |
echo "${HOME}/qemu/bin" >> $GITHUB_PATH
tar -xJf ./qemu.tar.xz -C $HOME
- name: Download a single artifact
uses: actions/download-artifact@v4
with:
name: ${{ matrix.package.toolchain }} Firmware Artifacts
- name: Unzip artifacts
run: unzip "$TOOLCHAIN"_fw_artifacts.zip
env:
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Downloading Windows PE X64 iso
uses: robinraju/release-downloader@v1.7
with:
repository: "acidanthera/OcBinaryData"
tag: ${{ env.WINPE_VERSION_TAG }}
fileName: "winpe_X64.iso"
- name: Downloading Windows PE IA32 iso
uses: robinraju/release-downloader@v1.7
with:
repository: "acidanthera/OcBinaryData"
tag: ${{ env.WINPE_VERSION_TAG }}
fileName: "winpe_IA32.iso"
- name: Run TestConsole
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
echo Checking "$PACKAGE""$arch" "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
PACKAGE: ${{ matrix.package.name }}
ARCHS: ${{ matrix.package.archs }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Run TestLinux
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
echo Checking "$PACKAGE""$arch" "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd --test-linux
done
done
env:
PACKAGE: ${{ matrix.package.name }}
ARCHS: ${{ matrix.package.archs }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Run Windows PE
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
if [ "$arch" = "Ia32" ]; then
WINPE_FILENAME=winpe_IA32.iso
elif [ "$arch" = "X64" ] || [ "$arch" = "3264" ]; then
WINPE_FILENAME=winpe_X64.iso
fi
echo Checking "$PACKAGE""$arch" "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd --test-winpe --test-winpe-path "$WINPE_FILENAME"
done
done
env:
PACKAGE: ${{ matrix.package.name }}
ARCHS: ${{ matrix.package.archs }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}

680
.github/workflows/build_x86.yaml vendored Normal file
View File

@ -0,0 +1,680 @@
name: Build X86 Firmwares
on:
push:
pull_request:
workflow_dispatch:
release:
types: [published]
env:
PROJECT_TYPE: UEFI
FORCE_INSTALL: 1
WERROR: 1
QEMU_VERSION_TAG: qemu-ci-8.1.5-r1
WINPE_VERSION_TAG: images-winpe-1.0
jobs:
build-macos:
name: macOS XCODE5
runs-on: macos-latest
env:
JOB_TYPE: BUILD
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Add Linux Toolchain
run: brew tap FiloSottile/homebrew-musl-cross
- name: Install Linux Toolchain
run: brew install musl-cross
env:
HOMEBREW_NO_INSTALL_CLEANUP: 1
HOMEBREW_NO_AUTO_UPDATE: 1
- name: Install Dependencies
run: brew install openssl mingw-w64
env:
HOMEBREW_NO_INSTALL_CLEANUP: 1
HOMEBREW_NO_AUTO_UPDATE: 1
- name: CI Bootstrap
run: |
src=$(/usr/bin/curl -Lfs https://raw.githubusercontent.com/acidanthera/ocbuild/master/ci-bootstrap.sh) && eval "$src" || exit 1
touch UDK.ready
- name: Prepare efibuild.sh
run: |
curl -o ./efibuild.sh https://raw.githubusercontent.com/acidanthera/ocbuild/master/efibuild.sh || exit 1
chmod +x ./efibuild.sh
ln -s `pwd` UDK
- name: Build BaseTools
run: ./efibuild.sh
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build OvmfPkgIa32
if: always()
run: ./efibuild.sh
env:
SELFPKG: OvmfPkgIa32
SELFPKG_DIR: OvmfPkg
ARCHS: IA32
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D WINDOWS_10_IA32
- name: Build OvmfPkgX64
if: always()
run: ./efibuild.sh
env:
SELFPKG: OvmfPkgX64
SELFPKG_DIR: OvmfPkg
ARCHS: X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build OvmfPkgIa32X64
if: always()
run: ./efibuild.sh
env:
SELFPKG: OvmfPkgIa32X64
SELFPKG_DIR: OvmfPkg
ARCHS: X64
ARCHS_EXT: IA32
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiPayloadPkg with X64 PEI/DXE
if: always()
run: ./efibuild.sh
env:
SELFPKG: UefiPayloadPkg
ARCHS: X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiPayloadPkg with Ia32 PEI and X64 DXE
if: always()
run: ./efibuild.sh
env:
SELFPKG: UefiPayloadPkg
ARCHS: X64
ARCHS_EXT: IA32
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Prepare artifacts with firmwares
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
mkdir -p ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"
cp ./Build/Ovmf"$arch"/"$target"_"$TOOLCHAIN"/FV/OVMF.fd ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
ARCHS: Ia32,X64,3264
TARGETS: RELEASE,DEBUG,NOOPT
TOOLCHAIN: XCODE5
- name: Zip artifacts
run: zip XCODE5_fw_artifacts.zip ./firmware_artifacts/* -r
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: XCODE5 Firmware Artifacts
path: XCODE5_fw_artifacts.zip
build-windows:
name: Windows VS2019
runs-on: windows-latest
env:
CC: gcc
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Dependencies
run: |
choco install make nasm zip iasl --no-progress
- name: CI Bootstrap
run: |
src=$(curl -Lfs https://raw.githubusercontent.com/acidanthera/ocbuild/master/ci-bootstrap.sh) && eval "$src" || exit 1
touch UDK.ready
- name: Prepare efibuild.sh
run: |
curl -o ./efibuild.sh https://raw.githubusercontent.com/acidanthera/ocbuild/master/efibuild.sh || exit 1
chmod +x ./efibuild.sh
cmd <<< "mklink /D .\\UDK .\\" > /dev/null
- name: Build BaseTools
run: ./efibuild.sh
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build OvmfPkgIa32
if: always()
run: ./efibuild.sh
env:
SELFPKG: OvmfPkgIa32
SELFPKG_DIR: OvmfPkg
ARCHS: IA32
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D WINDOWS_10_IA32
- name: Build OvmfPkgX64
if: always()
run: ./efibuild.sh
env:
SELFPKG: OvmfPkgX64
SELFPKG_DIR: OvmfPkg
ARCHS: X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build OvmfPkgIa32X64
if: always()
run: ./efibuild.sh
env:
SELFPKG: OvmfPkgIa32X64
SELFPKG_DIR: OvmfPkg
ARCHS: X64
ARCHS_EXT: IA32
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiPayloadPkg with X64 PEI/DXE
if: always()
run: ./efibuild.sh
env:
SELFPKG: UefiPayloadPkg
ARCHS: X64
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiPayloadPkg with Ia32 PEI and X64 DXE
if: always()
run: ./efibuild.sh
env:
SELFPKG: UefiPayloadPkg
ARCHS: X64
ARCHS_EXT: IA32
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Prepare artifacts with firmwares
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
mkdir -p ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"
cp ./Build/Ovmf"$arch"/"$target"_"$TOOLCHAIN"/FV/OVMF.fd ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
ARCHS: Ia32,X64,3264
TARGETS: RELEASE,DEBUG,NOOPT
TOOLCHAIN: VS2019
- name: Zip artifacts
run: zip VS2019_fw_artifacts.zip ./firmware_artifacts/* -r
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: VS2019 Firmware Artifacts
path: VS2019_fw_artifacts.zip
build-linux-clangpdb:
name: Linux CLANGPDB
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Use Docker in rootless mode.
uses: ScribeMD/rootless-docker@0.2.2
- name: Build BaseTools
run: docker compose run build-package
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build OvmfPkgIa32
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgIa32
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: CLANGPDB
ARCHS: IA32
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D WINDOWS_10_IA32
- name: Build OvmfPkgX64
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgX64
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: CLANGPDB
ARCHS: X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build OvmfPkgIa32X64
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgIa32X64
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: CLANGPDB
ARCHS: X64
ARCHS_EXT: IA32
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiPayloadPkg with X64 PEI/DXE
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiPayloadPkg
SELFPKG_DIR: UefiPayloadPkg
TOOLCHAINS: CLANGPDB
ARCHS: X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiPayloadPkg with Ia32 PEI and X64 DXE
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiPayloadPkg
SELFPKG_DIR: UefiPayloadPkg
TOOLCHAINS: CLANGPDB
ARCHS: X64
ARCHS_EXT: IA32
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Prepare artifacts with firmwares
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
mkdir -p ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"
cp ./Build/Ovmf"$arch"/"$target"_"$TOOLCHAIN"/FV/OVMF.fd ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
ARCHS: Ia32,X64,3264
TARGETS: RELEASE,DEBUG,NOOPT
TOOLCHAIN: CLANGPDB
- name: Zip artifacts
run: zip CLANGPDB_fw_artifacts.zip ./firmware_artifacts/* -r
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: CLANGPDB Firmware Artifacts
path: CLANGPDB_fw_artifacts.zip
build-linux-clangdwarf:
name: Linux CLANGDWARF
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Use Docker in rootless mode.
uses: ScribeMD/rootless-docker@0.2.2
- name: Build BaseTools
run: docker compose run build-package
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build OvmfPkgIa32
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgIa32
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: CLANGDWARF
ARCHS: IA32
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D WINDOWS_10_IA32
- name: Build OvmfPkgX64
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgX64
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: CLANGDWARF
ARCHS: X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build OvmfPkgIa32X64
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgIa32X64
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: CLANGDWARF
ARCHS: X64
ARCHS_EXT: IA32
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiPayloadPkg with X64 PEI/DXE
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiPayloadPkg
SELFPKG_DIR: UefiPayloadPkg
TOOLCHAINS: CLANGDWARF
ARCHS: X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiPayloadPkg with Ia32 PEI and X64 DXE
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiPayloadPkg
SELFPKG_DIR: UefiPayloadPkg
TOOLCHAINS: CLANGDWARF
ARCHS: X64
ARCHS_EXT: IA32
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Prepare artifacts with firmwares
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
mkdir -p ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"
cp ./Build/Ovmf"$arch"/"$target"_"$TOOLCHAIN"/FV/OVMF.fd ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
ARCHS: Ia32,X64,3264
TARGETS: RELEASE,DEBUG,NOOPT
TOOLCHAIN: CLANGDWARF
- name: Zip artifacts
run: zip CLANGDWARF_fw_artifacts.zip ./firmware_artifacts/* -r
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: CLANGDWARF Firmware Artifacts
path: CLANGDWARF_fw_artifacts.zip
build-linux-gcc5:
name: Linux GCC5
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Use Docker in rootless mode.
uses: ScribeMD/rootless-docker@0.2.2
- name: Build BaseTools
run: docker compose run build-package
env:
SELFPKG: MdePkg
SKIP_BUILD: 1
- name: Build OvmfPkgIa32
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgIa32
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: GCC5
ARCHS: IA32
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
BUILD_ARGUMENTS: -D WINDOWS_10_IA32
- name: Build OvmfPkgX64
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgX64
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: GCC5
ARCHS: X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build OvmfPkgIa32X64
if: always()
run: docker compose run build-package
env:
SELFPKG: OvmfPkgIa32X64
SELFPKG_DIR: OvmfPkg
TOOLCHAINS: GCC5
ARCHS: X64
ARCHS_EXT: IA32
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiPayloadPkg with X64 PEI/DXE
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiPayloadPkg
SELFPKG_DIR: UefiPayloadPkg
TOOLCHAINS: GCC5
ARCHS: X64
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Build UefiPayloadPkg with Ia32 PEI and X64 DXE
if: always()
run: docker compose run build-package
env:
SELFPKG: UefiPayloadPkg
SELFPKG_DIR: UefiPayloadPkg
TOOLCHAINS: GCC5
ARCHS: X64
ARCHS_EXT: IA32
TARGETS: RELEASE,DEBUG,NOOPT
SKIP_TESTS: 1
SKIP_PACKAGE: 1
- name: Prepare artifacts with firmwares
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
mkdir -p ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"
cp ./Build/Ovmf"$arch"/"$target"_"$TOOLCHAIN"/FV/OVMF.fd ./firmware_artifacts/Ovmf/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
ARCHS: Ia32,X64,3264
TARGETS: RELEASE,DEBUG,NOOPT
TOOLCHAIN: GCC5
- name: Zip artifacts
run: zip GCC5_fw_artifacts.zip ./firmware_artifacts/* -r
- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: GCC5 Firmware Artifacts
path: GCC5_fw_artifacts.zip
test-firmwares:
name: Test
runs-on: ubuntu-22.04
needs: [build-macos, build-windows, build-linux-clangpdb, build-linux-clangdwarf, build-linux-gcc5]
strategy:
fail-fast: false
matrix:
package: [
{name: "Ovmf", archs: "Ia32,X64,3264", toolchain: "XCODE5", targets: "RELEASE,DEBUG,NOOPT"},
{name: "Ovmf", archs: "Ia32,X64,3264", toolchain: "VS2019", targets: "RELEASE,DEBUG,NOOPT"},
{name: "Ovmf", archs: "Ia32,X64,3264", toolchain: "CLANGPDB", targets: "RELEASE,DEBUG,NOOPT"},
{name: "Ovmf", archs: "Ia32,X64,3264", toolchain: "CLANGDWARF", targets: "RELEASE,DEBUG,NOOPT"},
{name: "Ovmf", archs: "Ia32,X64,3264", toolchain: "GCC5", targets: "RELEASE,DEBUG,NOOPT"},
]
steps:
- name: Checkout ocbuild repository
uses: actions/checkout@v4
with:
repository: acidanthera/ocbuild
ref: master
path: ./
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y python3 python3-pip libglib2.0-dev libfdt-dev libpixman-1-dev libepoxy-dev libcapstone-dev libsdl2-dev libnuma-dev libgtk-3-dev libvte-2.91-dev libbrlapi-dev libiscsi-dev libnfs-dev librbd-dev libxen-dev
python3 -m pip install -r requirements.txt
- name: Downloading QEMU
uses: robinraju/release-downloader@v1.7
with:
repository: "acidanthera/OcBinaryData"
tag: ${{ env.QEMU_VERSION_TAG }}
fileName: "qemu.tar.xz"
- name: Installing QEMU and add to PATH
run: |
echo "${HOME}/qemu/bin" >> $GITHUB_PATH
tar -xJf ./qemu.tar.xz -C $HOME
- name: Download a single artifact
uses: actions/download-artifact@v4
with:
name: ${{ matrix.package.toolchain }} Firmware Artifacts
- name: Unzip artifacts
run: unzip "$TOOLCHAIN"_fw_artifacts.zip
env:
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Downloading Windows PE X64 iso
uses: robinraju/release-downloader@v1.7
with:
repository: "acidanthera/OcBinaryData"
tag: ${{ env.WINPE_VERSION_TAG }}
fileName: "winpe_X64.iso"
- name: Downloading Windows PE IA32 iso
uses: robinraju/release-downloader@v1.7
with:
repository: "acidanthera/OcBinaryData"
tag: ${{ env.WINPE_VERSION_TAG }}
fileName: "winpe_IA32.iso"
- name: Run TestConsole
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
echo Checking "$PACKAGE""$arch" "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd
done
done
env:
PACKAGE: ${{ matrix.package.name }}
ARCHS: ${{ matrix.package.archs }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Run TestLinux
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
echo Checking "$PACKAGE""$arch" "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd --test-linux
done
done
env:
PACKAGE: ${{ matrix.package.name }}
ARCHS: ${{ matrix.package.archs }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}
- name: Run Windows PE
if: always()
run: |
IFS=', ' read -r -a TARGETS <<< "$TARGETS"
IFS=', ' read -r -a ARCHS <<< "$ARCHS"
for target in "${TARGETS[@]}"; do
for arch in "${ARCHS[@]}"; do
if [ "$arch" = "Ia32" ]; then
WINPE_FILENAME=winpe_IA32.iso
elif [ "$arch" = "X64" ] || [ "$arch" = "3264" ]; then
WINPE_FILENAME=winpe_X64.iso
fi
echo Checking "$PACKAGE""$arch" "$target"_"$TOOLCHAIN"
python3 test_qemu_fw.py ./firmware_artifacts/"$PACKAGE"/"$arch"/"$target"_"$TOOLCHAIN"/FW.fd --test-winpe --test-winpe-path "$WINPE_FILENAME"
done
done
env:
PACKAGE: ${{ matrix.package.name }}
ARCHS: ${{ matrix.package.archs }}
TARGETS: ${{ matrix.package.targets }}
TOOLCHAIN: ${{ matrix.package.toolchain }}

View File

@ -35,44 +35,28 @@ jobs:
fail-fast: false
matrix:
include:
- Package: "ArmPkg"
ArchList: "IA32,X64"
- Package: "CryptoPkg"
ArchList: "IA32"
- Package: "CryptoPkg"
ArchList: "X64"
- Package: "DynamicTablesPkg"
- Package: "Ext4Pkg"
ArchList: "IA32,X64"
- Package: "FatPkg"
ArchList: "IA32,X64"
- Package: "FmpDevicePkg"
ArchList: "IA32,X64"
- Package: "IntelFsp2Pkg"
ArchList: "IA32,X64"
- Package: "IntelFsp2WrapperPkg"
ArchList: "IA32,X64"
- Package: "MdeModulePkg"
ArchList: "IA32"
- Package: "MdeModulePkg"
ArchList: "X64"
ArchList: "IA32,X64"
- Package: "MdePkg"
ArchList: "IA32,X64"
- Package: "PcAtChipsetPkg"
ArchList: "IA32,X64"
- Package: "PrmPkg"
ArchList: "IA32,X64"
- Package: "SecurityPkg"
ArchList: "IA32,X64"
- Package: "ShellPkg"
ArchList: "IA32,X64"
- Package: "SourceLevelDebugPkg"
ArchList: "IA32,X64"
- Package: "StandaloneMmPkg"
ArchList: "IA32,X64"
- Package: "UefiCpuPkg"
ArchList: "IA32,X64"
- Package: "UnitTestFrameworkPkg"
ArchList: "IA32,X64"
- Package: "OvmfPkg"
ArchList: "IA32,X64"
- Package: "UefiPayloadPkg"
ArchList: "IA32,X64"
- Package: "NetworkPkg"
ArchList: "IA32,X64"
steps:
- name: Checkout repository
@ -269,7 +253,7 @@ jobs:
- name: CI Build
env:
STUART_CODEQL_PATH: ${{ steps.cache_key_gen.outputs.codeql_cli_ext_dep_dir }}
run: stuart_ci_build -c .pytool/CISettings.py -t DEBUG -p ${{ matrix.Package }} -a ${{ matrix.ArchList }} TOOL_CHAIN_TAG=VS2019 --codeql
run: stuart_ci_build -c .pytool/CISettings.py -t DEBUG -p ${{ matrix.Package }} -a ${{ matrix.ArchList }} TOOL_CHAIN_TAG=VS2019 --codeql --npt
- name: Build Cleanup
id: build_cleanup

View File

@ -80,6 +80,7 @@ class Settings(CiBuildSettingsManager, UpdateSettingsManager, SetupSettingsManag
"DynamicTablesPkg",
"EmbeddedPkg",
"EmulatorPkg",
"Ext4Pkg",
"IntelFsp2Pkg",
"IntelFsp2WrapperPkg",
"MdePkg",
@ -239,6 +240,8 @@ class Settings(CiBuildSettingsManager, UpdateSettingsManager, SetupSettingsManag
"CryptoPkg/Library/MbedTlsLib/mbedtls", False))
rs.append(RequiredSubmodule(
"SecurityPkg/DeviceSecurity/SpdmLib/libspdm", False))
rs.append(RequiredSubmodule(
"OpenCorePkg", False))
return rs
def GetName(self):

65
Ext4Pkg/Ext4Pkg.ci.yaml Normal file
View File

@ -0,0 +1,65 @@
## @file
# CI configuration for Ext4Pkg
#
# Copyright (c) Microsoft Corporation
# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
##
{
"LicenseCheck": {
"IgnoreFiles": []
},
"EccCheck": {
## Exception sample looks like below:
## "ExceptionList": [
## "<ErrorID>", "<KeyWord>"
## ]
"ExceptionList": [
],
## Both file path and directory path are accepted.
"IgnoreFiles": [
]
},
"CompilerPlugin": {
"DscPath": "Ext4Pkg.dsc"
},
"CharEncodingCheck": {
"IgnoreFiles": []
},
"DependencyCheck": {
"AcceptableDependencies": [
"MdePkg/MdePkg.dec",
"MdeModulePkg/MdeModulePkg.dec",
],
# For host based unit tests
"AcceptableDependencies-HOST_APPLICATION":[],
# For UEFI shell based apps
"AcceptableDependencies-UEFI_APPLICATION":[],
"IgnoreInf": []
},
"DscCompleteCheck": {
"IgnoreInf": [],
"DscPath": "Ext4Pkg.dsc"
},
"GuidCheck": {
"IgnoreGuidName": [],
"IgnoreGuidValue": [],
"IgnoreFoldersAndFiles": []
},
"LibraryClassCheck": {
"IgnoreHeaderFile": []
},
"SpellCheck": {
"ExtendWords": [
"ELTORITO",
"FHAND",
"IFILE",
"OFILE",
"FDISKed",
"Lfnbuffer",
"FFFFFFFFL",
"CDVOL",
"DMDEPKG"
]
}
}

13
docker-compose.yaml Executable file
View File

@ -0,0 +1,13 @@
name: audk
services:
build-package:
extends:
service: dev-edk2
file: OpenCorePkg/docker-compose.yaml
environment:
- SELFPKG
- SELFPKG_DIR
entrypoint:
- /bin/bash
- -c
- "{ . ~/.edk2_rc.sh && eval \"$(/usr/bin/curl -Lfs https://raw.githubusercontent.com/acidanthera/ocbuild/master/ci-bootstrap.sh)\" && curl -o ./efibuild.sh \"https://raw.githubusercontent.com/acidanthera/ocbuild/master/efibuild.sh\" && rm -f UDK && ln -s `pwd` UDK && touch UDK.ready && . ./efibuild.sh; } || exit 1"