[cfe-dev] Getting source files into the CompilationDatabase interfaces

Manuel Klimek klimek at google.com
Wed Nov 6 09:34:55 PST 2013


Hi,

as we've seen more use of the compilation database (for example through the
YCM vim plugin), we noticed that for networked build systems and server
applications the information we currently expose in the interfaces (path,
file-name, command line arguments) is not enough - we also need to be able
to get all source code, which we then can put into clang's VFS to get a
fully build-system independent clang run over a translation unit.

We think that getting the source information (perhaps optionally) as part
of a getCompileCommands run is a good fit - a build system always must know
how to provide the required sources, and as such it seems to be a natural
fit.

I'd propose to change the CompilationDatabase interface
(tools/clang/include/clang/Tooling/CompilationDatabase.h) to that end, and
see two possible solutions, which both have different pros and cons:
1. Add a map from std::string (file-name) -> std::string (source content)
to the CompileCommand class (in
tools/clang/include/clang/Tooling/CompilationDatabase.h); let specific
CompilationDatabases optionally fill in that information
2. Do not modify CompileCommand - instead, add a
getCompileCommandsAndSources(StringRef FilePath) method that returns a
vector<pair<CompileCommand, map<string, string>>> which also includes the
sources; I'm reluctant to split the call into two, as the compile command
and the sources are tightly coupled (if a user syncs in the background,
both tend to change at the same time)

I lean towards solution (1), mainly because it seems less invasive. On the
other hand, it might make it less obvious to users of libclang what's going
on (for both solutions I'd propose extending the libclang interface
basically in a very similar way to how the C++ code changes).

Opinions?

Thanks,
/Manuel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131106/2e69af56/attachment.html>


More information about the cfe-dev mailing list