|
| 1 | +import Tabs from '@theme/Tabs'; |
| 2 | +import TabItem from '@theme/TabItem'; |
| 3 | + |
| 4 | +LingoDB relies on three main external dependencies: |
| 5 | +* [LLVM/MLIR 20](https://github.com/llvm/llvm-project) |
| 6 | +* [Apache Arrow 20](https://arrow.apache.org/release/19.0.0.html) |
| 7 | +* [Boost Context 1.83](https://www.boost.org/doc/libs/1_83_0/libs/context/doc/html/index.html) |
| 8 | + |
| 9 | +**Additional tools and libraries required:** |
| 10 | +* C++ compiler supporting C++ 20 |
| 11 | +* CMake 3.13.4 or newer |
| 12 | +* Ninja |
| 13 | +* lit (optional, for testing), can be e.g., installed via `pip install lit` |
| 14 | + |
| 15 | +We also provide a [Dockerfile](https://github.com/lingo-db/lingo-db/pkgs/container/lingodb-dev) that contains all dependencies and tools required to build LingoDB. |
| 16 | + |
| 17 | +When building dependencies from source, make sure that either the cmake config files are installed in a system-wide locations, or for example, the `CMAKE_PREFIX_PATH` is set accordingly. |
| 18 | + |
| 19 | +## LLVM/MLIR |
| 20 | + |
| 21 | +<Tabs groupId="os-tabs"> |
| 22 | +<TabItem value="linux" label="Ubuntu/Linux"> |
| 23 | +Follow the instructions on [https://apt.llvm.org/](https://apt.llvm.org/) to install the repository on your system. |
| 24 | +Then install the following packages: `clang-20 llvm-20 libclang-20-dev llvm-20-dev libmlir-20-dev mlir-20-tools clang-tidy-20` |
| 25 | + |
| 26 | +### Binaries |
| 27 | +For other recent Linux distributions, you can also rely on the pre-built binaries provided by the LLVM project on the Github release pages. |
| 28 | + |
| 29 | +### Building from Source |
| 30 | + |
| 31 | +```shell |
| 32 | +wget https://github.com/llvm/llvm-project/releases/download/llvmorg-20.1.0-rc1/llvm-project-20.1.0-rc1.src.tar.xz |
| 33 | +tar -xf llvm-project-20.1.0-rc1.src.tar.xz |
| 34 | +mkdir llvm-project-20.1.0-rc1.src/build |
| 35 | +cd llvm-project-20.1.0-rc1.src |
| 36 | +export INSTALL_PREFIX=[install_prefix] |
| 37 | +env VIRTUAL_ENV=/venv cmake -B build -DLLVM_ENABLE_PROJECTS="llvm;mlir;clang;clang-tools-extra" -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_BUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -G Ninja -DLLVM_ENABLE_ASSERTIONS=OFF -DLLVM_BUILD_TESTS=OFF -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=OFF -DLLVM_ENABLE_DUMP=ON -DLLVM_ENABLE_FFI=ON -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer" -DLLVM_PARALLEL_LINK_JOBS=1 -DLLVM_PARALLEL_TABLEGEN_JOBS=10 -DBUILD_SHARED_LIBS=OFF -DLLVM_INSTALL_UTILS=ON -DLLVM_ENABLE_ZLIB=OFF -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX llvm/ |
| 38 | +cmake --build build --target install -j$(nproc) |
| 39 | +``` |
| 40 | + |
| 41 | +</TabItem> |
| 42 | +<TabItem value="macos" label="MacOS"> |
| 43 | +Install LLVM/MLIR using Homebrew and make it available system-wide: |
| 44 | + |
| 45 | +```shell |
| 46 | +brew install llvm@20 |
| 47 | +brew link --force llvm@20 |
| 48 | +``` |
| 49 | + |
| 50 | +### Binaries |
| 51 | +⚠️ **Caution**: the pre-built binaries provided by the LLVM project on the Github release pages **DO NOT** serve as a replacement, since they lack the required MLIR support. |
| 52 | + |
| 53 | +### Building from Source |
| 54 | + |
| 55 | +1. Install XCode (through the App Store). |
| 56 | +2. Install the build requisites: `brew install cmake ninja z3` |
| 57 | +2. Make sure to replace [install_prefix] with your preferred install path of LLVM. |
| 58 | +```shell |
| 59 | +wget https://github.com/llvm/llvm-project/releases/download/llvmorg-20.1.4/llvm-project-20.1.4.src.tar.xz |
| 60 | +tar -xf llvm-project-20.1.4.src.tar.xz |
| 61 | +mkdir llvm-project-20.1.4.src/build |
| 62 | +cd llvm-project-20.1.4.src |
| 63 | +export INSTALL_PREFIX=[install_prefix] |
| 64 | +export SDKROOT=$(xcrun --sdk macosx --show-sdk-path) |
| 65 | +env VIRTUAL_ENV=/venv cmake -B build -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;mlir;polly;lldb" -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind;pstl;openmp" -DLLVM_TARGETS_TO_BUILD="AArch64" -DLLVM_BUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -G Ninja -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_BUILD_TESTS=OFF -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_ENABLE_DUMP=ON -DLLVM_ENABLE_FFI=ON -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer" -DLLVM_PARALLEL_LINK_JOBS=1 -DLLVM_PARALLEL_TABLEGEN_JOBS=10 -DBUILD_SHARED_LIBS=OFF -DLLVM_INSTALL_UTILS=ON -DLLVM_ENABLE_ZLIB=OFF -DLLVM_POLLY_LINK_INTO_TOOLS=ON -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON -DLLVM_ENABLE_EH=OFF -DLLVM_ENABLE_RTTI=ON -DLLVM_INCLUDE_DOCS=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_OPTIMIZED_TABLEGEN=ON -DLLVM_USE_RELATIVE_PATHS_IN_FILES=ON -DLLVM_SOURCE_PREFIX=. -DLLDB_USE_SYSTEM_DEBUGSERVER=ON -DLIBOMP_INSTALL_ALIASES=OFF -DLIBCXX_INSTALL_MODULES=ON -DLLVM_CREATE_XCODE_TOOLCHAIN=OFF -DCLANG_FORCE_MATCHING_LIBCLANG_SOVERSION=OFF -DLLVM_BUILD_LLVM_C_DYLIB=ON -DLLVM_ENABLE_LIBCXX=ON -DLIBCXX_PSTL_BACKEND=libdispatch -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_FIND_FRAMEWORK=LAST -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=/opt/homebrew/Library/Homebrew/cmake/trap_fetchcontent_provider.cmake -Wno-dev -DCMAKE_OSX_SYSROOT=$(xcrun --sdk macosx --show-sdk-path) -DLLVM_ENABLE_Z3_SOLVER=ON -DFFI_INCLUDE_DIR=$(xcrun --sdk macosx --show-sdk-path)/usr/include/ffi -DFFI_LIBRARY_DIR=$(xcrun --sdk macosx --show-sdk-path)/usr/lib -DLIBCXX_INSTALL_LIBRARY_DIR=$INSTALL_PREFIX/lib/c++ -DLIBUNWIND_INSTALL_LIBRARY_DIR=$INSTALL_PREFIX/lib/unwind -DLIBCXXABI_INSTALL_LIBRARY_DIR=$INSTALL_PREFIX/c++ -DRUNTIMES_CMAKE_ARGS="-DCMAKE_INSTALL_RPATH=@loader_path|@loader_path/../unwind" -DBUILTINS_CMAKE_ARGS="-DCOMPILER_RT_ENABLE_IOS=OFF;-DCOMPILER_RT_ENABLE_WATCHOS=OFF;-DCOMPILER_RT_ENABLE_TVOS=OFF" -DCMAKE_PREFIX_PATH=/opt/homebrew -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX llvm/ |
| 66 | +cmake --build build --target install -j$(sysctl -n hw.logicalcpu) |
| 67 | +``` |
| 68 | +</TabItem> |
| 69 | +</Tabs> |
| 70 | + |
| 71 | +## Apache Arrow |
| 72 | + |
| 73 | +<Tabs groupId="os-tabs"> |
| 74 | +<TabItem value="linux" label="Ubuntu/Linux"> |
| 75 | + |
| 76 | +```shell |
| 77 | +wget https://apache.jfrog.io/artifactory/arrow/$(lsb_release --id --short | tr 'A-Z' 'a-z')/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb |
| 78 | +apt install -y -V ./apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb |
| 79 | +apt-get update |
| 80 | +apt-get install libarrow-dev=20.* |
| 81 | +``` |
| 82 | + |
| 83 | +### Binaries |
| 84 | +For other recent Linux distributions, you can also rely on the pre-built binaries provided by the Apache Arrow project. |
| 85 | + |
| 86 | +### Building from Source |
| 87 | + |
| 88 | +```shell |
| 89 | +wget https://github.com/apache/arrow/releases/download/apache-arrow-20.0.0/apache-arrow-20.0.0.tar.gz |
| 90 | +tar -xf apache-arrow-20.0.0.tar.gz |
| 91 | +cd apache-arrow-20.0.0/cpp |
| 92 | +cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=[output-dir] -DARROW_DEPENDENCY_SOURCE=BUNDLED -DARROW_BUILD_STATIC=ON -DARROW_CSV=ON -DARROW_JSON=ON -DARROW_COMPUTE=ON apache-arrow-20.0.0/cpp |
| 93 | +cmake --build build --target install -j$(nproc) |
| 94 | +``` |
| 95 | + |
| 96 | +</TabItem> |
| 97 | +<TabItem value="macos" label="MacOS"> |
| 98 | + |
| 99 | +Install Apache Arrow using Homebrew: |
| 100 | + |
| 101 | +```shell |
| 102 | +brew tap lingo-db/homebrew https://github.com/lingo-db/homebrew.git |
| 103 | +brew install lingo-db/homebrew/apache-arrow@20 |
| 104 | +``` |
| 105 | + |
| 106 | +### Building from Source |
| 107 | + |
| 108 | +```shell |
| 109 | +wget https://github.com/apache/arrow/releases/download/apache-arrow-20.0.0/apache-arrow-20.0.0.tar.gz |
| 110 | +tar -xf apache-arrow-20.0.0.tar.gz |
| 111 | +cd apache-arrow-20.0.0/cpp |
| 112 | +cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=[output-dir] -DARROW_DEPENDENCY_SOURCE=BUNDLED -DARROW_BUILD_STATIC=ON -DARROW_CSV=ON -DARROW_JSON=ON -DARROW_COMPUTE=ON -DCMAKE_PREFIX_PATH=/opt/homebrew/ -DCMAKE_CXX_COMPILER=/opt/homebrew/bin/clang++ -DCMAKE_C_COMPILER=/opt/homebrew/bin/clang |
| 113 | +cmake --build build --target install -j$(sysctl -n hw.logicalcpu) |
| 114 | +``` |
| 115 | + |
| 116 | +</TabItem> |
| 117 | +</Tabs> |
| 118 | + |
| 119 | +## Boost Context |
| 120 | + |
| 121 | +<Tabs groupId="os-tabs"> |
| 122 | +<TabItem value="linux" label="Ubuntu/Linux"> |
| 123 | + |
| 124 | +```shell |
| 125 | +apt-get install libboost-context1.83-dev |
| 126 | +``` |
| 127 | + |
| 128 | +### Build from Source |
| 129 | +```shell |
| 130 | +wget https://archives.boost.io/release/1.83.0/source/boost_1_83_0.tar.gz |
| 131 | +tar -xf boost_1_83_0.tar.gz |
| 132 | +cd boost_1_83_0 |
| 133 | + ./bootstrap.sh --prefix=/usr # or any other directory in the PATH/LD_LIBRARY_PATH |
| 134 | + ./b2 install --with-context |
| 135 | +``` |
| 136 | + |
| 137 | +</TabItem> |
| 138 | +<TabItem value="macos" label="MacOS"> |
| 139 | + |
| 140 | +Install Boost Context using Homebrew: |
| 141 | + |
| 142 | +```shell |
| 143 | +brew install boost |
| 144 | +``` |
| 145 | + |
| 146 | +</TabItem> |
| 147 | +</Tabs> |
0 commit comments