mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-09-14 03:10:07 +00:00
112 lines
3.2 KiB
Nix
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?
|
|
};
|
|
})
|