Files
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

118 lines
2.7 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
cmake,
pkg-config,
lit,
llvm,
spirv-headers,
spirv-tools,
pkgs,
}:
let
llvmMajor = lib.versions.major llvm.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.10";
rev = "v${version}";
hash = "sha256-VgA47AGMnOKYNeW95nxJZzmKnYK8D/9okgssPnPqXXI=";
};
"18" = rec {
version = "18.1.15";
rev = "v${version}";
hash = "sha256-rt3RTZut41uDEh0YmpOzH3sOezeEVWtAIGMKCHLSJBw=";
};
};
branch =
versions."${llvmMajor}" or {
version = "${llvmMajor}.x.x";
rev = "";
hash = "";
};
in
stdenv.mkDerivation {
pname = "SPIRV-LLVM-Translator";
inherit (branch) version;
src = fetchFromGitHub {
owner = "KhronosGroup";
repo = "SPIRV-LLVM-Translator";
inherit (branch) rev hash;
};
# TODO: Remove.
patches = [ ];
nativeBuildInputs = [
pkg-config
cmake
llvm.dev
];
buildInputs = [
spirv-headers
spirv-tools
llvm
];
nativeCheckInputs = [ lit ];
cmakeFlags = [
"-DLLVM_INCLUDE_TESTS=ON"
"-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 (
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;
makeFlags = [
"all"
"llvm-spirv"
];
postInstall = ''
install -D tools/llvm-spirv/llvm-spirv $out/bin/llvm-spirv
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
install_name_tool $out/bin/llvm-spirv \
-change @rpath/libLLVMSPIRVLib.dylib $out/lib/libLLVMSPIRVLib.dylib
'';
passthru.tests = lib.genAttrs (lib.attrNames versions) (
version: pkgs.spirv-llvm-translator.override { llvm = pkgs."llvm_${version}"; }
);
meta = with lib; {
homepage = "https://github.com/KhronosGroup/SPIRV-LLVM-Translator";
description = "Tool and a library for bi-directional translation between SPIR-V and LLVM IR";
mainProgram = "llvm-spirv";
license = licenses.ncsa;
platforms = platforms.unix;
maintainers = with maintainers; [ gloaming ];
broken = !(versions ? ${llvmMajor});
};
}