X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=OvmfPkg%2Fbuild.sh;h=68215520256421111cc72802856b3a28b5f00327;hb=832709565e76a3f068848964a9c1dac4fa5d21f2;hp=e500e2c7a06572606b23d1b1144a6f6633885d0a;hpb=aadb1d098d4daf34b8bf8169f8784dfc00023241;p=mirror_edk2.git
diff --git a/OvmfPkg/build.sh b/OvmfPkg/build.sh
index e500e2c7a0..6821552025 100755
--- a/OvmfPkg/build.sh
+++ b/OvmfPkg/build.sh
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/usr/bin/env bash
#
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
-# Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.
+# Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@@ -41,12 +41,15 @@ fi
# Configure defaults for various options
#
-PROCESSOR=X64
+ARCH_IA32=no
+ARCH_X64=no
BUILDTARGET=DEBUG
BUILD_OPTIONS=
PLATFORMFILE=
+THREADNUMBER=1
LAST_ARG=
RUN_QEMU=no
+ENABLE_FLASH=no
#
# Pick a default tool type for a given OS
@@ -57,26 +60,53 @@ case `uname` in
echo Cygwin not fully supported yet.
;;
Darwin*)
- Major=$(uname -r | cut -f 1 -d '.')
- if [[ $Major == 9 ]]
- then
- echo OvmfPkg requires Snow Leopard or later OS
+ 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
- else
+ ;;
+ 10)
TARGET_TOOLS=XCODE32
- fi
- ;;
+ ;;
+ 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-3].*)
+ echo OvmfPkg requires GCC4.4 or later
+ exit 1
+ ;;
+ 4.4.*)
+ TARGET_TOOLS=GCC44
+ ;;
4.5.*)
TARGET_TOOLS=GCC45
;;
4.6.*)
TARGET_TOOLS=GCC46
;;
+ 4.7.*)
+ TARGET_TOOLS=GCC47
+ ;;
+ 4.8.*)
+ TARGET_TOOLS=GCC48
+ ;;
+ 4.9.*|6.[0-2].*)
+ TARGET_TOOLS=GCC49
+ ;;
*)
- TARGET_TOOLS=GCC44
+ TARGET_TOOLS=GCC5
;;
esac
esac
@@ -89,7 +119,7 @@ for arg in "$@"
do
if [ -z "$LAST_ARG" ]; then
case $arg in
- -a|-b|-t|-p)
+ -a|-b|-t|-p|-n)
LAST_ARG=$arg
;;
qemu)
@@ -97,6 +127,9 @@ do
shift
break
;;
+ --enable-flash)
+ ENABLE_FLASH=yes
+ ;;
*)
BUILD_OPTIONS="$BUILD_OPTIONS $arg"
;;
@@ -104,7 +137,12 @@ do
else
case $LAST_ARG in
-a)
- PROCESSOR=$arg
+ 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
@@ -115,6 +153,9 @@ do
-t)
TARGET_TOOLS=$arg
;;
+ -n)
+ THREADNUMBER=$arg
+ ;;
*)
BUILD_OPTIONS="$BUILD_OPTIONS $arg"
;;
@@ -124,14 +165,51 @@ do
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)
- Processor=Ia32
- QEMU_COMMAND=qemu
+ 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)
- Processor=X64
- QEMU_COMMAND=qemu-system-x86_64
+ 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
@@ -144,16 +222,27 @@ if [ -z "$PLATFORMFILE" ]; then
PLATFORMFILE=$WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc
fi
-ADD_QEMU_HDA=yes
-for arg in "$@"
-do
- case $arg in
- -hd[a-d]|-fd[ab]|-cdrom)
- ADD_QEMU_HDA=no
- break
+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].*|1.[1-9][0-9].*|2.*.*)
+ ENABLE_FLASH=yes
;;
esac
-done
+
+ ADD_QEMU_HDA=yes
+ for arg in "$@"
+ do
+ case $arg in
+ -hd[a-d]|-fd[ab]|-cdrom)
+ ADD_QEMU_HDA=no
+ break
+ ;;
+ esac
+ done
+fi
#
# Uncomment this block for parameter parsing debug
@@ -166,9 +255,9 @@ done
#echo Remaining for qemu: $*
#exit 1
-BUILD_ROOT=$WORKSPACE/Build/Ovmf$Processor/"$BUILDTARGET"_"$TARGET_TOOLS"
+BUILD_ROOT=$WORKSPACE/Build/$PLATFORM_BUILD_DIR/"$BUILDTARGET"_"$TARGET_TOOLS"
FV_DIR=$BUILD_ROOT/FV
-BUILD_ROOT_ARCH=$BUILD_ROOT/$PROCESSOR
+BUILD_ROOT_ARCH=$BUILD_ROOT/$BUILD_ROOT_ARCH
QEMU_FIRMWARE_DIR=$BUILD_ROOT/QEMU
if [[ ! -f `which build` || ! -f `which GenFv` ]];
@@ -191,14 +280,16 @@ if [[ "$RUN_QEMU" == "yes" ]]; then
mkdir $QEMU_FIRMWARE_DIR
fi
ln -sf $FV_DIR/OVMF.fd $QEMU_FIRMWARE_DIR/bios.bin
- if [[ "$ADD_QEMU_HDA" == "yes" ]]; then
- AUTO_QEMU_HDA="-hda fat:$BUILD_ROOT_ARCH"
+ if [[ "$ENABLE_FLASH" == "yes" ]]; then
+ QEMU_COMMAND="$QEMU_COMMAND -pflash $QEMU_FIRMWARE_DIR/bios.bin"
else
- AUTO_QEMU_HDA=
+ QEMU_COMMAND="$QEMU_COMMAND -L $QEMU_FIRMWARE_DIR"
+ fi
+ if [[ "$ADD_QEMU_HDA" == "yes" ]]; then
+ QEMU_COMMAND="$QEMU_COMMAND -hda fat:$BUILD_ROOT_ARCH"
fi
- QEMU_COMMAND="$QEMU_COMMAND -L $QEMU_FIRMWARE_DIR $AUTO_QEMU_HDA $*"
- echo Running: $QEMU_COMMAND
- $QEMU_COMMAND
+ echo Running: $QEMU_COMMAND "$@"
+ $QEMU_COMMAND "$@"
exit $?
fi
@@ -206,6 +297,6 @@ fi
# Build the edk2 OvmfPkg
#
echo Running edk2 build for OvmfPkg$Processor
-build -p $PLATFORMFILE $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS
+build -p $PLATFORMFILE $BUILD_OPTIONS -b $BUILDTARGET -t $TARGET_TOOLS -n $THREADNUMBER
exit $?