Skip to content

How to use a custom LLVM build with omniscidb

Guilherme Leobas edited this page Sep 17, 2020 · 1 revision

In some cases, it might be worth to build LLVM from source to use with OmniSciDB. This quick guide will show how one can achieve this.

  1. Create a new omniscidb environment without any LLVM tools
  2. Activate the environment
  3. Clone LLVM. Be careful to clone the correct version of LLVM. One can check the available versions here
git clone --depth 1 --branch llvmorg-9.0.1 --single-branch https://github.com/llvm/llvm-project
  1. mkdir llvm-project/build && cd llvm-project/build
  2. Create a script called build.sh inside llvm-project/build with the following content:
PREFIX=${CONDA_PREFIX}
CPU_COUNT=20

CC=$(which gcc)
CXX=$(which g++)

if [[ "$target_platform" == "linux-64" ]]; then
  CMAKE_ARGS="${CMAKE_ARGS} -DLLVM_USE_INTEL_JITEVENTS=ON"
fi

if [[ "$CC_FOR_BUILD" != "" && "$CC_FOR_BUILD" != "$CC" ]]; then
  CMAKE_ARGS="${CMAKE_ARGS} -DCROSS_TOOLCHAIN_FLAGS_NATIVE=-DCMAKE_C_COMPILER=$CC_FOR_BUILD;-DCMAKE_CXX_COMPILER=$CXX_FOR_BUILD;-DCMAKE_C_FLAGS=-O2;-DCMAKE_CXX_FLAGS=-O2"
  CMAKE_ARGS="${CMAKE_ARGS} -DLLVM_HOST_TRIPLE=$(echo $HOST | sed s/conda/unknown/g)"
fi

# To build omniscidb, one needs to build LLVM, clang, clang-tools-extra and compiler-rt

cmake ../llvm/ \
      -DCMAKE_INSTALL_PREFIX="${PREFIX}" \
      -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt" \
      -DCMAKE_BUILD_TYPE=Release \
      -DLLVM_ENABLE_RTTI=ON \
      -DLLVM_INCLUDE_TESTS=ON \
      -DLLVM_INCLUDE_GO_TESTS=OFF \
      -DLLVM_INCLUDE_UTILS=ON \
      -DLLVM_INSTALL_UTILS=ON \
      -DLLVM_UTILS_INSTALL_DIR=libexec/llvm \
      -DLLVM_INCLUDE_DOCS=OFF \
      -DLLVM_INCLUDE_EXAMPLES=OFF \
      -DLLVM_ENABLE_TERMINFO=OFF \
      -DLLVM_ENABLE_LIBXML2=OFF \
      -DLLVM_ENABLE_ZLIB=ON \
      -DHAVE_LIBEDIT=OFF \
      -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \
      -DLLVM_BUILD_LLVM_DYLIB=yes \
      -DLLVM_LINK_LLVM_DYLIB=yes \
      ${CMAKE_ARGS} ..

make -j${CPU_COUNT}
  1. After the build, run make install to install llvm in the OmniSciDB conda environment.
  2. Compile OmniSciDB.