lol

Merge pull request #13913 from grwlf/torch

torch: add expression for Torch7 the machine-learning framework

joachifm 532beaa2 8a34a3b3

+354 -4
+10
pkgs/applications/science/machine-learning/torch/default.nix
··· 1 + { callPackage, fetchgit, lua } : 2 + let 3 + src = fetchgit { 4 + url = "https://github.com/grwlf/torch-distro"; 5 + rev = "f972c4253b14b95b53aefe7b24efa496223e73f2"; 6 + sha256 = "1lhjhivhyypaic33vj1nsghshsajf7vi6gwsclaf3nqdl27d1h1s"; 7 + }; 8 + 9 + in 10 + callPackage (import ./torch-distro.nix) { inherit lua src; }
+329
pkgs/applications/science/machine-learning/torch/torch-distro.nix
··· 1 + { luarocks, lib , stdenv, writeText , readline, makeWrapper, 2 + less, ncurses, cmake, openblas, coreutils, fetchgit, libuuid, czmq, openssl, 3 + gnuplot, fetchurl, lua, src, libjpeg, libpng 4 + } : 5 + 6 + let 7 + 8 + common_meta = { 9 + homepage = http://torch.ch; 10 + license = stdenv.lib.licenses.bsd3; 11 + maintainers = with stdenv.lib.maintainers; [ smironov ]; 12 + platforms = stdenv.lib.platforms.gnu; 13 + }; 14 + 15 + distro_src = src; 16 + 17 + default_luarocks = luarocks; 18 + 19 + pkgs_gnuplot = gnuplot; 20 + 21 + luapkgs = rec { 22 + 23 + luarocks = default_luarocks.override { 24 + inherit lua; 25 + }; 26 + 27 + buildLuaRocks = { rockspec ? "", luadeps ? [] , buildInputs ? [] 28 + , preBuild ? "" , postInstall ? "" 29 + , runtimeDeps ? [] , ... }@args : 30 + let 31 + 32 + luadeps_ = 33 + luadeps ++ 34 + (lib.concatMap (d : if d ? luadeps then d.luadeps else []) luadeps); 35 + 36 + runtimeDeps_ = 37 + runtimeDeps ++ 38 + (lib.concatMap (d : if d ? runtimeDeps then d.runtimeDeps else []) luadeps) ++ 39 + [ lua coreutils ]; 40 + 41 + mkcfg = '' 42 + export LUAROCKS_CONFIG=config.lua 43 + cat >config.lua <<EOF 44 + rocks_trees = { 45 + { name = [[system]], root = [[${luarocks}]] } 46 + ${lib.concatImapStrings (i : dep : ", { name = [[dep${toString i}]], root = [[${dep}]] }") luadeps_} 47 + }; 48 + 49 + variables = { 50 + LUA_BINDIR = "$out/bin"; 51 + LUA_INCDIR = "$out/include"; 52 + LUA_LIBDIR = "$out/lib/lua/${lua.luaversion}"; 53 + }; 54 + EOF 55 + ''; 56 + 57 + in 58 + stdenv.mkDerivation (args // { 59 + 60 + inherit preBuild postInstall; 61 + 62 + inherit luadeps runtimeDeps; 63 + 64 + phases = [ "unpackPhase" "patchPhase" "buildPhase"]; 65 + 66 + buildInputs = runtimeDeps ++ buildInputs ++ [ makeWrapper lua ]; 67 + 68 + buildPhase = '' 69 + eval "$preBuild" 70 + ${mkcfg} 71 + eval "`${luarocks}/bin/luarocks --deps-mode=all --tree=$out path`" 72 + ${luarocks}/bin/luarocks make --deps-mode=all --tree=$out ${rockspec} 73 + 74 + for p in $out/bin/*; do 75 + wrapProgram $p \ 76 + --suffix LD_LIBRARY_PATH ';' "${lib.makeSearchPath "lib" runtimeDeps_}" \ 77 + --suffix PATH ';' "${lib.makeSearchPath "bin" runtimeDeps_}" \ 78 + --suffix LUA_PATH ';' "\"$LUA_PATH\"" \ 79 + --suffix LUA_PATH ';' "\"$out/share/lua/${lua.luaversion}/?.lua;$out/share/lua/${lua.luaversion}/?/init.lua\"" \ 80 + --suffix LUA_CPATH ';' "\"$LUA_CPATH\"" \ 81 + --suffix LUA_CPATH ';' "\"$out/lib/lua/${lua.luaversion}/?.so;$out/lib/lua/${lua.luaversion}/?/init.so\"" 82 + done 83 + 84 + eval "$postInstall" 85 + ''; 86 + }); 87 + 88 + # FIXME: doesn't installs lua-files for some reason 89 + # lua-cjson = buildLuaPackage { 90 + # name = "lua-cjson"; 91 + # src = ./extra/lua-cjson; 92 + # rockspec = "lua-cjson-2.1devel-1.rockspec"; 93 + # }; 94 + 95 + lua-cjson = stdenv.mkDerivation rec { 96 + name = "lua-cjson"; 97 + src = "${distro_src}/extra/lua-cjson"; 98 + 99 + preConfigure = '' 100 + makeFlags="PREFIX=$out LUA_LIBRARY=$out/lib/lua" 101 + ''; 102 + 103 + buildInputs = [lua]; 104 + 105 + installPhase = '' 106 + make install-extra $makeFlags 107 + ''; 108 + }; 109 + 110 + luafilesystem = buildLuaRocks { 111 + name = "filesystem"; 112 + src = "${distro_src}/extra/luafilesystem"; 113 + luadeps = [lua-cjson]; 114 + rockspec = "rockspecs/luafilesystem-1.6.3-1.rockspec"; 115 + }; 116 + 117 + penlight = buildLuaRocks { 118 + name = "penlight"; 119 + src = "${distro_src}/extra/penlight"; 120 + luadeps = [luafilesystem]; 121 + }; 122 + 123 + luaffifb = buildLuaRocks { 124 + name = "luaffifb"; 125 + src = "${distro_src}/extra/luaffifb"; 126 + }; 127 + 128 + sundown = buildLuaRocks rec { 129 + name = "sundown"; 130 + src = "${distro_src}/pkg/sundown"; 131 + rockspec = "rocks/${name}-scm-1.rockspec"; 132 + }; 133 + 134 + cwrap = buildLuaRocks rec { 135 + name = "cwrap"; 136 + src = "${distro_src}/pkg/cwrap"; 137 + rockspec = "rocks/${name}-scm-1.rockspec"; 138 + }; 139 + 140 + paths = buildLuaRocks rec { 141 + name = "paths"; 142 + src = "${distro_src}/pkg/paths"; 143 + buildInputs = [cmake]; 144 + rockspec = "rocks/${name}-scm-1.rockspec"; 145 + }; 146 + 147 + torch = buildLuaRocks rec { 148 + name = "torch"; 149 + src = "${distro_src}/pkg/torch"; 150 + luadeps = [ paths cwrap ]; 151 + buildInputs = [ cmake ]; 152 + rockspec = "rocks/torch-scm-1.rockspec"; 153 + preBuild = '' 154 + substituteInPlace ${rockspec} \ 155 + --replace '"sys >= 1.0"' ' ' 156 + export LUA_PATH="$src/?.lua;$LUA_PATH" 157 + ''; 158 + meta = common_meta // { 159 + description = "Torch is a machine-learning library"; 160 + longDescription = '' 161 + Torch is the main package in [Torch7](http://torch.ch) where data 162 + structures for multi-dimensional tensors and mathematical operations 163 + over these are defined. Additionally, it provides many utilities for 164 + accessing files, serializing objects of arbitrary types and other 165 + useful utilities. 166 + ''; 167 + }; 168 + }; 169 + 170 + dok = buildLuaRocks rec { 171 + name = "dok"; 172 + src = "${distro_src}/pkg/dok"; 173 + luadeps = [sundown]; 174 + rockspec = "rocks/${name}-scm-1.rockspec"; 175 + }; 176 + 177 + sys = buildLuaRocks rec { 178 + name = "sys"; 179 + luadeps = [torch]; 180 + buildInputs = [readline cmake]; 181 + src = "${distro_src}/pkg/sys"; 182 + rockspec = "sys-1.1-0.rockspec"; 183 + preBuild = '' 184 + export Torch_DIR=${torch}/share/cmake/torch 185 + ''; 186 + }; 187 + 188 + xlua = buildLuaRocks rec { 189 + name = "xlua"; 190 + luadeps = [torch sys]; 191 + src = "${distro_src}/pkg/xlua"; 192 + rockspec = "xlua-1.0-0.rockspec"; 193 + }; 194 + 195 + nn = buildLuaRocks rec { 196 + name = "nn"; 197 + luadeps = [torch luaffifb]; 198 + buildInputs = [cmake]; 199 + src = "${distro_src}/extra/nn"; 200 + rockspec = "rocks/nn-scm-1.rockspec"; 201 + preBuild = '' 202 + export Torch_DIR=${torch}/share/cmake/torch 203 + ''; 204 + }; 205 + 206 + graph = buildLuaRocks rec { 207 + name = "graph"; 208 + luadeps = [ torch ]; 209 + buildInputs = [cmake]; 210 + src = "${distro_src}/extra/graph"; 211 + rockspec = "rocks/graph-scm-1.rockspec"; 212 + preBuild = '' 213 + export Torch_DIR=${torch}/share/cmake/torch 214 + ''; 215 + }; 216 + 217 + nngraph = buildLuaRocks rec { 218 + name = "nngraph"; 219 + luadeps = [ torch nn graph ]; 220 + buildInputs = [cmake]; 221 + src = "${distro_src}/extra/nngraph"; 222 + preBuild = '' 223 + export Torch_DIR=${torch}/share/cmake/torch 224 + ''; 225 + }; 226 + 227 + image = buildLuaRocks rec { 228 + name = "image"; 229 + luadeps = [ torch dok sys xlua ]; 230 + buildInputs = [cmake libjpeg libpng]; 231 + src = "${distro_src}/pkg/image"; 232 + rockspec = "image-1.1.alpha-0.rockspec"; 233 + preBuild = '' 234 + export Torch_DIR=${torch}/share/cmake/torch 235 + ''; 236 + }; 237 + 238 + optim = buildLuaRocks rec { 239 + name = "optim"; 240 + luadeps = [ torch ]; 241 + buildInputs = [cmake]; 242 + src = "${distro_src}/pkg/optim"; 243 + rockspec = "optim-1.0.5-0.rockspec"; 244 + preBuild = '' 245 + export Torch_DIR=${torch}/share/cmake/torch 246 + ''; 247 + }; 248 + 249 + gnuplot = buildLuaRocks rec { 250 + name = "gnuplot"; 251 + luadeps = [ torch paths ]; 252 + runtimeDeps = [ pkgs_gnuplot less ]; 253 + src = "${distro_src}/pkg/gnuplot"; 254 + rockspec = "rocks/gnuplot-scm-1.rockspec"; 255 + }; 256 + 257 + unsup = buildLuaRocks rec { 258 + name = "unsup"; 259 + luadeps = [ torch xlua optim ]; 260 + buildInputs = [ cmake ]; 261 + src = fetchgit { 262 + url = "https://github.com/koraykv/unsup"; 263 + rev = "1d4632e716dc3c82feecc7dd4b22549df442859f"; 264 + sha256 = "0npjq3y1cfmk026sdijcw3f766innrmb3qggnxsz62grczhfvgls"; 265 + }; 266 + rockspec = "unsup-0.1-0.rockspec"; 267 + preBuild = '' 268 + export Torch_DIR=${torch}/share/cmake/torch 269 + ''; 270 + }; 271 + 272 + trepl = buildLuaRocks rec { 273 + name = "trepl"; 274 + luadeps = [torch gnuplot paths penlight graph nn nngraph image gnuplot optim sys dok unsup]; 275 + runtimeDeps = [ ncurses readline ]; 276 + src = "${distro_src}/exe/trepl"; 277 + meta = common_meta // { 278 + description = "A pure Lua REPL for Lua(JIT), with heavy support for Torch types."; 279 + }; 280 + }; 281 + 282 + lbase64 = buildLuaRocks rec { 283 + name = "lbase64"; 284 + src = fetchgit { 285 + url = "https://github.com/LuaDist2/lbase64"; 286 + rev = "1e9e4f1e0bf589a0ed39f58acc185ec5e213d207"; 287 + sha256 = "1i1fpy9v6r4w3lrmz7bmf5ppq65925rv90gx39b3pykfmn0hcb9c"; 288 + }; 289 + }; 290 + 291 + luuid = stdenv.mkDerivation rec { 292 + name = "luuid"; 293 + src = fetchgit { 294 + url = "https://github.com/LuaDist/luuid"; 295 + sha256 = "062gdf1rild11jg46vry93hcbb36b4527pf1dy7q9fv89f7m2nav"; 296 + }; 297 + 298 + preConfigure = '' 299 + cmakeFlags="-DLUA_LIBRARY=${lua}/lib/lua/${lua.luaversion} -DINSTALL_CMOD=$out/lib/lua/${lua.luaversion} -DINSTALL_MOD=$out/lib/lua/${lua.luaversion}" 300 + ''; 301 + 302 + buildInputs = [cmake libuuid lua]; 303 + meta = { 304 + # FIXME: set the exact revision for src 305 + broken = true; 306 + }; 307 + }; 308 + 309 + # Doesn't work due to missing deps (according to luarocs). 310 + itorch = buildLuaRocks rec { 311 + name = "itorch"; 312 + luadeps = [torch gnuplot paths penlight graph nn nngraph image gnuplot 313 + optim sys dok lbase64 lua-cjson luuid]; 314 + buildInputs = [czmq openssl]; 315 + src = "${distro_src}/extra/iTorch"; 316 + meta = { 317 + # FIXME: figure out whats wrong with deps 318 + broken = true; 319 + }; 320 + }; 321 + 322 + 323 + }; 324 + 325 + in 326 + 327 + luapkgs 328 + 329 +
+9 -4
pkgs/development/interpreters/luajit/default.nix
··· 2 2 3 3 stdenv.mkDerivation rec { 4 4 name = "luajit-${version}"; 5 - version = "2.0.4"; 5 + version = "2.1.0-beta1"; 6 + luaversion = "5.1"; 6 7 7 8 src = fetchurl { 8 9 url = "http://luajit.org/download/LuaJIT-${version}.tar.gz"; 9 - sha256 = "0zc0y7p6nx1c0pp4nhgbdgjljpfxsb5kgwp4ysz22l1p2bms83v2"; 10 + sha256 = "06170d38387c59d1292001a166e7f5524f5c5deafa8705a49a46fa42905668dd"; 10 11 }; 11 12 12 13 enableParallelBuilding = true; ··· 24 25 25 26 configurePhase = false; 26 27 buildFlags = [ "amalg" ]; # Build highly optimized version 27 - installPhase = "make install PREFIX=$out"; 28 + installPhase = '' 29 + make install INSTALL_INC=$out/include PREFIX=$out 30 + ln -s $out/bin/luajit* $out/bin/lua 31 + ln -s $out/bin/luajit* $out/bin/luajit 32 + ''; 28 33 29 34 meta = with stdenv.lib; { 30 35 description = "high-performance JIT compiler for Lua 5.1"; 31 36 homepage = http://luajit.org; 32 37 license = licenses.mit; 33 38 platforms = platforms.linux ++ platforms.darwin; 34 - maintainers = [ maintainers.thoughtpolice ]; 39 + maintainers = with maintainers ; [ thoughtpolice smironov ]; 35 40 }; 36 41 }
+6
pkgs/top-level/all-packages.nix
··· 13911 13911 quazip = qt5.quazip.override { qt = qt4; }; 13912 13912 }; 13913 13913 13914 + torchPackages = recurseIntoAttrs ( callPackage ../applications/science/machine-learning/torch { 13915 + lua = luajit ; 13916 + } ); 13917 + 13918 + torch-repl = lib.setName "torch-repl" torchPackages.trepl; 13919 + 13914 13920 torchat = callPackage ../applications/networking/instant-messengers/torchat { 13915 13921 wrapPython = pythonPackages.wrapPython; 13916 13922 };