xref: /aosp_15_r20/external/angle/build/android/gyp/aidl.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*8975f5c5SAndroid Build Coastguard Worker#
3*8975f5c5SAndroid Build Coastguard Worker# Copyright 2014 The Chromium Authors
4*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
5*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
6*8975f5c5SAndroid Build Coastguard Worker
7*8975f5c5SAndroid Build Coastguard Worker"""Invokes Android's aidl
8*8975f5c5SAndroid Build Coastguard Worker"""
9*8975f5c5SAndroid Build Coastguard Worker
10*8975f5c5SAndroid Build Coastguard Workerimport optparse
11*8975f5c5SAndroid Build Coastguard Workerimport os
12*8975f5c5SAndroid Build Coastguard Workerimport re
13*8975f5c5SAndroid Build Coastguard Workerimport sys
14*8975f5c5SAndroid Build Coastguard Workerimport zipfile
15*8975f5c5SAndroid Build Coastguard Worker
16*8975f5c5SAndroid Build Coastguard Workerfrom util import build_utils
17*8975f5c5SAndroid Build Coastguard Workerimport action_helpers  # build_utils adds //build to sys.path.
18*8975f5c5SAndroid Build Coastguard Workerimport zip_helpers
19*8975f5c5SAndroid Build Coastguard Worker
20*8975f5c5SAndroid Build Coastguard Worker
21*8975f5c5SAndroid Build Coastguard Workerdef main(argv):
22*8975f5c5SAndroid Build Coastguard Worker  option_parser = optparse.OptionParser()
23*8975f5c5SAndroid Build Coastguard Worker  option_parser.add_option('--aidl-path', help='Path to the aidl binary.')
24*8975f5c5SAndroid Build Coastguard Worker  option_parser.add_option('--imports', help='Files to import.')
25*8975f5c5SAndroid Build Coastguard Worker  option_parser.add_option('--includes',
26*8975f5c5SAndroid Build Coastguard Worker                           help='Directories to add as import search paths.')
27*8975f5c5SAndroid Build Coastguard Worker  option_parser.add_option('--srcjar', help='Path for srcjar output.')
28*8975f5c5SAndroid Build Coastguard Worker  action_helpers.add_depfile_arg(option_parser)
29*8975f5c5SAndroid Build Coastguard Worker  options, args = option_parser.parse_args(argv[1:])
30*8975f5c5SAndroid Build Coastguard Worker
31*8975f5c5SAndroid Build Coastguard Worker  options.includes = action_helpers.parse_gn_list(options.includes)
32*8975f5c5SAndroid Build Coastguard Worker
33*8975f5c5SAndroid Build Coastguard Worker  with build_utils.TempDir() as temp_dir:
34*8975f5c5SAndroid Build Coastguard Worker    for f in args:
35*8975f5c5SAndroid Build Coastguard Worker      classname = os.path.splitext(os.path.basename(f))[0]
36*8975f5c5SAndroid Build Coastguard Worker      output = os.path.join(temp_dir, classname + '.java')
37*8975f5c5SAndroid Build Coastguard Worker      aidl_cmd = [options.aidl_path]
38*8975f5c5SAndroid Build Coastguard Worker      aidl_cmd += [
39*8975f5c5SAndroid Build Coastguard Worker          '-p' + s for s in action_helpers.parse_gn_list(options.imports)
40*8975f5c5SAndroid Build Coastguard Worker      ]
41*8975f5c5SAndroid Build Coastguard Worker      aidl_cmd += ['-I' + s for s in options.includes]
42*8975f5c5SAndroid Build Coastguard Worker      aidl_cmd += [
43*8975f5c5SAndroid Build Coastguard Worker        f,
44*8975f5c5SAndroid Build Coastguard Worker        output
45*8975f5c5SAndroid Build Coastguard Worker      ]
46*8975f5c5SAndroid Build Coastguard Worker      build_utils.CheckOutput(aidl_cmd)
47*8975f5c5SAndroid Build Coastguard Worker
48*8975f5c5SAndroid Build Coastguard Worker    with action_helpers.atomic_output(options.srcjar) as f:
49*8975f5c5SAndroid Build Coastguard Worker      with zipfile.ZipFile(f, 'w') as srcjar:
50*8975f5c5SAndroid Build Coastguard Worker        for path in build_utils.FindInDirectory(temp_dir, '*.java'):
51*8975f5c5SAndroid Build Coastguard Worker          with open(path) as fileobj:
52*8975f5c5SAndroid Build Coastguard Worker            data = fileobj.read()
53*8975f5c5SAndroid Build Coastguard Worker          pkg_name = re.search(r'^\s*package\s+(.*?)\s*;', data, re.M).group(1)
54*8975f5c5SAndroid Build Coastguard Worker          arcname = '%s/%s' % (
55*8975f5c5SAndroid Build Coastguard Worker              pkg_name.replace('.', '/'), os.path.basename(path))
56*8975f5c5SAndroid Build Coastguard Worker          zip_helpers.add_to_zip_hermetic(srcjar, arcname, data=data)
57*8975f5c5SAndroid Build Coastguard Worker
58*8975f5c5SAndroid Build Coastguard Worker  if options.depfile:
59*8975f5c5SAndroid Build Coastguard Worker    include_files = []
60*8975f5c5SAndroid Build Coastguard Worker    for include_dir in options.includes:
61*8975f5c5SAndroid Build Coastguard Worker      include_files += build_utils.FindInDirectory(include_dir, '*.java')
62*8975f5c5SAndroid Build Coastguard Worker    action_helpers.write_depfile(options.depfile, options.srcjar, include_files)
63*8975f5c5SAndroid Build Coastguard Worker
64*8975f5c5SAndroid Build Coastguard Worker
65*8975f5c5SAndroid Build Coastguard Workerif __name__ == '__main__':
66*8975f5c5SAndroid Build Coastguard Worker  sys.exit(main(sys.argv))
67