blob: 8444662a41a411a4649ff421a1d7bbf99cf44074 [file] [log] [blame]
Hector Dearman46c66db2017-10-26 11:26:28 +01001#!/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
16# Generates proto definitions from ftrace format files.
17# Arguments:
18# path to ftrace_proto_gen
19# path to input directory full of format files
20# path to output directory for proto definitions files
21# Either:
22# --whitelist PATH : path to a list of events to generate
23# --event EVENT : a single event to generate
24#
25# Example:
26# ./tools/update_protos.py
27# out/linux/ftrace_proto_gen
28# libftrace/test/data/android_seed_N2F62_3.10.49
29# protos/ftrace
30# --whitelist tools/ftrace_proto_gen/event_whitelist
31
32
33from __future__ import print_function
34import argparse
35import os
36import subprocess
37import sys
38import tempfile
39
40
Hector Dearman7f37dc82018-01-25 12:25:40 +000041HEADER = """# Copyright (C) 2018 The Android Open Source Project
42#
43# Licensed under the Apache License, Version 2.0 (the "License");
44# you may not use this file except in compliance with the License.
45# You may obtain a copy of the License at
46#
47# http://www.apache.org/licenses/LICENSE-2.0
48#
49# Unless required by applicable law or agreed to in writing, software
50# distributed under the License is distributed on an "AS IS" BASIS,
51# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
52# See the License for the specific language governing permissions and
53# limitations under the License.
54
55"""
56
57
Hector Dearman46c66db2017-10-26 11:26:28 +010058def command(*args):
59 subprocess.check_call(args, stdout=sys.stdout, stderr=sys.stderr)
60
Hector Dearman46c66db2017-10-26 11:26:28 +010061def main():
62 parser = argparse.ArgumentParser(description='Generate protos.')
63 parser.add_argument('ftrace_proto_gen',
64 help='an ftrace_proto_gen binary')
65 parser.add_argument('input_dir',
66 help='input directory')
67 parser.add_argument('output_dir',
68 help='output directory')
69 parser.add_argument('--whitelist', dest='whitelist_path',
70 default=None,
71 help='path to whitelist of events')
72 parser.add_argument('--event', dest='event',
73 default=None,
74 help='output directory')
Hector Dearman7f37dc82018-01-25 12:25:40 +000075 parser.add_argument('--update-build-files', dest='update_build_files',
76 action='store_true',
77 help='should update metadata')
Hector Dearman46c66db2017-10-26 11:26:28 +010078 args = parser.parse_args()
79
80 gen_path = args.ftrace_proto_gen
81 input_dir = args.input_dir
82 output_dir = args.output_dir
83 whitelist_path = args.whitelist_path
Hector Dearman7f37dc82018-01-25 12:25:40 +000084 update_build_files = args.update_build_files
Hector Dearman46c66db2017-10-26 11:26:28 +010085
86 if whitelist_path is not None and not os.path.isfile(whitelist_path):
87 parser.error('Whitelist file {} does not exist.'.format(whitelist_path))
Hector Dearman46c66db2017-10-26 11:26:28 +010088 if not os.path.isdir(input_dir):
89 parser.error('Input directory {} does not exist.'.format(input_dir))
90 if not os.path.isdir(output_dir):
91 parser.error('Output directory {} does not exist.'.format(output_dir))
92
Isabelle Taylor6498fcf2018-02-06 11:35:05 +000093 # Run ftrace_proto_gen
94 command(gen_path, whitelist_path, input_dir, output_dir)
Hector Dearman46c66db2017-10-26 11:26:28 +010095
Hector Dearman7f37dc82018-01-25 12:25:40 +000096 if update_build_files:
97 names = sorted(os.listdir(output_dir))
98 names = [name for name in names if name.endswith('.proto')]
99 names = ''.join([' "{}",\n'.format(name) for name in names])
100 body = 'ftrace_proto_names = [\n{}]'.format(names)
101 with open(os.path.join(output_dir, 'all_protos.gni'), 'wb') as f:
102 f.write(HEADER)
103 f.write(body)
104
105 return 0
106
Hector Dearman46c66db2017-10-26 11:26:28 +0100107
108if __name__ == '__main__':
109 sys.exit(main())