mirror of
https://github.com/tensorflow/haskell.git
synced 2024-12-24 18:49:46 +01:00
Use stack's nix support (#168)
* Add stack --nix support * Update README for nix shell
This commit is contained in:
parent
b063cccc40
commit
8e1d85b5e5
6 changed files with 98 additions and 69 deletions
11
README.md
11
README.md
|
@ -108,11 +108,14 @@ After running the script to install system dependencies, build the project with
|
|||
|
||||
## Build on NixOS
|
||||
|
||||
`tools/userchroot.nix` expression contains definitions to open
|
||||
chroot-environment containing necessary dependencies. Type
|
||||
The `shell.nix` provides an environment containing the necessary
|
||||
dependencies. To build, run:
|
||||
|
||||
$ nix-shell tools/userchroot.nix
|
||||
$ stack build --system-ghc
|
||||
$ stack --nix build
|
||||
|
||||
or alternatively you can run
|
||||
|
||||
$ nix-shell
|
||||
|
||||
to enter the environment and build the project. Note, that it is an emulation
|
||||
of common Linux environment rather than full-featured Nix package expression.
|
||||
|
|
6
nix/src.json
Normal file
6
nix/src.json
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "729da53a147eda1a1678a313754fcda3a8791279",
|
||||
"sha256": "17l19rbhb3wdrrcyjgq34bk3p658jbldzxp9q1scdvrvz0g99psb"
|
||||
}
|
26
nix/update
Executable file
26
nix/update
Executable file
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p bash nix curl jq
|
||||
# vim: filetype=sh
|
||||
# Updates the nixpkgs.json to the latest release
|
||||
# See https://gist.github.com/zimbatm/de5350245874361762b6a4dfe5366530
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")" || exit 1
|
||||
|
||||
branch=release-17.09
|
||||
|
||||
owner=NixOS
|
||||
repo=nixpkgs
|
||||
rev=$(curl -sfL https://api.github.com/repos/$owner/$repo/git/refs/heads/$branch | jq -r .object.sha)
|
||||
url=https://github.com/$owner/$repo/archive/$rev.tar.gz
|
||||
|
||||
release_sha256=$(nix-prefetch-url --unpack "$url")
|
||||
|
||||
cat <<NIXPKGS | tee src.json
|
||||
{
|
||||
"owner": "$owner",
|
||||
"repo": "$repo",
|
||||
"rev": "$rev",
|
||||
"sha256": "$release_sha256"
|
||||
}
|
||||
NIXPKGS
|
55
shell.nix
Normal file
55
shell.nix
Normal file
|
@ -0,0 +1,55 @@
|
|||
{ghc ? null }:
|
||||
|
||||
let
|
||||
# Use pinned packages
|
||||
_nixpkgs = import <nixpkgs> {};
|
||||
nixpkgs = _nixpkgs.fetchFromGitHub (_nixpkgs.lib.importJSON ./nix/src.json);
|
||||
pkgs = import nixpkgs {};
|
||||
|
||||
# Either use specified GHC or use GHC 8.2.2 (which we need for LTS 11.9)
|
||||
myghc = if isNull ghc then pkgs.haskell.compiler.ghc822 else ghc;
|
||||
|
||||
# Fetch tensorflow library
|
||||
tensorflow-c = pkgs.stdenv.mkDerivation {
|
||||
name = "tensorflow-c";
|
||||
src = pkgs.fetchurl {
|
||||
url = "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.8.0.tar.gz";
|
||||
sha256 = "0qzy15rc3x961cyi3bqnygrcnw4x69r28xkwhpwrv1r0gi6k73ha";
|
||||
};
|
||||
|
||||
# Patch library to use our libc, libstdc++ and others
|
||||
buildCommand = ''
|
||||
. $stdenv/setup
|
||||
mkdir -pv $out
|
||||
tar -C $out -xzf $src
|
||||
chmod +w $out/lib/libtensorflow.so
|
||||
${pkgs.patchelf}/bin/patchelf --set-rpath "${pkgs.stdenv.cc.libc}/lib:${pkgs.stdenv.cc.cc.lib}/lib" $out/lib/libtensorflow.so
|
||||
chmod -w $out/lib/libtensorflow.so
|
||||
'';
|
||||
};
|
||||
|
||||
# Wrapped stack executable that uses the nix-provided GHC
|
||||
stack = pkgs.stdenv.mkDerivation {
|
||||
name = "stack-system-ghc";
|
||||
builder = pkgs.writeScript "stack" ''
|
||||
source $stdenv/setup
|
||||
mkdir -p $out/bin
|
||||
makeWrapper ${pkgs.stack}/bin/stack $out/bin/stack \
|
||||
--add-flags --system-ghc
|
||||
'';
|
||||
buildInputs = [ pkgs.makeWrapper ];
|
||||
};
|
||||
in
|
||||
pkgs.haskell.lib.buildStackProject {
|
||||
ghc = myghc;
|
||||
stack = stack;
|
||||
name = "tf-env";
|
||||
buildInputs =
|
||||
[
|
||||
pkgs.snappy
|
||||
pkgs.zlib
|
||||
pkgs.protobuf3_3
|
||||
tensorflow-c
|
||||
stack
|
||||
];
|
||||
}
|
|
@ -29,3 +29,7 @@ extra-lib-dirs:
|
|||
- /usr/local/lib
|
||||
extra-include-dirs:
|
||||
- /usr/local/include
|
||||
|
||||
nix:
|
||||
enable: false
|
||||
shell-file: shell.nix
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
#
|
||||
# This script is provided by @grwlf (grwlf@gmail.com) and is supported on best
|
||||
# effort basis. TensorFlow development team does not regularly test this script
|
||||
# and can't answer any questions about it.
|
||||
#
|
||||
{ pkgs ? import <nixpkgs> {} }:
|
||||
|
||||
with pkgs;
|
||||
|
||||
let
|
||||
tensorflow-c = stdenv.mkDerivation {
|
||||
|
||||
name = "tensorflow-c";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.8.0.tar.gz";
|
||||
sha256 = "0a8e334d7c20879df9857c762472329d70cbf2f316af113d0b26f5c17209fe63";
|
||||
};
|
||||
|
||||
buildCommand = ''
|
||||
. $stdenv/setup
|
||||
mkdir -pv $out
|
||||
tar -C $out -xzf $src
|
||||
'';
|
||||
};
|
||||
|
||||
fhs = pkgs.buildFHSUserEnv {
|
||||
name = "fhs";
|
||||
targetPkgs = pkgs:
|
||||
with pkgs.python3Packages;
|
||||
with pkgs.haskellPackages;
|
||||
with pkgs;
|
||||
assert stack.version >= "1.4";
|
||||
assert ghc.version >= "8";
|
||||
[
|
||||
snappy
|
||||
snappy.dev
|
||||
protobuf3_2
|
||||
stack
|
||||
ghc
|
||||
iana-etc
|
||||
pkgs.zlib
|
||||
pkgs.zlib.dev
|
||||
tensorflow-c
|
||||
gcc
|
||||
gdb
|
||||
];
|
||||
runScript = "bash";
|
||||
profile = ''
|
||||
export USE_CCACHE=1
|
||||
export LIBRARY_PATH=/usr/lib64
|
||||
export LD_LIBRARY_PATH=$(pwd):/usr/lib64
|
||||
export ACLOCAL_PATH=/usr/share/aclocal
|
||||
export LANG=C
|
||||
export LC_ALL=en_US.utf-8
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
'';
|
||||
};
|
||||
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = fhs.name + "-env";
|
||||
nativeBuildInputs = [ fhs ];
|
||||
shellHook = "exec fhs";
|
||||
}
|
Loading…
Reference in a new issue