Generate compile_commands.json as part of build/gen.py This makes it easy to keep updating out/compile_commands.json. It also adds `.clangd` to `.gitignore`. Change-Id: I2d395e68282b81ab06adea1145c10af73f402afe Reviewed-on: https://gn-review.googlesource.com/c/gn/+/18640 Commit-Queue: Takuto Ikuta <tikuta@google.com> Reviewed-by: Takuto Ikuta <tikuta@google.com>
diff --git a/build/gen.py b/build/gen.py index 8470373..5d07459 100755 --- a/build/gen.py +++ b/build/gen.py
@@ -209,6 +209,10 @@ 'with <ZOSLIB_DIR>/lib/libzoslib.a, and ' + 'add -I<ZOSLIB_DIR>/include to the compile ' + 'commands. See README.md for details.')) + args_list.add('--generate-compilation-database', + action='store_true', + help=('Generate compile_commands.json with ' + + '`ninja -t compdb`.')) args_list.add_to_parser(parser) options = parser.parse_args(argv) @@ -383,12 +387,17 @@ f.write(ninja_template) f.write('\n'.join(ninja_lines)) + build_dir = os.path.dirname(path) with open(path + '.d', 'w') as f: f.write('build.ninja: ' + os.path.relpath(os.path.join(SCRIPT_DIR, 'gen.py'), - os.path.dirname(path)) + ' ' + - os.path.relpath(template_filename, os.path.dirname(path)) + '\n') + build_dir) + ' ' + + os.path.relpath(template_filename, build_dir) + '\n') + if options.generate_compilation_database: + with open(os.path.join(REPO_ROOT, 'compile_commands.json'), 'w') as f: + subprocess.run( + ['ninja', '-C', build_dir, '-t', 'compdb'], stdout=f, check=True) def WriteGNNinja(path, platform, host, options, args_list): if platform.is_msvc():