facebookarchive/facebook-clang-plugins

Plugins to clang-analyzer and clang-frontend

C++

484

301 commits

updated May 20, 2021

See the code

README

Deprecation Warning

This repo is deprecated. Development has moved to the Infer repo.

Facebook Clang Plugins

This repository aims to share some useful clang plugins developed at Facebook. They are mostly used by infer.

It contains frontend plugins to the clang compiler to 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.

Structure of the repository

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

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

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

Additional configuration options are available in Makefile.config.

Licence

The plugins are MIT-licensed.

Contributors

ma2bd

114 commits

jvillard

103 commits

dulmarod

23 commits

da319

9 commits

facebookarchive/facebook-clang-plugins

Plugins to clang-analyzer and clang-frontend

C++

484

301 commits

updated May 20, 2021

See the code

README

Deprecation Warning

This repo is deprecated. Development has moved to the Infer repo.

Facebook Clang Plugins

This repository aims to share some useful clang plugins developed at Facebook. They are mostly used by infer.

It contains frontend plugins to the clang compiler to 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.

Structure of the repository

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

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

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

Additional configuration options are available in Makefile.config.

Licence

The plugins are MIT-licensed.

Contributors

ma2bd

114 commits

jvillard

103 commits

dulmarod

23 commits

da319

9 commits

Languages

C++

75.3%

OCaml

10.8%

Makefile

5.1%

OpenEdge ABL

3.2%

Shell

2.9%

Objective-C

1.6%