at 16.09-beta 178 lines 5.3 kB view raw
1{ stdenv, fetchgit, fetchurl 2# build tools 3, gfortran, m4, makeWrapper, patchelf, perl, which, python2 4# libjulia dependencies 5, libunwind, readline, utf8proc, zlib 6# standard library dependencies 7, curl, fftwSinglePrec, fftw, gmp, libgit2, mpfr, openlibm, openspecfun, pcre2 8# linear algebra 9, openblas, arpack, suitesparse 10}: 11 12with stdenv.lib; 13 14# All dependencies must use the same OpenBLAS. 15let 16 arpack_ = arpack; 17 suitesparse_ = suitesparse; 18in 19let 20 arpack = arpack_.override { inherit openblas; }; 21 suitesparse = suitesparse_.override { inherit openblas; }; 22in 23 24let 25 llvmVersion = "3.7.1"; 26 llvm = fetchurl { 27 url = "http://llvm.org/releases/${llvmVersion}/llvm-${llvmVersion}.src.tar.xz"; 28 sha256 = "1masakdp9g2dan1yrazg7md5am2vacbkb3nahb3dchpc1knr8xxy"; 29 }; 30 31 dsfmtVersion = "2.2.3"; 32 dsfmt = fetchurl { 33 url = "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/dSFMT-src-${dsfmtVersion}.tar.gz"; 34 sha256 = "03kaqbjbi6viz0n33dk5jlf6ayxqlsq4804n7kwkndiga9s4hd42"; 35 }; 36 37 libuvVersion = "a1d9166a440e4a0664c0e6de6ebe25350de56a42"; 38 libuv = fetchurl { 39 url = "https://api.github.com/repos/JuliaLang/libuv/tarball/${libuvVersion}"; 40 sha256 = "1sjvly4ylfyj8kxnx0gsjj2f70cg17h302h1i08gfndrqam68za5"; 41 }; 42 43 rmathVersion = "0.1"; 44 rmath-julia = fetchurl { 45 url = "https://api.github.com/repos/JuliaLang/Rmath-julia/tarball/v${rmathVersion}"; 46 sha256 = "0ai5dhjc43zcvangz123ryxmlbm51s21rg13bllwyn98w67arhb4"; 47 }; 48 49 virtualenvVersion = "15.0.0"; 50 virtualenv = fetchurl { 51 url = "mirror://pypi/v/virtualenv/virtualenv-${virtualenvVersion}.tar.gz"; 52 sha256 = "06fw4liazpx5vf3am45q2pdiwrv0id7ckv7n6zmpml29x6vkzmkh"; 53 }; 54in 55 56stdenv.mkDerivation rec { 57 pname = "julia"; 58 version = "0.5.0-dev-2016-06-10"; 59 name = "${pname}-${version}"; 60 61 src = fetchgit { 62 url = "https://github.com/JuliaLang/${pname}"; 63 rev = "56d7d6672c7db717dacb5e34f485180c2eba83b2"; 64 sha256 = "1wbrzdrxp94i7yxdgf3qgrjshmqxi0c4bqz7wy0c0c0kjlg6flmx"; 65 }; 66 67 prePatch = '' 68 mkdir deps/srccache 69 cp "${llvm}" "./deps/srccache/llvm-${llvmVersion}.src.tar.xz" 70 cp "${dsfmt}" "./deps/srccache/dsfmt-${dsfmtVersion}.tar.gz" 71 cp "${rmath-julia}" "./deps/srccache/Rmath-julia-${rmathVersion}.tar.gz" 72 cp "${libuv}" "./deps/srccache/libuv-${libuvVersion}.tar.gz" 73 cp "${virtualenv}" "./deps/srccache/virtualenv-${virtualenvVersion}.tar.gz" 74 ''; 75 76 patches = [ 77 ./0001.1-use-system-utf8proc.patch 78 ./0002-use-system-suitesparse.patch 79 ]; 80 81 postPatch = '' 82 patchShebangs . contrib 83 ''; 84 85 buildInputs = [ 86 arpack fftw fftwSinglePrec gmp libgit2 libunwind mpfr 87 pcre2 openblas openlibm openspecfun readline suitesparse utf8proc 88 zlib 89 ]; 90 91 nativeBuildInputs = [ curl gfortran m4 makeWrapper patchelf perl python2 which ]; 92 93 makeFlags = 94 let 95 arch = head (splitString "-" stdenv.system); 96 march = { "x86_64" = "x86-64"; "i686" = "pentium4"; }."${arch}" 97 or (throw "unsupported architecture: ${arch}"); 98 # Julia requires Pentium 4 (SSE2) or better 99 cpuTarget = { "x86_64" = "x86-64"; "i686" = "pentium4"; }."${arch}" 100 or (throw "unsupported architecture: ${arch}"); 101 in [ 102 "ARCH=${arch}" 103 "MARCH=${march}" 104 "JULIA_CPU_TARGET=${cpuTarget}" 105 "PREFIX=$(out)" 106 "prefix=$(out)" 107 "SHELL=${stdenv.shell}" 108 109 "USE_SYSTEM_BLAS=1" 110 "USE_BLAS64=${if openblas.blas64 then "1" else "0"}" 111 "LIBBLAS=-lopenblas" 112 "LIBBLASNAME=libopenblas" 113 114 "USE_SYSTEM_LAPACK=1" 115 "LIBLAPACK=-lopenblas" 116 "LIBLAPACKNAME=libopenblas" 117 118 "USE_SYSTEM_SUITESPARSE=1" 119 "SUITESPARSE_LIB=-lsuitesparse" 120 "SUITESPARSE_INC=-I${suitesparse}/include" 121 122 "USE_SYSTEM_ARPACK=1" 123 "USE_SYSTEM_FFTW=1" 124 "USE_SYSTEM_GMP=1" 125 "USE_SYSTEM_LIBGIT2=1" 126 "USE_SYSTEM_LIBUNWIND=1" 127 # 'replutil' test failure with LLVM 3.8.0, invalid libraries with 3.7.1 128 "USE_SYSTEM_LLVM=0" 129 "USE_SYSTEM_MPFR=1" 130 "USE_SYSTEM_OPENLIBM=1" 131 "USE_SYSTEM_OPENSPECFUN=1" 132 "USE_SYSTEM_PATCHELF=1" 133 "USE_SYSTEM_PCRE=1" 134 "USE_SYSTEM_READLINE=1" 135 "USE_SYSTEM_UTF8PROC=1" 136 "USE_SYSTEM_ZLIB=1" 137 ]; 138 139 NIX_CFLAGS_COMPILE = [ "-fPIC" ]; 140 141 LD_LIBRARY_PATH = makeLibraryPath [ 142 arpack fftw fftwSinglePrec gmp libgit2 mpfr openblas openlibm 143 openspecfun pcre2 suitesparse 144 ]; 145 146 dontStrip = true; 147 dontPatchELF = true; 148 149 enableParallelBuilding = true; 150 151 doCheck = true; 152 checkTarget = "testall"; 153 # Julia's tests require read/write access to $HOME 154 preCheck = '' 155 export HOME="$NIX_BUILD_TOP" 156 ''; 157 158 preBuild = '' 159 sed -e '/^install:/s@[^ ]*/doc/[^ ]*@@' -i Makefile 160 sed -e '/[$](DESTDIR)[$](docdir)/d' -i Makefile 161 ''; 162 163 postInstall = '' 164 for prog in "$out/bin/julia" "$out/bin/julia-debug"; do 165 wrapProgram "$prog" \ 166 --prefix LD_LIBRARY_PATH : "$LD_LIBRARY_PATH" \ 167 --prefix PATH : "${stdenv.lib.makeBinPath [ curl ]}" 168 done 169 ''; 170 171 meta = { 172 description = "High-level performance-oriented dynamical language for technical computing"; 173 homepage = "http://julialang.org/"; 174 license = stdenv.lib.licenses.mit; 175 maintainers = with stdenv.lib.maintainers; [ raskin ]; 176 platforms = [ "i686-linux" "x86_64-linux" "x86_64-darwin" ]; 177 }; 178}