xref: /aosp_15_r20/external/angle/build/android/gyp/create_bundle_wrapper_script.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1#!/usr/bin/env python3
2# Copyright 2018 The Chromium Authors
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Create a wrapper script to manage an Android App Bundle."""
7
8import argparse
9import os
10import string
11import sys
12
13from util import build_utils
14import action_helpers  # build_utils adds //build to sys.path.
15
16SCRIPT_TEMPLATE = string.Template("""\
17#!/usr/bin/env python3
18#
19# This file was generated by build/android/gyp/create_bundle_wrapper_script.py
20
21import os
22import sys
23
24def main():
25  script_directory = os.path.dirname(__file__)
26  resolve = lambda p: p if p is None else os.path.abspath(os.path.join(
27      script_directory, p))
28  sys.path.append(resolve(${WRAPPED_SCRIPT_DIR}))
29  import apk_operations
30
31  additional_apk_paths = [resolve(p) for p in ${ADDITIONAL_APK_PATHS}]
32  apk_operations.RunForBundle(output_directory=resolve(${OUTPUT_DIR}),
33                              bundle_path=resolve(${BUNDLE_PATH}),
34                              bundle_apks_path=resolve(${BUNDLE_APKS_PATH}),
35                              additional_apk_paths=additional_apk_paths,
36                              aapt2_path=resolve(${AAPT2_PATH}),
37                              keystore_path=resolve(${KEYSTORE_PATH}),
38                              keystore_password=${KEYSTORE_PASSWORD},
39                              keystore_alias=${KEY_NAME},
40                              package_name=${PACKAGE_NAME},
41                              command_line_flags_file=${FLAGS_FILE},
42                              proguard_mapping_path=resolve(${MAPPING_PATH}),
43                              target_cpu=${TARGET_CPU},
44                              system_image_locales=${SYSTEM_IMAGE_LOCALES},
45                              default_modules=${DEFAULT_MODULES},
46                              is_official_build=${IS_OFFICIAL_BUILD})
47
48if __name__ == '__main__':
49  sys.exit(main())
50""")
51
52def main(args):
53  args = build_utils.ExpandFileArgs(args)
54  parser = argparse.ArgumentParser()
55  parser.add_argument('--script-output-path', required=True,
56                      help='Output path for executable script.')
57  parser.add_argument('--bundle-path', required=True)
58  parser.add_argument('--bundle-apks-path', required=True)
59  parser.add_argument(
60      '--additional-apk-path',
61      action='append',
62      dest='additional_apk_paths',
63      default=[],
64      help='Paths to APKs to be installed prior to --apk-path.')
65  parser.add_argument('--package-name', required=True)
66  parser.add_argument('--aapt2-path', required=True)
67  parser.add_argument('--keystore-path', required=True)
68  parser.add_argument('--keystore-password', required=True)
69  parser.add_argument('--key-name', required=True)
70  parser.add_argument('--command-line-flags-file')
71  parser.add_argument('--proguard-mapping-path')
72  parser.add_argument('--target-cpu')
73  parser.add_argument('--system-image-locales')
74  parser.add_argument('--default-modules', nargs='*', default=[])
75  parser.add_argument('--is-official-build', action='store_true')
76  args = parser.parse_args(args)
77
78  def relativize(path):
79    """Returns the path relative to the output script directory."""
80    if path is None:
81      return path
82    return os.path.relpath(path, os.path.dirname(args.script_output_path))
83
84  wrapped_script_dir = os.path.join(os.path.dirname(__file__), os.path.pardir)
85  wrapped_script_dir = relativize(wrapped_script_dir)
86  with open(args.script_output_path, 'w') as script:
87    script_dict = {
88        'WRAPPED_SCRIPT_DIR':
89        repr(wrapped_script_dir),
90        'OUTPUT_DIR':
91        repr(relativize('.')),
92        'BUNDLE_PATH':
93        repr(relativize(args.bundle_path)),
94        'BUNDLE_APKS_PATH':
95        repr(relativize(args.bundle_apks_path)),
96        'ADDITIONAL_APK_PATHS':
97        [relativize(p) for p in args.additional_apk_paths],
98        'PACKAGE_NAME':
99        repr(args.package_name),
100        'AAPT2_PATH':
101        repr(relativize(args.aapt2_path)),
102        'KEYSTORE_PATH':
103        repr(relativize(args.keystore_path)),
104        'KEYSTORE_PASSWORD':
105        repr(args.keystore_password),
106        'KEY_NAME':
107        repr(args.key_name),
108        'MAPPING_PATH':
109        repr(relativize(args.proguard_mapping_path)),
110        'FLAGS_FILE':
111        repr(args.command_line_flags_file),
112        'TARGET_CPU':
113        repr(args.target_cpu),
114        'SYSTEM_IMAGE_LOCALES':
115        repr(action_helpers.parse_gn_list(args.system_image_locales)),
116        'DEFAULT_MODULES':
117        repr(args.default_modules),
118        'IS_OFFICIAL_BUILD':
119        repr(args.is_official_build),
120    }
121    script.write(SCRIPT_TEMPLATE.substitute(script_dict))
122  os.chmod(args.script_output_path, 0o750)
123  return 0
124
125
126if __name__ == '__main__':
127  sys.exit(main(sys.argv[1:]))
128