Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at 17.09 169 lines 5.1 kB view raw
1{ stdenv, fetchgit, fetchurl 2# build tools 3, gfortran, m4, makeWrapper, patchelf, perl, which, python2, paxctl 4# libjulia dependencies 5, libunwind, llvm, 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# Darwin frameworks 11, CoreServices, ApplicationServices 12}: 13 14with stdenv.lib; 15 16# All dependencies must use the same OpenBLAS. 17let 18 arpack_ = arpack; 19 suitesparse_ = suitesparse; 20in 21let 22 arpack = arpack_.override { inherit openblas; }; 23 suitesparse = suitesparse_.override { inherit openblas; }; 24 llvmShared = if stdenv.isDarwin 25 then llvm.override { enableSharedLibraries = true; } 26 else llvm; 27in 28 29let 30 dsfmtVersion = "2.2.3"; 31 dsfmt = fetchurl { 32 url = "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/dSFMT-src-${dsfmtVersion}.tar.gz"; 33 sha256 = "03kaqbjbi6viz0n33dk5jlf6ayxqlsq4804n7kwkndiga9s4hd42"; 34 }; 35 36 libuvVersion = "efb40768b7c7bd9f173a7868f74b92b1c5a61a0e"; 37 libuv = fetchurl { 38 url = "https://api.github.com/repos/JuliaLang/libuv/tarball/${libuvVersion}"; 39 sha256 = "1znkxyv1cy9pjap7afypipzsn04533ni3pqjd191fdgw2sv9cal7"; 40 }; 41 42 rmathVersion = "0.1"; 43 rmath-julia = fetchurl { 44 url = "https://api.github.com/repos/JuliaLang/Rmath-julia/tarball/v${rmathVersion}"; 45 sha256 = "0ai5dhjc43zcvangz123ryxmlbm51s21rg13bllwyn98w67arhb4"; 46 }; 47in 48 49stdenv.mkDerivation rec { 50 pname = "julia"; 51 version = "0.4.7"; 52 name = "${pname}-${version}"; 53 54 src = fetchurl { 55 url = "https://github.com/JuliaLang/${pname}/releases/download/v${version}/${name}.tar.gz"; 56 sha256 = "09f531jhs8pyd1xng5c26x994w7q0sxxr28mr3qfw9wpkbmsc2pf"; 57 }; 58 59 prePatch = '' 60 cp "${dsfmt}" "./deps/dsfmt-${dsfmtVersion}.tar.gz" 61 cp "${rmath-julia}" "./deps/Rmath-julia-${rmathVersion}.tar.gz" 62 cp "${libuv}" "./deps/libuv-${libuvVersion}.tar.gz" 63 ''; 64 65 patches = [ 66 ./0001-use-system-utf8proc.patch 67 ./0002-use-system-suitesparse.patch 68 ./0003-no-ldconfig.patch 69 ] ++ stdenv.lib.optional stdenv.needsPax ./0004-hardened-0.4.7.patch; 70 71 postPatch = '' 72 patchShebangs . contrib 73 ''; 74 75 buildInputs = [ 76 arpack fftw fftwSinglePrec gmp libgit2 libunwind llvmShared mpfr 77 pcre2.dev openblas openlibm openspecfun readline suitesparse utf8proc 78 zlib 79 ] ++ 80 stdenv.lib.optionals stdenv.isDarwin [CoreServices ApplicationServices] ; 81 82 nativeBuildInputs = [ curl gfortran m4 makeWrapper patchelf perl python2 which ] 83 ++ stdenv.lib.optional stdenv.needsPax paxctl; 84 85 makeFlags = 86 let 87 arch = head (splitString "-" stdenv.system); 88 march = { "x86_64" = "x86-64"; "i686" = "i686"; }."${arch}" 89 or (throw "unsupported architecture: ${arch}"); 90 # Julia requires Pentium 4 (SSE2) or better 91 cpuTarget = { "x86_64" = "x86-64"; "i686" = "pentium4"; }."${arch}" 92 or (throw "unsupported architecture: ${arch}"); 93 in [ 94 "ARCH=${arch}" 95 "MARCH=${march}" 96 "JULIA_CPU_TARGET=${cpuTarget}" 97 "PREFIX=$(out)" 98 "prefix=$(out)" 99 "SHELL=${stdenv.shell}" 100 101 "USE_SYSTEM_BLAS=1" 102 "USE_BLAS64=${if openblas.blas64 then "1" else "0"}" 103 "LIBBLAS=-lopenblas" 104 "LIBBLASNAME=libopenblas" 105 106 "USE_SYSTEM_LAPACK=1" 107 "LIBLAPACK=-lopenblas" 108 "LIBLAPACKNAME=libopenblas" 109 110 "USE_SYSTEM_SUITESPARSE=1" 111 "SUITESPARSE_LIB=-lsuitesparse" 112 "SUITESPARSE_INC=-I${suitesparse}/include" 113 114 "USE_SYSTEM_ARPACK=1" 115 "USE_SYSTEM_FFTW=1" 116 "USE_SYSTEM_GMP=1" 117 "USE_SYSTEM_LIBGIT2=1" 118 "USE_SYSTEM_LIBUNWIND=1" 119 "USE_SYSTEM_LLVM=1" 120 "USE_SYSTEM_MPFR=1" 121 "USE_SYSTEM_OPENLIBM=1" 122 "USE_SYSTEM_OPENSPECFUN=1" 123 "USE_SYSTEM_PATCHELF=1" 124 "USE_SYSTEM_PCRE=1" 125 "PCRE_CONFIG=${pcre2.dev}/bin/pcre2-config" 126 "PCRE_INCL_PATH=${pcre2.dev}/include/pcre2.h" 127 "USE_SYSTEM_READLINE=1" 128 "USE_SYSTEM_UTF8PROC=1" 129 "USE_SYSTEM_ZLIB=1" 130 ]; 131 132 NIX_CFLAGS_COMPILE = [ "-fPIC" ]; 133 134 LD_LIBRARY_PATH = makeLibraryPath [ 135 arpack fftw fftwSinglePrec gmp libgit2 mpfr openblas openlibm 136 openspecfun pcre2 suitesparse 137 ]; 138 139 NIX_LDFLAGS = optionalString stdenv.isDarwin "-rpath ${llvmShared}/lib"; 140 141 dontStrip = true; 142 dontPatchELF = true; 143 144 enableParallelBuilding = true; 145 146 doCheck = true; 147 checkTarget = "testall"; 148 # Julia's tests require read/write access to $HOME 149 preCheck = '' 150 export HOME="$NIX_BUILD_TOP" 151 ''; 152 153 postInstall = '' 154 for prog in "$out/bin/julia" "$out/bin/julia-debug"; do 155 wrapProgram "$prog" \ 156 --prefix LD_LIBRARY_PATH : "$LD_LIBRARY_PATH" \ 157 --prefix PATH : "${stdenv.lib.makeBinPath [ curl ]}" 158 done 159 ''; 160 161 meta = { 162 description = "High-level performance-oriented dynamical language for technical computing"; 163 homepage = https://julialang.org/; 164 license = stdenv.lib.licenses.mit; 165 maintainers = with stdenv.lib.maintainers; [ raskin ]; 166 platforms = [ "i686-linux" "x86_64-linux" "x86_64-darwin" ]; 167 broken = stdenv.isi686; 168 }; 169}