blob: 4cc5c30ad921dd37ea82040750c83b232a95f01c [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Logically concatenates given compile_commands.json files to stdout.
Filenames of compile_commands.json files are provided as arguments. A logical
concatenation of all the compile commands is output to stdout.
Example:
<layer>$ ./scripts/cat_compile_commands.py zircon/compile_commands.json \
out/debug-x64/compile_commands.json > compile_commands.json
The output is suitable for use with vscode + cquery which needs a single
compile_commands.json for the whole editor workspace. This way a single vscode
workspace can handle zircon + other layers of fuchsia, by adding the topaz
folder with the combined compile_commands.json in it.
Todo:
* For zircon, in docs that mention "bear make -j20", see also this script.
* For rest of fuchsia, integrate something like
"~/topaz/buildtools/ninja -v -C \
/usr/local/google/home/dustingreen/topaz/out/debug-x64 \
-t compdb cc cxx objc objcxx x64-shared_cc x64-shared_cxx \
> ~/topaz/out/debug-x64/compile_commands.json
into the build - ideally only if build.ninja or maybe *.ninja change.
* Iff the ~0.65s execution time becomes an issue, consider a more optimized
raw binary splice based on fixing up the "]" and "[" and the end of first
file and start of second file.
* Document all the steps to get a nicely working vscode + cquery workspace
with zircon + the rest of fuchsia in a combined editor workspace.
"""
import json
import sys
def main():
"""Cat compile_commands.json files given as args to stdout"""
data = []
for arg in sys.argv[1:]:
data += json.load(open(arg))
json.dump(data, sys.stdout, indent=True)
return 0
if __name__ == "__main__":
sys.exit(main())