Skip to content

Tool for generating Clang's JSON Compilation Database files for make-based build systems.

License

Notifications You must be signed in to change notification settings

lucashutch/compiledb-generator

 
 

Repository files navigation

Build Status PyPI version

Compilation Database Generator

Tool for generating Clang's JSON Compilation Database file for GNU make-based build systems.

It's aimed mainly at non-cmake (cmake already generates compilation database) large codebases. Inspired by projects like YCM-Generator and Bear, but it's supposed to be faster (mainly with large projects), since it doesn't need a clean build (as the current available tools do) to generate the compilation database file, to achieve this it uses the make options such as -Bnk to extract the compile commands. Also, it's more cross-compiling friendly than YCM-generator's fake-toolchanin approach.

Installation

# pip install compiledb
  • Supports Python 2.x and 3.x (for now, tested only with 2.7 and 3.6 versions)
  • For bash completion support, add the content of sh-completion/compiledb.bash file to your .bashrc file, for example.
  • ZSH completion coming soon :)

Usage

compiledb provides a make python wrapper script which, besides to execute the make build command, updates the JSON compilation database file corresponding to that build command, resulting in a command-line interface similar to Bear.

To generate compile_commands.json file using compiledb-generator's "make wrapper" script, executing Makefile target all:

$ compiledb make

compiledb forwards all the options/arguments passed after make subcommand to GNU Make command, so one can, for example, generate compile_commands.json using core/main.mk as main makefile (-f flag), starting the build from build directory (-C flag):

$ compiledb make -f core/main.mk -C build

Even though, by default, compiledb make generates the compilation database and runs the actual build command requested (acting as a make wrapper), the build step can be skipped using the -n or --no-build options.

$ compiledb -n make

Also, compiledb base command can be used to parse compile commands from an arbitrary text file (or stdin), assuming it has a build log (ideally generated using make -Bnwk command), and generates the JSON Compilation database.

For example, to generate the compilation database from build-log.txt file, use the following command.

$ compiledb --parse build-log.txt

Or even, to pipe make's output and print the compilation database to the standard output:

$ make -Bnwk | compiledb -o-

Testing / Contributing

I've implemented it basically because I needed to index some AOSP's modules for navigating and studying purposes (after having no satisfatory results with current tools such as YCM-Generator and Bear). So I've reworked YCM-Generator, which resulted in compiledb-gen-parser and used successfully to generate compilation database for some AOSP modules in ~1min running in a Docker container and then I've been able to use some great tools such as:

Notice:

  • Windows: tested on Windows 10 with cmd, wsl(Ubuntu), mingw32
  • Linux: tested only on Arch Linux so far

Patches are always welcome :)

License

GNU GPLv3

About

Tool for generating Clang's JSON Compilation Database files for make-based build systems.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 99.8%
  • Shell 0.2%