xref: /aosp_15_r20/external/perfetto/tools/gen_all (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2018 The Android Open Source Project
3*6dbdd20aSAndroid Build Coastguard Worker#
4*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*6dbdd20aSAndroid Build Coastguard Worker#
8*6dbdd20aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
9*6dbdd20aSAndroid Build Coastguard Worker#
10*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License.
15*6dbdd20aSAndroid Build Coastguard Worker
16*6dbdd20aSAndroid Build Coastguard Workerfrom __future__ import print_function
17*6dbdd20aSAndroid Build Coastguard Worker
18*6dbdd20aSAndroid Build Coastguard Workerimport os
19*6dbdd20aSAndroid Build Coastguard Workerimport argparse
20*6dbdd20aSAndroid Build Coastguard Workerimport subprocess
21*6dbdd20aSAndroid Build Coastguard Workerimport sys
22*6dbdd20aSAndroid Build Coastguard Worker
23*6dbdd20aSAndroid Build Coastguard WorkerROOT_DIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
24*6dbdd20aSAndroid Build Coastguard WorkerIS_WIN = sys.platform.startswith('win')
25*6dbdd20aSAndroid Build Coastguard Worker
26*6dbdd20aSAndroid Build Coastguard Worker
27*6dbdd20aSAndroid Build Coastguard Workerdef protoc_path(out_directory):
28*6dbdd20aSAndroid Build Coastguard Worker  path = os.path.join(out_directory, 'protoc') + ('.exe' if IS_WIN else '')
29*6dbdd20aSAndroid Build Coastguard Worker  assert os.path.isfile(path)
30*6dbdd20aSAndroid Build Coastguard Worker  return path
31*6dbdd20aSAndroid Build Coastguard Worker
32*6dbdd20aSAndroid Build Coastguard Worker
33*6dbdd20aSAndroid Build Coastguard Workerdef call(cmd, *args):
34*6dbdd20aSAndroid Build Coastguard Worker  path = os.path.join('tools', cmd)
35*6dbdd20aSAndroid Build Coastguard Worker  command = ['python3', path] + list(args)
36*6dbdd20aSAndroid Build Coastguard Worker  print('Running', ' '.join(command))
37*6dbdd20aSAndroid Build Coastguard Worker  try:
38*6dbdd20aSAndroid Build Coastguard Worker    subprocess.check_call(command, cwd=ROOT_DIR)
39*6dbdd20aSAndroid Build Coastguard Worker  except subprocess.CalledProcessError as e:
40*6dbdd20aSAndroid Build Coastguard Worker    assert False, 'Command: {} failed'.format(' '.join(command))
41*6dbdd20aSAndroid Build Coastguard Worker
42*6dbdd20aSAndroid Build Coastguard Worker
43*6dbdd20aSAndroid Build Coastguard Workerdef main():
44*6dbdd20aSAndroid Build Coastguard Worker  parser = argparse.ArgumentParser()
45*6dbdd20aSAndroid Build Coastguard Worker  parser.add_argument('--check-only', default=False, action='store_true')
46*6dbdd20aSAndroid Build Coastguard Worker  parser.add_argument('OUT')
47*6dbdd20aSAndroid Build Coastguard Worker  args = parser.parse_args()
48*6dbdd20aSAndroid Build Coastguard Worker  out = args.OUT
49*6dbdd20aSAndroid Build Coastguard Worker
50*6dbdd20aSAndroid Build Coastguard Worker  try:
51*6dbdd20aSAndroid Build Coastguard Worker    assert os.path.isdir(out), \
52*6dbdd20aSAndroid Build Coastguard Worker        'Output directory "{}" is not a directory'.format(out)
53*6dbdd20aSAndroid Build Coastguard Worker    check_only = ['--check-only'] if args.check_only else []
54*6dbdd20aSAndroid Build Coastguard Worker    call('check_include_violations')
55*6dbdd20aSAndroid Build Coastguard Worker    call('check_proto_comments')
56*6dbdd20aSAndroid Build Coastguard Worker    call('fix_include_guards', *check_only)
57*6dbdd20aSAndroid Build Coastguard Worker    if not IS_WIN:
58*6dbdd20aSAndroid Build Coastguard Worker      call('gen_bazel', *check_only)
59*6dbdd20aSAndroid Build Coastguard Worker      call('gen_android_bp', *check_only)
60*6dbdd20aSAndroid Build Coastguard Worker    call('gen_merged_protos', *check_only)
61*6dbdd20aSAndroid Build Coastguard Worker    call('gen_amalgamated_python_tools', *check_only)
62*6dbdd20aSAndroid Build Coastguard Worker    call('ninja', '-C', out, 'protoc')
63*6dbdd20aSAndroid Build Coastguard Worker    call('gen_binary_descriptors', '--protoc', protoc_path(out), *check_only)
64*6dbdd20aSAndroid Build Coastguard Worker
65*6dbdd20aSAndroid Build Coastguard Worker    if IS_WIN:
66*6dbdd20aSAndroid Build Coastguard Worker      print('WARNING: Cannot generate BUILD / Android.bp from Windows. ' +
67*6dbdd20aSAndroid Build Coastguard Worker            'They might be left stale and fail in the CI if you edited any ' +
68*6dbdd20aSAndroid Build Coastguard Worker            'BUILD.gn file')
69*6dbdd20aSAndroid Build Coastguard Worker
70*6dbdd20aSAndroid Build Coastguard Worker  except AssertionError as e:
71*6dbdd20aSAndroid Build Coastguard Worker    if not str(e):
72*6dbdd20aSAndroid Build Coastguard Worker      raise
73*6dbdd20aSAndroid Build Coastguard Worker    print('Error: {}'.format(e))
74*6dbdd20aSAndroid Build Coastguard Worker    return 1
75*6dbdd20aSAndroid Build Coastguard Worker
76*6dbdd20aSAndroid Build Coastguard Worker  return 0
77*6dbdd20aSAndroid Build Coastguard Worker
78*6dbdd20aSAndroid Build Coastguard Worker
79*6dbdd20aSAndroid Build Coastguard Workerif __name__ == '__main__':
80*6dbdd20aSAndroid Build Coastguard Worker  exit(main())
81