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.
== Installation ==
== Main Components ==
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.
== OpenMP support ==
see more at LLVM Compiler/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 ==
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
http://lab.llvm.org:8011/json/builders/openmp-gcc-x86_64-linux-debian/builds/7095This 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: