All Projects → nickdiego → Compiledb

nickdiego / Compiledb

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

Programming Languages

python
139335 projects - #7 most used programming language
c
50402 projects - #5 most used programming language
cpp
1120 projects

Projects that are alternatives of or similar to Compiledb

Embedded Ide
IDE for C embedded development centered on bare-metal ARM systems
Stars: ✭ 127 (-78.87%)
Mutual labels:  makefile, clang
Conjure
Interactive evaluation for Neovim (Clojure, Fennel, Janet, Racket, Hy, MIT Scheme, Guile)
Stars: ✭ 569 (-5.32%)
Mutual labels:  makefile
Go Best Practices
Codeship Golang Best Practices
Stars: ✭ 522 (-13.14%)
Mutual labels:  makefile
Awesome Python Cn
Python资源大全中文版,包括:Web框架、网络爬虫、模板引擎、数据库、数据可视化、图片处理等,由「开源前哨」和「Python开发者」微信公号团队维护更新。
Stars: ✭ 23,408 (+3794.84%)
Mutual labels:  makefile
Easyclangcomplete
💥 Robust C/C++ code completion for Sublime Text 3
Stars: ✭ 537 (-10.65%)
Mutual labels:  clang
Buildroot
Tesla's buildroot repository
Stars: ✭ 552 (-8.15%)
Mutual labels:  makefile
Aiohttp Demos
Demos for aiohttp project
Stars: ✭ 517 (-13.98%)
Mutual labels:  makefile
Kubeadm Workshop
Showcasing a bare-metal multi-platform kubeadm setup with persistent storage and monitoring
Stars: ✭ 593 (-1.33%)
Mutual labels:  makefile
Git Game V2
Second version of the terminal based game that teaches users git commands
Stars: ✭ 560 (-6.82%)
Mutual labels:  makefile
Manta
Manta is a scalable HTTP-based object store
Stars: ✭ 543 (-9.65%)
Mutual labels:  makefile
Scientific network summary
总结关于科学上网的概念方法及工具
Stars: ✭ 539 (-10.32%)
Mutual labels:  makefile
Docker Hadoop Spark Workbench
[EXPERIMENTAL] This repo includes deployment instructions for running HDFS/Spark inside docker containers. Also includes spark-notebook and HDFS FileBrowser.
Stars: ✭ 536 (-10.82%)
Mutual labels:  makefile
Rpi Buildroot
Buildroot overlay with a few personal tweaks for the Raspberry Pi
Stars: ✭ 553 (-7.99%)
Mutual labels:  makefile
Pinn
An enhanced Operating System installer for the Raspberry Pi
Stars: ✭ 530 (-11.81%)
Mutual labels:  makefile
Motionpie
A video surveillance OS for single-board computers
Stars: ✭ 585 (-2.66%)
Mutual labels:  makefile
Why Linux Is Better
Objective reasons to prefer Linux to Windows.
Stars: ✭ 518 (-13.81%)
Mutual labels:  makefile
Remake
Enhanced GNU Make - tracing, error reporting, debugging, profiling and more
Stars: ✭ 538 (-10.48%)
Mutual labels:  makefile
Project Layout
Standard Go Project Layout
Stars: ✭ 28,275 (+4604.66%)
Mutual labels:  makefile
Bake
Bake — the strangely familiar workflow utility.
Stars: ✭ 599 (-0.33%)
Mutual labels:  makefile
Raleway
An elegant variable sans-serif, with 9 static weights and Italics.
Stars: ✭ 589 (-2%)
Mutual labels:  makefile

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.

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, resulting in a command-line interface similar to Bear.

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

$ compiledb make

compiledb 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 make -f core/main.mk -C build

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

compiledb 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 --parse build-log.txt

or its equivalent:

$ compiledb < build-log.txt

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

$ make -Bnwk | compiledb -o-

By default compiledb 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 --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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].