blob: e02c539ff4f9f6415865f4206217ef4413dba225 [file] [log] [blame]
Primiano Tucci5fec9212017-12-11 23:08:40 +00001#!/usr/bin/env python
2# Copyright (C) 2017 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16import os
17import subprocess
18import sys
19
Primiano Tucci2c5488f2019-06-01 03:27:28 +010020CORE_H = 'include/perfetto/ext/tracing/core'
Primiano Tucci0f2f3b42019-05-21 19:37:01 +010021CORE_CPP = 'src/tracing/core'
22
Primiano Tucci5fec9212017-12-11 23:08:40 +000023PROTOS = (
Primiano Tucci0f2f3b42019-05-21 19:37:01 +010024 ('perfetto/common/commit_data_request.proto', CORE_H, CORE_CPP),
25 ('perfetto/common/observable_events.proto', CORE_H, CORE_CPP),
26 ('perfetto/common/trace_stats.proto', CORE_H, CORE_CPP),
27 ('perfetto/config/chrome/chrome_config.proto', CORE_H, CORE_CPP),
28 ('perfetto/config/data_source_config.proto', CORE_H, CORE_CPP),
29 ('perfetto/config/data_source_descriptor.proto', CORE_H, CORE_CPP),
30 ('perfetto/config/test_config.proto', CORE_H, CORE_CPP),
31 ('perfetto/config/trace_config.proto', CORE_H, CORE_CPP),
32
33 # Generate ftrace cpp/h files into their own directory.
34 ('perfetto/config/ftrace/ftrace_config.proto',
35 'src/traced/probes/ftrace', 'src/traced/probes/ftrace'),
36
37 # Generate profiling cpp/h files into their own directory.
38 ('perfetto/config/profiling/heapprofd_config.proto',
39 'src/profiling/memory', 'src/profiling/memory'),
Primiano Tucci5fec9212017-12-11 23:08:40 +000040)
41
Primiano Tucci0f2f3b42019-05-21 19:37:01 +010042
Primiano Tucci2c5488f2019-06-01 03:27:28 +010043HEADER_PATH = 'include/perfetto/ext/tracing/core'
Primiano Tucci5fec9212017-12-11 23:08:40 +000044CPP_PATH = 'src/tracing/core'
Primiano Tucci2c5488f2019-06-01 03:27:28 +010045INCLUDE_PATH = 'perfetto/ext/tracing/core'
Primiano Tucci1361d982019-05-14 09:50:41 +010046ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
Primiano Tucci5fec9212017-12-11 23:08:40 +000047
Primiano Tucci0f2f3b42019-05-21 19:37:01 +010048
Primiano Tucci5fec9212017-12-11 23:08:40 +000049def run(cmd):
50 print('\nRunning ' + ' '.join(cmd))
51 subprocess.check_call(cmd)
52
53
54def main():
55 if not os.path.exists('.gn'):
Primiano Tuccic5010802018-01-19 17:13:21 +000056 print('This script must be executed from the perfetto root directory')
Primiano Tucci5fec9212017-12-11 23:08:40 +000057 return 1
58 if len(sys.argv) < 2:
59 print('Usage: %s out/xxx' % sys.argv[0])
60 return 1
61 out_dir = sys.argv[1]
Primiano Tucci1361d982019-05-14 09:50:41 +010062 arch = 'mac' if sys.platform == 'darwin' else 'linux64'
Primiano Tucci0f2f3b42019-05-21 19:37:01 +010063 clang_format_path = os.path.join(
64 ROOT_DIR, 'buildtools', arch, 'clang-format')
Primiano Tucci1361d982019-05-14 09:50:41 +010065 clang_format = [clang_format_path, '-i', '--sort-includes']
Primiano Tucci0f2f3b42019-05-21 19:37:01 +010066 ninja = os.path.join(ROOT_DIR, 'tools', 'ninja')
67 run([ninja, '-C', out_dir, 'proto_to_cpp'])
Primiano Tucci5fec9212017-12-11 23:08:40 +000068 tool = os.path.join(out_dir, 'proto_to_cpp')
Primiano Tucci0f2f3b42019-05-21 19:37:01 +010069 assert(os.path.exists(tool))
70 for args in PROTOS:
71 proto, header_dir, cpp_dir = args
72 include_dir = header_dir.replace('include/', '')
73 run([tool, proto] + [header_dir, cpp_dir, include_dir])
Primiano Tucci5fec9212017-12-11 23:08:40 +000074 fname = os.path.basename(proto).replace('.proto', '')
Primiano Tucci0f2f3b42019-05-21 19:37:01 +010075 run(clang_format + [os.path.join(header_dir, fname + '.h')])
76 run(clang_format + [os.path.join(cpp_dir, fname + '.cc')])
Primiano Tucci5fec9212017-12-11 23:08:40 +000077
78
79if __name__ == '__main__':
80 sys.exit(main())