blob: e09371f0d959ad33fa2f9f5e7509012ea7c3e372 [file] [log] [blame]
# Copyright 2023 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Update the SDK.
Performs an update of the chroot. This script is called as part of
build_packages, so there is typically no need to call this script directly.
"""
import argparse
from typing import List, Optional
from chromite.lib import commandline
from chromite.service import sdk as sdk_service
from chromite.service import sysroot
from chromite.utils import timer
def get_parser() -> commandline.ArgumentParser:
"""Build the argument parser."""
# TODO(vapier): Remove underscore separated arguments and the deprecated
# message after Jun 2024.
deprecated = "Argument will be removed Jun 2024. Use %s instead."
parser = commandline.ArgumentParser(description=__doc__)
parser.add_bool_argument(
"--usepkg",
True,
"Use binary packages to bootstrap.",
"Do not use binary packages to bootstrap.",
)
parser.add_argument(
"--nousepkg",
dest="usepkg",
action="store_false",
deprecated=deprecated % "--no-usepkg",
help=argparse.SUPPRESS,
)
# Not really a common argument, but argument_group doesn't have our custom
# bool extension yet.
parser.add_bool_argument(
"--eclean",
True,
"Clean out old SDK binpkgs.",
"Do not clean out SDK binpkgs.",
)
parser.add_argument(
"--noeclean",
dest="eclean",
action="store_false",
deprecated=deprecated % "--no-eclean",
help=argparse.SUPPRESS,
)
group = parser.add_argument_group("Advanced Build Modification Options")
group.add_argument(
"--jobs",
type=int,
help="Maximum number of packages to build in parallel.",
)
group.add_argument(
"--skip-toolchain-update",
dest="update_toolchain",
action="store_false",
default=True,
help="Don't update toolchain automatically.",
)
group.add_argument(
"--skip_toolchain_update",
dest="update_toolchain",
action="store_false",
default=True,
deprecated=deprecated % "--skip-toolchain-update",
help=argparse.SUPPRESS,
)
group.add_argument(
"--toolchain-boards",
nargs="+",
help="Extra toolchains to setup for the specified boards.",
)
group.add_argument(
"--toolchain_boards",
deprecated=deprecated % "--toolchain-boards",
help=argparse.SUPPRESS,
)
group.add_argument(
"--backtrack",
type=int,
default=sysroot.BACKTRACK_DEFAULT,
help="See emerge --backtrack.",
)
return parser
@timer.timed("Elapsed time (update_chroot)")
def main(argv: Optional[List[str]] = None) -> Optional[int]:
commandline.RunInsideChroot()
parser = get_parser()
opts = parser.parse_args(argv)
opts.Freeze()
update_args = sdk_service.UpdateArguments(
build_source=not opts.usepkg,
toolchain_targets=opts.toolchain_boards,
jobs=opts.jobs,
backtrack=opts.backtrack,
update_toolchain=opts.update_toolchain,
eclean=opts.eclean,
)
result = sdk_service.Update(update_args)
return result.return_code