nixpkgs/pkgs/development/misc/amdapp-sdk/default.nix
John Wiegley 28b6fb61e6 Change occurrences of gcc to the more general cc
This is done for the sake of Yosemite, which does not have gcc, and yet
this change is also compatible with Linux.
2014-12-26 11:06:21 -06:00

107 lines
3.7 KiB
Nix

{ stdenv, fetchurl, makeWrapper, perl, mesa, xorg,
version? "2.8", # What version
samples? false # Should samples be installed
}:
let
bits = if stdenv.system == "x86_64-linux" then "64"
else "32";
arch = if stdenv.system == "x86_64-linux" then "x86_64"
else "x86";
src_info = {
"2.6" = {
url = "http://download2-developer.amd.com/amd/APPSDK/AMD-APP-SDK-v2.6-lnx${bits}.tgz";
x86 = "03vyvqp44f96036zsyy8n21ymbzy2bx09hlbd6ci3ikj8g7ic1dm";
x86_64 = "1fj55358s4blxq9bp77k07gqi22n5nfkzwjkbdc62gmy1zxxlhih";
};
"2.7" = {
url = "http://download2-developer.amd.com/amd/APPSDK/AMD-APP-SDK-v2.7-lnx${bits}.tgz";
x86 = "1v26n7g1xvlg5ralbfk3qiy34gj8fascpnjzm3120b6sgykfp16b";
x86_64 = "08bi43bgnsxb47vbirh09qy02w7zxymqlqr8iikk9aavfxjlmch1";
};
"2.8" = {
url = "http://developer.amd.com/wordpress/media/2012/11/AMD-APP-SDK-v2.8-lnx${bits}.tgz";
x86 = "99610737f21b2f035e0eac4c9e776446cc4378a614c7667de03a82904ab2d356";
x86_64 = "d9c120367225bb1cd21abbcf77cb0a69cfb4bb6932d0572990104c566aab9681";
# TODO: Add support for aparapi, java parallel api
patches = [ ./01-remove-aparapi-samples.patch ];
};
};
in stdenv.mkDerivation rec {
name = "amdapp-sdk-${version}";
src = fetchurl {
url = stdenv.lib.getAttrFromPath [version "url"] src_info;
sha256 = stdenv.lib.getAttrFromPath [version arch] src_info;
};
patches = stdenv.lib.attrByPath [version "patches"] [] src_info;
patchFlags = "-p0";
buildInputs = [ makeWrapper perl mesa xorg.libX11 xorg.libXext xorg.libXaw xorg.libXi xorg.libXxf86vm ];
propagatedBuildInputs = [ stdenv.cc ];
NIX_LDFLAGS = "-lX11 -lXext -lXmu -lXi -lXxf86vm";
doCheck = false;
unpackPhase = ''
tar xvzf $src
tar xf AMD-APP-SDK-v${version}-*-lnx${bits}.tgz
cd AMD-APP-SDK-v${version}-*-lnx${bits}
'';
buildPhase = if !samples then ''echo "nothing to build"'' else null;
installPhase = ''
# Install SDK
mkdir -p $out
cp -r {docs,include} "$out/"
mkdir -p "$out/"{bin,lib,samples/opencl/bin}
cp -r "./bin/${arch}/clinfo" "$out/bin/clinfo"
cp -r "./lib/${arch}/"* "$out/lib/"
# Register ICD
mkdir -p "$out/etc/OpenCL/vendors"
echo "$out/lib/libamdocl${bits}.so" > "$out/etc/OpenCL/vendors/amd.icd"
# The OpenCL ICD specifications: http://www.khronos.org/registry/cl/extensions/khr/cl_khr_icd.txt
# Install includes
mkdir -p "$out/usr/include/"{CAL,OpenVideo}
install -m644 './include/OpenVideo/'{OVDecode.h,OVDecodeTypes.h} "$out/usr/include/OpenVideo/"
${ if samples then ''
# Install samples
find ./samples/opencl/ -mindepth 1 -maxdepth 1 -type d -not -name bin -exec cp -r {} "$out/samples/opencl" \;
cp -r "./samples/opencl/bin/${arch}/"* "$out/samples/opencl/bin"
for f in $(find "$out/samples/opencl/bin/" -type f -not -name "*.*");
do
wrapProgram "$f" --prefix PATH ":" "${stdenv.cc}/bin"
done'' else ""
}
# Create wrappers
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/bin/clinfo
patchelf --set-rpath ${stdenv.cc.gcc}/lib64:${stdenv.cc.gcc}/lib $out/bin/clinfo
# Fix modes
find "$out/" -type f -exec chmod 644 {} \;
chmod -R 755 "$out/bin/"
find "$out/samples/opencl/bin/" -type f -name ".*" -exec chmod 755 {} \;
find "$out/samples/opencl/bin/" -type f -not -name "*.*" -exec chmod 755 {} \;
'';
meta = with stdenv.lib; {
description = "AMD Accelerated Parallel Processing (APP) SDK, with OpenCL 1.2 support";
homepage = http://developer.amd.com/tools/heterogeneous-computing/amd-accelerated-parallel-processing-app-sdk/;
license = licenses.amd;
maintainers = [ maintainers.offline ];
platforms = [ "i686-linux" "x86_64-linux" ];
};
}