From 76e37b96a5670a0653187e7512eef8776902276c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Balzarotti?= Date: Sun, 21 Jul 2019 11:18:45 +0200 Subject: [PATCH] gnu: julia: Update to 1.1.1 To: address@hidden Cc: Nicolò Balzarotti --- gnu/packages/julia.scm | 335 ++++++++++++++++++++++++++--------------- 1 file changed, 211 insertions(+), 124 deletions(-) diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm index fa9709c40c..85a70db8f4 100644 --- a/gnu/packages/julia.scm +++ b/gnu/packages/julia.scm @@ -47,44 +47,112 @@ #:use-module (ice-9 match)) (define libuv-julia - (let ((commit "52d72a52cc7ccd570929990f010ed16e2ec604c8") - (revision "5")) - (package (inherit libuv) - (name "libuv-julia") - (version (string-append "1.9.0-" revision "." (string-take commit 8))) - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/JuliaLang/libuv.git") - (commit commit))) - (file-name (string-append name "-" version "-checkout")) - (sha256 - (base32 - "1daxh6ci6q7znxxajr3bm16dd53ragm0d681wf4kzg542qnjq3lh")))) - (build-system gnu-build-system) - (arguments - (substitute-keyword-arguments (package-arguments libuv) - ((#:phases phases) - `(modify-phases ,phases - (delete 'autogen))))) - (home-page "https://github.com/JuliaLang/libuv")))) - -(define libunwind-for-julia - (package - (inherit libunwind) - (version "1.1-julia2") - (source (origin + (let ((commit "26dbe5672c33fc885462c509fe2a9b36f35866fd")) + ;; when upgrading julia, also upgrade this. + ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.1.1/deps/libuv.version + (package + (inherit libuv) + (name "libuv-julia") + (version commit) + (source (origin (method url-fetch) - (uri (string-append "https://s3.amazonaws.com/julialang/src/" - "libunwind-" version ".tar.gz")) + (uri (string-append + "https://api.github.com/repos/JuliaLang/libuv/tarball/" + commit)) (sha256 (base32 - "0499x7sg2v18a6cry6l8y713cgmic0adnjph8i0xr1db9p7n8qyv")))))) + "04492qkdzbd16nmi9420m2rh7cmhyqmknb2cc5yqldd2jzq9ly7q")))) + (build-system gnu-build-system) + (arguments + (substitute-keyword-arguments (package-arguments libuv) + ((#:phases phases) + `(modify-phases ,phases + (delete 'autogen))))) + (home-page "https://github.com/JuliaLang/libuv")))) + +(define (llvm-patch-url version name) + (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version + "/deps/patches/" name)) + +(define (llvm-patch name sha) + (let ((version "1.1.1")) + (origin (method url-fetch) + (uri (llvm-patch-url version name)) + (sha256 (base32 sha)) + (file-name name)))) + +(define llvm-julia + (package + (inherit llvm-6) + (name "llvm-julia") + (source + (origin + (method url-fetch) + (uri + (string-append + "http://releases.llvm.org/6.0.1/llvm-6.0.1.src.tar.xz")) + (sha256 + (base32 + "1qpls3vk85lydi5b4axl0809fv932qgsqgdgrk098567z4jc7mmn")) + ;; Those patches are inside the julia source repo. + ;; They are _not_ julia specific (https://github.com/julialang/julia#llvm) + ;; but they are required to build julia. + ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628 + (patches (list + (llvm-patch "llvm-6.0-D44650.patch" + "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb") + (llvm-patch "llvm-6.0-DISABLE_ABI_CHECKS.patch" + "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg") + (llvm-patch "llvm-6.0-NVPTX-addrspaces.patch" + "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc") + (llvm-patch "llvm-6.0.0_D27296-libssp.patch" + "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh") + (llvm-patch "llvm-D27629-AArch64-large_model_6.0.1.patch" + "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z") + (llvm-patch "llvm-D34078-vectorize-fdiv.patch" + "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay") + (llvm-patch "llvm-D42262-jumpthreading-not-i1.patch" + "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq") + (llvm-patch "llvm-D44892-Perf-integration.patch" + "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05") + (llvm-patch "llvm-D46460.patch" + "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb") + (llvm-patch "llvm-D49832-SCEVPred.patch" + "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn") + (llvm-patch "llvm-D50010-VNCoercion-ni.patch" + "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp") + (llvm-patch "llvm-D50167-scev-umin.patch" + "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v") + (llvm-patch "llvm-OProfile-line-num.patch" + "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7") + (llvm-patch "llvm-PPC-addrspaces.patch" + "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p") + (llvm-patch "llvm-rL323946-LSRTy.patch" + "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns") + (llvm-patch "llvm-rL326967-aligned-load.patch" + "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4") + (llvm-patch "llvm-rL327898.patch" + "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq"))))) + (arguments + (substitute-keyword-arguments + (package-arguments llvm-6) + ((#:configure-flags flags) + '(list ;; Taken from NixOS. Only way I could get libLLVM-6.0.so + "-DCMAKE_BUILD_TYPE=Release" + "-DLLVM_INSTALL_UTILS=ON" + "-DLLVM_BUILD_TESTS=ON" + "-DLLVM_ENABLE_FFI=ON" + "-DLLVM_ENABLE_RTTI=ON" + ;; "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}" + ;; "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}" + "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly" + "-DLLVM_ENABLE_DUMP=ON" + "-DLLVM_LINK_LLVM_DYLIB=ON")))))) (define-public julia (package (name "julia") - (version "0.6.0") + (version "1.1.1") (source (origin (method url-fetch) (uri (string-append @@ -92,7 +160,7 @@ version "/julia-" version ".tar.gz")) (sha256 (base32 - "0rd6lcc9sic10q1j3c6f9qr901i1c4554m93n2sz5b3mh37byqhw")))) + "0hk983mywimclgnjc41zmlppm5kfdz2aj85ky07p49ilcqxi998f")))) (build-system gnu-build-system) (arguments `(#:test-target "test" @@ -123,9 +191,25 @@ (copy-file (string-append (assoc-ref inputs "virtualenv") "/bin/virtualenv") "julia-env") - (copy-file (assoc-ref inputs "unicode-data") - "doc/UnicodeData.txt") - #t)) + (copy-file (assoc-ref inputs "libwhich") + (string-append "deps/srccache/libwhich-" + "81e9723c0273d78493dc8c8ed570f68d9ce7e89e" + ".tar.gz")) + (copy-file (assoc-ref inputs "rmath") + "deps/srccache/Rmath-julia-0.1.tar.gz") + ;; needed by libwhich + (setenv "LD_LIBRARY_PATH" + (string-join (map + (lambda (pkg) + (string-append (assoc-ref inputs pkg) + "/lib")) + (list + "arpack-ng" "fftw" "gmp" "lapack" + "libgit2" "mpfr" "openblas" "openlibm" + "openspecfun" "pcre2" + )) + ":")) + #t)) ;; FIXME: Building the documentation requires Julia packages that ;; would be downloaded from the Internet. We should build them in a ;; separate build phase. @@ -168,19 +252,9 @@ ("lapack" "liblapack" "liblapack.so") ("libgit2" "libgit2" "libgit2.so") ("gmp" "libgmp" "libgmp.so") - ("openlibm" "libopenlibm" "libopenlibm.so") ("openspecfun" "libopenspecfun" "libopenspecfun.so") ("fftw" "libfftw3" "libfftw3_threads.so") ("fftwf" "libfftw3f" "libfftw3f_threads.so")))))) - (substitute* "base/fft/FFTW.jl" - (("const libfftw = Base.libfftw_name") - (string-append "const libfftw = \"" - (assoc-ref inputs "fftw") "/lib/libfftw3_threads.so" - "\"")) - (("const libfftwf = Base.libfftwf_name") - (string-append "const libfftwf = \"" - (assoc-ref inputs "fftwf") "/lib/libfftw3f_threads.so" - "\""))) (substitute* "base/math.jl" (("const libm = Base.libm_name") (string-append "const libm = \"" @@ -192,11 +266,6 @@ (assoc-ref inputs "openspecfun") "/lib/libopenspecfun.so" "\""))) - (substitute* "base/pcre.jl" - (("const PCRE_LIB = \"libpcre2-8\"") - (string-append "const PCRE_LIB = \"" - (assoc-ref inputs "pcre2") - "/lib/libpcre2-8.so" "\""))) #t)) (add-before 'build 'fix-include-and-link-paths (lambda* (#:key inputs #:allow-other-keys) @@ -209,7 +278,6 @@ "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)") (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)") "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)")) - ;; The REPL must be linked with libuv. (substitute* "ui/Makefile" (("JLDFLAGS \\+= ") @@ -218,9 +286,9 @@ "/lib/libuv.so "))) (substitute* "base/Makefile" - (("\\$\\(build_includedir\\)/uv-errno.h") + (("\\$\\(build_includedir\\)/uv/errno.h") (string-append (assoc-ref inputs "libuv") - "/include/uv-errno.h"))) + "/include/uv/errno.h"))) #t)) (add-before 'build 'replace-default-shell (lambda _ @@ -229,37 +297,37 @@ #t)) (add-after 'unpack 'hardcode-paths (lambda _ - (substitute* "base/interactiveutil.jl" + (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl" (("`which") (string-append "`" (which "which"))) (("`wget") (string-append "`" (which "wget")))) #t)) (add-before 'check 'disable-broken-tests (lambda _ - ;; Adjust expected error messages to match what current libgit2 - ;; provides. - (substitute* "test/libgit2.jl" - (("Invalid Content-Type") "invalid Content-Type") - (("Failed to resolve path") "failed to resolve path")) - - (substitute* "test/choosetests.jl" - ;; These tests fail, probably because some of the input - ;; binaries have been stripped and thus backtraces don't look - ;; as expected. - (("\"backtrace\",") "") - (("\"compile\",") "") - (("\"replutil\",") "") - (("\"cmdlineargs\",") "") - ;; FIXME: This test fails with the following error: - ;; Error in testset file: - ;; Test Failed - ;; Expression: download("ba\0d", "good") - ;; Expected: ArgumentError - ;; Thrown: Base.UVError - (("\"file\",") "")) - #t))) + (define (touch file-name) + (call-with-output-file file-name (const #t))) + ;; FIXME: All git tests works except this one. But *THIS* "fix" + ;; is not working, so right now I'm disabling all libgit2.jl tests + ;; (substitute* "stdlib/LibGit2/test/libgit2.jl" + ;; (("!LibGit2.use_http_path(cfg, github_cred)") "true") + ;; (("LibGit2.use_http_path(cfg, mygit_cred)") "true")) + (map (lambda (test) + (delete-file test) + (touch test)) + '("stdlib/Sockets/test/runtests.jl" + "stdlib/Distributed/test/runtests.jl" + ;; FIXME: see above + "stdlib/LibGit2/test/libgit2.jl")) + (substitute* "test/choosetests.jl" + ;; These tests fail, probably because some of the input + ;; binaries have been stripped and thus backtraces don't look + ;; as expected. + (("\"backtrace\",") "") + (("\"cmdlineargs\",") "")) + #t))) #:make-flags (list (string-append "prefix=" (assoc-ref %outputs "out")) + (string-append "PREFIX=" (assoc-ref %outputs "out")) ;; Passing the MARCH flag is necessary to build binary substitutes for ;; the supported architectures. @@ -277,7 +345,11 @@ ;build system for a shared library. "USE_SYSTEM_LAPACK=1" "USE_SYSTEM_BLAS=1" + + ;; TODO: What about building blas with 64 support? "USE_BLAS64=0" ;needed when USE_SYSTEM_BLAS=1 + "LIBBLAS=-lopenblas" + "LIBBLASNAME=libopenblas" "USE_SYSTEM_FFTW=1" "LIBFFTWNAME=libfftw3" @@ -296,36 +368,39 @@ (assoc-ref %build-inputs "utf8proc") "/include") "USE_SYSTEM_LLVM=1" - "USE_LLVM_SHLIB=0" ; FIXME: fails when set to 1 + "LLVM_VER=6.0.1" - "USE_SYSTEM_LIBUNWIND=1" - "USE_SYSTEM_LIBUV=1" - (string-append "LIBUV=" - (assoc-ref %build-inputs "libuv") - "/lib/libuv.so") - (string-append "LIBUV_INC=" - (assoc-ref %build-inputs "libuv") - "/include") - "USE_SYSTEM_PATCHELF=1" - "USE_SYSTEM_PCRE=1" - "USE_SYSTEM_OPENLIBM=1" - "USE_SYSTEM_GMP=1" - "USE_SYSTEM_MPFR=1" - "USE_SYSTEM_ARPACK=1" - "USE_SYSTEM_LIBGIT2=1" - "USE_SYSTEM_OPENSPECFUN=1"))) + "USE_LLVM_SHLIB=1" + "USE_SYSTEM_LIBUNWIND=1" + "USE_SYSTEM_LIBUV=1" + (string-append "LIBUV=" + (assoc-ref %build-inputs "libuv") + "/lib/libuv.so") + (string-append "LIBUV_INC=" + (assoc-ref %build-inputs "libuv") + "/include") + "USE_SYSTEM_PATCHELF=1" + "USE_SYSTEM_PCRE=1" + "USE_SYSTEM_OPENLIBM=1" + + "USE_SYSTEM_GMP=1" + "USE_SYSTEM_MPFR=1" + "USE_SYSTEM_ARPACK=1" + "USE_SYSTEM_LIBGIT2=1" + "USE_SYSTEM_ZLIB=1" + "USE_SYSTEM_OPENSPECFUN=1"))) (inputs - `(("llvm" ,llvm-3.9.1) + `(("llvm" ,llvm-julia) ;; The bundled version is 3.3.0 so stick to that version. With other ;; versions, we get test failures in 'linalg/arnoldi' as described in ;; . ("arpack-ng" ,arpack-ng-3.3.0) - ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like + ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like ("lapack" ,lapack) - ("openblas" ,openblas) ;Julia does not build with Atlas - ("libunwind" ,libunwind-for-julia) + ("openblas" ,openblas) ;Julia does not build with Atlas + ("libunwind" ,libunwind) ("openlibm" ,openlibm) ("openspecfun" ,openspecfun) ("libgit2" ,libgit2) @@ -346,44 +421,56 @@ ;; would eventually be replaced with proper Guix packages. ;; TODO: run "make -f contrib/repackage_system_suitesparse4.make" to copy static lib + ;; Find dependency versions here: + ;; https://raw.githubusercontent.com/JuliaLang/julia/77a2c1e245c85812dc1c7687540beedecc52758f/deps/Versions.make + ("rmath" + ,(origin + (method url-fetch) + (uri "https://api.github.com/repos/JuliaLang/Rmath-julia/tarball/v0.1") + (sha256 + (base32 + "1qyps217175qhid46l8f5i1v8i82slgp23ia63x2hzxwfmx8617p")))) ("suitesparse" ,(origin - (method url-fetch) - (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz") - (sha256 - (base32 - "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43")))) + (method url-fetch) + (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz") + (sha256 + (base32 + "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43")))) ("objconv" ,(origin - (method url-fetch) - ;; No versioned URL, see for updates. - (uri "https://www.agner.org/optimize/objconv.zip") - (file-name "objconv-2018-10-07.zip") - (sha256 - (base32 - "0wp6ld9vk11f4nnkn56627zmlv9k5vafi99qa3yyn1pgcd61zcfs")))) + (method url-fetch) + ;; No versioned URL, see for updates. + (uri "https://www.agner.org/optimize/objconv.zip") + (file-name "objconv-2018-10-07.zip") + (sha256 + (base32 + "0wp6ld9vk11f4nnkn56627zmlv9k5vafi99qa3yyn1pgcd61zcfs")))) + ("libwhich" + ,(origin + (method url-fetch) + (uri + (string-append + "https://api.github.com/repos/vtjnash/libwhich/tarball/" + "81e9723c0273d78493dc8c8ed570f68d9ce7e89e")) + (sha256 + (base32 + "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))) ("dsfmt" ,(origin - (method url-fetch) - (uri (string-append - "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/" - "SFMT/dSFMT-src-2.2.3.tar.gz")) - (sha256 - (base32 - "03kaqbjbi6viz0n33dk5jlf6ayxqlsq4804n7kwkndiga9s4hd42")))))) + (method url-fetch) + (uri (string-append + "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/" + "SFMT/dSFMT-src-2.2.3.tar.gz")) + (sha256 + (base32 + "03kaqbjbi6viz0n33dk5jlf6ayxqlsq4804n7kwkndiga9s4hd42")))))) (native-inputs `(("openssl" ,openssl) ("perl" ,perl) ("patchelf" ,patchelf) ("pkg-config" ,pkg-config) - ("python" ,python-2) - ("unicode-data" - ,(origin - (method url-fetch) - (uri "http://www.unicode.org/Public/9.0.0/ucd/UnicodeData.txt") - (sha256 - (base32 - "13zfannnr6sa6s27ggvcvzmh133ndi38pfyxsssvjmw2s8ac9pv8")))))) + ("python" ,python-2))) ;; Julia is not officially released for ARM and MIPS. ;; See https://github.com/JuliaLang/julia/issues/10639 (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux")) -- 2.22.0