Re: [PATCH] BaseTools: Retrieve git version info

Pankaj Bansal

Hi Bob,

This OS environment variable is only defined up until the point build command is running.
As soon as build command finishes, these OS environment variables also vanish.

Pankaj Bansal

-----Original Message-----
From: Feng, Bob C <bob.c.feng@...>
Sent: Thursday, January 9, 2020 3:31 PM
To: Pankaj Bansal <pankaj.bansal@...>;
Cc: Gao, Liming <liming.gao@...>
Subject: RE: [PATCH] BaseTools: Retrieve git version info

Hi Pankaj,

I think if the firmware module need to show git version information, the version information need to build into firmware binary but not set to OS environment variable.


-----Original Message-----
From: Pankaj Bansal [mailto:pankaj.bansal@...]
Sent: Thursday, January 9, 2020 3:09 PM
To: Feng, Bob C <bob.c.feng@...>;
Cc: Gao, Liming <liming.gao@...>
Subject: RE: [PATCH] BaseTools: Retrieve git version info

Hi Bob,

Thanks for replying.
Please see inline

-----Original Message-----
From: Feng, Bob C <bob.c.feng@...>
Sent: Thursday, January 9, 2020 11:43 AM
To: Pankaj Bansal <pankaj.bansal@...>;
Cc: Gao, Liming <liming.gao@...>
Subject: RE: [PATCH] BaseTools: Retrieve git version info

Hi Pankaj,

I would have some questions. Which module or tool will read WORKSPACE_GIT_VERSION and PACKAGES_PATH_GIT_VERSION?
-> Any driver or library can use this. I had tested this patch in Qemu after adding these changes :

index 0a1469550d..8e318f776f 100644
--- a/ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.c
+++ b/ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.c
@@ -18,6 +18,9 @@
#include <Guid/EarlyPL011BaseAddress.h> #include <Guid/FdtHob.h>

+#define XPRINT(x) PRINT(x)^M
+#define PRINT(x) #x^M
PlatformPeim (
@@ -98,6 +101,8 @@ PlatformPeim (

BuildFvHob (PcdGet64 (PcdFvBaseAddress), PcdGet32 (PcdFvSize));
+ DEBUG ((EFI_D_ERROR, "Edk2 version is %a\n",
+ DEBUG ((EFI_D_ERROR, "Edk2 platforms version is %a\n",

diff --git a/ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.inf b/ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
index 46db117ac2..992e89b210 100644
--- a/ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
+++ b/ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
@@ -15,6 +15,10 @@
LIBRARY_CLASS = PlatformPeiLib

+ GCC:*_*_*_CC_FLAGS =
+ GCC:*_*_*_CC_FLAGS =

PACKAGES_PATH can include multiple path separated by ";", looks this patch can't handle such case.
-> I did not know this information, maybe we can enhance this function for handling ";" in PACKAGES_PATH ?
I would need some time to work on it. I would really appreciate if anybody can help.

Why is this function implemented in build wrapper?
-> The purpose of this patch is to provide a user method to determine which source code was booted?
Or if a UEFI driver/application has been loaded in system from shell, which was the commit version for that?
This helps debugging in case we are provided logs of running system or logs of driver/application.
Since a user can make a standalone driver/application using build command, I added this function in build wrapper.


-----Original Message-----
From: Pankaj Bansal [mailto:pankaj.bansal@...]
Sent: Sunday, January 5, 2020 8:41 PM
Cc: Pankaj Bansal <pankaj.bansal@...>; Feng, Bob C <bob.c.feng@...>; Gao, Liming <liming.gao@...>
Subject: [PATCH] BaseTools: Retrieve git version info

Retrieve git version info and save as environment variable These variables can be used in modules to print the vesrion info when uefi boots.
This helps in identifying the codebase from logs.

Cc: Bob Feng <bob.c.feng@...>
Cc: Liming Gao <liming.gao@...>
Signed-off-by: Pankaj Bansal <pankaj.bansal@...>

When i ran script on this patch i received two errors:
1. Line ending ('\n') is not CRLF
2. The commit message format is not valid:
* Contributed-under! (Note: this must be removed by the code contributor!)

I have fixed the [2] but i have not fixed [1], as this file's line endings
are already unix like. Please suggest if i need to change these to windows

BaseTools/BinWrappers/PosixLike/build | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)

diff --git a/BaseTools/BinWrappers/PosixLike/build b/BaseTools/BinWrappers/PosixLike/build
index f3770eed42..f32796db5d 100755
--- a/BaseTools/BinWrappers/PosixLike/build
+++ b/BaseTools/BinWrappers/PosixLike/build
@@ -10,5 +10,23 @@ full_cmd=${BASH_SOURCE:-$0} # see;;sdata=qq%2FYPydngaQUjvinGG5I46VRT4EMXH3j4tcIntBCBGI%3D&amp;reserved=0 for a d dir=$(dirname "$full_cmd") cmd=${full_cmd##*/}

+ command -v git>/dev/null 2>&1
+ if [ $? -eq 0 ] && [ -n "$1" ]
+ then
+ head_or_tag=`git -C $1 describe --always 2>/dev/null`
+ printf $head_or_tag
+ git -C $1 diff-index --ignore-submodules --exit-code HEAD>/dev/null
+ if [ $? -eq 1 ]; then
+ printf '%s' -dirty
+ fi
+ else
+ printf "unknown"
+ fi
+export WORKSPACE_GIT_VERSION=$(git_version $WORKSPACE) export
export PYTHONPATH="$dir/../../Source/Python${PYTHONPATH:+:"$PYTHONPATH"}"
exec "${python_exe:-python}" "$dir/../../Source/Python/$cmd/$" "$@"

Join to automatically receive all group messages.