Low-level backend
- Todo:
- AVR8
- Cortex-M (STM32Fx/Lx)
- embedded Linux (Buildroot/OpenWrt)
- and other strange MCUs not supported by GCC
Installation
$ sudo apt install build-essentials cmake libboost-python-dev
$ mkdir ~/LLVM ; cd ~/LLVM
$ mkdir gz ; cd gz
sources
required
# core source tree
$ cd ~/LLVM
$ xzcat ~/LLVM/gz/llvm-6.0.0.src.tar.xz | tar x
optional
compiler-rt http://releases.llvm.org/6.0.0/compiler-rt-6.0.0.src.tar.xz # compiler-rt
$ cd ~/LLVM/llvm-6.0.0.src/projects
$ xzcat ~/LLVM/gz/compiler-rt-6.0.0.src.tar.xz | tar x
$ mv compiler-rt-6.0.0.src compiler-rt
clang http://releases.llvm.org/6.0.0/cfe-6.0.0.src.tar.xz # clang
$ cd ~/LLVM/llvm-6.0.0.src/tools
$ xzcat ~/LLVM/gz/cfe-6.0.0.src.tar.xz | tar x
$ mv cfe-6.0.0.src clang
- lld (linker)
- lldb (debugger, better C++ support)
- libs:
- libcxx/libcxxabi (C++11 Standard Library Support)
- linunwind (for platforms that do not have a system HP unwinder)
- openmp (parallel)
- polly (polyhedral optimizations)
- clang-tools
- clang-tidy (C++ linter static analyzer, CERT only, no MISRA)
- clangd (IDE helper: source browser,..)
- clang-doc (automated docs generator, early state, use DoxyGen)
build
$ rm -rf ~/LLVM/build ; mkdir ~/LLVM/build ; cd ~/LLVM/build
$ cmake ~/LLVM/llvm-6.0.0.src \
-DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=NO \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR -DLLVM_TARGETS_TO_BUILD="X86;ARM"
$ make -j4 && sudo make install
faster build
-DLLVM_PARALLEL_COMPILE_JOBS=4 \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-pipe -O0" -DCMAKE_CXX_FLAGS="-pipe -O0" \
extra options
-DLLVM_DEFAULT_TARGET_TRIPLE=arm-none-eabi \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_INSTALL_PREFIX=$(HOME)/LLVM
-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/tmp/LLVM
-DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS="-O0 -g" -DCMAKE_CXX_FLAGS="-O0 -g"
-DCMAKE_INSTALL_PREFIX=$(HOME)/LLVM/AVR