X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=OvmfPkg%2Fbuild.sh;h=68215520256421111cc72802856b3a28b5f00327;hp=0ddef044c0f7e3170cd2f5be5399277f9b6e94e0;hb=76c09700edc67686b29662e81a3ca7d947594ce5;hpb=66325870afafef6bf221fc3cc214f208b281652b diff --git a/OvmfPkg/build.sh b/OvmfPkg/build.sh index 0ddef044c0..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, 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,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 $?