blob: e09371f0d959ad33fa2f9f5e7509012ea7c3e372 [file] [log] [blame]
Mike Frysinger8654f912023-08-30 23:01:34 -04001# Copyright 2023 The ChromiumOS Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Update the SDK.
6
7Performs an update of the chroot. This script is called as part of
8build_packages, so there is typically no need to call this script directly.
9"""
10
11import argparse
12from typing import List, Optional
13
14from chromite.lib import commandline
15from chromite.service import sdk as sdk_service
16from chromite.service import sysroot
Mike Frysinger0be8b172023-09-12 14:47:17 -040017from chromite.utils import timer
Mike Frysinger8654f912023-08-30 23:01:34 -040018
19
20def get_parser() -> commandline.ArgumentParser:
21 """Build the argument parser."""
22 # TODO(vapier): Remove underscore separated arguments and the deprecated
23 # message after Jun 2024.
24 deprecated = "Argument will be removed Jun 2024. Use %s instead."
25
26 parser = commandline.ArgumentParser(description=__doc__)
27
28 parser.add_bool_argument(
29 "--usepkg",
30 True,
31 "Use binary packages to bootstrap.",
32 "Do not use binary packages to bootstrap.",
33 )
34 parser.add_argument(
35 "--nousepkg",
36 dest="usepkg",
37 action="store_false",
38 deprecated=deprecated % "--no-usepkg",
39 help=argparse.SUPPRESS,
40 )
41
42 # Not really a common argument, but argument_group doesn't have our custom
43 # bool extension yet.
44 parser.add_bool_argument(
45 "--eclean",
46 True,
47 "Clean out old SDK binpkgs.",
48 "Do not clean out SDK binpkgs.",
49 )
50 parser.add_argument(
51 "--noeclean",
52 dest="eclean",
53 action="store_false",
54 deprecated=deprecated % "--no-eclean",
55 help=argparse.SUPPRESS,
56 )
57
58 group = parser.add_argument_group("Advanced Build Modification Options")
59 group.add_argument(
60 "--jobs",
61 type=int,
62 help="Maximum number of packages to build in parallel.",
63 )
64 group.add_argument(
65 "--skip-toolchain-update",
66 dest="update_toolchain",
Mike Frysingerb938d112023-09-07 14:24:28 -040067 action="store_false",
68 default=True,
Mike Frysinger8654f912023-08-30 23:01:34 -040069 help="Don't update toolchain automatically.",
70 )
71 group.add_argument(
72 "--skip_toolchain_update",
73 dest="update_toolchain",
Mike Frysingerb938d112023-09-07 14:24:28 -040074 action="store_false",
75 default=True,
Mike Frysinger8654f912023-08-30 23:01:34 -040076 deprecated=deprecated % "--skip-toolchain-update",
77 help=argparse.SUPPRESS,
78 )
79 group.add_argument(
80 "--toolchain-boards",
Po-Hsien Wang58e19182023-09-11 14:55:08 -070081 nargs="+",
Mike Frysinger8654f912023-08-30 23:01:34 -040082 help="Extra toolchains to setup for the specified boards.",
83 )
84 group.add_argument(
85 "--toolchain_boards",
86 deprecated=deprecated % "--toolchain-boards",
87 help=argparse.SUPPRESS,
88 )
89 group.add_argument(
90 "--backtrack",
91 type=int,
92 default=sysroot.BACKTRACK_DEFAULT,
93 help="See emerge --backtrack.",
94 )
95
96 return parser
97
98
Mike Frysinger0be8b172023-09-12 14:47:17 -040099@timer.timed("Elapsed time (update_chroot)")
Mike Frysinger8654f912023-08-30 23:01:34 -0400100def main(argv: Optional[List[str]] = None) -> Optional[int]:
101 commandline.RunInsideChroot()
102
103 parser = get_parser()
104 opts = parser.parse_args(argv)
105 opts.Freeze()
106
107 update_args = sdk_service.UpdateArguments(
108 build_source=not opts.usepkg,
109 toolchain_targets=opts.toolchain_boards,
110 jobs=opts.jobs,
111 backtrack=opts.backtrack,
112 update_toolchain=opts.update_toolchain,
113 eclean=opts.eclean,
114 )
115 result = sdk_service.Update(update_args)
116 return result.return_code