LLVM
LLVM is a huge topic on its own, you can read the docs at the LLVM's main website or check out the alternative resources listed at the bottom of the page.
LLVM is a set of modular Toolchain components such as Compilers, optimizers, linkers, assemblers, code-generators.
Originally, it began as a Compiler-builder/ compiler-framework for any language...
But now it has transformed from being just a compiler-framework, to being a toolchain comprising of many components with different functions.
The unique features across the board are that :
- The components can be tweaked to suit different languages and execution environments.
- The components are independent of each other.
LLVM components
-
LLVM core libraries : the core libraries include an IR-optimizer and a couple of pre-made code generators for popular CPUs. This module does not include an IR-to-machinecode code-generator.
-
Clang: this is a compiler front-end for C, C++ and Objective C. It is not a full-fledged compiler. It converts source code into an AST, does semantic analysis and typechecking before converting it into LLVM-IR. Clang DOES NOT do optimization, code generation or linking.
-
LLDB: this is the LLVM Debugger
-
LLD: this is the LLVM linker
-
libclc: an implementation of the OpenCL standard library. (OpenCL == Open Computer Language)