blob: 29b6e2b75eb41796a32fbf0954380db081bdb29c [file] [log] [blame]
Ram Chandrasekar28b578f2021-11-15 18:33:18 +00001# Copyright 2021 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Strip packages and place them in <sysroot>/stripped-packages."""
6
7import os
8import sys
9from typing import List
10
11from chromite.lib import build_target_lib
12from chromite.lib import commandline
13from chromite.lib import constants
14from chromite.lib import cros_build_lib
15from chromite.lib import osutils
16
Mike Frysinger807d8282022-04-28 22:45:17 -040017
Ram Chandrasekar28b578f2021-11-15 18:33:18 +000018# The builder module lives in the devserver path.
19sys.path.append('/usr/lib/devserver/')
20import builder
21
Mike Frysinger807d8282022-04-28 22:45:17 -040022
Ram Chandrasekar28b578f2021-11-15 18:33:18 +000023_DEFAULT_MASK = 'DEFAULT_INSTALL_MASK'
24
25def create_parser() -> commandline.ArgumentParser:
26 """Creates the cmdline argparser, populates the options and description."""
27 parser = commandline.ArgumentParser(description=__doc__)
28
29 group = parser.add_mutually_exclusive_group(required=True)
30 group.add_argument('--board',
31 default=cros_build_lib.GetDefaultBoard(),
32 help='The board that processed packages belong to.')
33 group.add_argument('--sysroot',
34 type='path',
35 help='Sysroot that processed packages belong to. '
36 'This is incompatible with --board.')
37
38 parser.add_argument('--deep',
39 action='store_true',
40 default=False,
41 help='Also strip dependencies of packages.')
42 parser.add_argument('packages',
43 nargs='+',
44 metavar='package',
45 help='Packages to strip.')
46 return parser
47
48
49def populate_install_mask() -> bool:
50 """Extract the default install mask and populate the local environment."""
51 env_var_value = osutils.SourceEnvironment(
52 os.path.join(constants.CROSUTILS_DIR, 'common.sh'),
53 [_DEFAULT_MASK],
54 multiline=True)
55
56 if _DEFAULT_MASK not in env_var_value:
57 return False
58 os.environ[_DEFAULT_MASK] = env_var_value[_DEFAULT_MASK]
59 return True
60
61
62def main(argv: List[str]) -> int:
63 """Main function."""
64 cros_build_lib.AssertInsideChroot()
65 parser = create_parser()
66 options = parser.parse_args(argv)
67 options.Freeze()
68
69 if options.sysroot is not None:
70 sysroot = options.sysroot
71 else:
72 sysroot = build_target_lib.get_default_sysroot_path(options.board)
73
74 if not populate_install_mask():
75 return False
76 if not builder.UpdateGmergeBinhost(sysroot, options.packages, options.deep):
77 return 1
78 return 0