OvmfPkg/build.sh: Add features and replace build32/64.sh

Add a single build.sh to replace build32.sh & build64.sh.

The script watches for various parameters:
-a: allows selecting IA32 or X64 (default)
-b: allows selecting RELEASE or DEBUG (default)
-t: allows selecting the toolchain

When running qemu, the script doesn't always add -hda now.
If the user provides a disk parameter (for example, -fda, -hda
or -cdrom), then -hda will not be added to the qemu command line.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11238 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jljusten 2011-01-09 03:50:21 +00:00
parent af072124e4
commit 66325870af
3 changed files with 117 additions and 159 deletions

View File

@ -28,10 +28,9 @@ Current capabilities:
Pre-requisites: Pre-requisites:
* Build environment capable of build the edk2 MdeModulePkg. * Build environment capable of build the edk2 MdeModulePkg.
* A properly configured ASL compiler * A properly configured ASL compiler:
* Intel ASL compiler: Available from http://www.acpica.org - Intel ASL compiler: Available from http://www.acpica.org
or - Microsoft ASL compiler: Available from http://www.acpi.info
* Microsoft ASL compiler: Available from http://www.acpi.info
Update Conf/target.txt ACTIVE_PLATFORM for OVMF: Update Conf/target.txt ACTIVE_PLATFORM for OVMF:
PEI arch DXE arch UEFI interfaces PEI arch DXE arch UEFI interfaces
@ -50,7 +49,7 @@ under the $WORKSPACE/Build/*/*/FV directory. The actual path will
depend on how your build is configured. You can expect to find depend on how your build is configured. You can expect to find
these binary outputs: these binary outputs:
* OVMF.FD * OVMF.FD
* Please note! This filename has changed. Older releases used OVMF.Fv. - Please note! This filename has changed. Older releases used OVMF.Fv.
* CirrusLogic5446.rom * CirrusLogic5446.rom
More information on building OVMF can be found at: More information on building OVMF can be found at:
@ -76,15 +75,18 @@ http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=How_to_build_OVM
=== Build Scripts === === Build Scripts ===
On environments with the bash shell you can use OvmfPkg/build32.sh and On systems with the bash shell you can use OvmfPkg/build.sh to simplify
OvmfPkg/build64.sh to simplify building and running OVMF. building and running OVMF.
So, for example, to build + run OVMF X64: So, for example, to build + run OVMF X64:
$ OvmfPkg/build64.sh $ OvmfPkg/build.sh -a X64
$ OvmfPkg/build64.sh qemu $ OvmfPkg/build.sh -a X64 qemu
And to run a 64-bit UEFI bootable ISO image: And to run a 64-bit UEFI bootable ISO image:
$ OvmfPkg/build64.sh qemu -cdrom /path/to/disk-image.iso $ OvmfPkg/build.sh -a X64 qemu -cdrom /path/to/disk-image.iso
To build a 32-bit OVMF without debug serial messages using GCC 4.5:
$ OvmfPkg/build.sh -a IA32 -b RELEASE -t GCC45
=== Network Support === === Network Support ===

View File

@ -37,15 +37,24 @@ else
echo Building from: $WORKSPACE echo Building from: $WORKSPACE
fi fi
#
# Configure defaults for various options
#
PROCESSOR=X64 PROCESSOR=X64
Processor=X64 BUILDTARGET=DEBUG
BUILD_OPTIONS=
LAST_ARG=
RUN_QEMU=no
# #
# Pick a default tool type for a given OS # Pick a default tool type for a given OS
# #
TARGET_TOOLS=MYTOOLS TARGET_TOOLS=MYTOOLS
case `uname` in case `uname` in
CYGWIN*) echo Cygwin not fully supported yet. ;; CYGWIN*)
echo Cygwin not fully supported yet.
;;
Darwin*) Darwin*)
Major=$(uname -r | cut -f 1 -d '.') Major=$(uname -r | cut -f 1 -d '.')
if [[ $Major == 9 ]] if [[ $Major == 9 ]]
@ -59,10 +68,87 @@ case `uname` in
Linux*) Linux*)
TARGET_TOOLS=GCC44 TARGET_TOOLS=GCC44
;; ;;
esac esac
BUILD_ROOT=$WORKSPACE/Build/Ovmf$Processor/DEBUG_"$TARGET_TOOLS" #
# Scan command line to override defaults
#
for arg in "$@"
do
if [ -z "$LAST_ARG" ]; then
case $arg in
-a|-b|-t)
LAST_ARG=$arg
;;
qemu)
RUN_QEMU=yes
shift
break
;;
*)
BUILD_OPTIONS="$BUILD_OPTIONS $arg"
;;
esac
else
case $LAST_ARG in
-a)
PROCESSOR=$arg
;;
-b)
BUILDTARGET=$arg
;;
-t)
TARGET_TOOLS=$arg
;;
*)
BUILD_OPTIONS="$BUILD_OPTIONS $arg"
;;
esac
LAST_ARG=
fi
shift
done
case $PROCESSOR in
IA32)
Processor=Ia32
QEMU_COMMAND=qemu
;;
X64)
Processor=X64
QEMU_COMMAND=qemu-system-x86_64
;;
*)
echo Unsupported processor architecture: $PROCESSOR
echo Only IA32 or X64 is supported
exit 1
;;
esac
ADD_QEMU_HDA=yes
for arg in "$@"
do
case $arg in
-hd[a-d]|-fd[ab]|-cdrom)
ADD_QEMU_HDA=no
break
;;
esac
done
#
# 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/Ovmf$Processor/"$BUILDTARGET"_"$TARGET_TOOLS"
FV_DIR=$BUILD_ROOT/FV FV_DIR=$BUILD_ROOT/FV
BUILD_ROOT_ARCH=$BUILD_ROOT/$PROCESSOR BUILD_ROOT_ARCH=$BUILD_ROOT/$PROCESSOR
QEMU_FIRMWARE_DIR=$BUILD_ROOT/QEMU QEMU_FIRMWARE_DIR=$BUILD_ROOT/QEMU
@ -82,38 +168,27 @@ else
fi fi
for arg in "$@" if [[ "$RUN_QEMU" == "yes" ]]; then
do
if [[ $arg == qemu ]]; then
shift
if [[ ! -d $QEMU_FIRMWARE_DIR ]]; then if [[ ! -d $QEMU_FIRMWARE_DIR ]]; then
mkdir $QEMU_FIRMWARE_DIR mkdir $QEMU_FIRMWARE_DIR
ln -s $FV_DIR/OVMF.fd $QEMU_FIRMWARE_DIR/bios.bin ln -s $FV_DIR/OVMF.fd $QEMU_FIRMWARE_DIR/bios.bin
ln -s $FV_DIR/CirrusLogic5446.rom $QEMU_FIRMWARE_DIR/vgabios-cirrus.bin ln -s $FV_DIR/CirrusLogic5446.rom $QEMU_FIRMWARE_DIR/vgabios-cirrus.bin
fi fi
QEMU_COMMAND="qemu-system-x86_64 -L $QEMU_FIRMWARE_DIR -hda fat:$BUILD_ROOT_ARCH $*" if [[ "$ADD_QEMU_HDA" == "yes" ]]; then
AUTO_QEMU_HDA="-hda fat:$BUILD_ROOT_ARCH"
else
AUTO_QEMU_HDA=
fi
QEMU_COMMAND="$QEMU_COMMAND -L $QEMU_FIRMWARE_DIR $AUTO_QEMU_HDA $*"
echo Running: $QEMU_COMMAND echo Running: $QEMU_COMMAND
$QEMU_COMMAND $QEMU_COMMAND
exit
fi
if [[ $arg == cleanall ]]; then
make -C $WORKSPACE/BaseTools clean
build -p $WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc -a $PROCESSOR -t $TARGET_TOOLS -n 3 clean
exit $? exit $?
fi fi
if [[ $arg == clean ]]; then
build -p $WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc -a $PROCESSOR -t $TARGET_TOOLS -n 3 clean
exit $?
fi
done
# #
# Build the edk2 OvmfPkg # Build the edk2 OvmfPkg
# #
echo Running edk2 build for OvmfPkg$Processor echo Running edk2 build for OvmfPkg$Processor
build -p $WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc -a $PROCESSOR -t $TARGET_TOOLS -n 3 $* build -p $WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS
exit $? exit $?

View File

@ -1,119 +0,0 @@
#!/bin/bash
#
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
# http://opensource.org/licenses/bsd-license.php
#
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
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
PROCESSOR=IA32
Processor=Ia32
#
# 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 '.')
if [[ $Major == 9 ]]
then
echo OvmfPkg requires Snow Leopard or later OS
exit 1
else
TARGET_TOOLS=XCODE32
fi
;;
Linux*)
TARGET_TOOLS=GCC44
;;
esac
BUILD_ROOT=$WORKSPACE/Build/Ovmf$Processor/DEBUG_"$TARGET_TOOLS"
FV_DIR=$BUILD_ROOT/FV
BUILD_ROOT_ARCH=$BUILD_ROOT/$PROCESSOR
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
for arg in "$@"
do
if [[ $arg == qemu ]]; then
shift
if [[ ! -d $QEMU_FIRMWARE_DIR ]]; then
mkdir $QEMU_FIRMWARE_DIR
ln -s $FV_DIR/OVMF.fd $QEMU_FIRMWARE_DIR/bios.bin
ln -s $FV_DIR/CirrusLogic5446.rom $QEMU_FIRMWARE_DIR/vgabios-cirrus.bin
fi
QEMU_COMMAND="qemu -L $QEMU_FIRMWARE_DIR -hda fat:$BUILD_ROOT_ARCH $*"
echo Running: $QEMU_COMMAND
$QEMU_COMMAND
exit
fi
if [[ $arg == cleanall ]]; then
make -C $WORKSPACE/BaseTools clean
build -p $WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc -a $PROCESSOR -t $TARGET_TOOLS -n 3 clean
exit $?
fi
if [[ $arg == clean ]]; then
build -p $WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc -a $PROCESSOR -t $TARGET_TOOLS -n 3 clean
exit $?
fi
done
#
# Build the edk2 OvmfPkg
#
echo Running edk2 build for OvmfPkg$Processor
build -p $WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc -a $PROCESSOR -t $TARGET_TOOLS -n 3 $*
exit $?