How To Setup Clang Tooling For LLVM
+Clang Tooling provides infrastructure to write tools that need syntactic and
+semantic infomation about a program. This term also relates to a set of specific
+tools using this infrastructure (e.g. clang-check
). This document
+provides information on how to set up and use Clang Tooling for the LLVM source
+code.
Introduction
+ + +Clang Tooling needs a compilation database to figure out specific build
+options for each file. Currently it can create a compilation database from the
+compilation_commands.json
file, generated by CMake. When invoking
+clang tools, you can either specify a path to a build directory using a command
+line parameter -p
or let Clang Tooling find this file in your
+source tree. In either case you need to configure your build using CMake to use
+clang tools.
Setup Clang Tooling Using CMake and Make
+ + +If you intend to use make to build LLVM, you should have CMake 2.8.6 or later +installed (can be found here).
+First, you need to generate Makefiles for LLVM with CMake. You need to make +a build directory and run CMake from it:
++ mkdir your/build/directory + cd your/build/directory + cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON path/to/llvm/sources ++ +
If you want to use clang instead of GCC, you can add
+-DCMAKE_C_COMPILER=/path/to/clang
+ -DCMAKE_CXX_COMPILER=/path/to/clang++
.
+You can also use ccmake, which provides a curses interface to configure CMake
+variables for lazy people.
As a result, the new compile_commands.json
file should appear in
+the current directory. You should link it to the LLVM source tree so that Clang
+Tooling is able to use it:
+ ln -s $PWD/compile_commands.json path/to/llvm/source/ ++ +
Now you are ready to build and test LLVM using make:
++ make check-all ++ + +
Using Clang Tools
+ + +After you completed the previous steps, you are ready to run clang tools. If
+you have a recent clang installed, you should have clang-check
in
+$PATH. Try to run it on any .cpp file inside the LLVM source tree:
+ clang-check tools/clang/lib/Tooling/CompilationDatabase.cpp ++
If you're using vim, it's convenient to have clang-check integrated. Put this +into your .vimrc:
++ set makeprg=clang-check\ % + map <F5> :make<CR><CR> ++ +
When editing C++ code, hit F5 to reparse the current buffer. The output will
+go into the error window, which you can enable with :cope
.
(Experimental) Using Ninja Build System
+ + +Optionally you can use the Ninja build system instead of +make. It is aimed at making your builds faster. Currently this step will require +building Ninja from sources and using a development version of CMake.
+To take advantage of using Clang Tools along with Ninja build you need at +least CMake 2.8.9. At the moment CMake 2.8.9 is still under development, so you +can get latest development sources and build it yourself:
++ git clone git://cmake.org/cmake.git + cd cmake + ./bootstrap + make + sudo make install ++ +
Having the correct version of CMake, you can clone the Ninja git repository +and build Ninja from sources:
++ git clone git://github.com/martine/ninja.git + cd ninja/ + ./bootstrap.py ++
This will result in a single binary ninja
in the current
+directory. It doesn't require installation and can just be copied to any
+location inside $PATH
, say /usr/local/bin/
:
+ sudo cp ninja /usr/local/bin/ + sudo chmod a+rx /usr/local/bin/ninja ++
After doing all of this, you'll need to generate Ninja build files for LLVM +with CMake. You need to make a build directory and run CMake from it:
++ mkdir your/build/directory + cd your/build/directory + cmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON path/to/llvm/sources ++ +
If you want to use clang instead of GCC, you can add
+-DCMAKE_C_COMPILER=/path/to/clang
+ -DCMAKE_CXX_COMPILER=/path/to/clang++
.
+You can also use ccmake, which provides a curses interface to configure CMake
+variables in an interactive manner.
As a result, the new compile_commands.json
file should appear in
+the current directory. You should link it to the LLVM source tree so that Clang
+Tooling is able to use it:
+ ln -s $PWD/compile_commands.json path/to/llvm/source/ ++ +
Now you are ready to build and test LLVM using Ninja:
++ ninja check-all ++
Other target names can be used in the same way as with make.
+