Skip to content

Instantly share code, notes, and snippets.

@theoparis
Last active March 31, 2023 06:19
Show Gist options
  • Select an option

  • Save theoparis/6eb9e8af9fbacd5f2abbb6f140083209 to your computer and use it in GitHub Desktop.

Select an option

Save theoparis/6eb9e8af9fbacd5f2abbb6f140083209 to your computer and use it in GitHub Desktop.
LLVM MLIR Nix Shell
# BSD Zero Clause License
#
# Copyright (c) 2023 Theo Paris
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
let
pkgs = import <nixpkgs> {};
mlir = pkgs.stdenv.mkDerivation rec {
name = "mlir";
version = "0.0.1";
src = builtins.fetchTarball {
url = "https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-16.0.0.tar.gz";
};
enableParallelBuilding = true;
buildInputs = with pkgs; [
llvmPackages_15.clang
llvmPackages_15.lld
cmake
gnumake
libffi
python312
libxml2
zlib
];
# TODO: build libclang, llvm-config, etc
configurePhase = ''
export LD_LIBRARY_PATH="${pkgs.zlib}/lib:$LD_LIBRARY_PATH"
cmake -B build \
-DLLVM_ENABLE_PROJECTS=mlir \
-DLLVM_BUILD_EXAMPLES=OFF \
-DLLVM_TARGETS_TO_BUILD="X86" \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_BENCHMARKS=OFF \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DLLVM_USE_LINKER=lld \
-DCMAKE_BUILD_TYPE=MinSizeRel \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_USE_SANITIZER="Address;Undefined" \
-DLLVM_PARALLEL_LINK_JOBS=2 \
-DCMAKE_INSTALL_PREFIX=$out \
./llvm
'';
buildPhase = ''
export LD_LIBRARY_PATH="${pkgs.zlib}/lib:$LD_LIBRARY_PATH"
cmake --build build -- -j $NIX_BUILD_CORES
'';
installPhase = ''
export LD_LIBRARY_PATH="${pkgs.zlib}/lib:$LD_LIBRARY_PATH"
cmake --install build
'';
};
in
pkgs.mkShell {
shellHook = ''
export LD_LIBRARY_PATH="${pkgs.zlib}/lib:$LD_LIBRARY_PATH"
export LIBCLANG_PATH="${pkgs.llvmPackages_15.libclang.lib}/lib"
'';
buildInputs = with pkgs; [
rustc
cargo
cmake
ninja
rust-analyzer
zlib
mlir
];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment