mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 16:06:41 +00:00

Summary: When building a project in a runtime mode, the compilation database is a separate CMake invocation. So its `compile_commands.json` file will be placed elsewhere in the `runtimes/runtime-bins` directory. This is somewhat annoying for ongoing development when a runtimes build is necessary. This patch adds some CMake magic to merge the two files.
49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
#!/usr/bin/env python
|
|
"""A command line utility to merge two JSON files.
|
|
|
|
This is a python program that merges two JSON files into a single one. The
|
|
intended use for this is to combine generated 'compile_commands.json' files
|
|
created by CMake when performing an LLVM runtime build.
|
|
"""
|
|
|
|
import argparse
|
|
import json
|
|
import sys
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument(
|
|
"-o",
|
|
type=str,
|
|
help="The output file to write JSON data to",
|
|
default=None,
|
|
nargs="?",
|
|
)
|
|
parser.add_argument(
|
|
"json_files", type=str, nargs="+", help="Input JSON files to merge"
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
merged_data = []
|
|
|
|
for json_file in args.json_files:
|
|
try:
|
|
with open(json_file, "r") as f:
|
|
data = json.load(f)
|
|
merged_data.extend(data)
|
|
except (IOError, json.JSONDecodeError) as e:
|
|
print("Failed to parse {json_file}: {e}", file=sys.stderr)
|
|
continue
|
|
|
|
# Deduplicate by converting each entry to a tuple of sorted key-value pairs
|
|
unique_data = list({json.dumps(entry, sort_keys=True) for entry in merged_data})
|
|
unique_data = [json.loads(entry) for entry in unique_data]
|
|
|
|
with open(args.o, "w") as f:
|
|
json.dump(unique_data, f, indent=2)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|