| #!/usr/bin/env python |
| # Copyright (C) 2017 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # Generates proto definitions from ftrace format files. |
| # Arguments: |
| # path to ftrace_proto_gen |
| # path to input directory full of format files |
| # path to output directory for proto definitions files |
| # Either: |
| # --whitelist PATH : path to a list of events to generate |
| # --event EVENT : a single event to generate |
| # |
| # Example: |
| # ./tools/update_protos.py |
| # out/linux/ftrace_proto_gen |
| # libftrace/test/data/android_seed_N2F62_3.10.49 |
| # protos/ftrace |
| # --whitelist tools/ftrace_proto_gen/event_whitelist |
| |
| |
| from __future__ import print_function |
| import argparse |
| import os |
| import subprocess |
| import sys |
| import tempfile |
| |
| |
| HEADER = """# Copyright (C) 2018 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """ |
| |
| |
| def command(*args): |
| subprocess.check_call(args, stdout=sys.stdout, stderr=sys.stderr) |
| |
| def main(): |
| parser = argparse.ArgumentParser(description='Generate protos.') |
| parser.add_argument('ftrace_proto_gen', |
| help='an ftrace_proto_gen binary') |
| parser.add_argument('input_dir', |
| help='input directory') |
| parser.add_argument('output_dir', |
| help='output directory') |
| parser.add_argument('--whitelist', dest='whitelist_path', |
| default=None, |
| help='path to whitelist of events') |
| parser.add_argument('--event', dest='event', |
| default=None, |
| help='output directory') |
| parser.add_argument('--update-build-files', dest='update_build_files', |
| action='store_true', |
| help='should update metadata') |
| args = parser.parse_args() |
| |
| gen_path = args.ftrace_proto_gen |
| input_dir = args.input_dir |
| output_dir = args.output_dir |
| whitelist_path = args.whitelist_path |
| update_build_files = args.update_build_files |
| |
| if whitelist_path is not None and not os.path.isfile(whitelist_path): |
| parser.error('Whitelist file {} does not exist.'.format(whitelist_path)) |
| if not os.path.isdir(input_dir): |
| parser.error('Input directory {} does not exist.'.format(input_dir)) |
| if not os.path.isdir(output_dir): |
| parser.error('Output directory {} does not exist.'.format(output_dir)) |
| |
| # Run ftrace_proto_gen |
| command(gen_path, whitelist_path, input_dir, output_dir) |
| |
| if update_build_files: |
| names = sorted(os.listdir(output_dir)) |
| names = [name for name in names if name.endswith('.proto')] |
| names = ''.join([' "{}",\n'.format(name) for name in names]) |
| body = 'ftrace_proto_names = [\n{}]'.format(names) |
| with open(os.path.join(output_dir, 'all_protos.gni'), 'wb') as f: |
| f.write(HEADER) |
| f.write(body) |
| |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |