xref: /aosp_15_r20/external/perfetto/tools/protoc_helper.py (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2018 The Android Open Source Project
2*6dbdd20aSAndroid Build Coastguard Worker#
3*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*6dbdd20aSAndroid Build Coastguard Worker#
7*6dbdd20aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*6dbdd20aSAndroid Build Coastguard Worker#
9*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License.
14*6dbdd20aSAndroid Build Coastguard Worker
15*6dbdd20aSAndroid Build Coastguard Workerimport argparse
16*6dbdd20aSAndroid Build Coastguard Workerimport os
17*6dbdd20aSAndroid Build Coastguard Workerimport subprocess
18*6dbdd20aSAndroid Build Coastguard Workerimport sys
19*6dbdd20aSAndroid Build Coastguard Worker
20*6dbdd20aSAndroid Build Coastguard WorkerROOT_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
21*6dbdd20aSAndroid Build Coastguard Worker
22*6dbdd20aSAndroid Build Coastguard Worker
23*6dbdd20aSAndroid Build Coastguard Workerdef main():
24*6dbdd20aSAndroid Build Coastguard Worker  parser = argparse.ArgumentParser()
25*6dbdd20aSAndroid Build Coastguard Worker  parser.add_argument(
26*6dbdd20aSAndroid Build Coastguard Worker      'encode_or_decode',
27*6dbdd20aSAndroid Build Coastguard Worker      choices=['encode', 'decode'],
28*6dbdd20aSAndroid Build Coastguard Worker      help='encode into binary format or decode to text.')
29*6dbdd20aSAndroid Build Coastguard Worker  parser.add_argument(
30*6dbdd20aSAndroid Build Coastguard Worker      '--proto_name',
31*6dbdd20aSAndroid Build Coastguard Worker      default='TraceConfig',
32*6dbdd20aSAndroid Build Coastguard Worker      help='name of proto to encode/decode (default: TraceConfig).')
33*6dbdd20aSAndroid Build Coastguard Worker  parser.add_argument(
34*6dbdd20aSAndroid Build Coastguard Worker      '--protoc', default='protoc', help='Path to the protoc executable')
35*6dbdd20aSAndroid Build Coastguard Worker  parser.add_argument(
36*6dbdd20aSAndroid Build Coastguard Worker      '--input',
37*6dbdd20aSAndroid Build Coastguard Worker      default='-',
38*6dbdd20aSAndroid Build Coastguard Worker      help='input file, or "-" for stdin (default: "-")')
39*6dbdd20aSAndroid Build Coastguard Worker  parser.add_argument(
40*6dbdd20aSAndroid Build Coastguard Worker      '--output',
41*6dbdd20aSAndroid Build Coastguard Worker      default='-',
42*6dbdd20aSAndroid Build Coastguard Worker      help='output file, or "-" for stdout (default: "-")')
43*6dbdd20aSAndroid Build Coastguard Worker  args = parser.parse_args()
44*6dbdd20aSAndroid Build Coastguard Worker
45*6dbdd20aSAndroid Build Coastguard Worker  cmd = [
46*6dbdd20aSAndroid Build Coastguard Worker      args.protoc,
47*6dbdd20aSAndroid Build Coastguard Worker      '--%s=perfetto.protos.%s' % (args.encode_or_decode, args.proto_name),
48*6dbdd20aSAndroid Build Coastguard Worker      '--proto_path=%s' % ROOT_DIR,
49*6dbdd20aSAndroid Build Coastguard Worker      os.path.join(ROOT_DIR, 'protos/perfetto/config/trace_config.proto'),
50*6dbdd20aSAndroid Build Coastguard Worker      os.path.join(ROOT_DIR, 'protos/perfetto/trace/trace.proto'),
51*6dbdd20aSAndroid Build Coastguard Worker  ]
52*6dbdd20aSAndroid Build Coastguard Worker  in_file = sys.stdin if args.input == '-' else open(args.input, 'rb')
53*6dbdd20aSAndroid Build Coastguard Worker  out_file = sys.stdout if args.output == '-' else open(args.output, 'wb')
54*6dbdd20aSAndroid Build Coastguard Worker  subprocess.check_call(cmd, stdin=in_file, stdout=out_file, stderr=sys.stderr)
55*6dbdd20aSAndroid Build Coastguard Worker  return 0
56*6dbdd20aSAndroid Build Coastguard Worker
57*6dbdd20aSAndroid Build Coastguard Worker
58*6dbdd20aSAndroid Build Coastguard Workerif __name__ == '__main__':
59*6dbdd20aSAndroid Build Coastguard Worker  sys.exit(main())
60