git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9623 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			262 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			262 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
#
 | 
						|
# Copyright (c) 2006 - 2007, 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
 | 
						|
# 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.
 | 
						|
 | 
						|
#
 | 
						|
# Setup the environment for unix-like systems running a bash-like shell.
 | 
						|
# This file must be "sourced" not merely executed. For example: ". edksetup.sh"
 | 
						|
#
 | 
						|
 | 
						|
SetWorkspace() {
 | 
						|
 | 
						|
  #
 | 
						|
  # If WORKSPACE is already set, then we can return right now
 | 
						|
  #
 | 
						|
  if [ -n "$WORKSPACE" ]
 | 
						|
  then
 | 
						|
    return 0
 | 
						|
  fi
 | 
						|
 | 
						|
  if [ ! ${BASH_SOURCE[0]} -ef ./BaseTools/BuildEnv ]
 | 
						|
  then
 | 
						|
    echo Run this script from the base of your tree.  For example:
 | 
						|
    echo "  cd /Path/To/Edk/Root"
 | 
						|
    echo "  . BaseTools/BuildEnv"
 | 
						|
    return -1
 | 
						|
  fi
 | 
						|
 | 
						|
  #
 | 
						|
  # Set $WORKSPACE
 | 
						|
  #
 | 
						|
  export WORKSPACE=`pwd`
 | 
						|
 | 
						|
  return 0
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
RestorePreviousConfiguration() {
 | 
						|
  #
 | 
						|
  # Restore previous configuration
 | 
						|
  #
 | 
						|
  PREVIOUS_CONF_FILE=Conf/BuildEnv.sh
 | 
						|
  if [ -e $PREVIOUS_CONF_FILE ]
 | 
						|
  then
 | 
						|
    echo Loading previous configuration from \$WORKSPACE/$PREVIOUS_CONF_FILE
 | 
						|
    . $WORKSPACE/$PREVIOUS_CONF_FILE
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
GenerateShellCodeToSetVariable() {
 | 
						|
  VARIABLE=$1
 | 
						|
  OUTPUT_FILE=$2
 | 
						|
  VAR_VALUE="echo \${${VARIABLE}}"
 | 
						|
  VAR_VALUE=`eval $VAR_VALUE`
 | 
						|
  echo "if [ -z \"\$${VARIABLE}\" ]"             >> $OUTPUT_FILE
 | 
						|
  echo "then"                                    >> $OUTPUT_FILE
 | 
						|
  echo "  export ${VARIABLE}=${VAR_VALUE}"       >> $OUTPUT_FILE
 | 
						|
  echo "fi"                                      >> $OUTPUT_FILE
 | 
						|
}
 | 
						|
 | 
						|
GenerateShellCodeToUpdatePath() {
 | 
						|
  OUTPUT_FILE=$1
 | 
						|
  echo "if [ -e $EDK_TOOLS_PATH_BIN ]"                        >> $OUTPUT_FILE
 | 
						|
  echo "then"                                                 >> $OUTPUT_FILE
 | 
						|
  echo "  if [ "\${PATH/$EDK_TOOLS_PATH_BIN/}" == "\$PATH" ]" >> $OUTPUT_FILE
 | 
						|
  echo "  then"                                               >> $OUTPUT_FILE
 | 
						|
  echo "    export PATH=$EDK_TOOLS_PATH_BIN:\$PATH"           >> $OUTPUT_FILE
 | 
						|
  echo "  fi"                                                 >> $OUTPUT_FILE
 | 
						|
  echo "fi"                                                   >> $OUTPUT_FILE
 | 
						|
}
 | 
						|
 | 
						|
StoreCurrentConfiguration() {
 | 
						|
  #
 | 
						|
  # Write configuration to a shell script to allow for configuration to be
 | 
						|
  # easily reloaded.
 | 
						|
  #
 | 
						|
  OUTPUT_FILE=Conf/BuildEnv.sh
 | 
						|
  #echo Storing current configuration into \$WORKSPACE/$OUTPUT_FILE
 | 
						|
  OUTPUT_FILE=$WORKSPACE/$OUTPUT_FILE
 | 
						|
  echo "# Auto-generated by ${BASH_SOURCE[0]}" > $OUTPUT_FILE
 | 
						|
  GenerateShellCodeToSetVariable WORKSPACE $OUTPUT_FILE
 | 
						|
  GenerateShellCodeToSetVariable EDK_TOOLS_PATH $OUTPUT_FILE
 | 
						|
  GenerateShellCodeToUpdatePath $OUTPUT_FILE
 | 
						|
}
 | 
						|
 | 
						|
SetEdkToolsPath() {
 | 
						|
 | 
						|
  #
 | 
						|
  # If EDK_TOOLS_PATH is already set, then we can return right now
 | 
						|
  #
 | 
						|
  if [ -n "$EDK_TOOLS_PATH" ]
 | 
						|
  then
 | 
						|
    return 0
 | 
						|
  fi
 | 
						|
 | 
						|
  #
 | 
						|
  # Figure out a uniq directory name from the uname command
 | 
						|
  #
 | 
						|
  UNAME_DIRNAME=`uname -sm`
 | 
						|
  UNAME_DIRNAME=${UNAME_DIRNAME// /-}
 | 
						|
  UNAME_DIRNAME=${UNAME_DIRNAME//\//-}
 | 
						|
 | 
						|
  #
 | 
						|
  # Try $WORKSPACE/Conf/EdkTools
 | 
						|
  #
 | 
						|
  if [ -e $WORKSPACE/Conf/EdkTools ]
 | 
						|
  then
 | 
						|
    export EDK_TOOLS_PATH=$WORKSPACE/Conf/EdkTools
 | 
						|
    return 0
 | 
						|
  fi
 | 
						|
 | 
						|
  #
 | 
						|
  # Try $WORKSPACE/Conf/BaseToolsSource
 | 
						|
  #
 | 
						|
  if [ -e $WORKSPACE/Conf/BaseToolsSource ]
 | 
						|
  then
 | 
						|
    export EDK_TOOLS_PATH=$WORKSPACE/Conf/BaseToolsSource
 | 
						|
    return 0
 | 
						|
  fi
 | 
						|
 | 
						|
  #
 | 
						|
  # Try $WORKSPACE/BaseTools/Bin/$UNAME_DIRNAME
 | 
						|
  #
 | 
						|
  if [ -e $WORKSPACE/BaseTools/Bin/$UNAME_DIRNAME ]
 | 
						|
  then
 | 
						|
    export EDK_TOOLS_PATH=$WORKSPACE/BaseTools
 | 
						|
    return 0
 | 
						|
  fi
 | 
						|
 | 
						|
  echo "Unable to determine EDK_TOOLS_PATH"
 | 
						|
  echo
 | 
						|
  echo "You may need to download the 'BaseTools' from buildtools.tianocore.org."
 | 
						|
  echo "After downloading, either create a symbolic link to the source at"
 | 
						|
  echo "\$WORKSPACE/Conf/BaseToolsSource, or set the EDK_TOOLS_PATH environment"
 | 
						|
  echo "variable."
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
GetBaseToolsBinSubDir() {
 | 
						|
  #
 | 
						|
  # Figure out a uniq directory name from the uname command
 | 
						|
  #
 | 
						|
  UNAME_DIRNAME=`uname -sm`
 | 
						|
  UNAME_DIRNAME=${UNAME_DIRNAME// /-}
 | 
						|
  UNAME_DIRNAME=${UNAME_DIRNAME//\//-}
 | 
						|
  echo $UNAME_DIRNAME
 | 
						|
}
 | 
						|
 | 
						|
GetEdkToolsPathBinDirectory() {
 | 
						|
  #
 | 
						|
  # Figure out a uniq directory name from the uname command
 | 
						|
  #
 | 
						|
  BIN_SUB_DIR=`GetBaseToolsBinSubDir`
 | 
						|
 | 
						|
  if [ -e $EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR ]
 | 
						|
  then
 | 
						|
    EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR
 | 
						|
  else
 | 
						|
    EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/Bin/$BIN_SUB_DIR
 | 
						|
  fi
 | 
						|
 | 
						|
  echo $EDK_TOOLS_PATH_BIN
 | 
						|
}
 | 
						|
 | 
						|
AddEdkToolsToPath() {
 | 
						|
 | 
						|
  #
 | 
						|
  # If EDK_TOOLS_PATH is not set, then we cannot update PATH
 | 
						|
  #
 | 
						|
  if [ -z "$EDK_TOOLS_PATH" ]
 | 
						|
  then
 | 
						|
    return -1
 | 
						|
  fi
 | 
						|
 | 
						|
  EDK_TOOLS_PATH_BIN=`GetEdkToolsPathBinDirectory`
 | 
						|
 | 
						|
  if [ ! -e $EDK_TOOLS_PATH_BIN ]
 | 
						|
  then
 | 
						|
    echo "Unable to find expected bin path under \$EDK_TOOLS_PATH!"
 | 
						|
    echo "> $EDK_TOOLS_PATH_BIN"
 | 
						|
    return -1
 | 
						|
  fi
 | 
						|
 | 
						|
  if [ "${PATH/$EDK_TOOLS_PATH_BIN/}" == "$PATH" ]
 | 
						|
  then
 | 
						|
    export PATH=$EDK_TOOLS_PATH_BIN:$PATH
 | 
						|
    return 0
 | 
						|
  fi
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
CopySingleTemplateFile() {
 | 
						|
 | 
						|
  SRC_FILENAME=Conf/$1.template
 | 
						|
  DST_FILENAME=Conf/$1.txt
 | 
						|
 | 
						|
  if [ -e $WORKSPACE/$DST_FILENAME ]
 | 
						|
  then
 | 
						|
    return
 | 
						|
  fi
 | 
						|
 | 
						|
  echo "Copying \$EDK_TOOLS_PATH/$SRC_FILENAME"
 | 
						|
  echo "     to \$WORKSPACE/$DST_FILENAME"
 | 
						|
  SRC_FILENAME=$EDK_TOOLS_PATH/$SRC_FILENAME
 | 
						|
  DST_FILENAME=$WORKSPACE/$DST_FILENAME
 | 
						|
  cp $SRC_FILENAME $DST_FILENAME
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
CopyTemplateFiles() {
 | 
						|
 | 
						|
  CopySingleTemplateFile build_rule
 | 
						|
  CopySingleTemplateFile FrameworkDatabase
 | 
						|
  CopySingleTemplateFile tools_def
 | 
						|
  CopySingleTemplateFile target
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
ScriptMain() {
 | 
						|
 | 
						|
  SetWorkspace
 | 
						|
  if [ -z $WORKSPACE ]
 | 
						|
  then
 | 
						|
    echo "Failure setting WORKSPACE"
 | 
						|
    return -1
 | 
						|
  fi
 | 
						|
 | 
						|
  RestorePreviousConfiguration
 | 
						|
 | 
						|
  SetEdkToolsPath
 | 
						|
  if [ -z $EDK_TOOLS_PATH ]
 | 
						|
  then
 | 
						|
    return -1
 | 
						|
  fi
 | 
						|
 | 
						|
  AddEdkToolsToPath
 | 
						|
  if [ $? -ne 0 ]
 | 
						|
  then
 | 
						|
    echo "Failure adding EDK Tools into PATH!"
 | 
						|
    return -1
 | 
						|
  fi
 | 
						|
 | 
						|
  StoreCurrentConfiguration
 | 
						|
 | 
						|
  echo WORKSPACE: $WORKSPACE
 | 
						|
  echo EDK_TOOLS_PATH: $EDK_TOOLS_PATH
 | 
						|
 | 
						|
  CopyTemplateFiles
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# Run the main function
 | 
						|
#
 | 
						|
ScriptMain
 | 
						|
 |