The LLVM compiler infrastructure project is a set of compiler and toolchain technologies, which can be used to develop a front end for any programming language and a back end for any instruction set architecture. LLVM is designed around a language-independent intermediate representation (IR) that serves as a portable, high-level assembly language that can be optimized with a variety of transformations over multiple passes.
Main Components Edit
LLVM contains a list components
- Clang: Frontend for C language family
- LLVM Compiler/Clang Plugins Clang Plugins make it possible to run extra user defined actions during a compilation.
- compiler-rt: runtime libraries with builtins, sanitizer runtimes, profile, and Apple Blocks runtime interfaces.
- test-suite: https://github.com/llvm/llvm-test-suite
OpenMP support Edit
see more at OpenMP Support
With the release of Clang 3.8.0, OpenMP 3.1 support is enabled in Clang by default, and the OpenMP runtime is therefore built as a normal part of the Clang build, and distributed with the binary distributions. You do not, therefore, need explicitly to check out this code, or build it out of tree; a normal Clang check out and build will automatically include building these runtime libraries.
cmake -G Ninja -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=$LLVM_PATH -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;openmp" -DCLANG_BUILD_EXAMPLES=1 $LLVM_SRC/llvm
ninja install -j8 -l8
Development Support Edit
Code review of LLVM is handled by Phabricator https://reviews.llvm.org/. Regression tests are run by Buildbot http://lab.llvm.org:8011/ using test suite under https://github.com/llvm/llvm-test-suite .
LLVM uses Buildbot to run some regression tests.
Their website has JSON API: http://lab.llvm.org:8011/json/help
Take the OpenMP testing’s API results as an example
This get request will get a json file, with links to each step’s logs among other information. You check the log files from the links to see the command lines used. For example: here is the log file for the configuring step: