From: "Yuwei Chen" <yuwei.chen@intel.com>
To: "matthewfcarlson@gmail.com" <matthewfcarlson@gmail.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Feng, Bob C" <bob.c.feng@intel.com>,
Liming Gao <gaoliming@byosoft.com.cn>
Subject: Re: [PATCH v5 1/1] BaseTools: Use pip module if available, CI uses it by default
Date: Tue, 9 Feb 2021 02:31:51 +0000 [thread overview]
Message-ID: <DM5PR11MB1594E04D59B974293751A538968E9@DM5PR11MB1594.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20210209005033.596-2-matthewfcarlson@gmail.com>
Reviewed-by: Yuwei Chen<yuwei.chen@intel.com>
> -----Original Message-----
> From: matthewfcarlson@gmail.com <matthewfcarlson@gmail.com>
> Sent: Tuesday, February 9, 2021 8:51 AM
> To: devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>; Liming Gao
> <gaoliming@byosoft.com.cn>; Chen, Christine <yuwei.chen@intel.com>;
> Matthew Carlson <matthewfcarlson@gmail.com>
> Subject: [PATCH v5 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>
>
> 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/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/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/Split.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 | 3 +-
> BaseTools/BinWrappers/PosixLike/posix_path_env.yaml |
> 1 +
> BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> | 1 +
> BaseTools/BuildEnv | 14 +++++-
> BaseTools/Scripts/PatchCheck.py | 1 +
> BaseTools/Source/Python/README.md | 29
> +++++++++++
> BaseTools/toolsetup.bat | 19 ++++++++
> pip-requirements.txt | 1 +
> 55 files changed, 745 insertions(+), 25 deletions(-)
>
> diff --git a/.pytool/CISettings.py b/.pytool/CISettings.py index
> e6c5ac700ab2..5f71eca1992e 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 #@@ -128,19 +136,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 100755
> 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 100755
> 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/BrotliCompress
> b/BaseTools/BinPipWrappers/PosixLike/BrotliCompress
> new file mode 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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 100755
> 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..d347d6484467
> --- /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..d347d6484467
> --- /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/Ecc.bat
> +b/BaseTools/BinPipWrappers/WindowsLike/Ecc.bat
> new file mode 100644
> index 000000000000..16a0a799a43b
> --- /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..481b5ac47d24
> --- /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..d347d6484467
> --- /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..d347d6484467
> --- /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..34c43ac7fc99
> --- /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..d347d6484467
> --- /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..d347d6484467
> --- /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.b
> at
> +b/BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.
> bat
> new file mode 100644
> index 000000000000..cdc2e3ea373d
> --- /dev/null
> +++
> b/BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.b
> at
> @@ -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..d347d6484467
> --- /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/Split.bat
> +b/BaseTools/BinPipWrappers/WindowsLike/Split.bat
> new file mode 100644
> index 000000000000..d347d6484467
> --- /dev/null
> +++ b/BaseTools/BinPipWrappers/WindowsLike/Split.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..d347d6484467
> --- /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..d347d6484467
> --- /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..d347d6484467
> --- /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..d347d6484467
> --- /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.ya
> ml
> similarity index 70%
> copy from
> BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> copy to
> BaseTools/BinPipWrappers/WindowsLike/win_build_tools_path_env.yaml
> index 83f5856e75c6..9fdbe1bcb06b 100644
> --- a/BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml
> +++
> b/BaseTools/BinPipWrappers/WindowsLike/win_build_tools_path_env.yaml
> @@ -5,6 +5,7 @@
> # SPDX-License-Identifier: BSD-2-Clause-Patent ## {- "scope": "global-win",+
> "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..275f4c5901aa 100755
> --- a/BaseTools/BuildEnv
> +++ b/BaseTools/BuildEnv
> @@ -46,7 +46,7 @@ RestorePreviousConfiguration() {
> done
> fi
> fi
> -
> +
> PREVIOUS_CONF_FILE=$CONF_PATH/BuildEnv.sh
> if [ -e $PREVIOUS_CONF_FILE ]
> then
> @@ -198,7 +198,17 @@ AddEdkToolsToPath() {
>
> EDK_TOOLS_PATH_BIN=`GetEdkToolsPathBinDirectory`
>
> - AddDirToStartOfPath $EDK_TOOLS_PATH/BinWrappers/PosixLike
> + # 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
>
> }
> 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..aea2e6ece431 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.2 antlr4-python3-runtime==4.7.1--
> 2.29.0.vfs.0.0
next prev parent reply other threads:[~2021-02-09 2:31 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-09 0:50 [PATCH v5 0/1] Use Pip version of BaseTools Matthew Carlson
2021-02-09 0:50 ` [PATCH v5 1/1] BaseTools: Use pip module if available, CI uses it by default Matthew Carlson
2021-02-09 2:31 ` Yuwei Chen [this message]
2021-02-09 3:25 ` Bob Feng
2021-02-09 13:15 ` [edk2-devel] " Leif Lindholm
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=DM5PR11MB1594E04D59B974293751A538968E9@DM5PR11MB1594.namprd11.prod.outlook.com \
--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