| Index: build/linux/sysroot_scripts/build_and_upload.py
|
| diff --git a/build/linux/sysroot_scripts/build_and_upload.py b/build/linux/sysroot_scripts/build_and_upload.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..9865dc3590a99587543d87b0be907213fd641677
|
| --- /dev/null
|
| +++ b/build/linux/sysroot_scripts/build_and_upload.py
|
| @@ -0,0 +1,98 @@
|
| +#!/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):
|
| + # TODO(thomasanderson): Find out which revision 'git-cl upload' uses to
|
| + # calculate the diff against and use that instead of HEAD.
|
| + script_dir = os.path.dirname(os.path.realpath(__file__))
|
| + revision = get_proc_output(['git', '-C', script_dir, 'rev-parse', 'HEAD'])
|
| +
|
| + run_script([script_path, 'UpdatePackageLists%s' % arch])
|
| + run_script([script_path, 'BuildSysroot%s' % arch])
|
| + run_script([script_path, 'UploadSysroot%s' % arch, revision])
|
| +
|
| + tarball = '%s_%s_%s_sysroot.tgz' % (distro, release, arch.lower())
|
| + tgz_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),
|
| + "..", "..", "..", "out", "sysroot-build",
|
| + release, tarball)
|
| + sha1sum = sha1sumfile(tgz_path)
|
| + sysroot_dir = '%s_%s_%s-sysroot' % (distro, release, arch.lower())
|
| +
|
| + sysroot_metadata = {
|
| + 'Revision': revision,
|
| + 'Tarball': tarball,
|
| + 'Sha1Sum': sha1sum,
|
| + 'SysrootDir': sysroot_dir
|
| + }
|
| + with lock:
|
| + with open('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__))
|
| + 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())
|
|
|