Subject: [PATCH] [WIP] Update Julia to 1.8.0

From: Akira Kyle <[email-masked]>
Date: Wed, 27 Jul 2022 20:22:27 -0600

I'm opening this to have something to track getting Julia updated 
and to avoid duplication of effort in case anyone else may also be 
working on updating Julia. The current version in guix is 1.6.3 
which was released almost a year ago and wasn't building for me on 
aarch64 due to https://issues.guix.gnu.org/56711 and this 
motivated me to see if I couldn't also get the most recent Julia 
to build!

The following patch is just a WIP and not in a state to merge, but 
it does build for me on aarch64 with the tests disabled. I have 
not tried running the tests yet. But I am able to install packages 
using the builtin Julia package manager which I wasn't able to do 
with guix's julia v1.6.3.

A few notes:

- Julia now appears to work with an unpatched llvm-13, however it 
  requires building llvm as a shared library with the 
  LLVM_BUILD_LLVM_DYLIB option and not the BUILD_SHARED_LIBS 
  option, however this appears to be the recommended option by the 
  llvm docs. I'm not sure if this breaks other things in guix that 
  depend on llvm. There's a possibly related issue here 
  https://issues.guix.gnu.org/42576
- I hard coded the path to the ca-certificates.crt file in guix as 
  /etc/ssl/certs/ca-certificates.crt however I suspect this is not 
  the right way to do this.

I'm sure there's other issues as well, but I'm still relatively 
new to guix, so some help in getting this polished up would be 
great! Hopefully it can be ready by the time Julia 1.8.0 is 
actually released.

>From 6ddc537390e5d278432f6f6fa6d849ef4bbe1b53 Mon Sep 17 00:00:00 2001
From: Akira Kyle <[email-masked]>
Date: Wed, 27 Jul 2022 22:21:44 -0600
Subject: [PATCH] Update Julia to 1.8.0-rc3

---
 gnu/local.mk                                  |   3 +-
 gnu/packages/julia.scm                        | 157 ++++++++----------
 gnu/packages/llvm.scm                         | 126 +-------------
 gnu/packages/maths.scm                        |  33 +++-
 .../julia-SOURCE_DATE_EPOCH-mtime.patch       |   6 +-
 .../patches/julia-allow-parallel-build.patch  |  32 ----
 .../patches/julia-fix-include-order.patch     |  36 ++++
 ...libunwind-julia-fix-GCC10-fno-common.patch |  40 -----
 gnu/packages/tls.scm                          |  15 +-
 9 files changed, 149 insertions(+), 299 deletions(-)
 delete mode 100644 gnu/packages/patches/julia-allow-parallel-build.patch
 create mode 100644 gnu/packages/patches/julia-fix-include-order.patch
 delete mode 100644 gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 412d512775..87a20ddce6 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1335,8 +1335,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/jfsutils-gcc-compat.patch		\
   %D%/packages/patches/jfsutils-include-systypes.patch		\
   %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch	\
+  %D%/packages/patches/julia-fix-include-order.patch		\
   %D%/packages/patches/julia-tracker-16-compat.patch		\
-  %D%/packages/patches/julia-allow-parallel-build.patch		\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
   %D%/packages/patches/libffi-3.3-powerpc-fixes.patch		\
   %D%/packages/patches/libffi-float128-powerpc64le.patch	\
@@ -1424,7 +1424,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/libtirpc-hurd.patch			\
   %D%/packages/patches/libtommath-fix-linkage.patch		\
   %D%/packages/patches/libtool-skip-tests2.patch		\
-  %D%/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch \
   %D%/packages/patches/libusb-0.1-disable-tests.patch		\
   %D%/packages/patches/libusb-for-axoloti.patch			\
   %D%/packages/patches/libutils-add-includes.patch		\
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 0bdac66175..68d6d7316d 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -61,7 +61,7 @@ (define libunwind-julia
   (package
     (inherit libunwind)
     (name "libunwind-julia")
-    (version "1.3.1")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
@@ -69,19 +69,16 @@ (define libunwind-julia
                            version ".tar.gz"))
        (sha256
         (base32
-         "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
+         "05qhzcg1xag3l5m3c805np6k342gc0f3g087b7g16jidv59pccwh"))
        (patches
         (append
-            ;; Fix linker issue for i686-linux because GCC10 changed default
-            ;; (see '-fno-common' option).
-            (search-patches "libunwind-julia-fix-GCC10-fno-common.patch")
             (list
              (julia-patch "libunwind-prefer-extbl"
-                          "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+                          "0pf3lsq6zxlmqn86lk4fcj1xwdan9gbxyabrwgxcb59p8jjwsl8r")
              (julia-patch "libunwind-static-arm"
                           "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")
              (julia-patch "libunwind-cfa-rsp"
-                          "1aswjhvysahhldbzh1afbf0hsjxrvs6xidsz2i7s1cjkjbdiia1z"))))))
+                          "0qs5b1h5lsr5qakkv6sddgy5ghlxpjrn2jiqcvg7bkczy24klr6j"))))))
     (home-page "https://github.com/JuliaLang/tree/master/deps/")))
 
 (define (julia-patch-url version name)
@@ -89,7 +86,7 @@ (define (julia-patch-url version name)
                  "/deps/patches/" name ".patch"))
 
 (define-public (julia-patch name sha)
-  (let ((version "1.6.1"))
+  (let ((version "1.8.0-rc3"))
     (origin (method url-fetch)
             (uri (julia-patch-url version name))
             (sha256 (base32 sha))
@@ -139,7 +136,7 @@ (define-public libwhich
 (define-public julia
   (package
     (name "julia")
-    (version "1.6.3")
+    (version "1.8.0-rc3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -147,10 +144,10 @@ (define-public julia
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "1515x8fs25l3f9csbmd1v4nm041zvjnvigy6s5iidy4yrkwdx4r5"))
+                "04g5c3py9h53yk42xpzbnbizcnz197mmns3kirisg4x55dhwq055"))
               (patches
                (search-patches "julia-SOURCE_DATE_EPOCH-mtime.patch"
-                               "julia-allow-parallel-build.patch"))))
+                               "julia-fix-include-order.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -184,7 +181,8 @@ (define-public julia
                                          "gmp" "lapack"
                                          "libssh2" "libnghttp2" "libgit2"
                                          "mbedtls" "mpfr"
-                                         "openblas" "openlibm" "pcre2"
+                                         "openblas" "openblas" "libblastrampoline"
+                                         "openlibm" "pcre2"
                                          "suitesparse" "gfortran:lib"))
                                   ":"))))
          ;; FIXME: Building the documentation requires Julia packages that
@@ -197,15 +195,6 @@ (define-public julia
                 (string-append line "\n"))
                (("src ui doc deps")
                 "src ui deps"))))
-         (add-after 'unpack 'use-system-libwhich
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; don't build it
-             (substitute* "deps/Makefile"
-               (("DEP_LIBS \\+= libwhich") ""))
-             ;; call our version
-             (substitute* "base/Makefile"
-               (("\\$\\$\\(build_depsbindir\\)/libwhich")
-                (search-input-file inputs "/bin/libwhich")))))
          (add-after 'unpack 'change-number-of-precompile-statements
            (lambda _
              ;; Remove nss-certs drops the number of statements below 1200,
@@ -245,11 +234,7 @@ (define-public julia
                (("JLDFLAGS \\+= ")
                 (string-append "JLDFLAGS += "
                                (assoc-ref %build-inputs "libuv")
-                               "/lib/libuv.so ")))
-
-             (substitute* "base/Makefile"
-               (("\\$\\(build_includedir\\)/uv/errno.h")
-                (search-input-file inputs "/include/uv/errno.h")))))
+                               "/lib/libuv.so ")))))
          (add-before 'build 'replace-default-shell
            (lambda _
              (substitute* "base/client.jl"
@@ -288,8 +273,6 @@ (define-public julia
                (substitute* (jlpath "MPFR")
                  (((from "libmpfr")) (to "mpfr" "libmpfr")))
                (substitute* (jlpath "MbedTLS")
-                 ;; For the newer version of mbedtls-apache:
-                 (("libmbedcrypto.so.5") "libmbedcrypto.so.6")
                  (((from "libmbedcrypto")) (to "mbedtls" "libmbedcrypto"))
                  (((from "libmbedtls")) (to "mbedtls" "libmbedtls"))
                  (((from "libmbedx509")) (to "mbedtls" "libmbedx509")))
@@ -317,7 +300,10 @@ (define-public julia
                   (to "suitesparse" "libsuitesparseconfig"))
                  (((from "libumfpack")) (to "suitesparse" "libumfpack")))
                (substitute* (jlpath "Zlib")
-                 (((from "libz")) (to "zlib" "libz"))))))
+                 (((from "libz")) (to "zlib" "libz")))
+               (substitute* (jlpath "MozillaCACerts")
+                 (("global cacert = .*$") ; what's the better way to do this?
+                  "global cacert = \"/etc/ssl/certs/ca-certificates.crt\"\n")))))
          (add-after 'unpack 'enable-parallel-tests
            (lambda* (#:key parallel-tests? #:allow-other-keys)
              (setenv "JULIA_CPU_THREADS" (if parallel-tests?
@@ -328,7 +314,7 @@ (define-public julia
          (add-after 'unpack 'adjust-test-suite
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((pcre2 (assoc-ref inputs "pcre2"))
-                   (mbedtls-apache (assoc-ref inputs "mbedtls"))
+                   (mbedtls-julia (assoc-ref inputs "mbedtls"))
                    (mpfr (assoc-ref inputs "mpfr"))
                    (gmp (assoc-ref inputs "gmp"))
                    (nghttp2 (assoc-ref inputs "libnghttp2"))
@@ -337,7 +323,7 @@ (define-public julia
                (substitute* "stdlib/PCRE2_jll/test/runtests.jl"
                  (("10.36.0") ,(package-version pcre2)))
                (substitute* "stdlib/MbedTLS_jll/test/runtests.jl"
-                 (("2.24.0") ,(package-version mbedtls-apache)))
+                 (("2.28.0") ,(package-version mbedtls-apache)))
                (substitute* "stdlib/MPFR_jll/test/runtests.jl"
                  (("4.1.0") ,(package-version mpfr)))
                (substitute* "stdlib/GMP_jll/test/runtests.jl"
@@ -348,56 +334,56 @@ (define-public julia
                  (("5004") ,(string-replace-substring
                               (version-major+minor
                                 (package-version suitesparse)) "." "0"))))))
-         (add-before 'check 'disable-broken-tests
-           (lambda _
-             ;; disabling REPL tests because they require a stdin
-             ;; There are some read-only precompile issues in the 1.6 series.
-             ;; https://github.com/JuliaLang/julia/pull/41614
-             ;; https://github.com/JuliaLang/julia/issues/41156
-             (substitute* "test/choosetests.jl"
-               (("skip_tests = \\[\\]")
-                "skip_tests = [\"REPL\", \"precompile\"]"))
-             ;; Dates/io tests fail on master when networking is unavailable
-             ;; https://github.com/JuliaLang/julia/issues/34655
-             (substitute* "stdlib/Dates/test/io.jl"
-               (("using Dates") "import Dates
-using Dates: @dateformat_str, Date, DateTime, DateFormat, Time"))
-             ;; Upstream bug I found when packaging
-             ;; https://github.com/JuliaLang/julia/issues/35785
-             (substitute* "test/file.jl"
-               (("@test dirname\\(t\\) == d") "@test_broken dirname(t) == d"))
-             ;; julia embeds a certificate, we are not doing that
-             (substitute* "stdlib/MozillaCACerts_jll/test/runtests.jl"
-               (("@test isfile\\(MozillaCACerts_jll.cacert\\)")
-                "@test_broken isfile(MozillaCACerts_jll.cacert)"))
-             ;; since certificate is not present some tests are failing in network option
-             (substitute* "usr/share/julia/stdlib/v1.6/NetworkOptions/test/runtests.jl"
-               (("@test isfile\\(bundled_ca_roots\\(\\)\\)")
-                "@test_broken isfile(bundled_ca_roots())")
-               (("@test ispath\\(ca_roots_path\\(\\)\\)")
-                "@test_broken ispath(ca_roots_path())")
-               (("@test ca_roots_path\\(\\) \\!= bundled_ca_roots\\(\\)")
-                "@test_broken ca_roots_path() != bundled_ca_roots()"))
-             ;; WARNING: failed to select UTF-8 encoding, using ASCII
-             ;; Using 'setlocale' doesn't affect the test failures.
-             ;(setlocale LC_ALL "en_US.utf8")
-             ;(setenv "LC_ALL" "en_US.utf8")
-             (substitute* "test/cmdlineargs.jl"
-               (("test v\\[3") "test_broken v[3")
-               (("test isempty\\(v\\[3") "test_broken isempty(v[3"))
-             ;; These tests randomly fails because they depend on CPU.
-             (substitute* "stdlib/LinearAlgebra/test/matmul.jl"
-               ;; Fixed in v1.6.4 (see:
-               ;; https://github.com/JuliaLang/julia/blob/v1.6.4/
-               ;; stdlib/LinearAlgebra/test/matmul.jl#L155).
-               (("@test mul\\!\\(C, vf, transpose\\(vf\\), 2, 3\\)\
- == 2vf\\*vf' \\.\\+ 3C0")
-                "@test mul!(C, vf, transpose(vf), 2, 3) ≈ 2vf*vf' .+ 3C0"))
-             (substitute* "test/math.jl"
-               ;; @test_broken cannot be used because if the test randomly
-               ;; passes, then it also raises an error.
-               (("@test isinf\\(log1p\\(-one\\(T\\)\\)\\)")
-                " "))))
+;         (add-before 'check 'disable-broken-tests
+;           (lambda _
+;             ;; disabling REPL tests because they require a stdin
+;             ;; There are some read-only precompile issues in the 1.6 series.
+;             ;; https://github.com/JuliaLang/julia/pull/41614
+;             ;; https://github.com/JuliaLang/julia/issues/41156
+;             (substitute* "test/choosetests.jl"
+;               (("skip_tests = \\[\\]")
+;                "skip_tests = [\"REPL\", \"precompile\"]"))
+;             ;; Dates/io tests fail on master when networking is unavailable
+;             ;; https://github.com/JuliaLang/julia/issues/34655
+;             (substitute* "stdlib/Dates/test/io.jl"
+;               (("using Dates") "import Dates
+;using Dates: @dateformat_str, Date, DateTime, DateFormat, Time"))
+;             ;; Upstream bug I found when packaging
+;             ;; https://github.com/JuliaLang/julia/issues/35785
+;             (substitute* "test/file.jl"
+;               (("@test dirname\\(t\\) == d") "@test_broken dirname(t) == d"))
+;             ;; julia embeds a certificate, we are not doing that
+;             (substitute* "stdlib/MozillaCACerts_jll/test/runtests.jl"
+;               (("@test isfile\\(MozillaCACerts_jll.cacert\\)")
+;                "@test_broken isfile(MozillaCACerts_jll.cacert)"))
+;             ;; since certificate is not present some tests are failing in network option
+;             (substitute* "usr/share/julia/stdlib/v1.6/NetworkOptions/test/runtests.jl"
+;               (("@test isfile\\(bundled_ca_roots\\(\\)\\)")
+;                "@test_broken isfile(bundled_ca_roots())")
+;               (("@test ispath\\(ca_roots_path\\(\\)\\)")
+;                "@test_broken ispath(ca_roots_path())")
+;               (("@test ca_roots_path\\(\\) \\!= bundled_ca_roots\\(\\)")
+;                "@test_broken ca_roots_path() != bundled_ca_roots()"))
+;             ;; WARNING: failed to select UTF-8 encoding, using ASCII
+;             ;; Using 'setlocale' doesn't affect the test failures.
+;             ;(setlocale LC_ALL "en_US.utf8")
+;             ;(setenv "LC_ALL" "en_US.utf8")
+;             (substitute* "test/cmdlineargs.jl"
+;               (("test v\\[3") "test_broken v[3")
+;               (("test isempty\\(v\\[3") "test_broken isempty(v[3"))
+;             ;; These tests randomly fails because they depend on CPU.
+;             (substitute* "stdlib/LinearAlgebra/test/matmul.jl"
+;               ;; Fixed in v1.6.4 (see:
+;               ;; https://github.com/JuliaLang/julia/blob/v1.6.4/
+;               ;; stdlib/LinearAlgebra/test/matmul.jl#L155).
+;               (("@test mul\\!\\(C, vf, transpose\\(vf\\), 2, 3\\)\
+; == 2vf\\*vf' \\.\\+ 3C0")
+;                "@test mul!(C, vf, transpose(vf), 2, 3) ≈ 2vf*vf' .+ 3C0"))
+;             (substitute* "test/math.jl"
+;               ;; @test_broken cannot be used because if the test randomly
+;               ;; passes, then it also raises an error.
+;               (("@test isinf\\(log1p\\(-one\\(T\\)\\)\\)")
+;                " "))))
          (add-before 'install 'symlink-libraries
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((link
@@ -479,7 +465,8 @@ (define-public julia
          "USE_SYSTEM_LAPACK=1"
          "USE_SYSTEM_GMP=1"
          "USE_SYSTEM_MPFR=1"
-         "USE_SYSTEM_SUITESPARSE=1"
+         "USE_SYSTEM_LIBBLASTRAMPOLINE:=1"
+         "USE_SYSTEM_LIBSUITESPARSE=1"
          "USE_SYSTEM_LIBUV=1"
          "USE_SYSTEM_UTF8PROC=1"
          "USE_SYSTEM_MBEDTLS=1"
@@ -488,8 +475,10 @@ (define-public julia
          "USE_SYSTEM_CURL=1"
          "USE_SYSTEM_LIBGIT2=1"
          "USE_SYSTEM_PATCHELF=1"
+         "USE_SYSTEM_LIBWHICH:=1"
          "USE_SYSTEM_ZLIB=1"
          "USE_SYSTEM_P7ZIP=1"
+         "VERBOSE=1"
 
          "NO_GIT=1"             ; build from release tarball.
          "USE_BLAS64=0"         ; needed when USE_SYSTEM_BLAS=1
@@ -503,7 +492,6 @@ (define-public julia
          (string-append "UTF8PROC_INC="
                         (assoc-ref %build-inputs "utf8proc")
                         "/include")
-         "LLVM_VER=11.0.0"
 
          "USE_LLVM_SHLIB=1"
          (string-append "LIBUV="
@@ -525,10 +513,11 @@ (define-public julia
        ("libssh2" ,libssh2)
        ("libunwind" ,libunwind-julia)
        ("libuv" ,libuv-julia)
-       ("llvm" ,llvm-julia)
+       ("llvm" ,llvm-13)
        ("mbedtls" ,mbedtls-apache)
        ("mpfr" ,mpfr)
        ("openblas" ,openblas)
+       ("libblastrampoline" ,libblastrampoline)
        ("openlibm" ,openlibm)
        ("p7zip" ,p7zip)
        ("pcre2" ,pcre2)
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 5a2f411eb2..5e1d6b9463 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -591,8 +591,9 @@ (define-public llvm-14
                 '())
          "-DCMAKE_SKIP_BUILD_RPATH=FALSE"
          "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
-         "-DBUILD_SHARED_LIBS:BOOL=TRUE"
          "-DLLVM_ENABLE_FFI:BOOL=TRUE"
+         "-DLLVM_BUILD_LLVM_DYLIB=ON"
+         "-DLLVM_LINK_LLVM_DYLIB=ON"
          "-DLLVM_REQUIRES_RTTI=1"       ;for some third-party utilities
          "-DLLVM_INSTALL_UTILS=ON")     ;needed for rustc
       ;; Don't use '-g' during the build, to save space.
@@ -1804,129 +1805,6 @@ (define-public ocaml-llvm-9 (make-ocaml-llvm llvm-9))
 (define-public ocaml-llvm-10 (make-ocaml-llvm llvm-10))
 (define-public ocaml-llvm-11 (make-ocaml-llvm llvm-11))
 
-(define-public llvm-julia
-  (package
-    (inherit llvm-11)
-    (name "llvm-julia")
-    (properties `((hidden? . #t)
-                  ,@(package-properties llvm-11)))
-    (source (origin
-              (inherit (package-source llvm-11))
-              ;; 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
-               (map (match-lambda
-                      ((name hash)
-                       (julia-patch name hash)))
-                    (list
-                     '("llvm-D27629-AArch64-large_model_6.0.1"
-                       "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-                     '("llvm8-D34078-vectorize-fdiv"
-                       "19spqc3xsazn1xs9gpcgv9ldadfkv49rmc5khl7sf1dlmhgi4602")
-                     '("llvm-7.0-D44650"
-                       "1h55kkmkiisfj6sk956if2bcj9s0v6n5czn8dxb870vp5nccj3ir")
-                     '("llvm7-symver-jlprefix"
-                       "00ng32x6xhm9czczirn5r1q1mc1myad44fqhi061hwh1vb46dwgm")
-                     '("llvm-6.0-DISABLE_ABI_CHECKS"
-                       "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-                     '("llvm9-D50010-VNCoercion-ni"
-                       "1s1d3sjsiq4vxg7ncy5cz56zgy5vcq6ls3iqaiqkvr23wyryqmdx")
-                     '("llvm7-revert-D44485"
-                       "0f59kq3p3mpwsbmskypbi4zn01l6ig0x7v2rjp08k2r8z8m6fa8n")
-                     '("llvm-11-D75072-SCEV-add-type"
-                       "176xi1lnbnv2rcs05ywhyb7pd0xgmibayvwzksksg44wg2dh8mbx")
-                     '("llvm-julia-tsan-custom-as"
-                       "0awh40kf6lm4wn1nsjd1bmhfwq7rqj811szanp2xkpspykw9hg9s")
-                     '("llvm-D80101"
-                       "1gsdwmgmpbignvqyxcnlprj899259p3dvdznlncd84ss445qgq3j")
-                     '("llvm-D84031"
-                       "0nks9sbk7p0r5gyr0idrmm93a5fmdai8kihz9532dx4zhcvvqbjc")
-                     '("llvm-10-D85553"
-                       "1zjq7j9q2qp56hwkc8yc8f0z7kvam3j7hj8sb7qyd77r255ff78l")
-                     '("llvm-10-unique_function_clang-sa"
-                       "1jys9w2zqk3dasnxqh0qz5ij7rxi6mkgq9pqjsclmamr5169zyan")
-                     ;'("llvm-D88630-clang-cmake"
-                     ;  "0rs6s71nqnjkny7i69gqazhqj5jqfdr0bkxs2v5a55sfx8fa1k54")
-                     '("llvm-11-D85313-debuginfo-empty-arange"
-                       "1f672d5385xpgb8yrim8d3b7wg2z1l81agnshm1q61kdvjixqx32")
-                     '("llvm-11-D90722-rtdyld-absolute-relocs"
-                       "0kmnai229yyxkmpk9lxd180mcnhk2i8d87k2sg89gc8as18w10r6")
-                     '("llvm-invalid-addrspacecast-sink"
-                       "1n1b7j4s80vj7x5377aj9vyphmxx1q6bm0chhkxp6zsy3mx3g2ry")
-                     '("llvm-11-D92906-ppc-setjmp"
-                       "0cmd4dsblp7a8m03j16dqxws0ijh55zf4jzzxmj341qxa1gamdp9")
-                     '("llvm-11-PR48458-X86ISelDAGToDAG"
-                       "0vwzvlhsdazhxg4gj8g2f00a4f8qc5cgac23w575xk3pgba1jh6y")
-                     '("llvm-11-D93092-ppc-knownbits"
-                       "1748bypsc7c9lbs3fnkv0kwvch6bn85kj98j4jdaz254ig0wa6xj")
-                     '("llvm-11-D93154-globalisel-as"
-                       "1k5wd4z3pa7zj0gyjkif7viqj906dhqlbb7dc95gig40nbxv6zpj")
-                     '("llvm-11-ppc-half-ctr"
-                       "0piywisfz6cmw3133kz7vzhiqflq2y7igakqxlym0gi8pqylv7w9")
-                     '("llvm-11-ppc-sp-from-bp"
-                       "1wmg3485cx5f9pbykyl3jibk1wwv4w1x30hl4jyfndzr2yh8azf9")
-                     '("llvm-rGb498303066a6-gcc11-header-fix"
-                       "0hkd4rwhvh8g2yh13g29wiwnjpv2yd1hdyiv1ryw8izl25bz9c67")
-                     '("llvm-11-D94813-mergeicmps"
-                       "0cmy0ywkgyrdcvr9bd6pd912lyd4gcsrib4z0v05dwgcdxhk7y29")
-                     '("llvm-11-D94980-CTR-half"
-                       "1yf8cxib3z8hz7zi9n6v2g2c6vpfr4slq9hpx8m8yq8f1jbyw3fw")
-                     '("llvm-11-D94058-sext-atomic-ops"
-                       "1x6p6k6q651z5jcqxx8vj17cxnv196mka7mwn7dpp6c23lwgfdpb")
-                     '("llvm-11-D96283-dagcombine-half"
-                       "0lv4iq2f8qrcz1xyxfic3bcr5p0aqam3a7c6pp6fnw3riixm096k"))))
-              (patch-flags '("-p1"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments llvm-11)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'patch-round-two
-             ;; We have to do the patching in two rounds because we can't
-             ;; pass '-p1' and '-p2' in the source field.
-             (lambda* (#:key inputs #:allow-other-keys)
-               (map (lambda (patchname)
-                      (invoke "patch" patchname "-p2"))
-                    (list "llvm-11-AArch64-FastIsel-bug"
-                          "llvm-11-D97435-AArch64-movaddrreg"
-                          "llvm-11-D97571-AArch64-loh"
-                          "llvm-11-aarch64-addrspace"))))))
-       ((#:build-type _) "Release")
-       ((#:configure-flags flags)
-        `(list
-           ;; Build a native compiler and the NVPTX backend (NVIDIA) since
-           ;; Julia insists on it, nothing more.  This reduces build times and
-           ;; disk usage.
-           ,(string-append "-DLLVM_TARGETS_TO_BUILD=" (system->llvm-target))
-           "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=NVPTX"
-
-           "-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"
-           "-DLLVM_VERSION_SUFFIX:STRING=jl"))))
-    (inputs
-     (append
-       (package-inputs llvm-11)
-       `(("llvm-11-AArch64-FastIsel-bug"
-          ,(julia-patch "llvm-11-AArch64-FastIsel-bug"
-                        "1m2vddj1mw4kbij8hbrx82piyy6bvr2x7wwdnlxfaqcm72ipzyh9"))
-         ("llvm-11-D97435-AArch64-movaddrreg"
-          ,(julia-patch "llvm-11-D97435-AArch64-movaddrreg"
-                        "10jnavq9ljkj7j2gqj2zd1pwqpqb5zs3zp9h96pmz0djbmxwa86y"))
-         ("llvm-11-D97571-AArch64-loh"
-          ,(julia-patch "llvm-11-D97571-AArch64-loh"
-                        "128zcbg1w1j7hngsf7z1a7alc6lig6l2rqgjp6i8nk3k3f842v6n"))
-         ("llvm-11-aarch64-addrspace"
-          ,(julia-patch "llvm-11-aarch64-addrspace"
-                        "0ckbzgfirxrf2d5bpinpngp7gnilbjrk0cbdfyl3h6f5v6i6xj6m")))))))
-
 (define %cling-version "0.9")
 
 (define llvm-cling             ;LLVM 9 with approximately 10 patches for cling
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 6a84f47468..c702a33cac 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -4581,6 +4581,35 @@ (define-public openblas
      "OpenBLAS is a BLAS library forked from the GotoBLAS2-1.13 BSD version.")
     (license license:bsd-3)))
 
+(define-public libblastrampoline
+  (package
+    (name "libblastrampoline")
+    (version "5.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaLinearAlgebra/libblastrampoline")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0mf79zw11kxyil72y2ly5x8bbz3ng3nsqmp0zcps16b69wvfs19c"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:make-flags (list "-C" "src"
+                          (string-append "prefix=" (assoc-ref %outputs "out"))
+                          "CC=gcc")
+       #:tests? #f ;no check target
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))
+    (home-page "https://github.com/JuliaLinearAlgebra/libblastrampoline")
+    (synopsis "Using PLT trampolines to provide a BLAS and LAPACK demuxing library. ")
+    (description
+     "Using PLT trampolines to provide a BLAS and LAPACK demuxing library. ")
+    (license license:expat)))
+
 (define-public openblas-ilp64
   (package/inherit openblas
     (name "openblas-ilp64")
@@ -4700,7 +4729,7 @@ (define ignorance blis)
 (define-public openlibm
   (package
     (name "openlibm")
-    (version "0.7.4")
+    (version "0.8.1")
     (source
      (origin
        (method git-fetch)
@@ -4709,7 +4738,7 @@ (define-public openlibm
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1azms0lpxb7vxb3bln5lyz0wpwx6jnzbffkclclpq2v5aiw8d14i"))))
+        (base32 "1xsrcr49z0wdqpwd98jmw2xh18myzsa9xman0kp1h2i89x8mic5b"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
diff --git a/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
index b60f284923..d156807dab 100644
--- a/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
+++ b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
@@ -8,15 +8,15 @@ Patch by Nicoló Balzarotti <[email-masked]>.
 
 --- a/base/loading.jl
 +++ b/base/loading.jl
-@@ -807,7 +807,10 @@
-         path = normpath(joinpath(dirname(prev), _path))
+@@ -1131,7 +1131,10 @@ function _include_dependency(mod::Module, _path::AbstractString)
      end
      if _track_dependencies[]
+         @lock require_lock begin
 -        push!(_require_dependencies, (mod, path, mtime(path)))
 +          push!(_require_dependencies,
 +                (mod, path,
 +                 haskey(ENV, "SOURCE_DATE_EPOCH") ?
 +                 parse(Float64, ENV["SOURCE_DATE_EPOCH"]) : mtime(path)))
+         end
      end
      return path, prev
- end
diff --git a/gnu/packages/patches/julia-allow-parallel-build.patch b/gnu/packages/patches/julia-allow-parallel-build.patch
deleted file mode 100644
index cc1d42fee4..0000000000
--- a/gnu/packages/patches/julia-allow-parallel-build.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Allow parallel tests with isolated environment.
-
-See https://github.com/JuliaLang/julia/issues/43205 and
-https://github.com/JuliaLang/julia/pull/43211.
-
-diff --git a/test/runtests.jl b/test/runtests.jl
-index 2f9cd058bb..150395e78c 100644
---- a/test/runtests.jl
-+++ b/test/runtests.jl
-@@ -4,7 +4,7 @@ using Test
- using Distributed
- using Dates
- import REPL
--using Printf: @sprintf
-+using Printf: @sprintf, @printf
- using Base: Experimental
- 
- include("choosetests.jl")
-@@ -83,11 +83,12 @@ prepend!(tests, linalg_tests)
- import LinearAlgebra
- cd(@__DIR__) do
-     n = 1
--    if net_on
-+    if net_on || haskey(ENV, "JULIA_CPU_THREADS")
-         n = min(Sys.CPU_THREADS, length(tests))
-         n > 1 && addprocs_with_testenv(n)
-         LinearAlgebra.BLAS.set_num_threads(1)
-     end
-+    @printf("Number of threads: %i\n", n)
-     skipped = 0
- 
-     @everywhere include("testdefs.jl")
diff --git a/gnu/packages/patches/julia-fix-include-order.patch b/gnu/packages/patches/julia-fix-include-order.patch
new file mode 100644
index 0000000000..bc67ba1acd
--- /dev/null
+++ b/gnu/packages/patches/julia-fix-include-order.patch
@@ -0,0 +1,36 @@
+From 3cd2c70ded3eb6b6fa01077c4a57c9611ffd385f Mon Sep 17 00:00:00 2001
+From: Akira Kyle <[email-masked]>
+Date: Mon, 25 Jul 2022 21:11:15 -0600
+Subject: [PATCH] Fix ordering of headers so `#define _GNU_SOURCE` comes first
+
+https://github.com/JuliaLang/julia/pull/46183
+
+---
+ cli/loader.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cli/loader.h b/cli/loader.h
+index 2d0b977f71..0620113048 100644
+--- a/cli/loader.h
++++ b/cli/loader.h
+@@ -22,8 +22,6 @@
+ #define realloc loader_realloc
+ #endif
+ 
+-#include <stdint.h>
+-
+ #ifdef _OS_WINDOWS_
+ 
+ #define WIN32_LEAN_AND_MEAN
+@@ -49,6 +47,8 @@
+ 
+ #endif
+ 
++#include <stdint.h>
++
+ // Borrow definition from `support/dtypes.h`
+ #ifdef _OS_WINDOWS_
+ # ifdef LIBRARY_EXPORTS
+-- 
+2.36.1
+
diff --git a/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch b/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch
deleted file mode 100644
index 8ef4b111e4..0000000000
--- a/gnu/packages/patches/libunwind-julia-fix-GCC10-fno-common.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Fix compilation with -fno-common.
-
-Borrowed from upstream 29e17d8d2ccbca07c423e3089a6d5ae8a1c9cb6e.
-Author:     Yichao Yu <[email-masked]>
-AuthorDate: Tue Mar 31 00:43:32 2020 -0400
-Commit:     Dave Watson <[email-masked]>
-CommitDate: Tue Mar 31 08:06:29 2020 -0700
-
-diff --git a/src/x86/Ginit.c b/src/x86/Ginit.c
-index f6b8dc2..9550efa 100644
---- a/src/x86/Ginit.c
-+++ b/src/x86/Ginit.c
-@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
- 
- # endif /* UNW_LOCAL_ONLY */
- 
--HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
--
--/* XXX fix me: there is currently no way to locate the dyn-info list
--       by a remote unwinder.  On ia64, this is done via a special
--       unwind-table entry.  Perhaps something similar can be done with
--       DWARF2 unwind info.  */
--
- static void
- put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
- {
-@@ -71,7 +64,12 @@ static int
- get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
-                         void *arg)
- {
--  *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
-+#ifndef UNW_LOCAL_ONLY
-+# pragma weak _U_dyn_info_list_addr
-+  if (!_U_dyn_info_list_addr)
-+    return -UNW_ENOINFO;
-+#endif
-+  *dyn_info_list_addr = _U_dyn_info_list_addr ();
-   return 0;
- }
- 
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 1ee5400a9c..43b3986fa8 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -948,7 +948,7 @@ (define-public mbedtls-apache
     (name "mbedtls-apache")
     ;; XXX Check whether ‘-Wformat-signedness’ still breaks mbedtls-for-hiawatha
     ;; when updating.
-    (version "2.26.0")
+    (version "2.28.0")
     (source
      (origin
        (method git-fetch)
@@ -956,17 +956,8 @@ (define-public mbedtls-apache
              (url "https://github.com/ARMmbed/mbedtls")
              (commit (string-append "mbedtls-" version))))
        (sha256
-        (base32 "0scwpmrgvg6q7rvqkc352d2fqlsx0aylcbyibcp1f1rsn8iiif2m"))
-       (file-name (git-file-name name version))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Can be removed with the next version.
-           ;; Reduce level of format truncation warnings due to false positives.
-           ;; https://github.com/ARMmbed/mbedtls/commit/2065a8d8af27c6cb1e40c9462b5933336dca7434
-           (substitute* "CMakeLists.txt"
-             (("Wformat-truncation=2") "Wformat-truncation"))
-           #t))))
+        (base32 "0s37dsi29v7146fi9k4frvx5rz2snxdm6c3rwq2fvnca2r80hfjl"))
+       (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
-- 
2.36.1