Allow clang to write compilation database records.
authorJoerg Sonnenberger <joerg@bec.de>
Tue, 6 Dec 2016 16:33:22 +0000 (16:33 +0000)
committerJoerg Sonnenberger <joerg@bec.de>
Tue, 6 Dec 2016 16:33:22 +0000 (16:33 +0000)
commitcbc872549cf8be53e2558a13de643e3bb79673f6
tree6fa6b673d9d2ac88e6e192e1cff8fd4fc701b848
parent0caaadfc2d8ebc5fdb035533c962fe316e8c9905
Allow clang to write compilation database records.

When integrating compilation database output into existing build
systems, two approaches dominate so far. Ad-hoc implementation of the
JSON output rules or using compiler wrappers. This patch adds a new
option "-MJ foo.json" which gives a slightly cleaned up compilation
record. The output is a fragment, i.e. you still need to add the array
markers, but it allows multiple files to be easy merged.

This way the only change in a build system is adding the option with
potentially a per-target output file and merging the files with
something like
  (echo '['; cat *.o.json; echo ']' > compilation_database.json
or some additional filtering to remove the trailing comma for strict
JSON compliance.

Differential Revision: https://reviews.llvm.org/D27140

llvm-svn: 288821
clang/include/clang/Basic/DiagnosticDriverKinds.td
clang/include/clang/Driver/Options.td
clang/lib/Driver/Tools.cpp
clang/lib/Driver/Tools.h
clang/test/Driver/compilation_database.c [new file with mode: 0644]