From f9dd0aaf8a4a7f12dab211875afaf2425b1e13be Mon Sep 17 00:00:00 2001 From: Michael Zhao Date: Mon, 27 Sep 2021 15:29:14 +0800 Subject: [PATCH] scripts: Optimize EDK2 building on AArch64 In integration test, we fetch latest EDK2 code on its master branch and build. While the update on EDK2 master is frequent. And the building is time consuming. It takes a lot of time in CI and local test. Floating on top of a busy master branch also bring potential risk in tracking and debugging. Now that Cloud Hypervisor support in EDK2 has been steady, we can pin the EDK2 software versions to avoid unnecessary updating and building. We can update the versions manually every after several months. The commit also optimizes the build process by applying multi-threaded compiling. Signed-off-by: Michael Zhao --- scripts/run_integration_tests_aarch64.sh | 70 +++++++----------------- 1 file changed, 20 insertions(+), 50 deletions(-) diff --git a/scripts/run_integration_tests_aarch64.sh b/scripts/run_integration_tests_aarch64.sh index adf4cbdb8..b5c91322d 100755 --- a/scripts/run_integration_tests_aarch64.sh +++ b/scripts/run_integration_tests_aarch64.sh @@ -8,7 +8,6 @@ export BUILD_TARGET=${BUILD_TARGET-aarch64-unknown-linux-gnu} WORKLOADS_DIR="$HOME/workloads" WORKLOADS_LOCK="$WORKLOADS_DIR/integration_test.lock" -EDK2_BUILD_DIR="$WORKLOADS_DIR/edk2_build" mkdir -p "$WORKLOADS_DIR" @@ -70,65 +69,36 @@ build_custom_linux() { } build_edk2() { + EDK2_BUILD_DIR="$WORKLOADS_DIR/edk2_build" EDK2_REPO="https://github.com/tianocore/edk2.git" - EDK2_DIR="edk2" - EDK2_BRANCH="master" + EDK2_DIR="$EDK2_BUILD_DIR/edk2" EDK2_PLAT_REPO="https://github.com/tianocore/edk2-platforms.git" - EDK2_PLAT_DIR="edk2-platforms" + EDK2_PLAT_DIR="$EDK2_BUILD_DIR/edk2-platforms" ACPICA_REPO="https://github.com/acpica/acpica.git" - ACPICA_DIR="acpica" - + ACPICA_DIR="$EDK2_BUILD_DIR/acpica" export WORKSPACE="$EDK2_BUILD_DIR" - export PACKAGES_PATH="$WORKSPACE/$EDK2_DIR:$WORKSPACE/$EDK2_PLAT_DIR" - export IASL_PREFIX="$WORKSPACE/acpica/generate/unix/bin/" + export PACKAGES_PATH="$EDK2_DIR:$EDK2_PLAT_DIR" + export IASL_PREFIX="$ACPICA_DIR/generate/unix/bin/" - cd "$WORKLOADS_DIR" - if [ ! -d "$WORKSPACE" ]; then - mkdir -p "$WORKSPACE" + if [ ! -d "$EDK2_BUILD_DIR" ]; then + mkdir -p "$EDK2_BUILD_DIR" fi - pushd "$WORKSPACE" - - # Check whether the local HEAD commit same as the remote HEAD or not. Remove the folder if they are different. - if [ -d "$EDK2_DIR" ]; then - pushd $EDK2_DIR - git fetch - EDK2_LOCAL_HEAD=$(git rev-parse HEAD) - EDK2_REMOTE_HEAD=$(git rev-parse remotes/origin/$EDK2_BRANCH) - popd - if [ "$EDK2_LOCAL_HEAD" != "$EDK2_REMOTE_HEAD" ]; then - # If EDK2 code is out of date, remove and rebuild all - rm -rf "$EDK2_DIR" - rm -rf "$EDK2_PLAT_DIR" - rm -rf "$ACPICA_DIR" - fi - fi - - if [ ! -d "$EDK2_DIR" ]; then - time git clone --depth 1 "$EDK2_REPO" -b "$EDK2_BRANCH" "$EDK2_DIR" - pushd $EDK2_DIR - git submodule update --init - popd - fi - - if [ ! -d "$EDK2_PLAT_DIR" ]; then - time git clone --depth 1 "$EDK2_PLAT_REPO" -b master "$EDK2_PLAT_DIR" - fi - - if [ ! -d "$ACPICA_DIR" ]; then - time git clone --depth 1 "$ACPICA_REPO" -b master "$ACPICA_DIR" - fi - - make -C "$ACPICA_DIR"/ + # Prepare source code + checkout_repo "$EDK2_DIR" "$EDK2_REPO" master "46b4606ba23498d3d0e66b53e498eb3d5d592586" + pushd "$EDK2_DIR" + git submodule update --init + popd + checkout_repo "$EDK2_PLAT_DIR" "$EDK2_PLAT_REPO" master "8227e9e9f6a8aefbd772b40138f835121ccb2307" + checkout_repo "$ACPICA_DIR" "$ACPICA_REPO" master "b9c69f81a05c45611c91ea9cbce8756078d76233" + pushd "$EDK2_BUILD_DIR" + # Build + make -C acpica -j `nproc` source edk2/edksetup.sh - make -C edk2/BaseTools - - build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtCloudHv.dsc -b RELEASE + make -C edk2/BaseTools -j `nproc` + build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtCloudHv.dsc -b RELEASE -n 0 cp Build/ArmVirtCloudHv-AARCH64/RELEASE_GCC5/FV/CLOUDHV_EFI.fd "$WORKLOADS_DIR" - - echo "Info: build UEFI successfully" - popd }