blob: 7def5c6e1026fac29436137ca036d2e04703d703 [file] [log] [blame]
Anuj Jamwal643bf5c2023-08-02 18:14:20 +00001# 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"""Build cros_workon package incrementally.
6
7Simple wrapper script to build a cros_workon package incrementally. You
8must already be cros_workon'ing the package in question. This had been
9migrated to python from chromiumos/src/scripts/cros_workon_make.
10"""
11
12import logging
13from typing import List, Optional
14
Anuj Jamwal6c138872023-08-03 02:21:26 +000015from chromite.third_party.opentelemetry import trace
16
Anuj Jamwal643bf5c2023-08-02 18:14:20 +000017from chromite.lib import build_target_lib
Anuj Jamwal6c138872023-08-03 02:21:26 +000018from chromite.lib import chromite_config
Anuj Jamwal643bf5c2023-08-02 18:14:20 +000019from chromite.lib import commandline
20from chromite.lib import cros_build_lib
21from chromite.lib import workon_helper
Anuj Jamwal6c138872023-08-03 02:21:26 +000022from chromite.utils import telemetry
23
24
25tracer = trace.get_tracer(__name__)
Anuj Jamwal643bf5c2023-08-02 18:14:20 +000026
27
28def GetParser() -> commandline.ArgumentParser:
29 """Get a CLI parser."""
30 parser = commandline.ArgumentParser(description=__doc__)
31 parser.add_argument(
32 "-b",
33 "--board",
34 "--build-target",
35 default=cros_build_lib.GetDefaultBoard(),
36 required=True,
37 help="The board to set package keywords for.",
38 )
39 parser.add_argument(
40 "--test",
41 default=False,
42 action="store_true",
43 help="Compile and run tests as well",
44 )
45 parser.add_argument(
46 "--reconf",
47 default=False,
48 action="store_true",
49 help="Re-run configure and prepare steps",
50 )
51 parser.add_argument(
52 "--install",
53 default=False,
54 action="store_true",
55 help="Incrementally build and install your package",
56 )
57 parser.add_argument(
58 "--scrub",
59 default=False,
60 action="store_true",
61 help="Blow away all in-tree files not managed by git",
62 )
63 parser.add_argument(
64 "package",
65 help="Package to build.",
66 )
67 return parser
68
69
70def main(argv: Optional[List[str]]) -> Optional[int]:
71 commandline.RunInsideChroot()
72
Anuj Jamwal6c138872023-08-03 02:21:26 +000073 chromite_config.initialize()
74 telemetry.initialize(chromite_config.TELEMETRY_CONFIG)
75 DoMain(argv)
76
77
78@tracer.start_as_current_span("scripts.cros_workon_make")
79def DoMain(argv: Optional[List[str]]) -> Optional[int]:
Anuj Jamwal643bf5c2023-08-02 18:14:20 +000080 parser = GetParser()
81 options = parser.parse_args(argv)
82 options.Freeze()
83
84 board = options.board
85 sysroot = build_target_lib.get_default_sysroot_path(board)
86 helper = workon_helper.WorkonHelper(sysroot, board)
87
88 pkg = options.package
Anuj Jamwal6c138872023-08-03 02:21:26 +000089 span = trace.get_current_span()
90 span.set_attribute("package", pkg)
Anuj Jamwal643bf5c2023-08-02 18:14:20 +000091
92 if options.scrub:
93 logging.warning("--scrub will destroy ALL FILES unknown to git!")
94 if cros_build_lib.BooleanPrompt():
95 helper.ScrubPackage(pkg)
96 else:
97 logging.info("Not scrubbing; exiting gracefully")
98 elif options.install:
99 helper.InstallPackage(pkg)
100 else:
101 helper.BuildPackage(
102 pkg,
103 clean=options.reconf,
104 test=options.test,
105 )