mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 02:40:26 +00:00 
			
		
		
		
	build.sh will detect the locations of the libraries required by the host executable, and sets the HOST_DLINK_PATHS environment variable. In EmulatorPkg/Unix/Host/Host.inf, this environment variable is used in the linking build step. Signed-off-by: jljusten Reviewed-by: andrewfish git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12612 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			246 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
#
 | 
						|
# Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
 | 
						|
# Copyright (c) 2010 - 2011, 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
 | 
						|
 | 
						|
#
 | 
						|
# Configure defaults for various options
 | 
						|
#
 | 
						|
 | 
						|
PROCESSOR=
 | 
						|
BUILDTARGET=DEBUG
 | 
						|
BUILD_OPTIONS=
 | 
						|
PLATFORMFILE=
 | 
						|
LAST_ARG=
 | 
						|
RUN_EMULATOR=no
 | 
						|
CLEAN_TYPE=none
 | 
						|
TARGET_TOOLS=GCC44
 | 
						|
NETWORK_SUPPORT=
 | 
						|
BUILD_NEW_SHELL=
 | 
						|
BUILD_FAT=
 | 
						|
HOST_PROCESSOR=X64
 | 
						|
 | 
						|
case `uname` in
 | 
						|
  CYGWIN*) echo Cygwin not fully supported yet. ;;
 | 
						|
  Darwin*)
 | 
						|
      Major=$(uname -r | cut -f 1 -d '.')
 | 
						|
      if [[ $Major == 9 ]]
 | 
						|
      then
 | 
						|
        echo UnixPkg requires Snow Leopard or later OS
 | 
						|
        exit 1
 | 
						|
      else
 | 
						|
        HOST_TOOLS=XCODE32
 | 
						|
        TARGET_TOOLS=XCLANG
 | 
						|
      fi
 | 
						|
      BUILD_NEW_SHELL="-D BUILD_NEW_SHELL"
 | 
						|
      BUILD_FAT="-D BUILD_FAT"
 | 
						|
      ;;
 | 
						|
  Linux*)
 | 
						|
    case `uname -m` in
 | 
						|
      i386)
 | 
						|
        HOST_PROCESSOR=IA32
 | 
						|
        ;;
 | 
						|
      i686)
 | 
						|
        HOST_PROCESSOR=IA32
 | 
						|
        ;;
 | 
						|
      x86_64)
 | 
						|
        HOST_PROCESSOR=X64
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
 | 
						|
    gcc_version=$(gcc -v 2>&1 | tail -1 | awk '{print $3}')
 | 
						|
    case $gcc_version in
 | 
						|
      4.5.*)
 | 
						|
        TARGET_TOOLS=GCC45
 | 
						|
        ;;
 | 
						|
      4.6.*)
 | 
						|
        TARGET_TOOLS=GCC46
 | 
						|
        ;;
 | 
						|
      *)
 | 
						|
        TARGET_TOOLS=GCC44
 | 
						|
        exit 1
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
    ;;
 | 
						|
esac
 | 
						|
 | 
						|
#
 | 
						|
# Scan command line to override defaults
 | 
						|
#
 | 
						|
 | 
						|
for arg in "$@"
 | 
						|
do
 | 
						|
  if [ -z "$LAST_ARG" ]; then
 | 
						|
    case $arg in
 | 
						|
      -a|-b|-t|-p)
 | 
						|
        LAST_ARG=$arg
 | 
						|
        ;;
 | 
						|
      run)
 | 
						|
        RUN_EMULATOR=yes
 | 
						|
        shift
 | 
						|
        break
 | 
						|
        ;;
 | 
						|
      clean|cleanall)
 | 
						|
        CLEAN_TYPE=$arg
 | 
						|
        shift
 | 
						|
        break
 | 
						|
        ;;
 | 
						|
      *)
 | 
						|
        BUILD_OPTIONS="$BUILD_OPTIONS $arg"
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
  else
 | 
						|
    case $LAST_ARG in
 | 
						|
      -a)
 | 
						|
        PROCESSOR=$arg
 | 
						|
        ;;
 | 
						|
      -b)
 | 
						|
        BUILDTARGET=$arg
 | 
						|
        ;;
 | 
						|
      -p)
 | 
						|
        PLATFORMFILE=$arg
 | 
						|
        ;;
 | 
						|
      -t)
 | 
						|
        HOST_TOOLS=$arg
 | 
						|
        ;;
 | 
						|
      *)
 | 
						|
        BUILD_OPTIONS="$BUILD_OPTIONS $arg"
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
    LAST_ARG=
 | 
						|
  fi
 | 
						|
  shift
 | 
						|
done
 | 
						|
if [ -z "$HOST_TOOLS" ]
 | 
						|
then
 | 
						|
  HOST_TOOLS=$TARGET_TOOLS
 | 
						|
fi
 | 
						|
 | 
						|
if [ -z "$PROCESSOR" ]
 | 
						|
then
 | 
						|
  PROCESSOR=$HOST_PROCESSOR
 | 
						|
fi
 | 
						|
 | 
						|
case $PROCESSOR in
 | 
						|
  IA32)
 | 
						|
    ARCH_SIZE=32
 | 
						|
    BUILD_OUTPUT_DIR=$WORKSPACE/Build/Emulator32
 | 
						|
    LIB_NAMES="ld-linux.so.2 crt1.o crti.o crtn.o"
 | 
						|
    LIB_SEARCH_PATHS="/usr/lib/i386-linux-gnu /usr/lib32 /lib32 /usr/lib /lib"
 | 
						|
    ;;
 | 
						|
  X64)
 | 
						|
    ARCH_SIZE=64
 | 
						|
    BUILD_OUTPUT_DIR=$WORKSPACE/Build/Emulator
 | 
						|
    LIB_NAMES="ld-linux-x86-64.so.2 crt1.o crti.o crtn.o"
 | 
						|
    LIB_SEARCH_PATHS="/usr/lib/x86_64-linux-gnu /usr/lib64 /lib64 /usr/lib /lib"
 | 
						|
    ;;
 | 
						|
esac
 | 
						|
 | 
						|
for libname in $LIB_NAMES
 | 
						|
do
 | 
						|
  for dirname in $LIB_SEARCH_PATHS
 | 
						|
  do
 | 
						|
    if [ -e $dirname/$libname ]; then
 | 
						|
      export HOST_DLINK_PATHS="$HOST_DLINK_PATHS $dirname/$libname"
 | 
						|
      break
 | 
						|
    fi
 | 
						|
  done
 | 
						|
done
 | 
						|
 | 
						|
PLATFORMFILE=$WORKSPACE/EmulatorPkg/EmulatorPkg.dsc
 | 
						|
BUILD_ROOT_ARCH=$BUILD_OUTPUT_DIR/DEBUG_"$TARGET_TOOLS"/$PROCESSOR
 | 
						|
 | 
						|
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
 | 
						|
 | 
						|
 | 
						|
if [[ "$RUN_EMULATOR" == "yes" ]]; then
 | 
						|
  case `uname` in
 | 
						|
    Darwin*)
 | 
						|
      #
 | 
						|
      # On Darwin we can't use dlopen, so we have to load the real PE/COFF images.
 | 
						|
      # This .gdbinit script sets a breakpoint that loads symbols for the PE/COFFEE
 | 
						|
      # images that get loaded in Host
 | 
						|
      #
 | 
						|
      cp $WORKSPACE/EmulatorPkg/Unix/.gdbinit $BUILD_OUTPUT_DIR/DEBUG_"$TARGET_TOOLS"/$PROCESSOR
 | 
						|
      ;;
 | 
						|
  esac
 | 
						|
 | 
						|
  /usr/bin/gdb $BUILD_ROOT_ARCH/Host -q -cd=$BUILD_ROOT_ARCH -x $WORKSPACE/EmulatorPkg/Unix/GdbRun
 | 
						|
  exit
 | 
						|
fi
 | 
						|
 | 
						|
case $CLEAN_TYPE in
 | 
						|
  clean)
 | 
						|
    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS -D UNIX_SEC_BUILD -n 3 clean
 | 
						|
    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -n 3 clean
 | 
						|
    exit $?
 | 
						|
    ;;
 | 
						|
  cleanall)
 | 
						|
    make -C $WORKSPACE/BaseTools clean
 | 
						|
    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS -D UNIX_SEC_BUILD -n 3 clean
 | 
						|
    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -n 3 clean
 | 
						|
    build -p $WORKSPACE/ShellPkg/ShellPkg.dsc -a IA32 -b $BUILDTARGET -t $TARGET_TOOLS -n 3 clean
 | 
						|
    exit $?
 | 
						|
    ;;
 | 
						|
esac
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# Build the edk2 EmulatorPkg
 | 
						|
#
 | 
						|
if [[ $HOST_TOOLS == $TARGET_TOOLS ]]; then
 | 
						|
  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -D BUILD_$ARCH_SIZE -D UNIX_SEC_BUILD $NETWORK_SUPPORT $BUILD_NEW_SHELL $BUILD_FAT -n 3
 | 
						|
else
 | 
						|
  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS  -D BUILD_$ARCH_SIZE -D UNIX_SEC_BUILD -D SKIP_MAIN_BUILD -n 3 modules
 | 
						|
  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -D BUILD_$ARCH_SIZE $NETWORK_SUPPORT $BUILD_NEW_SHELL $BUILD_FAT -n 3
 | 
						|
  cp $BUILD_OUTPUT_DIR/DEBUG_"$HOST_TOOLS"/$PROCESSOR/Host $BUILD_ROOT_ARCH
 | 
						|
fi
 | 
						|
exit $?
 | 
						|
 |