From: "gaoliming" <gaoliming@byosoft.com.cn>
To: <devel@edk2.groups.io>, <matthewfcarlson@gmail.com>
Cc: "'Bob Feng'" <bob.c.feng@intel.com>,
"'Yuwei Chen'" <yuwei.chen@intel.com>,
"'Sean Brogan'" <sean.brogan@microsoft.com>,
"'Michael Kinney'" <michael.d.kinney@intel.com>
Subject: 回复: [edk2-devel] [PATCH v3 1/1] BaseTools: Use pip module if available, CI uses it by default
Date: Fri, 15 Jan 2021 16:58:29 +0800 [thread overview]
Message-ID: <004401d6eb1c$97ecab90$c7c602b0$@byosoft.com.cn> (raw)
In-Reply-To: <20210115021519.1080-2-matthewfcarlson@gmail.com>
Matthew:
Can you share the forked repo? I would like to confirm the linux script
file ending in this patch.
Thanks
Liming
> -----邮件原件-----
> 发件人: bounce+27952+70355+4905953+8761045@groups.io
> <bounce+27952+70355+4905953+8761045@groups.io> 代表 Matthew
> Carlson
> 发送时间: 2021年1月15日 10:15
> 收件人: devel@edk2.groups.io
> 抄送: Bob Feng <bob.c.feng@intel.com>; Liming Gao
> <gaoliming@byosoft.com.cn>; Yuwei Chen <yuwei.chen@intel.com>; Sean
> Brogan <sean.brogan@microsoft.com>; Michael Kinney
> <michael.d.kinney@intel.com>; Matthew Carlson
> <matthewfcarlson@gmail.com>
> 主题: [edk2-devel] [PATCH v3 1/1] BaseTools: Use pip module if available,
CI
> uses it by default
>
> From: Matthew Carlson <matthewfcarlson@gmail.com>
>
> Use the new edk2-basetools pip module.
> Includes a helpful message in setup to let users know which has been
> selected.
>
> Cc: Bob Feng <bob.c.feng@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Yuwei Chen <yuwei.chen@intel.com>
> Cc: Sean Brogan <sean.brogan@microsoft.com>
> Cc: Michael Kinney <michael.d.kinney@intel.com>
>
> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
>
> Signed-off-by: Matthew Carlson <matthewfcarlson@gmail.com>
> ---
> .pytool/CISettings.py
> | 51 +-
> BaseTools/BinPipWrappers/PosixLike/AmlToC
> | 14 +
> BaseTools/BinPipWrappers/PosixLike/BPDG
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/Brotli
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/BrotliCompress
> | 34 ++
> BaseTools/BinPipWrappers/PosixLike/DevicePath
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/Ecc
> | 13 +
> BaseTools/BinPipWrappers/PosixLike/EfiRom
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/GenCrc32
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/GenDepex
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/GenFds
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/GenFfs
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/GenFv
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/GenFw
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/GenPatchPcdTable
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/GenSec
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/GenerateCapsule
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/LzmaCompress
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/LzmaF86Compress
> | 19 +
> BaseTools/BinPipWrappers/PosixLike/PatchPcdValue
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/Pkcs7Sign
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256GenerateKeys
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256Sign
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/Split
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/TargetTool
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/TianoCompress
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/Trim
> | 13 +
> BaseTools/BinPipWrappers/PosixLike/UPT
> | 12 +
> BaseTools/BinPipWrappers/PosixLike/VfrCompile
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/VolInfo
> | 29 ++
> BaseTools/BinPipWrappers/PosixLike/build
> | 12 +
> BaseTools/{BinWrappers =>
> BinPipWrappers}/PosixLike/posix_path_env.yaml | 21 +-
> BaseTools/BinPipWrappers/WindowsLike/AmlToC.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/BPDG.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/BrotliCompress.bat
> | 55 ++
> BaseTools/BinPipWrappers/WindowsLike/Ecc.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/GenDepex.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/GenFds.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/GenPatchPcdTable.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/GenerateCapsule.bat
> | 1 +
> BaseTools/BinPipWrappers/WindowsLike/PatchPcdValue.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/Pkcs7Sign.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.bat
> | 1 +
> BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256Sign.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/TargetTool.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/Trim.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/UPT.bat
> | 3 +
> BaseTools/BinPipWrappers/WindowsLike/build.bat
> | 3 +
> BaseTools/{BinWrappers =>
> BinPipWrappers}/WindowsLike/win_build_tools_path_env.yaml | 21 +-
> BaseTools/BinWrappers/PosixLike/posix_path_env.yaml
> | 1 +
> BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> | 1 +
> BaseTools/BuildEnv
> | 548 ++++++++++----------
> BaseTools/Scripts/PatchCheck.py
> | 1 +
> BaseTools/Source/Python/README.md
> | 29 ++
> BaseTools/toolsetup.bat
> | 19 +
> pip-requirements.txt
> | 1 +
> 56 files changed, 1102 insertions(+), 301 deletions(-)
>
> diff --git a/.pytool/CISettings.py b/.pytool/CISettings.py
> index b337d046ae08..85e70b15dcda 100644
> --- a/.pytool/CISettings.py
> +++ b/.pytool/CISettings.py
> @@ -22,16 +22,24 @@ class Settings(CiBuildSettingsManager,
> UpdateSettingsManager, SetupSettingsManag
> self.ActualTargets = []
> self.ActualArchitectures = []
> self.ActualToolChainTag = ""
> + self.UseBuiltInBaseTools = None
> + self.ActualScopes = None
>
> #
> ##############################################################
> ######################### #
> # Extra CmdLine configuration
> #
> #
> ##############################################################
> ######################### #
>
> def AddCommandLineOptions(self, parserObj):
> - pass
> + group = parserObj.add_mutually_exclusive_group()
> + group.add_argument("-force_piptools", "--fpt",
> dest="force_piptools", action="store_true", default=False, help="Force the
> system to use pip tools")
> + group.add_argument("-no_piptools", "--npt", dest="no_piptools",
> action="store_true", default=False, help="Force the system to not use pip
> tools")
>
> def RetrieveCommandLineOptions(self, args):
> - pass
> + super().RetrieveCommandLineOptions(args)
> + if args.force_piptools:
> + self.UseBuiltInBaseTools = True
> + if args.no_piptools:
> + self.UseBuiltInBaseTools = False
>
> #
> ##############################################################
> ######################### #
> # Default Support for this Ci Build
> #
> @@ -127,19 +135,38 @@ class Settings(CiBuildSettingsManager,
> UpdateSettingsManager, SetupSettingsManag
>
> def GetActiveScopes(self):
> ''' return tuple containing scopes that should be active for this
> process '''
> - scopes = ("cibuild", "edk2-build", "host-based-test")
> + if self.ActualScopes is None:
> + scopes = ("cibuild", "edk2-build", "host-based-test")
>
> - self.ActualToolChainTag =
> shell_environment.GetBuildVars().GetValue("TOOL_CHAIN_TAG", "")
> + self.ActualToolChainTag =
> shell_environment.GetBuildVars().GetValue("TOOL_CHAIN_TAG", "")
>
> - if GetHostInfo().os.upper() == "LINUX" and
> self.ActualToolChainTag.upper().startswith("GCC"):
> - if "AARCH64" in self.ActualArchitectures:
> - scopes += ("gcc_aarch64_linux",)
> - if "ARM" in self.ActualArchitectures:
> - scopes += ("gcc_arm_linux",)
> - if "RISCV64" in self.ActualArchitectures:
> - scopes += ("gcc_riscv64_unknown",)
> + is_linux = GetHostInfo().os.upper() == "LINUX"
>
> - return scopes
> + if self.UseBuiltInBaseTools is None:
> + is_linux = GetHostInfo().os.upper() == "LINUX"
> + # try and import the pip module for basetools
> + try:
> + import edk2basetools
> + self.UseBuiltInBaseTools = True
> + except ImportError:
> + self.UseBuiltInBaseTools = False
> + pass
> +
> + if self.UseBuiltInBaseTools == True:
> + scopes += ('pipbuild-unix',) if is_linux else
('pipbuild-win',)
> + logging.warning("Using Pip Tools based BaseTools")
> + else:
> + logging.warning("Falling back to using in-tree
> BaseTools")
> +
> + if is_linux and
> self.ActualToolChainTag.upper().startswith("GCC"):
> + if "AARCH64" in self.ActualArchitectures:
> + scopes += ("gcc_aarch64_linux",)
> + if "ARM" in self.ActualArchitectures:
> + scopes += ("gcc_arm_linux",)
> + if "RISCV64" in self.ActualArchitectures:
> + scopes += ("gcc_riscv64_unknown",)
> + self.ActualScopes = scopes
> + return self.ActualScopes
>
> def GetRequiredSubmodules(self):
> ''' return iterable containing RequiredSubmodule objects.
> diff --git a/BaseTools/BinPipWrappers/PosixLike/AmlToC
> b/BaseTools/BinPipWrappers/PosixLike/AmlToC
> new file mode 100644
> index 000000000000..1dd28e966288
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/AmlToC
> @@ -0,0 +1,14 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +exe=$(basename "$full_cmd")
> +
> +export
> PYTHONPATH="$dir/../../Source/Python${PYTHONPATH:+:"$PYTHONPATH"}"
> +exec "${python_exe:-python}" "$dir/../../Source/Python/$exe/$exe.py"
> "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/BPDG
> b/BaseTools/BinPipWrappers/PosixLike/BPDG
> new file mode 100644
> index 000000000000..a08cbd8de5c5
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/BPDG
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.$cmd.EccMain "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/Brotli
> b/BaseTools/BinPipWrappers/PosixLike/Brotli
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/Brotli
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/BrotliCompress
> b/BaseTools/BinPipWrappers/PosixLike/BrotliCompress
> new file mode 100644
> index 000000000000..663860bb3e57
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/BrotliCompress
> @@ -0,0 +1,34 @@
> +#!/usr/bin/env bash
> +#
> +# This script will exec Brotli tool with -e/-d options.
> +#
> +# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +QLT="-q 9 -w 22"
> +ARGS=
> +
> +while test $# -gt 0
> +do
> + case $1 in
> + -e)
> + ;;
> + -d)
> + ARGS+="$1 "
> + ;;
> + -o|-g)
> + ARGS+="$1 $2 "
> + shift
> + ;;
> + -q)
> + QLT="$1 $2 "
> + shift
> + ;;
> + *)
> + ARGS+="$1 "
> + ;;
> + esac
> + shift
> +done
> +
> +exec Brotli $QLT $ARGS
> diff --git a/BaseTools/BinPipWrappers/PosixLike/DevicePath
> b/BaseTools/BinPipWrappers/PosixLike/DevicePath
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/DevicePath
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/Ecc
> b/BaseTools/BinPipWrappers/PosixLike/Ecc
> new file mode 100644
> index 000000000000..598728915095
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/Ecc
> @@ -0,0 +1,13 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +export
> PYTHONPATH="$dir/../../Source/Python${PYTHONPATH:+:"$PYTHONPATH"}"
> +exec "${python_exe:-python}" -m $cmd.EccMain "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/EfiRom
> b/BaseTools/BinPipWrappers/PosixLike/EfiRom
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/EfiRom
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/GenCrc32
> b/BaseTools/BinPipWrappers/PosixLike/GenCrc32
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/GenCrc32
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/GenDepex
> b/BaseTools/BinPipWrappers/PosixLike/GenDepex
> new file mode 100644
> index 000000000000..df75e43f9ec1
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/GenDepex
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.AutoGen.$cmd "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/GenFds
> b/BaseTools/BinPipWrappers/PosixLike/GenFds
> new file mode 100644
> index 000000000000..b27e84eaa210
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/GenFds
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.$cmd "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/GenFfs
> b/BaseTools/BinPipWrappers/PosixLike/GenFfs
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/GenFfs
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/GenFv
> b/BaseTools/BinPipWrappers/PosixLike/GenFv
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/GenFv
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/GenFw
> b/BaseTools/BinPipWrappers/PosixLike/GenFw
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/GenFw
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/GenPatchPcdTable
> b/BaseTools/BinPipWrappers/PosixLike/GenPatchPcdTable
> new file mode 100644
> index 000000000000..9d143c7fc6c2
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/GenPatchPcdTable
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.$cmd.$cmd "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/GenSec
> b/BaseTools/BinPipWrappers/PosixLike/GenSec
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/GenSec
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/GenerateCapsule
> b/BaseTools/BinPipWrappers/PosixLike/GenerateCapsule
> new file mode 100644
> index 000000000000..366a268802c4
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/GenerateCapsule
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.Capsule.$cmd "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/LzmaCompress
> b/BaseTools/BinPipWrappers/PosixLike/LzmaCompress
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/LzmaCompress
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/LzmaF86Compress
> b/BaseTools/BinPipWrappers/PosixLike/LzmaF86Compress
> new file mode 100644
> index 000000000000..b55352ae4c79
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/LzmaF86Compress
> @@ -0,0 +1,19 @@
> +#!/usr/bin/env bash
> +#
> +# This script will exec LzmaCompress tool with --f86 option that enables
> converter for x86 code.
> +#
> +# (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> +# Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +
> +for arg; do
> + case $arg in
> + -e|-d)
> + set -- "$@" --f86
> + break
> + ;;
> + esac
> +done
> +
> +exec LzmaCompress "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/PatchPcdValue
> b/BaseTools/BinPipWrappers/PosixLike/PatchPcdValue
> new file mode 100644
> index 000000000000..9d143c7fc6c2
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/PatchPcdValue
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.$cmd.$cmd "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/Pkcs7Sign
> b/BaseTools/BinPipWrappers/PosixLike/Pkcs7Sign
> new file mode 100644
> index 000000000000..9d143c7fc6c2
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/Pkcs7Sign
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.$cmd.$cmd "$@"
> diff --git
> a/BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256GenerateKeys
> b/BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256GenerateKeys
> new file mode 100644
> index 000000000000..aca2f3a6fe2a
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256GenerateKeys
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.Rsa2048Sha256Sign.$cmd
> "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256Sign
> b/BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256Sign
> new file mode 100644
> index 000000000000..068364070518
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256Sign
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.$cmd.$cmd "$@"
> \ No newline at end of file
> diff --git a/BaseTools/BinPipWrappers/PosixLike/Split
> b/BaseTools/BinPipWrappers/PosixLike/Split
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/Split
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/TargetTool
> b/BaseTools/BinPipWrappers/PosixLike/TargetTool
> new file mode 100644
> index 000000000000..9d143c7fc6c2
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/TargetTool
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.$cmd.$cmd "$@"
> diff --git a/BaseTools/BinPipWrappers/PosixLike/TianoCompress
> b/BaseTools/BinPipWrappers/PosixLike/TianoCompress
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/TianoCompress
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/Trim
> b/BaseTools/BinPipWrappers/PosixLike/Trim
> new file mode 100644
> index 000000000000..0bd14ee03872
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/Trim
> @@ -0,0 +1,13 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=$(basename "$full_cmd")
> +
> +exec "${python_exe:-python}" -m edk2basetools.$cmd.$cmd "$@"
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/UPT
> b/BaseTools/BinPipWrappers/PosixLike/UPT
> new file mode 100644
> index 000000000000..068364070518
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/UPT
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.$cmd.$cmd "$@"
> \ No newline at end of file
> diff --git a/BaseTools/BinPipWrappers/PosixLike/VfrCompile
> b/BaseTools/BinPipWrappers/PosixLike/VfrCompile
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/VfrCompile
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/VolInfo
> b/BaseTools/BinPipWrappers/PosixLike/VolInfo
> new file mode 100644
> index 000000000000..0945d86d9209
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/VolInfo
> @@ -0,0 +1,29 @@
> +#!/usr/bin/env bash
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +dir=$(dirname "$full_cmd")
> +cmd=${full_cmd##*/}
> +
> +if [ -n "$WORKSPACE" ] && [ -e "$WORKSPACE/Conf/BaseToolsCBinaries" ]
> +then
> + exec "$WORKSPACE/Conf/BaseToolsCBinaries/$cmd"
> +elif [ -n "$WORKSPACE" ] && [ -e "$EDK_TOOLS_PATH/Source/C" ]
> +then
> + if [ ! -e "$EDK_TOOLS_PATH/Source/C/bin/$cmd" ]
> + then
> + echo "BaseTools C Tool binary was not found ($cmd)"
> + echo "You may need to run:"
> + echo " make -C $EDK_TOOLS_PATH/Source/C"
> + else
> + exec "$EDK_TOOLS_PATH/Source/C/bin/$cmd" "$@"
> + fi
> +elif [ -e "$dir/../../Source/C/bin/$cmd" ]
> +then
> + exec "$dir/../../Source/C/bin/$cmd" "$@"
> +else
> + echo "Unable to find the real '$cmd' to run"
> + echo "This message was printed by"
> + echo " $0"
> + exit 127
> +fi
> +
> diff --git a/BaseTools/BinPipWrappers/PosixLike/build
> b/BaseTools/BinPipWrappers/PosixLike/build
> new file mode 100644
> index 000000000000..9d143c7fc6c2
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/PosixLike/build
> @@ -0,0 +1,12 @@
> +#!/usr/bin/env bash
> +#python `dirname $0`/RunToolFromSource.py `basename $0` $*
> +
> +# If a ${PYTHON_COMMAND} command is available, use it in preference to
> python
> +if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
> + python_exe=${PYTHON_COMMAND}
> +fi
> +
> +full_cmd=${BASH_SOURCE:-$0} # see
> http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a
> good choice here
> +cmd=${full_cmd##*/}
> +
> +exec "${python_exe:-python}" -m edk2basetools.$cmd.$cmd "$@"
> diff --git a/BaseTools/BinWrappers/PosixLike/posix_path_env.yaml
> b/BaseTools/BinPipWrappers/PosixLike/posix_path_env.yaml
> similarity index 74%
> copy from BaseTools/BinWrappers/PosixLike/posix_path_env.yaml
> copy to BaseTools/BinPipWrappers/PosixLike/posix_path_env.yaml
> index 8b32e010bb1d..830670305c0c 100644
> --- a/BaseTools/BinWrappers/PosixLike/posix_path_env.yaml
> +++ b/BaseTools/BinPipWrappers/PosixLike/posix_path_env.yaml
> @@ -1,10 +1,11 @@
> -## @file
> -# Set this folder on the path for all linux builds
> -#
> -# Copyright (c) Microsoft Corporation.
> -# SPDX-License-Identifier: BSD-2-Clause-Patent
> -##
> -{
> - "scope": "global-nix",
> - "flags": ["set_path"]
> -}
> +## @file
> +# Set this folder on the path for all linux builds
> +#
> +# Copyright (c) Microsoft Corporation.
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +##
> +{
> + "scope": "pipbuild-unix",
> + "override_id": "binwrappers",
> + "flags": ["set_path"]
> +}
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/AmlToC.bat
> b/BaseTools/BinPipWrappers/WindowsLike/AmlToC.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/AmlToC.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/BPDG.bat
> b/BaseTools/BinPipWrappers/WindowsLike/BPDG.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/BPDG.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/BrotliCompress.bat
> b/BaseTools/BinPipWrappers/WindowsLike/BrotliCompress.bat
> new file mode 100644
> index 000000000000..02ed682f13eb
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/BrotliCompress.bat
> @@ -0,0 +1,55 @@
> +@REM @file
> +@REM This script will exec Brotli tool with -e/-d options.
> +@REM
> +@REM Copyright (c) 2017 - 2018, Intel Corporation. All rights
reserved.<BR>
> +@REM SPDX-License-Identifier: BSD-2-Clause-Patent
> +@REM
> +
> +@echo off
> +@setlocal
> +
> +set QLT=-q 9 -w 22
> +set ARGS=
> +
> +:Begin
> +if "%1"=="" goto End
> +
> +if "%1"=="-d" (
> + set ARGS=%ARGS% %1
> + shift
> + goto Begin
> +)
> +
> +if "%1"=="-e" (
> + shift
> + goto Begin
> +)
> +
> +if "%1"=="-g" (
> + set ARGS=%ARGS% %1 %2
> + shift
> + shift
> + goto Begin
> +)
> +
> +if "%1"=="-o" (
> + set ARGS=%ARGS% %1 %2
> + shift
> + shift
> + goto Begin
> +)
> +
> +if "%1"=="-q" (
> + set QLT=%1 %2
> + shift
> + shift
> + goto Begin
> +)
> +
> +set ARGS=%ARGS% %1
> +shift
> +goto Begin
> +
> +:End
> +Brotli %QLT% %ARGS%
> +@echo on
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/Ecc.bat
> b/BaseTools/BinPipWrappers/WindowsLike/Ecc.bat
> new file mode 100644
> index 000000000000..c8d1ed844d36
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/Ecc.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m edk2basetools.%ToolName%.EccMain %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/GenDepex.bat
> b/BaseTools/BinPipWrappers/WindowsLike/GenDepex.bat
> new file mode 100644
> index 000000000000..aff3cce340fb
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/GenDepex.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m edk2basetools.AutoGen.%ToolName% %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/GenFds.bat
> b/BaseTools/BinPipWrappers/WindowsLike/GenFds.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/GenFds.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/GenPatchPcdTable.bat
> b/BaseTools/BinPipWrappers/WindowsLike/GenPatchPcdTable.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/GenPatchPcdTable.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/GenerateCapsule.bat
> b/BaseTools/BinPipWrappers/WindowsLike/GenerateCapsule.bat
> new file mode 100644
> index 000000000000..70907c079943
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/GenerateCapsule.bat
> @@ -0,0 +1 @@
> +@%PYTHON_COMMAND% -m edk2basetools.Capsule.GenerateCapsule %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/PatchPcdValue.bat
> b/BaseTools/BinPipWrappers/WindowsLike/PatchPcdValue.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/PatchPcdValue.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/Pkcs7Sign.bat
> b/BaseTools/BinPipWrappers/WindowsLike/Pkcs7Sign.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/Pkcs7Sign.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git
> a/BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.ba
> t
> b/BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.ba
> t
> new file mode 100644
> index 000000000000..55b5d3b5a8d5
> --- /dev/null
> +++
> b/BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.ba
> t
> @@ -0,0 +1 @@
> +@%PYTHON_COMMAND% -m
> edk2basetools.Rsa2048Sha256Sign.Rsa2048Sha256GenerateKeys %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256Sign.bat
> b/BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256Sign.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256Sign.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/TargetTool.bat
> b/BaseTools/BinPipWrappers/WindowsLike/TargetTool.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/TargetTool.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/Trim.bat
> b/BaseTools/BinPipWrappers/WindowsLike/Trim.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/Trim.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/UPT.bat
> b/BaseTools/BinPipWrappers/WindowsLike/UPT.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/UPT.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git a/BaseTools/BinPipWrappers/WindowsLike/build.bat
> b/BaseTools/BinPipWrappers/WindowsLike/build.bat
> new file mode 100644
> index 000000000000..895d72d2594d
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/build.bat
> @@ -0,0 +1,3 @@
> +@setlocal
> +@set ToolName=%~n0%
> +@%PYTHON_COMMAND% -m
> edk2basetools.%ToolName%.%ToolName% %*
> diff --git
> a/BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> b/BaseTools/BinPipWrappers/WindowsLike/win_build_tools_path_env.yaml
> similarity index 74%
> copy from
> BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> copy to
> BaseTools/BinPipWrappers/WindowsLike/win_build_tools_path_env.yaml
> index 83f5856e75c6..fbeede54b428 100644
> --- a/BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> +++
> b/BaseTools/BinPipWrappers/WindowsLike/win_build_tools_path_env.yaml
> @@ -1,10 +1,11 @@
> -## @file
> -# Add this folder to the path on Windows
> -#
> -# Copyright (c) Microsoft Corporation.
> -# SPDX-License-Identifier: BSD-2-Clause-Patent
> -##
> -{
> - "scope": "global-win",
> - "flags": ["set_path"]
> -}
> +## @file
> +# Add this folder to the path on Windows
> +#
> +# Copyright (c) Microsoft Corporation.
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +##
> +{
> + "scope": "pipbuild-win",
> + "override_id": "binwrappers",
> + "flags": ["set_path"]
> +}
> diff --git a/BaseTools/BinWrappers/PosixLike/posix_path_env.yaml
> b/BaseTools/BinWrappers/PosixLike/posix_path_env.yaml
> index 8b32e010bb1d..99529235ec9a 100644
> --- a/BaseTools/BinWrappers/PosixLike/posix_path_env.yaml
> +++ b/BaseTools/BinWrappers/PosixLike/posix_path_env.yaml
> @@ -5,6 +5,7 @@
> # SPDX-License-Identifier: BSD-2-Clause-Patent
> ##
> {
> + "id": "binwrappers",
> "scope": "global-nix",
> "flags": ["set_path"]
> }
> diff --git
> a/BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> b/BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> index 83f5856e75c6..43da76f354e5 100644
> --- a/BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> +++ b/BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> @@ -5,6 +5,7 @@
> # SPDX-License-Identifier: BSD-2-Clause-Patent
> ##
> {
> + "id": "binwrappers",
> "scope": "global-win",
> "flags": ["set_path"]
> }
> diff --git a/BaseTools/BuildEnv b/BaseTools/BuildEnv
> index 5943bb9ef908..cc8e92db6558 100755
> --- a/BaseTools/BuildEnv
> +++ b/BaseTools/BuildEnv
> @@ -1,269 +1,279 @@
> -## @file
> -# Setup the environment for unix-like systems running a bash-like shell.
> -# This file must be "sourced" not merely executed. For example: ".
> edksetup.sh"
> -#
> -# Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
> -# Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
> -# SPDX-License-Identifier: BSD-2-Clause-Patent
> -#
> -
> -SetWorkspace() {
> -
> - #
> - # If WORKSPACE is already set, then we can return right now
> - #
> - if [ -n "$WORKSPACE" ]
> - then
> - return 0
> - fi
> -
> - #
> - # Set $WORKSPACE
> - #
> - export WORKSPACE=`pwd`
> -
> - return 0
> -
> -}
> -
> -RestorePreviousConfiguration() {
> - #
> - # Restore previous configuration
> - #
> - if [ -z "$CONF_PATH" ]
> - then
> - export CONF_PATH=$WORKSPACE/Conf
> - if [ ! -d $WORKSPACE/Conf ] && [ -n "$PACKAGES_PATH" ]
> - then
> - PATH_LIST=${PACKAGES_PATH//:/ }
> - for DIR in $PATH_LIST
> - do
> - if [ -d $DIR/Conf ]
> - then
> - export CONF_PATH=$DIR/Conf
> - break
> - fi
> - done
> - fi
> - fi
> -
> - PREVIOUS_CONF_FILE=$CONF_PATH/BuildEnv.sh
> - if [ -e $PREVIOUS_CONF_FILE ]
> - then
> - echo Loading previous configuration from $PREVIOUS_CONF_FILE
> - . $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_PATH/BuildEnv.sh
> - #echo Storing current configuration into $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
> -
> - #
> - # Try $CONF_PATH/EdkTools
> - #
> - if [ -e $CONF_PATH/EdkTools ]
> - then
> - export EDK_TOOLS_PATH=$CONF_PATH/EdkTools
> - return 0
> - fi
> -
> - #
> - # Try $CONF_PATH/BaseToolsSource
> - #
> - if [ -e $CONF_PATH/BaseToolsSource ]
> - then
> - export EDK_TOOLS_PATH=$CONF_PATH/BaseToolsSource
> - return 0
> - fi
> -
> - #
> - # Try $WORKSPACE/BaseTools
> - #
> - if [ -e $WORKSPACE/BaseTools ]
> - then
> - export EDK_TOOLS_PATH=$WORKSPACE/BaseTools
> - return 0
> - fi
> -
> - #
> - # Try $PACKAGES_PATH
> - #
> - if [ -n "$PACKAGES_PATH"]
> - then
> - PATH_LIST=${PACKAGES_PATH//:/ }
> - for DIR in $PATH_LIST
> - do
> - if [ -d $DIR/BaseTools ]
> - then
> - export EDK_TOOLS_PATH=$DIR/BaseTools
> - return 0
> - fi
> - done
> - 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
> -}
> -
> -AddDirToStartOfPath() {
> - DIRNAME=$1
> - PATH=$DIRNAME:$DIRNAME:$DIRNAME:$PATH
> - PATH=${PATH//$DIRNAME:/}
> - PATH=$DIRNAME:$PATH
> - export PATH
> -}
> -
> -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`
> -
> - AddDirToStartOfPath $EDK_TOOLS_PATH/BinWrappers/PosixLike
> - AddDirToStartOfPath $EDK_TOOLS_PATH_BIN
> -
> -}
> -
> -CopySingleTemplateFile() {
> -
> - SRC_FILENAME=Conf/$1.template
> - DST_FILENAME=$CONF_PATH/$1.txt
> -
> - if [ -e $DST_FILENAME ]
> - then
> - [ $RECONFIG != TRUE ] && return
> - fi
> -
> - echo "Copying \$EDK_TOOLS_PATH/$SRC_FILENAME"
> - echo " to $DST_FILENAME"
> - SRC_FILENAME=$EDK_TOOLS_PATH/$SRC_FILENAME
> - cp $SRC_FILENAME $DST_FILENAME
> -
> -}
> -
> -CopyTemplateFiles() {
> -
> - CopySingleTemplateFile build_rule
> - 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
> - echo CONF_PATH: $CONF_PATH
> -
> - CopyTemplateFiles
> -
> -}
> -
> -#
> -# Run the main function
> -#
> -ScriptMain
> -
> +## @file
> +# Setup the environment for unix-like systems running a bash-like shell.
> +# This file must be "sourced" not merely executed. For example: ".
> edksetup.sh"
> +#
> +# Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +
> +SetWorkspace() {
> +
> + #
> + # If WORKSPACE is already set, then we can return right now
> + #
> + if [ -n "$WORKSPACE" ]
> + then
> + return 0
> + fi
> +
> + #
> + # Set $WORKSPACE
> + #
> + export WORKSPACE=`pwd`
> +
> + return 0
> +
> +}
> +
> +RestorePreviousConfiguration() {
> + #
> + # Restore previous configuration
> + #
> + if [ -z "$CONF_PATH" ]
> + then
> + export CONF_PATH=$WORKSPACE/Conf
> + if [ ! -d $WORKSPACE/Conf ] && [ -n "$PACKAGES_PATH" ]
> + then
> + PATH_LIST=${PACKAGES_PATH//:/ }
> + for DIR in $PATH_LIST
> + do
> + if [ -d $DIR/Conf ]
> + then
> + export CONF_PATH=$DIR/Conf
> + break
> + fi
> + done
> + fi
> + fi
> +
> + PREVIOUS_CONF_FILE=$CONF_PATH/BuildEnv.sh
> + if [ -e $PREVIOUS_CONF_FILE ]
> + then
> + echo Loading previous configuration from $PREVIOUS_CONF_FILE
> + . $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_PATH/BuildEnv.sh
> + #echo Storing current configuration into $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
> +
> + #
> + # Try $CONF_PATH/EdkTools
> + #
> + if [ -e $CONF_PATH/EdkTools ]
> + then
> + export EDK_TOOLS_PATH=$CONF_PATH/EdkTools
> + return 0
> + fi
> +
> + #
> + # Try $CONF_PATH/BaseToolsSource
> + #
> + if [ -e $CONF_PATH/BaseToolsSource ]
> + then
> + export EDK_TOOLS_PATH=$CONF_PATH/BaseToolsSource
> + return 0
> + fi
> +
> + #
> + # Try $WORKSPACE/BaseTools
> + #
> + if [ -e $WORKSPACE/BaseTools ]
> + then
> + export EDK_TOOLS_PATH=$WORKSPACE/BaseTools
> + return 0
> + fi
> +
> + #
> + # Try $PACKAGES_PATH
> + #
> + if [ -n "$PACKAGES_PATH"]
> + then
> + PATH_LIST=${PACKAGES_PATH//:/ }
> + for DIR in $PATH_LIST
> + do
> + if [ -d $DIR/BaseTools ]
> + then
> + export EDK_TOOLS_PATH=$DIR/BaseTools
> + return 0
> + fi
> + done
> + 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
> +}
> +
> +AddDirToStartOfPath() {
> + DIRNAME=$1
> + PATH=$DIRNAME:$DIRNAME:$DIRNAME:$PATH
> + PATH=${PATH//$DIRNAME:/}
> + PATH=$DIRNAME:$PATH
> + export PATH
> +}
> +
> +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`
> +
> + # check if the edk2basetools pip package is available
> + if $PYTHON_COMMAND -c "import edk2basetools" &> /dev/null; then
> + # if it is, use the pip version of the wrappers
> + echo "Using Pip Basetools"
> + AddDirToStartOfPath $EDK_TOOLS_PATH/BinPipWrappers/PosixLike
> + else
> + echo "Using EDK2 in-source Basetools"
> + AddDirToStartOfPath $EDK_TOOLS_PATH/BinWrappers/PosixLike
> + fi
> +
> +
> + AddDirToStartOfPath $EDK_TOOLS_PATH_BIN
> +
> +}
> +
> +CopySingleTemplateFile() {
> +
> + SRC_FILENAME=Conf/$1.template
> + DST_FILENAME=$CONF_PATH/$1.txt
> +
> + if [ -e $DST_FILENAME ]
> + then
> + [ $RECONFIG != TRUE ] && return
> + fi
> +
> + echo "Copying \$EDK_TOOLS_PATH/$SRC_FILENAME"
> + echo " to $DST_FILENAME"
> + SRC_FILENAME=$EDK_TOOLS_PATH/$SRC_FILENAME
> + cp $SRC_FILENAME $DST_FILENAME
> +
> +}
> +
> +CopyTemplateFiles() {
> +
> + CopySingleTemplateFile build_rule
> + 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
> + echo CONF_PATH: $CONF_PATH
> +
> + CopyTemplateFiles
> +
> +}
> +
> +#
> +# Run the main function
> +#
> +ScriptMain
> +
> diff --git a/BaseTools/Scripts/PatchCheck.py
> b/BaseTools/Scripts/PatchCheck.py
> index 68c984ed0e4d..80754e763c5a 100755
> --- a/BaseTools/Scripts/PatchCheck.py
> +++ b/BaseTools/Scripts/PatchCheck.py
> @@ -359,6 +359,7 @@ class GitDiffCheck:
> self.force_notabs = True
> if self.filename.endswith('.sh') or \
>
> self.filename.startswith('BaseTools/BinWrappers/PosixLike/') or \
> +
> self.filename.startswith('BaseTools/BinPipWrappers/PosixLike/') or \
>
> self.filename.startswith('BaseTools/Bin/CYGWIN_NT-5.1-i686/') or \
> self.filename == 'BaseTools/BuildEnv':
> #
> diff --git a/BaseTools/Source/Python/README.md
> b/BaseTools/Source/Python/README.md
> new file mode 100644
> index 000000000000..56f5b0ff027b
> --- /dev/null
> +++ b/BaseTools/Source/Python/README.md
> @@ -0,0 +1,29 @@
> +# Edk2 Basetools
> +
> +This folder has traditionally held the source of Python based tools used
by
> EDK2.
> +The official repo this source has moved to
> https://github.com/tianocore/edk2-basetools.
> +This folder will remain in the tree until the next stable release
(expected
> 202102).
> +There is a new folder under Basetools `BinPipWrappers` that uses the pip
> module rather than this tree for Basetools.
> +By adding the scope `pipbuild-win` or `pipbuild-unix` (depending on your
host
> system), the SDE will use the
> +`BinPipWrappers` instead of the regular `BinWrappers`.
> +
> +## Why Move It?
> +
> +The discussion is on the mailing list. The RFC is here:
> https://edk2.groups.io/g/rfc/topic/74009714#270
> +The benefits allow for the Basetools project to be used separately from
EDK2
> itself as well as offering it in a
> +globally accessible manner.
> +This makes it much easier to build a module using Basetools.
> +Separating the Basetools into their own repo allows for easier CI and
> contribution process.
> +Additional pros, cons, and process can be found on the mailing list.
> +
> +## How Do I Install It?
> +
> +By default, EDK2 is tied to and tested with a specific version of the
Basetools
> through `pip-requirements.txt`.
> +You can simply run:
> +
> +```bash
> +pip install -r pip-requirements.txt
> +```
> +
> +This will install the required module, thought we strongly suggest
setting up
> a virtual environment.
> +Additionally, you can also install a local clone of the Basetools as well
as a
> specific git commit.
> diff --git a/BaseTools/toolsetup.bat b/BaseTools/toolsetup.bat
> index 61ebf4ae09bc..4b5256ab6e93 100755
> --- a/BaseTools/toolsetup.bat
> +++ b/BaseTools/toolsetup.bat
> @@ -393,12 +393,31 @@ goto end
> goto check_freezer_path
> )
>
> +
> +
> :check_freezer_path
> endlocal
> +
> + %PYTHON_COMMAND% -c "import edk2basetools" >NUL 2>NUL
> + if %ERRORLEVEL% EQU 0 (
> + goto use_pip_basetools
> + ) else (
> + goto use_builtin_basetools
> + )
> +
> +:use_builtin_basetools
> + @echo Using EDK2 in-source Basetools
> if defined BASETOOLS_PYTHON_SOURCE goto print_python_info
> set "PATH=%BASE_TOOLS_PATH%\BinWrappers\WindowsLike;%PATH%"
> set
> BASETOOLS_PYTHON_SOURCE=%BASE_TOOLS_PATH%\Source\Python
> set PYTHONPATH=%BASETOOLS_PYTHON_SOURCE%;%PYTHONPATH%
> + goto print_python_info
> +
> +:use_pip_basetools
> + @echo Using Pip Basetools
> + set
> "PATH=%BASE_TOOLS_PATH%\BinPipWrappers\WindowsLike;%PATH%"
> + set BASETOOLS_PYTHON_SOURCE=edk2basetools
> + goto print_python_info
>
> :print_python_info
> echo PATH = %PATH%
> diff --git a/pip-requirements.txt b/pip-requirements.txt
> index 0fecd37f2a83..b634106beada 100644
> --- a/pip-requirements.txt
> +++ b/pip-requirements.txt
> @@ -14,4 +14,5 @@
>
> edk2-pytool-library==0.10.*
> edk2-pytool-extensions~=0.13.3
> +edk2-basetools==0.1.0
> antlr4-python3-runtime==4.7.1
> --
> 2.29.0.vfs.0.0
>
>
>
>
>
next prev parent reply other threads:[~2021-01-15 8:58 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-15 2:15 [PATCH v3 0/1] Use Pip version of BaseTools Matthew Carlson
2021-01-15 2:15 ` [PATCH v3 1/1] BaseTools: Use pip module if available, CI uses it by default Matthew Carlson
2021-01-15 8:58 ` gaoliming [this message]
2021-01-16 3:15 ` [edk2-devel] 回复: [edk2-devel] " Matthew Carlson
2021-01-18 1:52 ` 回复: " gaoliming
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='004401d6eb1c$97ecab90$c7c602b0$@byosoft.com.cn' \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox