Fix scripts to support lldb symbolic debugging when using XCODE5 tool chain. Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Andrew Fish <afish@apple.com> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> Acked-by: Jordan Justen <jordan.l.justen@intel.com> Tested-by: Andrew Fish <afish@apple.com>
		
			
				
	
	
		
			253 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			253 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
 | |
| # Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
 | |
| #
 | |
| # SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| #
 | |
| 
 | |
| 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=GCC48
 | |
| 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
 | |
|         CLANG_VER=$(clang -ccc-host-triple x86_64-pc-win32-macho 2>&1 >/dev/null) || true
 | |
|         if [[ "$CLANG_VER" == *-ccc-host-triple* ]]
 | |
|         then
 | |
|         # only older versions of Xcode support -ccc-host-triple, for newer versions
 | |
|         # it is -target
 | |
|           HOST_TOOLS=XCODE5
 | |
|           TARGET_TOOLS=XCODE5
 | |
|         else
 | |
|           HOST_TOOLS=XCODE32
 | |
|           TARGET_TOOLS=XCLANG
 | |
|         fi
 | |
|       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
 | |
|       [1-3].*|4.[0-7].*)
 | |
|         echo EmulatorPkg requires GCC4.8 or later
 | |
|         exit 1
 | |
|         ;;
 | |
|       4.8.*)
 | |
|         TARGET_TOOLS=GCC48
 | |
|         ;;
 | |
|       4.9.*|6.[0-2].*)
 | |
|         TARGET_TOOLS=GCC49
 | |
|         ;;
 | |
|       *)
 | |
|         TARGET_TOOLS=GCC5
 | |
|         ;;
 | |
|     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
 | |
| 
 | |
| BUILD_OUTPUT_DIR=$WORKSPACE/Build/Emulator$PROCESSOR
 | |
| 
 | |
| case $PROCESSOR in
 | |
|   IA32)
 | |
|     ARCH_SIZE=32
 | |
|     LIB_NAMES="ld-linux.so.2 libdl.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
 | |
|     LIB_NAMES="ld-linux-x86-64.so.2 libdl.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_DIR="$BUILD_OUTPUT_DIR/${BUILDTARGET}_$TARGET_TOOLS"
 | |
| BUILD_ROOT_ARCH=$BUILD_DIR/$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*)
 | |
|       cd $BUILD_ROOT_ARCH
 | |
|       /usr/bin/lldb \
 | |
|         -o "command script import $WORKSPACE/EmulatorPkg/Unix/lldbefi.py" \
 | |
|         -o 'script lldb.debugger.SetAsync(True)' \
 | |
|         -o "run" ./Host
 | |
|       exit $?
 | |
|       ;;
 | |
|   esac
 | |
| 
 | |
|   /usr/bin/gdb $BUILD_ROOT_ARCH/Host -q -cd=$BUILD_ROOT_ARCH -x $WORKSPACE/EmulatorPkg/Unix/GdbRun.sh
 | |
|   exit
 | |
| fi
 | |
| 
 | |
| case $CLEAN_TYPE in
 | |
|   clean)
 | |
|     build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS -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 -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 $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 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/${BUILDTARGET}_$HOST_TOOLS/$PROCESSOR/Host" $BUILD_ROOT_ARCH
 | |
| fi
 | |
| exit $?
 | |
| 
 |