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 15 set -e 16 shopt -s nocasematch 17 18 19 # 20 # Setup workspace if it is not set 21 # 22 if [ -z "$WORKSPACE" ] 23 then 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 36 else 37 echo Building from: $WORKSPACE 38 fi 39 40 # 41 # Configure defaults for various options 42 # 43 44 ARCH_IA32=no 45 ARCH_X64=no 46 BUILDTARGET=DEBUG 47 BUILD_OPTIONS= 48 PLATFORMFILE= 49 THREADNUMBER=1 50 LAST_ARG= 51 RUN_QEMU=no 52 ENABLE_FLASH=no 53 54 # 55 # Pick a default tool type for a given OS 56 # 57 TARGET_TOOLS=MYTOOLS 58 case `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 [1-3].*|4.[0-3].*) 87 echo OvmfPkg requires GCC4.4 or later 88 exit 1 89 ;; 90 4.4.*) 91 TARGET_TOOLS=GCC44 92 ;; 93 4.5.*) 94 TARGET_TOOLS=GCC45 95 ;; 96 4.6.*) 97 TARGET_TOOLS=GCC46 98 ;; 99 4.7.*) 100 TARGET_TOOLS=GCC47 101 ;; 102 4.8.*) 103 TARGET_TOOLS=GCC48 104 ;; 105 4.9.*|6.[0-2].*) 106 TARGET_TOOLS=GCC49 107 ;; 108 *) 109 TARGET_TOOLS=GCC5 110 ;; 111 esac 112 esac 113 114 # 115 # Scan command line to override defaults 116 # 117 118 for arg in "$@" 119 do 120 if [ -z "$LAST_ARG" ]; then 121 case $arg in 122 -a|-b|-t|-p|-n) 123 LAST_ARG=$arg 124 ;; 125 qemu) 126 RUN_QEMU=yes 127 shift 128 break 129 ;; 130 --enable-flash) 131 ENABLE_FLASH=yes 132 ;; 133 *) 134 BUILD_OPTIONS="$BUILD_OPTIONS $arg" 135 ;; 136 esac 137 else 138 case $LAST_ARG in 139 -a) 140 if [[ x"$arg" != x"IA32" && x"$arg" != x"X64" ]]; then 141 echo Unsupported processor architecture: $arg 142 echo Only IA32 or X64 is supported 143 exit 1 144 fi 145 eval ARCH_$arg=yes 146 ;; 147 -b) 148 BUILDTARGET=$arg 149 ;; 150 -p) 151 PLATFORMFILE=$arg 152 ;; 153 -t) 154 TARGET_TOOLS=$arg 155 ;; 156 -n) 157 THREADNUMBER=$arg 158 ;; 159 *) 160 BUILD_OPTIONS="$BUILD_OPTIONS $arg" 161 ;; 162 esac 163 LAST_ARG= 164 fi 165 shift 166 done 167 168 if [[ "$ARCH_IA32" == "yes" && "$ARCH_X64" == "yes" ]]; then 169 PROCESSOR=IA32X64 170 Processor=Ia32X64 171 BUILD_OPTIONS="$BUILD_OPTIONS -a IA32 -a X64" 172 PLATFORM_BUILD_DIR=Ovmf3264 173 BUILD_ROOT_ARCH=X64 174 elif [[ "$ARCH_IA32" == "yes" && "$ARCH_X64" == "no" ]]; then 175 PROCESSOR=IA32 176 Processor=Ia32 177 BUILD_OPTIONS="$BUILD_OPTIONS -a IA32" 178 PLATFORM_BUILD_DIR=Ovmf$Processor 179 BUILD_ROOT_ARCH=$PROCESSOR 180 else 181 PROCESSOR=X64 182 Processor=X64 183 BUILD_OPTIONS="$BUILD_OPTIONS -a X64" 184 PLATFORM_BUILD_DIR=Ovmf$Processor 185 BUILD_ROOT_ARCH=X64 186 fi 187 188 case $PROCESSOR in 189 IA32) 190 if [ -n "$QEMU_COMMAND" ]; then 191 # 192 # The user set the QEMU_COMMAND variable. We'll use it to run QEMU. 193 # 194 : 195 elif [ -x `which qemu-system-i386` ]; then 196 QEMU_COMMAND=qemu-system-i386 197 elif [ -x `which qemu-system-x86_64` ]; then 198 QEMU_COMMAND=qemu-system-x86_64 199 elif [ -x `which qemu` ]; then 200 QEMU_COMMAND=qemu 201 else 202 echo Unable to find QEMU for IA32 architecture! 203 exit 1 204 fi 205 ;; 206 X64|IA32X64) 207 if [ -z "$QEMU_COMMAND" ]; then 208 # 209 # The user didn't set the QEMU_COMMAND variable. 210 # 211 QEMU_COMMAND=qemu-system-x86_64 212 fi 213 ;; 214 *) 215 echo Unsupported processor architecture: $PROCESSOR 216 echo Only IA32 or X64 is supported 217 exit 1 218 ;; 219 esac 220 221 if [ -z "$PLATFORMFILE" ]; then 222 PLATFORMFILE=$WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc 223 fi 224 225 if [[ "$RUN_QEMU" == "yes" ]]; then 226 qemu_version=$($QEMU_COMMAND -version 2>&1 | tail -1 | awk '{print $4}') 227 case $qemu_version in 228 1.[6-9].*|1.[1-9][0-9].*|2.*.*) 229 ENABLE_FLASH=yes 230 ;; 231 esac 232 233 ADD_QEMU_HDA=yes 234 for arg in "$@" 235 do 236 case $arg in 237 -hd[a-d]|-fd[ab]|-cdrom) 238 ADD_QEMU_HDA=no 239 break 240 ;; 241 esac 242 done 243 fi 244 245 # 246 # Uncomment this block for parameter parsing debug 247 # 248 #echo RUN_QEMU=$RUN_QEMU 249 #echo BUILD_OPTIONS=$BUILD_OPTIONS 250 #echo BUILDTARGET=$BUILDTARGET 251 #echo TARGET_TOOLS=$TARGET_TOOLS 252 #echo PROCESSOR=$PROCESSOR 253 #echo Remaining for qemu: $* 254 #exit 1 255 256 BUILD_ROOT=$WORKSPACE/Build/$PLATFORM_BUILD_DIR/"$BUILDTARGET"_"$TARGET_TOOLS" 257 FV_DIR=$BUILD_ROOT/FV 258 BUILD_ROOT_ARCH=$BUILD_ROOT/$BUILD_ROOT_ARCH 259 QEMU_FIRMWARE_DIR=$BUILD_ROOT/QEMU 260 261 if [[ ! -f `which build` || ! -f `which GenFv` ]]; 262 then 263 # build the tools if they don't yet exist. Bin scheme 264 echo Building tools as they are not in the path 265 make -C $WORKSPACE/BaseTools 266 elif [[ ( -f `which build` || -f `which GenFv` ) && ! -d $EDK_TOOLS_PATH/Source/C/bin ]]; 267 then 268 # build the tools if they don't yet exist. BinWrapper scheme 269 echo Building tools no $EDK_TOOLS_PATH/Source/C/bin directory 270 make -C $WORKSPACE/BaseTools 271 else 272 echo using prebuilt tools 273 fi 274 275 276 if [[ "$RUN_QEMU" == "yes" ]]; then 277 if [[ ! -d $QEMU_FIRMWARE_DIR ]]; then 278 mkdir $QEMU_FIRMWARE_DIR 279 fi 280 ln -sf $FV_DIR/OVMF.fd $QEMU_FIRMWARE_DIR/bios.bin 281 if [[ "$ENABLE_FLASH" == "yes" ]]; then 282 QEMU_COMMAND="$QEMU_COMMAND -pflash $QEMU_FIRMWARE_DIR/bios.bin" 283 else 284 QEMU_COMMAND="$QEMU_COMMAND -L $QEMU_FIRMWARE_DIR" 285 fi 286 if [[ "$ADD_QEMU_HDA" == "yes" ]]; then 287 QEMU_COMMAND="$QEMU_COMMAND -hda fat:$BUILD_ROOT_ARCH" 288 fi 289 echo Running: $QEMU_COMMAND "$@" 290 $QEMU_COMMAND "$@" 291 exit $? 292 fi 293 294 # 295 # Build the edk2 OvmfPkg 296 # 297 echo Running edk2 build for OvmfPkg$Processor 298 build -p $PLATFORMFILE $BUILD_OPTIONS -b $BUILDTARGET -t $TARGET_TOOLS -n $THREADNUMBER 299 exit $? 300 301