Browse Source

BaseTools: Update windows and linux run scripts file to use Python3

Modify windows script, PosixLike script, edksetup.sh, edksetup.bat to
use Python3 based on PYTHON3_ENABLE environment.

Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Bob Feng <bob.c.feng@intel.com>
Zhijux Fan 5 years ago
parent
commit
9c2d68c0a2
39 changed files with 177 additions and 93 deletions
  1. 3 3
      BaseTools/Bin/CYGWIN_NT-5.1-i686/Ecc
  2. 3 3
      BaseTools/Bin/CYGWIN_NT-5.1-i686/GenDepex
  3. 3 3
      BaseTools/Bin/CYGWIN_NT-5.1-i686/GenFds
  4. 3 3
      BaseTools/Bin/CYGWIN_NT-5.1-i686/TargetTool
  5. 3 3
      BaseTools/Bin/CYGWIN_NT-5.1-i686/Trim
  6. 3 3
      BaseTools/Bin/CYGWIN_NT-5.1-i686/build
  7. 3 3
      BaseTools/BinWrappers/PosixLike/BPDG
  8. 3 3
      BaseTools/BinWrappers/PosixLike/Ecc
  9. 3 3
      BaseTools/BinWrappers/PosixLike/GenDepex
  10. 3 3
      BaseTools/BinWrappers/PosixLike/GenFds
  11. 3 3
      BaseTools/BinWrappers/PosixLike/GenPatchPcdTable
  12. 3 3
      BaseTools/BinWrappers/PosixLike/GenerateCapsule
  13. 3 3
      BaseTools/BinWrappers/PosixLike/PatchPcdValue
  14. 3 3
      BaseTools/BinWrappers/PosixLike/Pkcs7Sign
  15. 3 3
      BaseTools/BinWrappers/PosixLike/Rsa2048Sha256GenerateKeys
  16. 3 3
      BaseTools/BinWrappers/PosixLike/Rsa2048Sha256Sign
  17. 3 3
      BaseTools/BinWrappers/PosixLike/TargetTool
  18. 3 3
      BaseTools/BinWrappers/PosixLike/Trim
  19. 3 3
      BaseTools/BinWrappers/PosixLike/UPT
  20. 3 3
      BaseTools/BinWrappers/PosixLike/build
  21. 1 1
      BaseTools/BinWrappers/WindowsLike/BPDG.bat
  22. 1 1
      BaseTools/BinWrappers/WindowsLike/Ecc.bat
  23. 1 1
      BaseTools/BinWrappers/WindowsLike/GenDepex.bat
  24. 1 1
      BaseTools/BinWrappers/WindowsLike/GenFds.bat
  25. 1 1
      BaseTools/BinWrappers/WindowsLike/GenPatchPcdTable.bat
  26. 1 1
      BaseTools/BinWrappers/WindowsLike/GenerateCapsule.bat
  27. 1 1
      BaseTools/BinWrappers/WindowsLike/PatchPcdValue.bat
  28. 1 1
      BaseTools/BinWrappers/WindowsLike/Pkcs7Sign.bat
  29. 1 1
      BaseTools/BinWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.bat
  30. 1 1
      BaseTools/BinWrappers/WindowsLike/Rsa2048Sha256Sign.bat
  31. 1 1
      BaseTools/BinWrappers/WindowsLike/TargetTool.bat
  32. 1 1
      BaseTools/BinWrappers/WindowsLike/Trim.bat
  33. 1 1
      BaseTools/BinWrappers/WindowsLike/UPT.bat
  34. 1 1
      BaseTools/BinWrappers/WindowsLike/build.bat
  35. 4 4
      BaseTools/Makefile
  36. 4 4
      BaseTools/Source/C/Makefile
  37. 1 1
      BaseTools/Tests/GNUmakefile
  38. 44 9
      BaseTools/toolsetup.bat
  39. 50 1
      edksetup.sh

+ 3 - 3
BaseTools/Bin/CYGWIN_NT-5.1-i686/Ecc

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/Bin/CYGWIN_NT-5.1-i686/GenDepex

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/Bin/CYGWIN_NT-5.1-i686/GenFds

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/Bin/CYGWIN_NT-5.1-i686/TargetTool

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/Bin/CYGWIN_NT-5.1-i686/Trim

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/Bin/CYGWIN_NT-5.1-i686/build

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/BPDG

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/Ecc

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/GenDepex

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/GenFds

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/GenPatchPcdTable

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/GenerateCapsule

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/PatchPcdValue

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/Pkcs7Sign

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/Rsa2048Sha256GenerateKeys

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/Rsa2048Sha256Sign

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/TargetTool

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/Trim

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/UPT

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 3 - 3
BaseTools/BinWrappers/PosixLike/build

@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 #python `dirname $0`/RunToolFromSource.py `basename $0` $*
 
-# If a python2 command is available, use it in preference to python
-if command -v python2 >/dev/null 2>&1; then
-    python_exe=python2
+# If a ${PYTHON} command is available, use it in preference to python
+if command -v ${PYTHON} >/dev/null 2>&1; then
+    python_exe=${PYTHON}
 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

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/BPDG.bat

@@ -1,4 +1,4 @@
 @setlocal
 @set ToolName=%~n0%
 @set PYTHONPATH=%PYTHONPATH%;%BASE_TOOLS_PATH%\Source\Python
-@%PYTHON_HOME%\python.exe -m %ToolName%.%ToolName% %*
+@%PYTHON% -m %ToolName%.%ToolName% %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/Ecc.bat

@@ -1,4 +1,4 @@
 @setlocal
 @set ToolName=%~n0%
 @set PYTHONPATH=%PYTHONPATH%;%BASE_TOOLS_PATH%\Source\Python
-@%PYTHON_HOME%\python.exe -m %ToolName%.EccMain %*
+@%PYTHON% -m %ToolName%.EccMain %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/GenDepex.bat

@@ -1,3 +1,3 @@
 @setlocal
 @set ToolName=%~n0%
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\AutoGen\%ToolName%.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\AutoGen\%ToolName%.py %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/GenFds.bat

@@ -1,4 +1,4 @@
 @setlocal
 @set ToolName=%~n0%
 @set PYTHONPATH=%PYTHONPATH%;%BASE_TOOLS_PATH%\Source\Python
-@%PYTHON_HOME%\python.exe -m %ToolName%.%ToolName% %*
+@%PYTHON% -m %ToolName%.%ToolName% %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/GenPatchPcdTable.bat

@@ -1,3 +1,3 @@
 @setlocal
 @set ToolName=%~n0%
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/GenerateCapsule.bat

@@ -1 +1 @@
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\Capsule\GenerateCapsule.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\Capsule\GenerateCapsule.py %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/PatchPcdValue.bat

@@ -1,3 +1,3 @@
 @setlocal
 @set ToolName=%~n0%
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/Pkcs7Sign.bat

@@ -1,3 +1,3 @@
 @setlocal
 @set ToolName=%~n0%
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.bat

@@ -1 +1 @@
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\Rsa2048Sha256Sign\Rsa2048Sha256GenerateKeys.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\Rsa2048Sha256Sign\Rsa2048Sha256GenerateKeys.py %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/Rsa2048Sha256Sign.bat

@@ -1,3 +1,3 @@
 @setlocal
 @set ToolName=%~n0%
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/TargetTool.bat

@@ -1,3 +1,3 @@
 @setlocal
 @set ToolName=%~n0%
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/Trim.bat

@@ -1,3 +1,3 @@
 @setlocal
 @set ToolName=%~n0%
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/UPT.bat

@@ -1,3 +1,3 @@
 @setlocal
 @set ToolName=%~n0%
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*

+ 1 - 1
BaseTools/BinWrappers/WindowsLike/build.bat

@@ -1,3 +1,3 @@
 @setlocal
 @set ToolName=%~n0%
-@%PYTHON_HOME%\python.exe %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*
+@%PYTHON% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*

+ 4 - 4
BaseTools/Makefile

@@ -20,17 +20,17 @@ SUBDIRS = $(BASE_TOOLS_PATH)\Source\C $(BASE_TOOLS_PATH)\Source\Python
 all: c
 
 c :
-  @$(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  all $(BASE_TOOLS_PATH)\Source\C
+  @$(PYTHON) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  all $(BASE_TOOLS_PATH)\Source\C
 
 
 subdirs: $(SUBDIRS)
-  @$(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  all $**
+  @$(PYTHON) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  all $**
 
 .PHONY: clean
 clean:
-  $(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py clean $(SUBDIRS)
+  $(PYTHON) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py clean $(SUBDIRS)
 
 .PHONY: cleanall
 cleanall:
-  $(PYTHON_HOME)\python.exe $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  cleanall $(SUBDIRS)
+  $(PYTHON) $(BASE_TOOLS_PATH)\Source\C\Makefiles\NmakeSubdirs.py  cleanall $(SUBDIRS)
 

+ 4 - 4
BaseTools/Source/C/Makefile

@@ -38,7 +38,7 @@ libs: $(LIBRARIES)
 	@echo # Build libraries
 	@echo ######################
 	@if not exist $(LIB_PATH) mkdir $(LIB_PATH)
-	@$(PYTHON_HOME)\python.exe Makefiles\NmakeSubdirs.py all $**
+	@$(PYTHON) Makefiles\NmakeSubdirs.py all $**
 
 apps: $(APPLICATIONS)
 	@echo.
@@ -46,7 +46,7 @@ apps: $(APPLICATIONS)
 	@echo # Build executables
 	@echo ######################
 	@if not exist $(BIN_PATH) mkdir $(BIN_PATH)
-	@$(PYTHON_HOME)\python.exe Makefiles\NmakeSubdirs.py all $**
+	@$(PYTHON) Makefiles\NmakeSubdirs.py all $**
 
 install: $(LIB_PATH) $(BIN_PATH)
 	@echo.
@@ -60,11 +60,11 @@ install: $(LIB_PATH) $(BIN_PATH)
 
 .PHONY: clean
 clean:
-  @$(PYTHON_HOME)\python.exe Makefiles\NmakeSubdirs.py clean $(LIBRARIES) $(APPLICATIONS)
+  @$(PYTHON) Makefiles\NmakeSubdirs.py clean $(LIBRARIES) $(APPLICATIONS)
 
 .PHONY: cleanall
 cleanall:
-  @$(PYTHON_HOME)\python.exe Makefiles\NmakeSubdirs.py cleanall $(LIBRARIES) $(APPLICATIONS)
+  @$(PYTHON) Makefiles\NmakeSubdirs.py cleanall $(LIBRARIES) $(APPLICATIONS)
 
 !INCLUDE Makefiles\ms.rule
 

+ 1 - 1
BaseTools/Tests/GNUmakefile

@@ -14,7 +14,7 @@
 all: test
 
 test:
-	@if command -v python2 >/dev/null 2>&1; then python2 RunTests.py; else python RunTests.py; fi
+	@if command -v $(PYTHON) >/dev/null 1; then $(PYTHON) RunTests.py; else python RunTests.py; fi
 
 clean:
 	find . -name '*.pyc' -exec rm '{}' ';'

+ 44 - 9
BaseTools/toolsetup.bat

@@ -274,8 +274,7 @@ goto check_build_environment
   echo.
 
 :check_build_environment
-  set PYTHONHASHSEED=0
-  if defined BASETOOLS_PYTHON_SOURCE goto VisualStudioAvailable
+  set PYTHONHASHSEED=1
 
   if not defined BASE_TOOLS_PATH (
      if not exist "Source\C\Makefile" (
@@ -286,24 +285,60 @@ goto check_build_environment
      )
   )
 
-  if not defined PYTHON_HOME (
-    if defined PYTHONHOME (
-      set PYTHON_HOME=%PYTHONHOME%
-    ) else (
+:defined_python
+if defined PYTHON3_ENABLE (
+  if "%PYTHON3_ENABLE%" EQU "TRUE" (
+    set PYTHON=py -3
+    %PYTHON% --version >NUL 2>&1
+    if %ERRORLEVEL% NEQ 0 (
       echo.
-      echo !!! ERROR !!! Binary python tools are missing. PYTHON_HOME environment variable is not set.
-      echo PYTHON_HOME is required to build or execute the python tools.
+      echo !!! ERROR !!!  PYTHON3 is not installed or added to environment variables
       echo.
       goto end
+    ) else (
+      goto check_freezer_path
+    )
+  ) 
+)
+
+if defined PYTHON_HOME (
+  if EXIST "%PYTHON_HOME%" (
+    set PYTHON=%PYTHON_HOME%\python.exe
+    goto check_freezer_path
+    )
+  )
+if defined PYTHONHOME (
+  if EXIST "%PYTHONHOME%" (
+    set PYTHON_HOME=%PYTHONHOME%
+    set PYTHON=%PYTHON_HOME%\python.exe
+    goto check_freezer_path
     )
   )
+  
+  echo.
+  echo !!! ERROR !!! Binary python tools are missing.
+  echo PYTHON_HOME or PYTHON3_ENABLE environment variable is not set successfully.
+  echo PYTHON_HOME or PYTHON3_ENABLE is required to build or execute the python tools.
+  echo.
+  goto end
 
+:check_freezer_path
+  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%
 
+:print_python_info
   echo                PATH = %PATH%
-  echo         PYTHON_HOME = %PYTHON_HOME%
+  if "%PYTHON3_ENABLE%" EQU "TRUE" (
+    echo      PYTHON3_ENABLE = %PYTHON3_ENABLE%
+    echo             PYTHON3 = %PYTHON%
+  ) else (
+    echo      PYTHON3_ENABLE = %PYTHON3_ENABLE%
+    if defined PYTHON_HOME (
+      echo         PYTHON_HOME = %PYTHON_HOME%
+    )
+  )
   echo          PYTHONPATH = %PYTHONPATH%
   echo.
 

+ 50 - 1
edksetup.sh

@@ -77,7 +77,7 @@ function SetWorkspace()
   # Set $WORKSPACE
   #
   export WORKSPACE=`pwd`
-  export PYTHONHASHSEED=0
+  export PYTHONHASHSEED=1
   return 0
 }
 
@@ -111,10 +111,59 @@ function SetupEnv()
   fi
 }
 
+function SetupPython()
+{    
+  if [ $PYTHON3_ENABLE ] && [ $PYTHON3_ENABLE == TRUE ]
+  then
+    for python in $(which python3)
+    do
+      python=$(echo $python | grep "[[:digit:]]$" || true)
+      python_version=${python##*python}
+      if [ -z "${python_version}" ];then
+        continue
+      fi
+      if [ -z $origin_version ];then
+        origin_version=$python_version
+        export PYTHON=$python
+        continue
+      fi
+      ret=`echo "$origin_version < $python_version" |bc`
+      if [ "$ret" -eq 1 ]; then
+        origin_version=$python_version
+        export PYTHON=$python
+      fi
+    done
+  fi
+  
+  if [ -z $PYTHON3_ENABLE ] || [ $PYTHON3_ENABLE != TRUE ]
+  then
+    for python in $(which python2)
+    do
+      python=$(echo $python | grep "[[:digit:]]$" || true)
+      python_version=${python##*python}
+      if [ -z "${python_version}" ];then
+        continue
+      fi
+      if [ -z $origin_version ] || [ $origin_version -ge 3 ]
+      then
+        origin_version=$python_version
+        export PYTHON=$python
+        continue
+      fi
+      ret=`echo "$origin_version < $python_version" |bc`
+      if [ "$ret" -eq 1 ]; then
+        origin_version=$python_version
+        export PYTHON=$python
+      fi
+    done
+  fi
+}
+
 function SourceEnv()
 {
   SetWorkspace &&
   SetupEnv
+  SetupPython
 }
 
 I=$#