]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/build.sh
BaseTools/BinToPcd: Fix Python 2.7.x compatibility issue
[mirror_edk2.git] / OvmfPkg / build.sh
index 0ddef044c0f7e3170cd2f5be5399277f9b6e94e0..68215520256421111cc72802856b3a28b5f00327 100755 (executable)
@@ -1,7 +1,7 @@
-#!/bin/bash
+#!/usr/bin/env bash
 #
 # Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
-# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2010 - 2017, 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
@@ -41,11 +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
@@ -56,18 +60,55 @@ 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
-      ;;
-  Linux*)
-    TARGET_TOOLS=GCC44
+        ;;
+      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=GCC5
+        ;;
+    esac
 esac
 
 #
@@ -78,7 +119,7 @@ for arg in "$@"
 do
   if [ -z "$LAST_ARG" ]; then
     case $arg in
-      -a|-b|-t)
+      -a|-b|-t|-p|-n)
         LAST_ARG=$arg
         ;;
       qemu)
@@ -86,6 +127,9 @@ do
         shift
         break
         ;;
+      --enable-flash)
+        ENABLE_FLASH=yes
+        ;;
       *)
         BUILD_OPTIONS="$BUILD_OPTIONS $arg"
         ;;
@@ -93,14 +137,25 @@ 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
         ;;
+      -p)
+        PLATFORMFILE=$arg
+        ;;
       -t)
         TARGET_TOOLS=$arg
         ;;
+      -n)
+        THREADNUMBER=$arg
+        ;;
       *)
         BUILD_OPTIONS="$BUILD_OPTIONS $arg"
         ;;
@@ -110,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
@@ -126,16 +218,31 @@ case $PROCESSOR in
     ;;
 esac
 
-ADD_QEMU_HDA=yes
-for arg in "$@"
-do
-  case $arg in
-    -hd[a-d]|-fd[ab]|-cdrom)
-      ADD_QEMU_HDA=no
-      break
+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].*|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
@@ -148,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` ]];
@@ -171,17 +278,18 @@ fi
 if [[ "$RUN_QEMU" == "yes" ]]; then
   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
-  if [[ "$ADD_QEMU_HDA" == "yes" ]]; then
-    AUTO_QEMU_HDA="-hda fat:$BUILD_ROOT_ARCH"
+  ln -sf $FV_DIR/OVMF.fd $QEMU_FIRMWARE_DIR/bios.bin
+  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
 
@@ -189,6 +297,6 @@ fi
 # Build the edk2 OvmfPkg
 #
 echo Running edk2 build for OvmfPkg$Processor
-build -p $WORKSPACE/OvmfPkg/OvmfPkg$Processor.dsc $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS
+build -p $PLATFORMFILE $BUILD_OPTIONS -b $BUILDTARGET -t $TARGET_TOOLS -n $THREADNUMBER
 exit $?