blob: a16cf78ccced478bde590c1657b4844e84b535b3 [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.
Mike Frysingere9f3a672022-05-25 12:53:50 -040019# pylint: disable=import-error,wrong-import-position
Ram Chandrasekar28b578f2021-11-15 18:33:18 +000020sys.path.append('/usr/lib/devserver/')
21import builder
22
Mike Frysinger807d8282022-04-28 22:45:17 -040023
Ram Chandrasekar28b578f2021-11-15 18:33:18 +000024_DEFAULT_MASK = 'DEFAULT_INSTALL_MASK'
25
26def create_parser() -> commandline.ArgumentParser:
27 """Creates the cmdline argparser, populates the options and description."""
28 parser = commandline.ArgumentParser(description=__doc__)
29
30 group = parser.add_mutually_exclusive_group(required=True)
31 group.add_argument('--board',
32 default=cros_build_lib.GetDefaultBoard(),
33 help='The board that processed packages belong to.')
34 group.add_argument('--sysroot',
35 type='path',
36 help='Sysroot that processed packages belong to. '
37 'This is incompatible with --board.')
38
39 parser.add_argument('--deep',
40 action='store_true',
41 default=False,
42 help='Also strip dependencies of packages.')
43 parser.add_argument('packages',
44 nargs='+',
45 metavar='package',
46 help='Packages to strip.')
47 return parser
48
49
50def populate_install_mask() -> bool:
51 """Extract the default install mask and populate the local environment."""
52 env_var_value = osutils.SourceEnvironment(
53 os.path.join(constants.CROSUTILS_DIR, 'common.sh'),
54 [_DEFAULT_MASK],
55 multiline=True)
56
57 if _DEFAULT_MASK not in env_var_value:
58 return False
59 os.environ[_DEFAULT_MASK] = env_var_value[_DEFAULT_MASK]
60 return True
61
62
63def main(argv: List[str]) -> int:
64 """Main function."""
65 cros_build_lib.AssertInsideChroot()
66 parser = create_parser()
67 options = parser.parse_args(argv)
68 options.Freeze()
69
70 if options.sysroot is not None:
71 sysroot = options.sysroot
72 else:
73 sysroot = build_target_lib.get_default_sysroot_path(options.board)
74
75 if not populate_install_mask():
76 return False
77 if not builder.UpdateGmergeBinhost(sysroot, options.packages, options.deep):
78 return 1
79 return 0