xref: /openbmc/qemu/tests/uefi-test-tools/build.sh (revision ea0ec714)
177db55fcSLaszlo Ersek#!/bin/bash
277db55fcSLaszlo Ersek
377db55fcSLaszlo Ersek# Build script that determines the edk2 toolchain to use, invokes the edk2
477db55fcSLaszlo Ersek# "build" utility, and copies the built UEFI binary to the requested location.
577db55fcSLaszlo Ersek#
677db55fcSLaszlo Ersek# Copyright (C) 2019, Red Hat, Inc.
777db55fcSLaszlo Ersek#
877db55fcSLaszlo Ersek# This program and the accompanying materials are licensed and made available
977db55fcSLaszlo Ersek# under the terms and conditions of the BSD License that accompanies this
1077db55fcSLaszlo Ersek# distribution. The full text of the license may be found at
1177db55fcSLaszlo Ersek# <http://opensource.org/licenses/bsd-license.php>.
1277db55fcSLaszlo Ersek#
1377db55fcSLaszlo Ersek# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
1477db55fcSLaszlo Ersek# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
1577db55fcSLaszlo Ersek
1677db55fcSLaszlo Ersekset -e -u -C
1777db55fcSLaszlo Ersek
1877db55fcSLaszlo Ersek# Save the command line arguments. We need to reset $# to 0 before sourcing
1977db55fcSLaszlo Ersek# "edksetup.sh", as it will inherit $@.
2077db55fcSLaszlo Ersekprogram_name=$(basename -- "$0")
2177db55fcSLaszlo Ersekedk2_dir=$1
2277db55fcSLaszlo Ersekdsc_component=$2
2377db55fcSLaszlo Ersekemulation_target=$3
2477db55fcSLaszlo Ersekuefi_binary=$4
2577db55fcSLaszlo Ersekshift 4
2677db55fcSLaszlo Ersek
2777db55fcSLaszlo Ersek# Set up the environment for edk2 building.
2877db55fcSLaszlo Ersekexport PACKAGES_PATH=$(realpath -- "$edk2_dir")
2977db55fcSLaszlo Ersekexport WORKSPACE=$PWD
3077db55fcSLaszlo Ersekmkdir -p Conf
3177db55fcSLaszlo Ersek
32*037973bbSLaszlo Ersekexport PYTHON_COMMAND=${EDK2_PYTHON_COMMAND:-python3}
33174404afSLaszlo Ersek
3477db55fcSLaszlo Ersek# Source "edksetup.sh" carefully.
3577db55fcSLaszlo Ersekset +e +u +C
3677db55fcSLaszlo Erseksource "$PACKAGES_PATH/edksetup.sh"
3777db55fcSLaszlo Ersekret=$?
3877db55fcSLaszlo Ersekset -e -u -C
3977db55fcSLaszlo Ersekif [ $ret -ne 0 ]; then
4077db55fcSLaszlo Ersek  exit $ret
4177db55fcSLaszlo Ersekfi
4277db55fcSLaszlo Ersek
4365a109abSLaszlo Ersek# Fetch some option arguments, and set the cross-compilation environment (if
4465a109abSLaszlo Ersek# any), for the edk2 "build" utility.
4565a109abSLaszlo Erseksource "$edk2_dir/../edk2-funcs.sh"
4665a109abSLaszlo Ersekedk2_arch=$(qemu_edk2_get_arch "$emulation_target")
4765a109abSLaszlo Ersekedk2_toolchain=$(qemu_edk2_get_toolchain "$emulation_target")
48*037973bbSLaszlo ErsekMAKEFLAGS=$(qemu_edk2_quirk_tianocore_1607 "$MAKEFLAGS")
49*037973bbSLaszlo Ersekedk2_thread_count=$(qemu_edk2_get_thread_count "$MAKEFLAGS")
5065a109abSLaszlo Ersekqemu_edk2_set_cross_env "$emulation_target"
5177db55fcSLaszlo Ersek
5277db55fcSLaszlo Ersek# Build the UEFI binary
5377db55fcSLaszlo Ersekmkdir -p log
5477db55fcSLaszlo Ersekbuild \
5577db55fcSLaszlo Ersek  --arch="$edk2_arch" \
56*037973bbSLaszlo Ersek  -n "$edk2_thread_count" \
5777db55fcSLaszlo Ersek  --buildtarget=DEBUG \
5877db55fcSLaszlo Ersek  --platform=UefiTestToolsPkg/UefiTestToolsPkg.dsc \
5977db55fcSLaszlo Ersek  --tagname="$edk2_toolchain" \
6077db55fcSLaszlo Ersek  --module="UefiTestToolsPkg/$dsc_component/$dsc_component.inf" \
6177db55fcSLaszlo Ersek  --log="log/$dsc_component.$edk2_arch.log" \
6277db55fcSLaszlo Ersek  --report-file="log/$dsc_component.$edk2_arch.report"
6377db55fcSLaszlo Ersekcp -a -- \
6477db55fcSLaszlo Ersek  "Build/UefiTestTools/DEBUG_${edk2_toolchain}/$edk2_arch/$dsc_component.efi" \
6577db55fcSLaszlo Ersek  "$uefi_binary"
66