Files
nixpkgs/pkgs/by-name/is/ispc/package.nix
2026-06-25 20:18:23 +00:00

112 lines
3.2 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
cmake,
which,
m4,
python3,
bison,
flex,
llvmPackages,
ncurses,
onetbb,
# the default test target is sse4, but that is not supported by all Hydra agents
testedTargets ?
if stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isAarch32 then
[ "neon-i32x4" ]
else
[ "sse2-i32x4" ],
}:
stdenv.mkDerivation (finalAttrs: {
pname = "ispc";
version = "1.31.0";
src = fetchFromGitHub {
owner = "ispc";
repo = "ispc";
tag = "v${finalAttrs.version}";
hash = "sha256-n1zWokIuZEDJZN/KH3jxnIhgUo8iKDfZwiQnXZdxhL8=";
};
nativeBuildInputs = [
cmake
which
m4
bison
flex
python3
llvmPackages.libllvm.dev
onetbb
];
buildInputs = with llvmPackages; [
libllvm
libclang
openmp
ncurses
];
postPatch =
# Workaround for LLVM version mismatch: the build uses libcxx 19 (from darwin
# stdenv), while LLVM 21 is provided as a runtime dependency.
lib.optionalString stdenv.hostPlatform.isDarwin ''
substituteInPlace src/util.cpp \
--replace-fail "#ifdef _LIBCPP_VERSION" "#if FALSE"
'';
inherit testedTargets;
doCheck = true;
# the compiler enforces -Werror, and -fno-strict-overflow makes it mad.
# hilariously this is something of a double negative: 'disable' the
# 'strictoverflow' hardening protection actually means we *allow* the compiler
# to do strict overflow optimization. somewhat misleading...
hardeningDisable = [ "strictoverflow" ];
checkPhase = ''
export ISPC_HOME=$PWD/bin
for target in $testedTargets
do
echo "Testing target $target"
echo "================================"
echo
(cd ../
PATH=${llvmPackages.clang}/bin:$PATH python scripts/run_tests.py -t $target --non-interactive --verbose --file=test_output.log
fgrep -q "No new fails" test_output.log || exit 1)
done
'';
cmakeFlags = [
(lib.cmakeFeature "FILE_CHECK_EXECUTABLE" "${llvmPackages.llvm}/bin/FileCheck")
(lib.cmakeFeature "LLVM_AS_EXECUTABLE" "${llvmPackages.llvm}/bin/llvm-as")
(lib.cmakeFeature "LLVM_CONFIG_EXECUTABLE" "${llvmPackages.llvm.dev}/bin/llvm-config")
(lib.cmakeFeature "CLANG_EXECUTABLE" "${llvmPackages.clang}/bin/clang")
(lib.cmakeFeature "CLANGPP_EXECUTABLE" "${llvmPackages.clang}/bin/clang++")
(lib.cmakeBool "ISPC_INCLUDE_EXAMPLES" false)
(lib.cmakeBool "ISPC_INCLUDE_UTILS" false)
(lib.cmakeFeature "ARM_ENABLED=" (
if stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isAarch32 then "TRUE" else "FALSE"
))
(lib.cmakeFeature "X86_ENABLED=" (
if stdenv.hostPlatform.isx86_64 || stdenv.hostPlatform.isx86_32 then "TRUE" else "FALSE"
))
];
meta = {
description = "Intel 'Single Program, Multiple Data' Compiler, a vectorised language";
homepage = "https://ispc.github.io/";
changelog = "https://github.com/ispc/ispc/releases/tag/v${finalAttrs.version}";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [
thoughtpolice
athas
alexfmpe
];
mainProgram = "ispc";
platforms = with lib.platforms; linux ++ darwin; # TODO: buildable on more platforms?
};
})