OSDN Git Service

android: Support: add genrule for VCSRevision.h header
authorMauro Rossi <issor.oruam@gmail.com>
Sat, 8 Sep 2018 16:32:44 +0000 (18:32 +0200)
committerMauro Rossi <issor.oruam@gmail.com>
Sun, 9 Sep 2018 06:47:29 +0000 (08:47 +0200)
Cmake build generates the header, in Android blueprint we need to add
a new "llvm-gen-revision" genrule to launch command script that will
generate "llvm/Support/VCSRevision.h" header.
For simplification the new genrule is added to "llvm-headers" library
which is already used to generate attributes and intrinsics headers.
Mesa python script git_sha1_gen.py is added to external/llvm top path,
with the only changes being the relative git_dir path at line 16 that
is changed from '..' to '.' and the content of generated header.

Android.bp
git_sha1_gen.py [new file with mode: 0644]

index 6c040d6..c448a26 100644 (file)
@@ -125,10 +125,12 @@ cc_library_headers {
     generated_headers: [
         "llvm-gen-attributes",
         "llvm-gen-intrinsics",
+        "llvm-gen-revision",
     ],
     export_generated_headers: [
         "llvm-gen-attributes",
         "llvm-gen-intrinsics",
+        "llvm-gen-revision",
     ],
     target: {
         windows: {
@@ -152,6 +154,14 @@ llvm_tblgen {
     ],
 }
 
+genrule {
+    name: "llvm-gen-revision",
+    out: ["llvm/Support/VCSRevision.h"],
+    srcs: [".git/logs/HEAD"],
+    tool_files: ["git_sha1_gen.py"],
+    cmd: "python $(location git_sha1_gen.py) --output $(out)",
+}
+
 force_build_llvm_components_defaults {
     name: "force_build_llvm_components",
     // Host build disabled by soong/llvm.go unless FORCE_BUILD_LLVM_COMPONENTS
diff --git a/git_sha1_gen.py b/git_sha1_gen.py
new file mode 100644 (file)
index 0000000..c097a2b
--- /dev/null
@@ -0,0 +1,50 @@
+"""
+Generate the contents of the git_sha1.h file.
+The output of this script goes to stdout.
+"""
+
+
+import argparse
+import os
+import os.path
+import subprocess
+import sys
+
+
+def get_git_sha1():
+    """Try to get the git SHA1 with git rev-parse."""
+    git_dir = os.path.join(os.path.dirname(sys.argv[0]), '.', '.git')
+    try:
+        git_sha1 = subprocess.check_output([
+            'git',
+            '--git-dir=' + git_dir,
+            'rev-parse',
+            'HEAD',
+        ], stderr=open(os.devnull, 'w')).decode("ascii")
+    except:
+        # don't print anything if it fails
+        git_sha1 = ''
+    return git_sha1
+
+def write_if_different(contents):
+    """
+    Avoid touching the output file if it doesn't need modifications
+    Useful to avoid triggering rebuilds when nothing has changed.
+    """
+    if os.path.isfile(args.output):
+        with open(args.output, 'r') as file:
+            if file.read() == contents:
+                return
+    with open(args.output, 'w') as file:
+        file.write(contents)
+
+parser = argparse.ArgumentParser()
+parser.add_argument('--output', help='File to write the #define in',
+                    required=True)
+args = parser.parse_args()
+
+git_sha1 = os.environ.get('LLVM_REVISION_OVERRIDE', get_git_sha1())[:7]
+if git_sha1:
+    write_if_different('#define LLVM_REVISION "git-' + git_sha1 + '"')
+else:
+    write_if_different('#define LLVM_REVISION ""')