blob: e581e74e9b01c7ae942299d513e7b1821ed89a10 [file]
#!/usr/bin/env python3
# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Automates running sysroot_creator.py for each supported arch."""
import concurrent.futures
import json
import os
import subprocess
import sys
import textwrap
import sysroot_creator
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
def build_and_upload(arch):
try:
sysroot_creator.build_sysroot(arch)
result = sysroot_creator.upload_sysroot(arch)
return (arch, True, result) # (architecture, success, result)
except Exception as e:
return (arch, False, str(e)) # (architecture, failure, error message)
def main():
with concurrent.futures.ThreadPoolExecutor() as executor:
# Map the function over the architectures
futures = [
executor.submit(build_and_upload, arch)
for arch in sysroot_creator.TRIPLES
]
failures = 0
results = {}
for future in concurrent.futures.as_completed(futures):
arch, success, result = future.result()
if not success:
failures += 1
name = (
f"{sysroot_creator.DISTRO}_{sysroot_creator.RELEASES[arch]}"
+ f"_{arch.lower()}-sysroot"
)
results[name] = (success, result)
globals = {"Str": lambda x: x, "Var": lambda x: x}
deps = open(os.path.join(SCRIPT_DIR, "..", "..", "..", "DEPS")).read()
exec(deps, globals)
updates = {}
print("SYSROOT CREATION SUMMARY")
for name, (success, result) in results.items():
status = "SUCCESS" if success else "FAILURE"
print(name, status, sep=":\t")
key = f"src/build/linux/{name}"
updates[key] = globals["deps"][key]
if success:
result = " ".join(result.splitlines()[1:])
updates[key]["objects"] = json.loads(result)["path"]["objects"]
print("Updating DEPS files")
for key, objects in updates.items():
obj = objects["objects"][0]
object_info = ','.join(
[
obj["object_name"],
obj["sha256sum"],
str(obj["size_bytes"]),
str(obj["generation"]),
]
)
print(f"Updating {key} in src/DEPS")
subprocess.call(["gclient", "setdep", "-r", f"{key}@{object_info}"])
prefix = 'src/build/'
substr_key = key[len(prefix) :]
print(f"Updating {substr_key} in src/build/DEPS")
subprocess.call(
[
"gclient",
"setdep",
"-r",
f"{substr_key}@{object_info}",
"--deps-file",
"build/DEPS",
]
)
if not failures:
key = (
sysroot_creator.ARCHIVE_TIMESTAMP
+ "-"
+ str(sysroot_creator.SYSROOT_RELEASE)
)
sysroot_gni = textwrap.dedent(f"""\
# Copyright 2024 The Chromium Authors
# Use of this source code is governed by a BSD-style license that
# can be found in the LICENSE file.
# This file was generated by
# build/linux/sysroot_scripts/build_and_upload.py
cr_sysroot_key = "{key}"
""")
fname = os.path.join(SCRIPT_DIR, "sysroot.gni")
with open(fname, "w") as f:
f.write(sysroot_gni)
return failures
if __name__ == "__main__":
sys.exit(main())