diff options
author | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
---|---|---|
committer | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/edk2/OvmfPkg/build.sh | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/edk2/OvmfPkg/build.sh')
-rwxr-xr-x | roms/edk2/OvmfPkg/build.sh | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/roms/edk2/OvmfPkg/build.sh b/roms/edk2/OvmfPkg/build.sh new file mode 100755 index 000000000..91b1442ad --- /dev/null +++ b/roms/edk2/OvmfPkg/build.sh @@ -0,0 +1,270 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> +# Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR> +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +set -e +shopt -s nocasematch + + +# +# Setup workspace if it is not set +# +if [ -z "$WORKSPACE" ] +then + echo Initializing workspace + if [ ! -e `pwd`/edksetup.sh ] + then + cd .. + fi +# This version is for the tools in the BaseTools project. +# this assumes svn pulls have the same root dir +# export EDK_TOOLS_PATH=`pwd`/../BaseTools +# This version is for the tools source in edk2 + export EDK_TOOLS_PATH=`pwd`/BaseTools + echo $EDK_TOOLS_PATH + source edksetup.sh BaseTools +else + echo Building from: $WORKSPACE +fi + +# +# Configure defaults for various options +# + +ARCH_IA32=no +ARCH_X64=no +BUILDTARGET=DEBUG +BUILD_OPTIONS= +PLATFORMFILE= +THREADNUMBER=0 +LAST_ARG= +RUN_QEMU=no +ENABLE_FLASH=no + +# +# Pick a default tool type for a given OS +# +TARGET_TOOLS=MYTOOLS +case `uname` in + CYGWIN*) + echo Cygwin not fully supported yet. + ;; + Darwin*) + Major=$(uname -r | cut -f 1 -d '.') + # Major is Darwin version, not OS X version. + # OS X Yosemite 10.10.2 returns 14. + case $Major in + [156789]) + echo OvmfPkg requires OS X Snow Leopard 10.6 or newer OS + exit 1 + ;; + 10) + TARGET_TOOLS=XCODE32 + ;; + 1[12]) + TARGET_TOOLS=XCLANG + ;; + *) + # Mavericks and future assume XCODE5 (clang + lldb) + TARGET_TOOLS=XCODE5 + ;; + esac + ;; + Linux*) + gcc_version=$(gcc -v 2>&1 | tail -1 | awk '{print $3}') + case $gcc_version in + [1-3].*|4.[0-7].*) + echo OvmfPkg requires GCC4.8 or later + exit 1 + ;; + 4.8.*) + TARGET_TOOLS=GCC48 + ;; + 4.9.*|6.[0-2].*) + TARGET_TOOLS=GCC49 + ;; + *) + TARGET_TOOLS=GCC5 + ;; + esac +esac + +# +# Scan command line to override defaults +# + +for arg in "$@" +do + if [ -z "$LAST_ARG" ]; then + case $arg in + -a|-b|-t|-p|-n) + LAST_ARG=$arg + ;; + qemu) + RUN_QEMU=yes + shift + break + ;; + --enable-flash) + ENABLE_FLASH=yes + ;; + *) + BUILD_OPTIONS="$BUILD_OPTIONS $arg" + ;; + esac + else + case $LAST_ARG in + -a) + if [[ x"$arg" != x"IA32" && x"$arg" != x"X64" ]]; then + echo Unsupported processor architecture: $arg + echo Only IA32 or X64 is supported + exit 1 + fi + eval ARCH_$arg=yes + ;; + -b) + BUILDTARGET=$arg + ;; + -p) + PLATFORMFILE=$arg + ;; + -t) + TARGET_TOOLS=$arg + ;; + -n) + THREADNUMBER=$arg + ;; + *) + BUILD_OPTIONS="$BUILD_OPTIONS $arg" + ;; + esac + LAST_ARG= + fi + shift +done + +if [[ "$ARCH_IA32" == "yes" && "$ARCH_X64" == "yes" ]]; then + PROCESSOR=IA32X64 + Processor=Ia32X64 + BUILD_OPTIONS="$BUILD_OPTIONS -a IA32 -a X64" + PLATFORM_BUILD_DIR=Ovmf3264 + BUILD_ROOT_ARCH=X64 +elif [[ "$ARCH_IA32" == "yes" && "$ARCH_X64" == "no" ]]; then + PROCESSOR=IA32 + Processor=Ia32 + BUILD_OPTIONS="$BUILD_OPTIONS -a IA32" + PLATFORM_BUILD_DIR=Ovmf$Processor + BUILD_ROOT_ARCH=$PROCESSOR +else + PROCESSOR=X64 + Processor=X64 + BUILD_OPTIONS="$BUILD_OPTIONS -a X64" + PLATFORM_BUILD_DIR=Ovmf$Processor + BUILD_ROOT_ARCH=X64 +fi + +case $PROCESSOR in + IA32) + if [ -n "$QEMU_COMMAND" ]; then + # + # The user set the QEMU_COMMAND variable. We'll use it to run QEMU. + # + : + elif [ -x `which qemu-system-i386` ]; then + QEMU_COMMAND=qemu-system-i386 + elif [ -x `which qemu-system-x86_64` ]; then + QEMU_COMMAND=qemu-system-x86_64 + elif [ -x `which qemu` ]; then + QEMU_COMMAND=qemu + else + echo Unable to find QEMU for IA32 architecture! + exit 1 + fi + ;; + X64|IA32X64) + if [ -z "$QEMU_COMMAND" ]; then + # + # The user didn't set the QEMU_COMMAND variable. + # + QEMU_COMMAND=qemu-system-x86_64 + fi + ;; + *) + echo Unsupported processor architecture: $PROCESSOR + echo Only IA32 or X64 is supported + exit 1 + ;; +esac + +if [ -z "$PLATFORMFILE" ]; then + PLATFORMFILE=$WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc +fi + +if [[ "$RUN_QEMU" == "yes" ]]; then + qemu_version=$($QEMU_COMMAND -version 2>&1 | \ + grep -o -E 'version [0-9]+\.[0-9]+\.[0-9]+' | \ + awk '{print $2}') + case $qemu_version in + 1.[6-9].*|[2-9].*.*|[1-9][0-9]*.*.*) + ENABLE_FLASH=yes + ;; + esac +fi + +# +# Uncomment this block for parameter parsing debug +# +#echo RUN_QEMU=$RUN_QEMU +#echo BUILD_OPTIONS=$BUILD_OPTIONS +#echo BUILDTARGET=$BUILDTARGET +#echo TARGET_TOOLS=$TARGET_TOOLS +#echo PROCESSOR=$PROCESSOR +#echo Remaining for qemu: $* +#exit 1 + +BUILD_ROOT=$WORKSPACE/Build/$PLATFORM_BUILD_DIR/"$BUILDTARGET"_"$TARGET_TOOLS" +FV_DIR=$BUILD_ROOT/FV +BUILD_ROOT_ARCH=$BUILD_ROOT/$BUILD_ROOT_ARCH +QEMU_FIRMWARE_DIR=$BUILD_ROOT/QEMU + +if [[ ! -f `which build` || ! -f `which GenFv` ]]; +then + # build the tools if they don't yet exist. Bin scheme + echo Building tools as they are not in the path + make -C $WORKSPACE/BaseTools +elif [[ ( -f `which build` || -f `which GenFv` ) && ! -d $EDK_TOOLS_PATH/Source/C/bin ]]; +then + # build the tools if they don't yet exist. BinWrapper scheme + echo Building tools no $EDK_TOOLS_PATH/Source/C/bin directory + make -C $WORKSPACE/BaseTools +else + echo using prebuilt tools +fi + + +if [[ "$RUN_QEMU" == "yes" ]]; then + if [[ ! -d $QEMU_FIRMWARE_DIR ]]; then + mkdir $QEMU_FIRMWARE_DIR + fi + ln -sf $FV_DIR/OVMF.fd $QEMU_FIRMWARE_DIR/bios.bin + if [[ "$ENABLE_FLASH" == "yes" ]]; then + QEMU_COMMAND="$QEMU_COMMAND -drive if=pflash,format=raw,file=$QEMU_FIRMWARE_DIR/bios.bin" + else + QEMU_COMMAND="$QEMU_COMMAND -L $QEMU_FIRMWARE_DIR" + fi + echo Running: $QEMU_COMMAND "$@" + $QEMU_COMMAND "$@" + exit $? +fi + +# +# Build the edk2 OvmfPkg +# +echo Running edk2 build for OvmfPkg$Processor +build -p $PLATFORMFILE $BUILD_OPTIONS -b $BUILDTARGET -t $TARGET_TOOLS -n $THREADNUMBER +exit $? + |