[cfe-dev] Compilation Database format

Pierrick Bouvier bouvier.pierrick at yahoo.fr
Tue Mar 3 05:01:48 PST 2015


Hello Neil,

That seems like a good idea, getting the butter and the money of the 
butter. However, as pointed Laszlo (who is the author of Bear tool I 
quoted above), it would create trouble in minds of user, thinking they 
use standard compilation database, when it is not.

And even if I patch clang to accept mine, users of old versions will 
still have trouble (and there will be plenty of them... in the 
beginning). Thus, I will probably go for another format, and allows user 
to get the standard compilation database, in case he uses a tool needing 
it. But the tool Bear already does this job (and well), so I'm not sure 
to produce this.

Well, thank you all for information. Such a nice first experience on 
this mailing list :).

Pierrick

On 03/02/2015 10:46 PM, Neil Semmel wrote:
> Hi Pierrick,
>
> You also have the option of writing your own CompilationDatabase, and
> using it in place of the builtin options. You get the benefits of not
> having to modify any internal clang code, complete control over which
> files are chosen for compilation/analysis (assuming you're using a
> libtooling), and you can add whatever extra information you need to it
> as long as it conforms to the clang::tooling::CompilationDatabase API.
>
> - Neil
>
> (API at:
> http://clang.llvm.org/doxygen/classclang_1_1tooling_1_1CompilationDatabase.html)
>
> On Mon, Mar 2, 2015 at 7:41 PM, Pierrick Bouvier
> <bouvier.pierrick at yahoo.fr <mailto:bouvier.pierrick at yahoo.fr>> wrote:
>
>     Thank you for your quick answer.
>
>     I have a few precisions to say (inline).
>
>     On 03/02/2015 04:06 AM, Manuel Klimek wrote:
>     > Hi Pierrick,
>     >
>     > On Mon, Mar 2, 2015 at 1:58 AM Pierrick Bouvier
>     > <bouvier.pierrick at yahoo.fr <mailto:bouvier.pierrick at yahoo.fr>
>     <mailto:bouvier.pierrick at __yahoo.fr
>     <mailto:bouvier.pierrick at yahoo.fr>>> wrote:
>     >
>     >     Hello Clang community,
>     >
>     >     I am currently working on a tool able to generate a compilation
>     >     database by catching all exec done, something similar to
>      > https://github.com/rizsotto/____Bear
>     <https://github.com/rizsotto/__Bear>
>     >     <https://github.com/rizsotto/__Bear
>     <https://github.com/rizsotto/Bear>> but with the end goal of
>     >     providing more than just this feature to user (I want to use
>     >     libclang for providing autocompletion, refactoring, stats and
>     >     other stuff related to user's codebase, independently of any
>     >     editor or IDE).
>     >
>     >     I really like the idea of compilation database, and I have a few
>     >     questions that were not answered by the manual page:
>      > http://clang.llvm.org/docs/____JSONCompilationDatabase.html
>     <http://clang.llvm.org/docs/__JSONCompilationDatabase.html>
>     >     <http://clang.llvm.org/docs/__JSONCompilationDatabase.html
>     <http://clang.llvm.org/docs/JSONCompilationDatabase.html>>
>     >
>     >     Those are my questions: 1) Is that possible to provide a cwd
>     >     relative to compilation database file itself? What I aim is
>     >     possibility for user to move his source folder from place without
>     >     having to use sed or regenerate the compilation database. For
>     >     example, if compilation database is
>      >     "/my/project/compilation_____database.json" and my source is in
>     >     "/my/project/src/main.cpp" I want to offer cwd as "src/" and
>     >     source file as "main.cpp". Is this correct and more than all, is
>     >     that supported by libclang?
>     >
>     >
>     > I don't think that's currently supported, but patches are welcome :)
>
>     When I will be working on this part of my project, I'll work around
>     this.
>
>     >
>     >     2) Is that possible to extend compilation_database without
>     >     breaking libclang? I would like to add a list of fields named
>     >     "dependency" to precise which files the source depends on. This
>     >     can be used for creating statistics or simply to know if file (or
>     >     any dep) has changed without having to preprocess, thus enabling
>     >     speedlight on big projects.
>     >     For example:
>     >         - cwd "src/"
>     >         - file "main.cpp"
>     >         - command ...
>     >         - dependency "/usr/include/stdio.h"
>     >         - dependency "/usr/include/stdlib.h"
>     >
>     >     If those feature are not possible with current libclang, and if
>     >     you agree, I can work on a patch to make this possible.
>     >
>     >
>     > Two part answer: a) regarding local extensions to the command line
>     > database: I'd suggest not to do them; the probability we hit
>     > incompatibilities seem high enough, and it seems easy to just put
>     > another json file next to the compilation database having all your
>     > extra data
>
>     I don't really see the risk here. Well, I don't want libclang to
>     understand the extra information I put in the json file, just ignore
>     what it does not know. By doing this, you allow people who want to use
>     this format to put additional information in the same file. Using two
>     different json seems complicated to me, the aim is to just get one file
>     with the whole content. Well, I can still hack the file and put my
>     extension under a comment, and parse it anyway. I'll see what I do when
>     I come at libclang interaction. I suppose it will be possible to discuss
>     around a patch. And I plan to use this format for other languages than
>     C/C++, thus extensions could be welcome to provide additional
>     information than command line.
>
>     > b) regrading dependencies: I'm not sure the compilation database is
>     > the right venue for that; that's why we have build systems; if you
>     > want dependencies, you'll immediately need information on how to build
>     > those dependencies, and suddenly you have a new build system
>     >
>
>     I get your point but I don't want to recreate another build system. I
>     just express dependencies of one compilation unit. I do not even speak
>     about linked executable or so, just the object files. I still think this
>     information could be used by tools like ccache or my project, to know if
>     file needs recompilation without preprocessing (which is faster than
>     compilation, but not fast as stating XX files, could be a big difference
>     for huge projects (like Linux)).
>
>      > Cheers,
>      > /Manuel
>      >
>
>     Pierrick
>
>     >
>     >     Thank you, and thank you again for providing clang/llvm to people.
>     >     Pierrick
>      >     ___________________________________________________
>      >     cfe-dev mailing list
>      > cfe-dev at cs.uiuc.edu <mailto:cfe-dev at cs.uiuc.edu>
>     <mailto:cfe-dev at cs.uiuc.edu <mailto:cfe-dev at cs.uiuc.edu>>
>      > http://lists.cs.uiuc.edu/____mailman/listinfo/cfe-dev
>     <http://lists.cs.uiuc.edu/__mailman/listinfo/cfe-dev>
>      >     <http://lists.cs.uiuc.edu/__mailman/listinfo/cfe-dev
>     <http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>>
>
>      >
>     _________________________________________________
>     cfe-dev mailing list
>     cfe-dev at cs.uiuc.edu <mailto:cfe-dev at cs.uiuc.edu>
>     http://lists.cs.uiuc.edu/__mailman/listinfo/cfe-dev
>     <http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>
>
>



More information about the cfe-dev mailing list