vsilyaev / facebook-clang-plugins

Plugins to clang-analyzer and clang-frontend

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Facebook Clang Plugins

This repository aims to share some useful clang plugins developed at Facebook.

It contains two kinds of plugins to the clang compiler:

  • analyzer plugins use the internal APIs of clang analyzer to find bugs and report them;

  • frontend plugins process the syntax of source files directly to accomplish more general tasks; specifically, we have developed a clang-to-ocaml bridge to make code analyses easier.

Most of the plugins here have been written with iOS in mind. However, different platforms may be considered in the future.

Pre-release notes

This pre-release is meant to spark interest and gather early feedback. Plugins are still subject to be deleted, moved, added, or heavily rewritten.

Structure of the repository

  • analyzer : plugins for clang analyzer,

  • libtooling : frontend plugins (currently a clang-to-json AST exporter),

  • clang-ocaml : ocaml libraries to process the JSON output of frontend plugins,

  • extra-repo-example : example of external repository where to add plugins and piggyback on the build system.

Quick start

The current version of the plugins requires recent version of the clang compiler, re-compiled from source. Clang source which is used by this project can be found in clang/src/

General instructions to compile clang can be found here: http://clang.llvm.org/get_started.html

To compile and use the required version of clang, please run ./clang/setup.sh. Using this script should make the variable CLANG_PREFIX unnecessary to compile the plugin.

Caveat:

  • Because of the nature of C++, clang and the plugins need to be compiled with the exact same C++ libraries.
  • Also, the default stripping command of clang in release mode breaks plugins.

Once the target compiler is installed, make test should run the unit tests.

Ocaml users may also run:

make -C clang-ocaml test  #requires proper ocaml libraries, see included clang-ocaml/README

Mac users may create an Xcode project as follows:

export CLANG_PREFIX=/usr/local #should be the same as above
make xcode

Additional configuration options are available in Makefile.config (and possibly CMakeLists.txt).

About

Plugins to clang-analyzer and clang-frontend

License:Other


Languages

Language:C++ 75.1%Language:OCaml 8.2%Language:Objective-C 6.6%Language:Makefile 4.9%Language:OpenEdge ABL 2.0%Language:Shell 1.4%Language:CMake 0.8%Language:Python 0.7%Language:C 0.3%Language:Objective-C++ 0.0%