Output Swiftshader version to logcat

This change allows for outputting the SwiftShader version to Android's
logcat. The version information is as follows:

major.minor.patch.commit_hash

In logcat, when SwiftShader is loaded by ANGLE, this looks like:

11-07 12:17:10.152  9110  9110 I SwiftShader: SwiftShader Version: 5.0.0.9c7bf8093a75
11-07 12:17:10.162  9110  9110 I ANGLE   : Version (2.1.0.a2b1a958e2d8), Renderer (Vulkan 1.1.0(SwiftShader Device (0x0000C0DE)))

This allows developers to verify that they are running the expecting
build of SwiftShader when debugging problems or running conformance
tests.

The version information is logged to logcat when the build flag
"ENABLE_BUILD_VERSION_OUTPUT" is enabled within src/Android.bp.

Bug: b/142828252
Change-Id: Iff773b16a2f3532aa843629ec50519b519bbadac
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/37990
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Tested-by: Tim Van Patten <timvp@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/commit_id.py b/src/commit_id.py
new file mode 100755
index 0000000..ddd2f16
--- /dev/null
+++ b/src/commit_id.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+# Copyright 2019 The SwiftShader Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Generate commit.h with git commit hash.
+#
+
+import subprocess as sp
+import sys
+import os
+
+usage = """\
+Usage: commit_id.py check                 - check if git is present
+       commit_id.py gen <file_to_write>   - generate commit.h"""
+
+
+def grab_output(command, cwd):
+    return sp.Popen(command, stdout=sp.PIPE, shell=True, cwd=cwd).communicate()[0].strip()
+
+
+if len(sys.argv) < 2:
+    sys.exit(usage)
+
+operation = sys.argv[1]
+cwd = sys.path[0]
+
+if operation == 'check':
+    index_path = os.path.join(cwd, '.git', 'index')
+    if os.path.exists(index_path):
+        print("1")
+    else:
+        print("0")
+    sys.exit(0)
+
+if len(sys.argv) < 3 or operation != 'gen':
+    sys.exit(usage)
+
+output_file = sys.argv[2]
+commit_id_size = 12
+
+commit_id = 'invalid-hash'
+commit_date = 'invalid-date'
+
+try:
+    commit_id = grab_output('git rev-parse --short=%d HEAD' % commit_id_size, cwd)
+    commit_date = grab_output('git show -s --format=%ci HEAD', cwd)
+except:
+    pass
+
+hfile = open(output_file, 'w')
+
+hfile.write('#define SWIFTSHADER_COMMIT_HASH "%s"\n' % commit_id)
+hfile.write('#define SWIFTSHADER_COMMIT_HASH_SIZE %d\n' % commit_id_size)
+hfile.write('#define SWIFTSHADER_COMMIT_DATE "%s"\n' % commit_date)
+hfile.write('#define SWIFTSHADER_VERSION_STRING    \\\n'
+            'MACRO_STRINGIFY(MAJOR_VERSION) \".\"  \\\n'
+            'MACRO_STRINGIFY(MINOR_VERSION) \".\"  \\\n'
+            'MACRO_STRINGIFY(PATCH_VERSION) \".\"  \\\n'
+            'SWIFTSHADER_COMMIT_HASH\n')
+
+hfile.close()