Skip to main content

Tool for generating Clang JSON Compilation Database files for make-based build systems. A fork of https://github.com/nickdiego/compiledb

Project description

Compilation Database Generator

CircleCI branch PyPI PyPI - Python Version GitHub

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 faster (mainly with large projects), since in most cases it doesn't need a clean build (as the mentioned tools do) to generate the compilation database file, to achieve this it uses the make options such as -n/--dry-run and -k/--keep-going to extract the compile commands. Also, it's more cross-compiling friendly than YCM-generator's fake-toolchanin approach.

Note

This project is a fork of compiledb maintained by Nick Yamane. Since the PRs to the origin were pending and inactive for quite a long time, here is an attempt to patch the origin project with this new package name called compiledb-plus.

We express our gratitude to the original author(s) for their valuable contribution which made this fork possible. Any issues, questions, or contributions pertaining to the additions in this fork should be directed to this repository, not to the original author(s).

Changes from Original

  • Support non-recursive make

Installation

# pip install compiledb-plus
  • Supports Python 2.x and 3.x (for now, tested only with 2.7 and 3.6 versions)

Usage

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

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

$ compiledb-plus make

compiledb-plus forwards all the options/arguments passed after make subcommand to GNU Make, 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-plus make -f core/main.mk -C build

By default, compiledb-plus 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-plus -n make

compiledb-plus base command has been designed so that it can be used to parse compile commands from arbitrary text files (or stdin), assuming it has a build log (ideally generated using make -Bnwk command), and generates the corresponding JSON Compilation database.

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

$ compiledb-plus --parse build-log.txt

or its equivalent:

$ compiledb-plus < build-log.txt

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

$ make -Bnwk | compiledb-plus -o-

By default compiledb-plus generates a JSON compilation database in the "arguments" list format. The "command" string format is also supported through the use of the --command-style flag:

$ compiledb-plus --command-style make

Testing / Contributing

I've implemented this tool because I needed to index some AOSP's modules for navigating and studying purposes (after having no satisfatory results with current tools available by the time such as YCM-Generator and Bear). So I've reworked YCM-Generator, which resulted in the initial version of compiledb/parser.py and used successfully to generate compile_commands.json for some AOSP modules in ~1min running in a Docker container and then could use it with some great tools, such as:

Notice:

  • Windows: tested on Windows 10 with cmd, wsl(Ubuntu), mingw32
  • Linux: tested only on Arch Linux and Ubuntu 18 so far
  • Mac: tested on macOS 10.13 and 10.14

Patches are always welcome :)

License

GNU GPLv3

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

compiledb-plus-1.0.0.tar.gz (26.0 kB view details)

Uploaded Source

Built Distribution

compiledb_plus-1.0.0-py3-none-any.whl (27.6 kB view details)

Uploaded Python 3

File details

Details for the file compiledb-plus-1.0.0.tar.gz.

File metadata

  • Download URL: compiledb-plus-1.0.0.tar.gz
  • Upload date:
  • Size: 26.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.11

File hashes

Hashes for compiledb-plus-1.0.0.tar.gz
Algorithm Hash digest
SHA256 056a386594a04368dee776c3d3af45ced9ba05fd184b1bf4c9afbf93cd0fd2bb
MD5 e93ba011e9bfc77fe731a5f9a8292769
BLAKE2b-256 dc63f6e094ea27903c86389d829fe2c746e157725d75cd2c3882c7b2140f12aa

See more details on using hashes here.

File details

Details for the file compiledb_plus-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for compiledb_plus-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2e124e07ac032b4d4295f51a105a93fd3ac20a519e6fe740c516f337d9a4657d
MD5 0a593c1f0db129f6c18ca8fcc356cf20
BLAKE2b-256 5398f2a097628e24241825f9959e9ce0a6195939eb19f7b4cc54099bab09017b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page