depot/third_party/nixpkgs/pkgs/by-name/ph/photoprism/libtensorflow.nix

104 lines
2.7 KiB
Nix

{
lib,
stdenv,
fetchurl,
...
}:
let
inherit (stdenv.hostPlatform) system;
in
stdenv.mkDerivation rec {
pname = "libtensorflow-photoprism";
version = "1.15.2";
srcs = [
# Photoprism-packaged libtensorflow tarball (with pre-built libs for both arm64 and amd64)
# We need this specific version because of https://github.com/photoprism/photoprism/issues/222
(fetchurl {
sha256 =
{
x86_64-linux = "sha256-bZAC3PJxqcjuGM4RcNtzYtkg3FD3SrO5beDsPoKenzc=";
aarch64-linux = "sha256-qnj4vhSWgrk8SIjzIH1/4waMxMsxMUvqdYZPaSaUJRk=";
}
.${system};
url =
let
systemName =
{
x86_64-linux = "amd64";
aarch64-linux = "arm64";
}
.${system};
in
"https://dl.photoprism.app/tensorflow/${systemName}/libtensorflow-${systemName}-${version}.tar.gz";
})
# Upstream tensorflow tarball (with .h's photoprism's tarball is missing)
(fetchurl {
url = "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.15.0.tar.gz";
sha256 = "sha256-3sv9WnCeztNSP1XM+iOTN6h+GrPgAO/aNhfbeeEDTe0=";
})
];
sourceRoot = ".";
unpackPhase = ''
sources=($srcs)
mkdir downstream upstream
tar xf ''${sources[0]} --directory downstream
tar xf ''${sources[1]} --directory upstream
mv downstream/lib .
mv upstream/{include,LICENSE,THIRD_PARTY_TF_C_LICENSES} .
rm -r downstream upstream
cd lib
ln -sT libtensorflow.so{,.1}
ln -sT libtensorflow_framework.so{,.1}
cd ..
'';
# Patch library to use our libc, libstdc++ and others
patchPhase =
let
rpath = lib.makeLibraryPath [
stdenv.cc.libc
stdenv.cc.cc
];
in
''
chmod -R +w lib
patchelf --set-rpath "${rpath}:$out/lib" lib/libtensorflow.so
patchelf --set-rpath "${rpath}" lib/libtensorflow_framework.so
'';
buildPhase = ''
# Write pkg-config file.
mkdir lib/pkgconfig
cat > lib/pkgconfig/tensorflow.pc << EOF
Name: TensorFlow
Version: ${version}
Description: Library for computation using data flow graphs for scalable machine learning
Requires:
Libs: -L$out/lib -ltensorflow
Cflags: -I$out/include/tensorflow
EOF
'';
installPhase = ''
mkdir -p $out
cp -r LICENSE THIRD_PARTY_TF_C_LICENSES lib include $out
'';
meta = with lib; {
homepage = "https://dl.photoprism.app/tensorflow/";
description = "Libtensorflow version for usage with photoprism backend";
platforms = [
"x86_64-linux"
"aarch64-linux"
];
license = licenses.asl20;
maintainers = with maintainers; [ benesim ];
};
}