[sdk_build_id] Fix hermeticity
... by writing debug files read to a depfile
Change-Id: I9b78dec740b421f20f352ffcf77eba32aba7876d
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/514448
Reviewed-by: Shai Barack <shayba@google.com>
Commit-Queue: Jay Zhuang <jayzhuang@google.com>
diff --git a/build/zircon/sdk_build_id.py b/build/zircon/sdk_build_id.py
index b797bbb..772f4db 100755
--- a/build/zircon/sdk_build_id.py
+++ b/build/zircon/sdk_build_id.py
@@ -28,16 +28,34 @@
def main():
parser = argparse.ArgumentParser()
- parser.add_argument('--input', help='Input JSON file', required=True)
- parser.add_argument('--output', help='Output JSON file', required=True)
parser.add_argument(
- '--manifest', help='Output manifest file', required=True)
+ '--input',
+ type=argparse.FileType('r'),
+ help='Input JSON file',
+ required=True,
+ )
+ parser.add_argument(
+ '--output',
+ type=argparse.FileType('w'),
+ help='Output JSON file',
+ required=True,
+ )
+ parser.add_argument(
+ '--manifest',
+ type=argparse.FileType('w'),
+ help='Output manifest file',
+ required=True,
+ )
+ parser.add_argument(
+ '--depfile',
+ type=argparse.FileType('w'),
+ required=True,
+ )
parser.add_argument('--location', help='JSON pointer', required=True)
args = parser.parse_args()
# Read in the original JSON tree.
- with open(args.input) as f:
- data = json.load(f)
+ data = json.load(args.input)
# Poor man's JSON pointer: /foo/bar/baz looks up in dicts.
ptr = args.location.split('/')
@@ -56,13 +74,21 @@
# Write out the manifest collected while rewriting original debug files
# names to .build-id/... names for publication.
- with open(args.manifest, 'w') as f:
- for dest, source in manifest.items():
- f.write('%s=%s\n' % (dest, source))
+ #
+ # Original debug files are read during the rewrite above, so include them in
+ # a depfile.
+ mappings = []
+ deps = []
+ for dest, source in manifest.items():
+ mappings.append(f'{dest}={source}')
+ deps.append(source)
+ args.manifest.write('\n'.join(mappings))
+ args.depfile.write(
+ '{} {}: {}\n'.format(
+ args.manifest.name, args.output.name, ' '.join(deps)))
# Write out the modified JSON tree.
- with open(args.output, 'w') as f:
- json.dump(data, f, indent=2, sort_keys=True)
+ json.dump(data, args.output, indent=2, sort_keys=True)
return 0
diff --git a/zircon/public/sysroot/sdk/BUILD.gn b/zircon/public/sysroot/sdk/BUILD.gn
index 18922f3..e167ef3 100644
--- a/zircon/public/sysroot/sdk/BUILD.gn
+++ b/zircon/public/sysroot/sdk/BUILD.gn
@@ -115,7 +115,6 @@
action("sysroot-meta") {
visibility = [ ":*" ]
- hermetic_deps = false
script = "//build/zircon/sdk_build_id.py"
sources = [ sysroot_meta_json_file ]
inputs = [
@@ -126,10 +125,12 @@
"$target_out_dir/sysroot.meta.out.json",
"$target_out_dir/sysroot.debug.manifest",
]
+ depfile = "$target_out_dir/sysroot-meta.d"
args = [
"--input=" + rebase_path(sources[0], root_build_dir),
"--output=" + rebase_path(outputs[0], root_build_dir),
"--manifest=" + rebase_path(outputs[1], root_build_dir),
+ "--depfile=" + rebase_path(depfile, root_build_dir),
"--location=/versions/$target_cpu/debug_libs",
]
deps = [ ":sysroot-meta-json" ] + sysroot_sdk_deps