summaryrefslogtreecommitdiffstats
path: root/src/VBox/Devices/EFI/Firmware/OvmfPkg/build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/OvmfPkg/build.sh')
-rwxr-xr-xsrc/VBox/Devices/EFI/Firmware/OvmfPkg/build.sh270
1 files changed, 270 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/OvmfPkg/build.sh b/src/VBox/Devices/EFI/Firmware/OvmfPkg/build.sh
new file mode 100755
index 00000000..91b1442a
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/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 $?
+