diff options
Diffstat (limited to 'deps/v8/build/linux/sysroot_scripts/build_and_upload.py')
-rwxr-xr-x | deps/v8/build/linux/sysroot_scripts/build_and_upload.py | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/deps/v8/build/linux/sysroot_scripts/build_and_upload.py b/deps/v8/build/linux/sysroot_scripts/build_and_upload.py new file mode 100755 index 0000000000..6a90fdcf2f --- /dev/null +++ b/deps/v8/build/linux/sysroot_scripts/build_and_upload.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Automates running BuildPackageLists, BuildSysroot, and +UploadSysroot for each supported arch of each sysroot creator. +""" + +import glob +import hashlib +import json +import multiprocessing +import os +import re +import string +import subprocess +import sys + + +def run_script(args): + fnull = open(os.devnull, 'w') + subprocess.check_call(args, stdout=fnull, stderr=fnull) + + +def sha1sumfile(filename): + sha1 = hashlib.sha1() + with open(filename, 'rb') as f: + while True: + data = f.read(65536) + if not data: + break + sha1.update(data) + return sha1.hexdigest() + + +def get_proc_output(args): + return subprocess.check_output(args).strip() + + +def build_and_upload(script_path, distro, release, arch, lock): + script_dir = os.path.dirname(os.path.realpath(__file__)) + + run_script([script_path, 'BuildSysroot' + arch]) + run_script([script_path, 'UploadSysroot' + arch]) + + tarball = '%s_%s_%s_sysroot.tar.xz' % (distro, release, arch.lower()) + tarxz_path = os.path.join(script_dir, "..", "..", "..", "out", + "sysroot-build", release, tarball) + sha1sum = sha1sumfile(tarxz_path) + sysroot_dir = '%s_%s_%s-sysroot' % (distro, release, arch.lower()) + + sysroot_metadata = { + 'Tarball': tarball, + 'Sha1Sum': sha1sum, + 'SysrootDir': sysroot_dir, + } + with lock: + with open(os.path.join(script_dir, 'sysroots.json'), 'rw+') as f: + sysroots = json.load(f) + sysroots["%s_%s" % (release, arch.lower())] = sysroot_metadata + f.seek(0) + f.truncate() + f.write( + json.dumps( + sysroots, sort_keys=True, indent=4, separators=(',', ': '))) + f.write('\n') + + +def main(): + script_dir = os.path.dirname(os.path.realpath(__file__)) + subprocess.check_call( + [os.path.join(script_dir, 'update-archive-timestamp.sh')]) + procs = [] + lock = multiprocessing.Lock() + for filename in glob.glob(os.path.join(script_dir, 'sysroot-creator-*.sh')): + script_path = os.path.join(script_dir, filename) + distro = get_proc_output([script_path, 'PrintDistro']) + release = get_proc_output([script_path, 'PrintRelease']) + architectures = get_proc_output([script_path, 'PrintArchitectures']) + for arch in architectures.split('\n'): + proc = multiprocessing.Process( + target=build_and_upload, + args=(script_path, distro, release, arch, lock)) + procs.append(("%s %s (%s)" % (distro, release, arch), proc)) + proc.start() + for _, proc in procs: + proc.join() + + print "SYSROOT CREATION SUMMARY" + failures = 0 + for name, proc in procs: + if proc.exitcode: + failures += 1 + status = "FAILURE" if proc.exitcode else "SUCCESS" + print "%s sysroot creation\t%s" % (name, status) + return failures + + +if __name__ == '__main__': + sys.exit(main()) |