From c88c272938c473601078ec2ef8f9230da6c111e6 Mon Sep 17 00:00:00 2001 From: Sameer Rahmani Date: Fri, 12 Jan 2024 20:11:09 +0000 Subject: [PATCH 1/3] llvm: Add the mlir package to llvm 17 (cherry picked from commit 262ed9bd904310a33653904a56546a15f88e971a) --- .../development/compilers/llvm/17/default.nix | 4 ++ .../compilers/llvm/17/mlir/default.nix | 71 +++++++++++++++++++ .../llvm/17/mlir/gnu-install-dirs.patch | 15 ++++ pkgs/top-level/all-packages.nix | 2 + 4 files changed, 92 insertions(+) create mode 100644 pkgs/development/compilers/llvm/17/mlir/default.nix create mode 100644 pkgs/development/compilers/llvm/17/mlir/gnu-install-dirs.patch diff --git a/pkgs/development/compilers/llvm/17/default.nix b/pkgs/development/compilers/llvm/17/default.nix index 95281df892e53..67076da64941b 100644 --- a/pkgs/development/compilers/llvm/17/default.nix +++ b/pkgs/development/compilers/llvm/17/default.nix @@ -144,6 +144,10 @@ in let inherit llvm_meta; }; + mlir = callPackage ./mlir { + inherit llvm_meta; + }; + lldb = callPackage ../common/lldb.nix { src = callPackage ({ runCommand }: runCommand "lldb-src-${version}" {} '' mkdir -p "$out" diff --git a/pkgs/development/compilers/llvm/17/mlir/default.nix b/pkgs/development/compilers/llvm/17/mlir/default.nix new file mode 100644 index 0000000000000..081b6bf9dd3d4 --- /dev/null +++ b/pkgs/development/compilers/llvm/17/mlir/default.nix @@ -0,0 +1,71 @@ +{ lib, stdenv, llvm_meta +, buildLlvmTools +, monorepoSrc, runCommand +, cmake +, ninja +, libxml2 +, libllvm +, version +, doCheck ? (!stdenv.isx86_32 /* TODO: why */) && (!stdenv.hostPlatform.isMusl) +}: + +stdenv.mkDerivation rec { + pname = "mlir"; + inherit version doCheck; + + # Blank llvm dir just so relative path works + src = runCommand "${pname}-src-${version}" {} '' + mkdir -p "$out" + cp -r ${monorepoSrc}/cmake "$out" + cp -r ${monorepoSrc}/${pname} "$out" + cp -r ${monorepoSrc}/third-party "$out/third-party" + + mkdir -p "$out/llvm" + ''; + + sourceRoot = "${src.name}/${pname}"; + + patches = [ + ./gnu-install-dirs.patch + ]; + + nativeBuildInputs = [ cmake ninja ]; + buildInputs = [ libllvm libxml2 ]; + + ninjaFlags = [ "-v " ]; + cmakeFlags = [ + "-DLLVM_BUILD_TOOLS=ON" + # Install headers as well + "-DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF" + "-DMLIR_TOOLS_INSTALL_DIR=${placeholder "out"}/bin/" + "-DLLVM_ENABLE_IDE=OFF" + "-DLLD_INSTALL_PACKAGE_DIR=${placeholder "out"}/lib/cmake/mlir" + "-DLLVM_BUILD_TESTS=${if doCheck then "ON" else "OFF"}" + "-DLLVM_ENABLE_FFI=ON" + "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}" + "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}" + "-DLLVM_ENABLE_DUMP=ON" + ] ++ lib.optionals stdenv.hostPlatform.isStatic [ + # Disables building of shared libs, -fPIC is still injected by cc-wrapper + "-DLLVM_ENABLE_PIC=OFF" + "-DLLVM_BUILD_STATIC=ON" + "-DLLVM_LINK_LLVM_DYLIB=off" + ] ++ lib.optionals ((stdenv.hostPlatform != stdenv.buildPlatform) && !(stdenv.buildPlatform.canExecute stdenv.hostPlatform)) [ + "-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen" + #"-DMLIR_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/mlir-tblgen" + ]; + + outputs = [ "out" ]; + + meta = llvm_meta // { + homepage = "https://mlir.llvm.org/"; + description = "Multi-Level IR Compiler Framework"; + longDescription = '' + The MLIR project is a novel approach to building reusable and extensible + compiler infrastructure. MLIR aims to address software fragmentation, + improve compilation for heterogeneous hardware, significantly reduce + the cost of building domain specific compilers, and aid in connecting + existing compilers together. + ''; + }; +} diff --git a/pkgs/development/compilers/llvm/17/mlir/gnu-install-dirs.patch b/pkgs/development/compilers/llvm/17/mlir/gnu-install-dirs.patch new file mode 100644 index 0000000000000..95191022d1a38 --- /dev/null +++ b/pkgs/development/compilers/llvm/17/mlir/gnu-install-dirs.patch @@ -0,0 +1,15 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index c91e9cd93dc8..23b6032a46b7 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -32,8 +32,8 @@ if(MLIR_STANDALONE_BUILD) + endif() + + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY +- "${CMAKE_CURRENT_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}") +- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") ++ "${CMAKE_INSTALL_LIBDIR}/${LLVM_LIBDIR_SUFFIX}") ++ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_INSTALL_BINDIR}") + + set(LLVM_LIT_ARGS "-sv" CACHE STRING "Default options for lit") + endif() diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 434e035561f25..9581150e75e89 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -16643,6 +16643,8 @@ with pkgs; llvm_16 = llvmPackages_16.llvm; llvm_17 = llvmPackages_17.llvm; + mlir_17 = llvmPackages_17.mlir; + libllvm = llvmPackages.libllvm; llvm-manpages = llvmPackages.llvm-manpages; From 50af26cefd384382abcb52914a0b8c09d96cc6b3 Mon Sep 17 00:00:00 2001 From: Sameer Rahmani Date: Thu, 22 Feb 2024 10:22:51 +0000 Subject: [PATCH 2/3] Update pkgs/development/compilers/llvm/17/mlir/default.nix Co-authored-by: John Ericson (cherry picked from commit 777f8c6a12e3d2c7a3732618accfc29395432be0) --- pkgs/development/compilers/llvm/17/mlir/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/compilers/llvm/17/mlir/default.nix b/pkgs/development/compilers/llvm/17/mlir/default.nix index 081b6bf9dd3d4..ef4666b1dc99c 100644 --- a/pkgs/development/compilers/llvm/17/mlir/default.nix +++ b/pkgs/development/compilers/llvm/17/mlir/default.nix @@ -55,7 +55,7 @@ stdenv.mkDerivation rec { #"-DMLIR_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/mlir-tblgen" ]; - outputs = [ "out" ]; + outputs = [ "out" "dev" ]; meta = llvm_meta // { homepage = "https://mlir.llvm.org/"; From 9e16c84e3b6aa990f5f2d56eb9bae0ac674078f8 Mon Sep 17 00:00:00 2001 From: Sameer Rahmani Date: Thu, 22 Feb 2024 10:23:17 +0000 Subject: [PATCH 3/3] Update pkgs/development/compilers/llvm/17/mlir/default.nix Co-authored-by: John Ericson (cherry picked from commit da2ccc5719c79b28f4bacd20c20ce897e87f605b) --- pkgs/development/compilers/llvm/17/mlir/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/compilers/llvm/17/mlir/default.nix b/pkgs/development/compilers/llvm/17/mlir/default.nix index ef4666b1dc99c..8e99fa0fe337f 100644 --- a/pkgs/development/compilers/llvm/17/mlir/default.nix +++ b/pkgs/development/compilers/llvm/17/mlir/default.nix @@ -52,7 +52,7 @@ stdenv.mkDerivation rec { "-DLLVM_LINK_LLVM_DYLIB=off" ] ++ lib.optionals ((stdenv.hostPlatform != stdenv.buildPlatform) && !(stdenv.buildPlatform.canExecute stdenv.hostPlatform)) [ "-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen" - #"-DMLIR_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/mlir-tblgen" + "-DMLIR_TABLEGEN_EXE=${buildLlvmTools.mlir}/bin/mlir-tblgen" ]; outputs = [ "out" "dev" ];