1#!/usr/bin/env bash 2# 3# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> 4# Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR> 5# 6# This program and the accompanying materials 7# are licensed and made available under the terms and conditions of the BSD License 8# which accompanies this distribution. The full text of the license may be found at 9# http://opensource.org/licenses/bsd-license.php 10# 11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13# 14 15set -e 16shopt -s nocasematch 17 18 19# 20# Setup workspace if it is not set 21# 22if [ -z "$WORKSPACE" ] 23then 24 echo Initializing workspace 25 if [ ! -e `pwd`/edksetup.sh ] 26 then 27 cd .. 28 fi 29# This version is for the tools in the BaseTools project. 30# this assumes svn pulls have the same root dir 31# export EDK_TOOLS_PATH=`pwd`/../BaseTools 32# This version is for the tools source in edk2 33 export EDK_TOOLS_PATH=`pwd`/BaseTools 34 echo $EDK_TOOLS_PATH 35 source edksetup.sh BaseTools 36else 37 echo Building from: $WORKSPACE 38fi 39 40# 41# Configure defaults for various options 42# 43 44ARCH_IA32=no 45ARCH_X64=no 46BUILDTARGET=DEBUG 47BUILD_OPTIONS= 48PLATFORMFILE= 49THREADNUMBER=1 50LAST_ARG= 51RUN_QEMU=no 52ENABLE_FLASH=no 53 54# 55# Pick a default tool type for a given OS 56# 57TARGET_TOOLS=MYTOOLS 58case `uname` in 59 CYGWIN*) 60 echo Cygwin not fully supported yet. 61 ;; 62 Darwin*) 63 Major=$(uname -r | cut -f 1 -d '.') 64 # Major is Darwin version, not OS X version. 65 # OS X Yosemite 10.10.2 returns 14. 66 case $Major in 67 [156789]) 68 echo OvmfPkg requires OS X Snow Leopard 10.6 or newer OS 69 exit 1 70 ;; 71 10) 72 TARGET_TOOLS=XCODE32 73 ;; 74 1[12]) 75 TARGET_TOOLS=XCLANG 76 ;; 77 *) 78 # Mavericks and future assume XCODE5 (clang + lldb) 79 TARGET_TOOLS=XCODE5 80 ;; 81 esac 82 ;; 83 Linux*) 84 gcc_version=$(gcc -v 2>&1 | tail -1 | awk '{print $3}') 85 case $gcc_version in 86 4.5.*) 87 TARGET_TOOLS=GCC45 88 ;; 89 4.6.*) 90 TARGET_TOOLS=GCC46 91 ;; 92 4.7.*) 93 TARGET_TOOLS=GCC47 94 ;; 95 4.8.*) 96 TARGET_TOOLS=GCC48 97 ;; 98 4.9.*|4.1[0-9].*|5.*.*) 99 TARGET_TOOLS=GCC49 100 ;; 101 *) 102 TARGET_TOOLS=GCC44 103 ;; 104 esac 105esac 106 107# 108# Scan command line to override defaults 109# 110 111for arg in "$@" 112do 113 if [ -z "$LAST_ARG" ]; then 114 case $arg in 115 -a|-b|-t|-p|-n) 116 LAST_ARG=$arg 117 ;; 118 qemu) 119 RUN_QEMU=yes 120 shift 121 break 122 ;; 123 --enable-flash) 124 ENABLE_FLASH=yes 125 ;; 126 *) 127 BUILD_OPTIONS="$BUILD_OPTIONS $arg" 128 ;; 129 esac 130 else 131 case $LAST_ARG in 132 -a) 133 if [[ x"$arg" != x"IA32" && x"$arg" != x"X64" ]]; then 134 echo Unsupported processor architecture: $arg 135 echo Only IA32 or X64 is supported 136 exit 1 137 fi 138 eval ARCH_$arg=yes 139 ;; 140 -b) 141 BUILDTARGET=$arg 142 ;; 143 -p) 144 PLATFORMFILE=$arg 145 ;; 146 -t) 147 TARGET_TOOLS=$arg 148 ;; 149 -n) 150 THREADNUMBER=$arg 151 ;; 152 *) 153 BUILD_OPTIONS="$BUILD_OPTIONS $arg" 154 ;; 155 esac 156 LAST_ARG= 157 fi 158 shift 159done 160 161if [[ "$ARCH_IA32" == "yes" && "$ARCH_X64" == "yes" ]]; then 162 PROCESSOR=IA32X64 163 Processor=Ia32X64 164 BUILD_OPTIONS="$BUILD_OPTIONS -a IA32 -a X64" 165 PLATFORM_BUILD_DIR=Ovmf3264 166 BUILD_ROOT_ARCH=X64 167elif [[ "$ARCH_IA32" == "yes" && "$ARCH_X64" == "no" ]]; then 168 PROCESSOR=IA32 169 Processor=Ia32 170 BUILD_OPTIONS="$BUILD_OPTIONS -a IA32" 171 PLATFORM_BUILD_DIR=Ovmf$Processor 172 BUILD_ROOT_ARCH=$PROCESSOR 173else 174 PROCESSOR=X64 175 Processor=X64 176 BUILD_OPTIONS="$BUILD_OPTIONS -a X64" 177 PLATFORM_BUILD_DIR=Ovmf$Processor 178 BUILD_ROOT_ARCH=X64 179fi 180 181case $PROCESSOR in 182 IA32) 183 if [ -n "$QEMU_COMMAND" ]; then 184 # 185 # The user set the QEMU_COMMAND variable. We'll use it to run QEMU. 186 # 187 : 188 elif [ -x `which qemu-system-i386` ]; then 189 QEMU_COMMAND=qemu-system-i386 190 elif [ -x `which qemu-system-x86_64` ]; then 191 QEMU_COMMAND=qemu-system-x86_64 192 elif [ -x `which qemu` ]; then 193 QEMU_COMMAND=qemu 194 else 195 echo Unable to find QEMU for IA32 architecture! 196 exit 1 197 fi 198 ;; 199 X64|IA32X64) 200 if [ -z "$QEMU_COMMAND" ]; then 201 # 202 # The user didn't set the QEMU_COMMAND variable. 203 # 204 QEMU_COMMAND=qemu-system-x86_64 205 fi 206 ;; 207 *) 208 echo Unsupported processor architecture: $PROCESSOR 209 echo Only IA32 or X64 is supported 210 exit 1 211 ;; 212esac 213 214if [ -z "$PLATFORMFILE" ]; then 215 PLATFORMFILE=$WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc 216fi 217 218if [[ "$RUN_QEMU" == "yes" ]]; then 219 qemu_version=$($QEMU_COMMAND -version 2>&1 | tail -1 | awk '{print $4}') 220 case $qemu_version in 221 1.[6-9].*|1.[1-9][0-9].*|2.*.*) 222 ENABLE_FLASH=yes 223 ;; 224 esac 225 226 ADD_QEMU_HDA=yes 227 for arg in "$@" 228 do 229 case $arg in 230 -hd[a-d]|-fd[ab]|-cdrom) 231 ADD_QEMU_HDA=no 232 break 233 ;; 234 esac 235 done 236fi 237 238# 239# Uncomment this block for parameter parsing debug 240# 241#echo RUN_QEMU=$RUN_QEMU 242#echo BUILD_OPTIONS=$BUILD_OPTIONS 243#echo BUILDTARGET=$BUILDTARGET 244#echo TARGET_TOOLS=$TARGET_TOOLS 245#echo PROCESSOR=$PROCESSOR 246#echo Remaining for qemu: $* 247#exit 1 248 249BUILD_ROOT=$WORKSPACE/Build/$PLATFORM_BUILD_DIR/"$BUILDTARGET"_"$TARGET_TOOLS" 250FV_DIR=$BUILD_ROOT/FV 251BUILD_ROOT_ARCH=$BUILD_ROOT/$BUILD_ROOT_ARCH 252QEMU_FIRMWARE_DIR=$BUILD_ROOT/QEMU 253 254if [[ ! -f `which build` || ! -f `which GenFv` ]]; 255then 256 # build the tools if they don't yet exist. Bin scheme 257 echo Building tools as they are not in the path 258 make -C $WORKSPACE/BaseTools 259elif [[ ( -f `which build` || -f `which GenFv` ) && ! -d $EDK_TOOLS_PATH/Source/C/bin ]]; 260then 261 # build the tools if they don't yet exist. BinWrapper scheme 262 echo Building tools no $EDK_TOOLS_PATH/Source/C/bin directory 263 make -C $WORKSPACE/BaseTools 264else 265 echo using prebuilt tools 266fi 267 268 269if [[ "$RUN_QEMU" == "yes" ]]; then 270 if [[ ! -d $QEMU_FIRMWARE_DIR ]]; then 271 mkdir $QEMU_FIRMWARE_DIR 272 fi 273 ln -sf $FV_DIR/OVMF.fd $QEMU_FIRMWARE_DIR/bios.bin 274 if [[ "$ENABLE_FLASH" == "yes" ]]; then 275 QEMU_COMMAND="$QEMU_COMMAND -pflash $QEMU_FIRMWARE_DIR/bios.bin" 276 else 277 QEMU_COMMAND="$QEMU_COMMAND -L $QEMU_FIRMWARE_DIR" 278 fi 279 if [[ "$ADD_QEMU_HDA" == "yes" ]]; then 280 QEMU_COMMAND="$QEMU_COMMAND -hda fat:$BUILD_ROOT_ARCH" 281 fi 282 echo Running: $QEMU_COMMAND "$@" 283 $QEMU_COMMAND "$@" 284 exit $? 285fi 286 287# 288# Build the edk2 OvmfPkg 289# 290echo Running edk2 build for OvmfPkg$Processor 291build -p $PLATFORMFILE $BUILD_OPTIONS -b $BUILDTARGET -t $TARGET_TOOLS -n $THREADNUMBER 292exit $? 293 294