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