LLVM: Difference between revisions
imported>Nix m add applications and languages categories |
imported>Igodlab m libcxx & libcxxabi should be enabled in -DLLVM_ENABLE_RUNTIMES rather than -DLLVM_ENABLE_PROJECTS |
||
Line 34: | Line 34: | ||
"-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON" | "-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON" | ||
# change this to enable the projects you need | # change this to enable the projects you need | ||
"-DLLVM_ENABLE_PROJECTS=clang | "-DLLVM_ENABLE_PROJECTS=clang" | ||
# enable libcxx* to come into play at runtimes | |||
"-DLLVM_ENABLE_RUNTIMES=libcxx;libcxxabi" | |||
# this makes llvm only to produce code for the current platform, this saves CPU time, change it to what you need | # this makes llvm only to produce code for the current platform, this saves CPU time, change it to what you need | ||
"-DLLVM_TARGETS_TO_BUILD=host" | "-DLLVM_TARGETS_TO_BUILD=host" |
Revision as of 19:57, 5 January 2023
From Wikipedia:
- The LLVM compiler infrastructure project is a "collection of modular and reusable compiler and toolchain technologies" used to develop compiler front ends and back ends.
Build LLVM/clang from source
LLVM/clang when compiled from source won't find headers/libraries/startup files without compiler wrapper. However it is possible to use the following shell.nix
to get started and provide the missing flags to the compiler manually
with import <nixpkgs> {};
let
gccForLibs = stdenv.cc.cc;
in stdenv.mkDerivation {
name = "llvm-env";
buildInputs = [
bashInteractive
ninja
cmake
llvmPackages_latest.llvm
];
# where to find libgcc
NIX_LDFLAGS="-L${gccForLibs}/lib/gcc/${targetPlatform.config}/${gccForLibs.version}";
# teach clang about C startup file locations
CFLAGS="-B${gccForLibs}/lib/gcc/${targetPlatform.config}/${gccForLibs.version} -B ${stdenv.cc.libc}/lib";
cmakeFlags = [
"-DGCC_INSTALL_PREFIX=${gcc}"
"-DC_INCLUDE_DIRS=${stdenv.cc.libc.dev}/include"
"-GNinja"
# Debug for debug builds
"-DCMAKE_BUILD_TYPE=Release"
# inst will be our installation prefix
"-DCMAKE_INSTALL_PREFIX=../inst"
"-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON"
# change this to enable the projects you need
"-DLLVM_ENABLE_PROJECTS=clang"
# enable libcxx* to come into play at runtimes
"-DLLVM_ENABLE_RUNTIMES=libcxx;libcxxabi"
# this makes llvm only to produce code for the current platform, this saves CPU time, change it to what you need
"-DLLVM_TARGETS_TO_BUILD=host"
];
}
After that you can execute the following commands to get a working clang:
$ git clone https://github.com/llvm/llvm-project/
$ mkdir build && cd build
$ cmake $cmakeFlags ../llvm-project/llvm
$ ninja
# installs everything to ../inst
$ ninja install
$ cd ..
Then assuming you have a test program called main.c
:
$ ./inst/bin/clang $CFLAGS -o main main.c