[cfe-dev] Getting involved with Clang refactoring

Douglas Gregor dgregor at apple.com
Tue May 22 07:40:10 PDT 2012

On May 22, 2012, at 7:38 AM, Manuel Klimek <klimek at google.com> wrote:

> On Tue, May 22, 2012 at 4:17 PM, Douglas Gregor <dgregor at apple.com> wrote:
>> On May 22, 2012, at 6:49 AM, Manuel Klimek <klimek at google.com> wrote:
>>> On Tue, May 22, 2012 at 3:19 PM, James K. Lowden
>>> <jklowden at schemamania.org> wrote:
>>>> On Mon, 21 May 2012 10:56:51 -0700
>>>> Douglas Gregor <dgregor at apple.com> wrote:
>>>>>> And while I'm at it. One thing that might be interesting for a
>>>>>> contribution is getting the compilation database support up for
>>>>>> libclang
>>>> ...
>>>>> That's a good idea. libclang assumes that you have your own
>>>>> compilation database (or similar) and that you use it up feed command
>>>>> lines to libclang, but it would be easier to use libclang if we could
>>>>> just point it at a build or source tree and then feed source files to
>>>>> libclang.
>>>> Gentlemen, could you tell me please what you mean by a "compilation
>>>> database"?  It sounds like a list of files to compile, something I'd
>>>> normally look to make(1) to provide.  Apparently that's not what you
>>>> mean, or there's some reason make won't do the job.
>>>> If I understood the problem better perhaps there's something I could do
>>>> about it.
>>> The problem with make is that it executes the compiler based on
>>> changes in the dependency graph.
>>> Imagine you want to run a tool on all files that use a specific
>>> symbol. To do this you need to:
>>> 1. figure out the compile command line for the file into which you're
>>> pointing to figure out the symbol under the cursor
>>> 2. run the tool over all files that reference that symbol
>>> Both steps are completely independent of any dependency changes, so
>>> running the tool as part of make / as a clang plugin is not the best
>>> option here. You want a compilation database out of which you can
>>> quickly (for interactive use cases) get the compile command line for
>>> any file in a project.
>>> LibTooling has this idea already at its core:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/CompilationDatabase.h?view=markup
>>> You first generate a compilation database, and then feed that into
>>> your tool run.
>> Bringing it back to 'make' a little bit... we could, conceivably, have a compilation database implicitly generated from the makefiles. If one asked it how to build 'foo.cpp', it would find the appropriate make rule and form the command-line arguments. We don't have such a 'live' compilation database right now, but it fits into the model and would be really, really cool because it would allow us to 'just work' on a makefile-based project. Unfortunately, it amounts to re-implementing 'make' :(
> /me pulls out the fry meme. Are you actually serious?

About re-implementing 'make'? No, we don't want that burden.

But viewing an existing build system, as implemented in a library that we can link against, through the lens of a compilation database would be useful.

	- Doug

More information about the cfe-dev mailing list