Skip to content
Merged
66 changes: 41 additions & 25 deletions pkgs/by-name/sp/spirv-llvm-translator/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -14,45 +14,51 @@

let
llvmMajor = lib.versions.major llvm.version;
isROCm = lib.hasPrefix "rocm" llvm.pname;

# ROCm, if actively updated will always be at the latest version
versions = {
"21" = rec {
version = "21.1.0";
rev = "v${version}";
hash = "sha256-kk8BbPl/UBW1gaO/cuOQ9OsiNTEk0TkvRDLKUAh6exk=";
};
"20" = rec {
version = "20.1.5";
rev = "v${version}";
hash = "sha256-GdlC/Vl61nTNdua2s+CW2YOvkSKK6MNOvBc/393iths=";
};
"19" = rec {
version = "19.1.6";
version = "19.1.10";
rev = "v${version}";
hash = "sha256-mUvDF5y+cBnqUaHjyiiE8cJGH5MfQMqGFy6bYv9vCVY=";
hash = "sha256-VgA47AGMnOKYNeW95nxJZzmKnYK8D/9okgssPnPqXXI=";
};
"18" = rec {
version = "18.1.11";
version = "18.1.15";
rev = "v${version}";
hash = "sha256-VoALyFqShKL3bpeoOIdKoseNfDWiRE+j0ppHapXOmEU=";
hash = "sha256-rt3RTZut41uDEh0YmpOzH3sOezeEVWtAIGMKCHLSJBw=";
};
"17" = rec {
version = "17.0.11";
version = "17.0.15";
rev = "v${version}";
hash = "sha256-Ba4GZS7Rc93Fphj2xaBZ3AqwXvxB9UU0gzPNoDEoaQM=";
hash = "sha256-ETpTQYMMApECDfuRY87HrO/PUxZ13x9dBRJ3ychslUI=";
};
"16" = rec {
version = "16.0.11";
version = "16.0.15";
rev = "v${version}";
hash = "sha256-PI4cT/PGqpaF5SysOTrEE4D+OcIUsIOMzww4CRPtwBQ=";
hash = "sha256-30i73tGl+1KlP92XA0uxdMTydd9EtaQ4SZ0W1kdm1fQ=";
};
"15" = rec {
version = "15.0.13";
version = "15.0.15";
rev = "v${version}";
hash = "sha256-RnGbBHUUGjIBcakQJO4nAm3/oIrQ8nkx+BC8Evw6Jmc=";
hash = "sha256-kFVDS+qwoG1AXrZ8LytoiLVbZkTGR9sO+Wrq3VGgWNQ=";
};
"14" = {
version = "14.0.11+unstable-2025-01-28";
rev = "9df26b6af308cb834a4013deb8094f386f29accd";
hash = "sha256-8VRQwXFbLcYgHtWKs73yuTsy2kkCgYgPqD+W/GPy1BM=";
"14" = rec {
version = "14.0.14";
rev = "v${version}";
hash = "sha256-PW+5w93omLYPZXjRtU4BNY2ztZ86pcjgUQZkrktMq+4=";
};
};

branch =
versions."${if isROCm then "17" else llvmMajor}"
or (throw "Incompatible LLVM version ${llvmMajor}");
branch = versions."${llvmMajor}" or (throw "Incompatible LLVM version ${llvmMajor}");
in
stdenv.mkDerivation {
pname = "SPIRV-LLVM-Translator";
Expand All @@ -76,27 +82,29 @@ stdenv.mkDerivation {
nativeBuildInputs = [
pkg-config
cmake
]
++ (if isROCm then [ llvm ] else [ llvm.dev ]);
llvm.dev
];

buildInputs = [
spirv-headers
spirv-tools
]
++ lib.optionals (!isROCm) [ llvm ];
llvm
];

nativeCheckInputs = [ lit ];

cmakeFlags = [
"-DLLVM_INCLUDE_TESTS=ON"
"-DLLVM_DIR=${(if isROCm then llvm else llvm.dev)}"
"-DLLVM_DIR=${llvm.dev}"
"-DBUILD_SHARED_LIBS=YES"
"-DLLVM_SPIRV_BUILD_EXTERNAL=YES"
# RPATH of binary /nix/store/.../bin/llvm-spirv contains a forbidden reference to /build/
"-DCMAKE_SKIP_BUILD_RPATH=ON"
"-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${spirv-headers.src}"
]
++ lib.optional (llvmMajor == "19") "-DBASE_LLVM_VERSION=${lib.versions.majorMinor llvm.version}.0";
++ lib.optional (
lib.toInt llvmMajor >= 19
) "-DBASE_LLVM_VERSION=${lib.versions.majorMinor llvm.version}.0";

# FIXME: CMake tries to run "/llvm-lit" which of course doesn't exist
doCheck = false;
Expand Down Expand Up @@ -125,5 +133,13 @@ stdenv.mkDerivation {
license = licenses.ncsa;
platforms = platforms.unix;
maintainers = with maintainers; [ gloaming ];

# For the LLVM 21 build some commits to spirv-headers
# are required that didn't make it into the final release of 1.4.321
# For example: 9e3836d Add SPV_INTEL_function_variants
# Once spirv-headers are released again and updated on nixpkgs,
# this will switch over to the nixpkgs version and should no
# longer be broken.
broken = llvmMajor == "21" && lib.versionOlder spirv-headers.version "1.4.322";
};
}
Loading