Giter VIP home page Giter VIP logo

bear's Introduction

Packaging status GitHub release GitHub Release Date Continuous Integration Contributors Gitter

ʕ·ᴥ·ʔ Build EAR

Bear is a tool that generates a compilation database for clang tooling.

The JSON compilation database is used in the clang project to provide information on how a single compilation unit is processed. With this, it is easy to re-run the compilation with alternate programs.

One way to get a compilation database is to use cmake as the build tool. Passing -DCMAKE_EXPORT_COMPILE_COMMANDS=ON to cmake generates the compile_commands.json file into the current directory.

For non-cmake projects, Bear generates the JSON file during the build process.

How it works

The concept behind Bear is: to execute the original build command and intercept the command executions issued by the build tool. From the log of command executions it tries to identify the compiler calls and creates the final compilation database.

For intercepting the compiler executions, Bear uses the LD_PRELOAD or DYLD_INSERT_LIBRARIES mechanisms provided by the dynamic linker. When the dynamic linker is not working (because the executable is not a dynamically linked executable or security protection disables the linker) then Bear uses compiler wrappers to record the compiler calls. The wrapper sends execution report and calls the real compiler. (Not only compilers, but linkers, assemblers and other tools are also wrapped.)

The intercepted commands are filtered and only the compiler executions goes into the compilation database. Those commands which ends up in the final output are transformed a little bit (some compiler flags are removed).

How to install

Bear is packaged for many distributions. Check out your package manager. Or build it from source.

How to use

After installation the usage is like this:

bear -- <your-build-command>

The output file called compile_commands.json is saved in the current directory.

For more options you can check the man page or pass --help parameter. Note that if you want to pass parameter to Bear, pass those before the -- sign, everything after that will be the build command.

Side note: Since Bear is executing the build command, only those commands will be recorded which were actually executed during the current build. Which means if you have already built your project and you re-run the build command with Bear you probably end up to have an empty output. (Practically it means you need to run make clean before you run bear make.)

For more read the wiki of the project, which talks about limitations, known issues and platform specific usage.

Problem reports

Before you open a new problem report, please look at the wiki if your problem is a known one with documented workaround. It's also helpful to look at older (maybe closed) issues before you open a new one.

If you decided to report a problem, try to give as much context as it would help me to reproduce the error you see. If you just have a question about the usage, please don't be shy, ask your question in an issue or in chat.

If you found a bug, but also found a fix for it, please share it with me and open a pull request.

Please follow the contribution guide when you do these.


Thanks to JetBrains for donating product licenses to help develop Bear

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.