SHA256
1
0
forked from pool/julia

Accepting request 1175424 from science

- libjulia-compat1_10 provides libjulia1_10. added rpmlint filter
  to workaround rpmlint error on ldconfig_scriptlet
- Update rpmlint.
  * bad-cert.pem is a test file in LibGit2_jll.
- Update specfile.
  * cleanup symlinks. these files should just point starting from buildroot
- The location of libgcc_s is different between leap and tumbleweed.
- Prevent debug-info generation touching precompiled sysimages and caches which will
  invalidate checksum generation
- Update rpmlintrc to ignore some warnings
- Fix dangling symlinks errors
- Inconsistencies on where sbinaries are located in openSUSE Leap and Tumbleweed
  has caused leap rpm generation to fail after all the builds done successfully.
- Julia on leap has trouble looking for libgfortran5 so symlinking it to fix it
- Format specfile
- Fix specfile
  * p7zip for tumbleweed
  * p7zip-full for leap
- More cleanup
- Also include OPENBLAS_TARGET_ARCH=NEHALEM in %{__julia_opts} for system not tumbleweed
- More specfile cleanup
  * Move over some environmental variables into the %{__julia_opts} global rpm var
  * Adjust to support if system is not Tumbleweed. openblas not building because libpthread troubles
- Fix ./julia-libunwind-1.9.patch.
- Cleanup specfile
  * Use autosetup
  * Remove patches that are not needed anymore
    - llvm-link-shared.patch
    - llvm-set-of-custom-patches.patch
    - new-pass-manager.patch
    - support-float16-depending-on-llvm-and-platform.patch
    - use-newpm-asan.patch
    - fix-dependencies-checksums.patch
    - julia-suitesparse-7.patch
    - use-system-libuv-correctly.patch
    - julia-libgit2-1.7.patch
- Update to version 1.10.3:
  * Fix outdated usage of scrubbing for log test failures
  * [REPL] Fix typo in using/import completion
  * Avoid compiler warning about redefining jl_globalref_t
  * yet more atomics & cache-line fixes on work-stealing queue 
  * build: remove extra .a file
  * Bump CSL to 1.1.1 to fix libgomp bug
  * codegen: change tbaa of ptr_phi to tbaa_value
  * Default to the medium code model in x86 linux
  * Remove some duplicates from emitted compilation traces for Julia 1.10
  * Add version string to sysimg triple
  * Add missing GC_POP() in emit_cfunction
  * typeintersect: fix UnionAll unaliasing bug caused by innervars
  * Apply backported changes
    - GC typo fix
    - Add inventory writing via DocumenterInventoryWritingBackport
- Add mpfr-looking-for-gmp-fix.patch
- Cleanup specfile
- Limit to x86_64(-v3) architectures. aarch64 has libquadmath disabled
- Tests are currently broken. Idk how upstream was able to have all their checks green despite
  I using the some bundled dependencies. Other issues are because of hardcoded libraries in
  the jll packages even though their versions are non-impactful to Julia.
- Nghttp, Mbedtls, PCRE, LibGit2, LibSSH, gmp, mpfr, and DSFMT are now using the bundled dependencies.
  * now added to the globally defined _privatelibs
  * ./julia-hardcoded-libs.patch is now updated.
  * the only dependencies that do not require much intervention is libblastrampoline and openlibm
- Update to version 1.10.2:
  * JuliaSyntax.jl is now used as the default parser, providing better diagnostics and faster
    parsing. Set environment variable `JULIA_USE_FLISP_PARSER` to `1` to switch back to the old
    parser if necessary (and if you find this necessary, please file an issue).
  * `⥺` (U+297A, `\leftarrowsubset`) and `⥷` (U+2977, `\leftarrowless`) may now be used as
    binary operators with arrow precedence.
  * When a task forks a child, the parent task's task-local RNG (random number
    generator) is no longer affected. The seeding of child based on the parent
    task also takes a more disciplined approach to collision resistance, using
    a design based on the SplitMix and DotMix splittable RNG schemes.
  * A new more-specific rule for methods resolves ambiguities containing Union{} in favor of
    the method defined explicitly to handle the Union{} argument. This makes it possible to
    define methods to explicitly handle Union{} without the ambiguities that commonly would
    result previously. This also lets the runtime optimize certain method lookups in a way
    that significantly improves load and inference times for heavily overloaded methods that
    dispatch on Types (such as traits and constructors).
  * The "h bar" `ℏ` (`\hslash` U+210F) character is now treated as equivalent to `ħ` (`\hbar` U+0127).
  * The `@simd` macro now has more limited and clearer semantics: it only enables reordering and contraction
    of floating-point operations, instead of turning on all "fastmath" optimizations.
    If you observe performance regressions due to this change, you can
    recover previous behavior with `@fastmath @simd`, if you are OK with
    all the optimizations enabled by the `@fastmath` macro.
  * When a method with keyword arguments is displayed in the stack trace view, the textual
    representation of the keyword arguments' type is simplified using the new
    `@Kwargs{key1::Type1, ...}` macro syntax.
  * The mark phase of the garbage collector is now multi-threaded.
  * [JITLink](https://llvm.org/docs/JITLink.html) is enabled by default on
    Linux aarch64 when Julia is linked to LLVM 15 or later versions.
    This should resolve many segmentation faults previously observed on this
    platform.
  * The precompilation process now uses pidfile locks and orchestrates
    multiple julia processes to only have one process
    spend effort precompiling while the others wait. Previously all would
    do the work and race to overwrite the cache files.
  * New option `--gcthreads` to set how many threads will be used by the
  garbage collector.
    The default is `N/2` where `N` is the number of worker threads
    (`--threads`) used by Julia.
  * SparseArrays and SuiteSparse are no longer included in the default system
    image, so the core language no longer contains GPL libraries. However,
    these libraries are still included alongside the language in the standard
    binary distribution.
  * `tanpi` is now defined. It computes tan(π*x) more accurately than
    `tan(pi*x)`.
  * `fourthroot(x)` is now defined in `Base.Math` and can be used to compute
    the fourth root of `x`.  It can also be accessed using the unicode
    character `∜`, which can be typed by `\fourthroot<tab>`.
  * `Libc.memmove`, `Libc.memset`, and `Libc.memcpy` are now defined, whose
  functionality matches that of their respective C calls.
  * `Base.isprecompiled(pkg::PkgId)` has been added, to identify whether a
    package has already been precompiled.
  * `binomial(x, k)` now supports non-integer `x`.
  * A `CartesianIndex` is now treated as a "scalar" for broadcasting.
  * `printstyled` now supports italic output.
  * `parent` and `parentindices` support `SubString`s.
  * `replace(string, pattern...)` now supports an optional `IO` argument to
     write the output to a stream rather than returning a string.
  * `startswith` now supports seekable `IO` streams.
  * The `initialized=true` keyword assignment for `sortperm!` and
    `partialsortperm!` is now a no-op. It previously exposed unsafe behavior.
  * Printing integral `Rational`s will skip the denominator in `Rational`-typed
    IO context (e.g. in arrays).
  * `Pkg.precompile` now accepts `timing` as a keyword argument
    which displays per package timing information for precompilation
  (e.g. `Pkg.precompile(timing=true)`).
  * `AbstractQ` no longer subtypes `AbstractMatrix`. Moreover,
    `adjoint(Q::AbstractQ)` no longer wraps `Q` in an `Adjoint` type,
    but instead in an `AdjointQ`, that itself subtypes `AbstractQ`. This
    change accounts for the fact that typically `AbstractQ` instances
    behave like function-based, matrix-backed linear operators, and
    hence don't allow for efficient indexing. Also, many `AbstractQ`
    types can act on vectors/matrices of different size, acting like a
    matrix with context-dependent size. With this change, `AbstractQ`
    has a well-defined API that is described in detail in the [Julia
    documentation](https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#man-linalg-abstractq).
  * Adjoints and transposes of `Factorization` objects are no longer wrapped
    in `Adjoint` and `Transpose` wrappers, respectively. Instead, they are
    wrapped in `AdjointFactorization` and `TranposeFactorization` types,
    which themselves subtype `Factorization`.
  * New functions `hermitianpart` and `hermitianpart!` for extracting the
    Hermitian (real symmetric) part of a matrix.
  * The `norm` of the adjoint or transpose of an `AbstractMatrix` now returns
    the norm of the parent matrix by default, matching the current behaviour
    for `AbstractVector`s.
  * `eigen(A, B)` and `eigvals(A, B)`, where one of `A` or `B` is symmetric
    or Hermitian, are now fully supported.
  * `eigvals/eigen(A, cholesky(B))` now computes the generalized eigenvalues
    (`eigen`: and eigenvectors) of `A` and `B` via Cholesky decomposition
    for positive definite `B`. Note: The second argument is the output of
    `cholesky`.
  * Format specifiers now support dynamic width and precision, e.g. `%*s`
    and `%*.*g`.
  * When stack traces are printed, the printed depth of types in function
  signatures will be limited
    to avoid overly verbose output.
  * The `@test_broken` macro (or `@test` with `broken=true`) now complains
    if the test expression returns a non-boolean value in the same way as
    a non-broken test.
  * When a call to `@test` fails or errors inside a function, a larger
    stacktrace is now printed such that the location of the  test within a
    `@testset` can be retrieved.
  * `code_native` and `@code_native` now default to intel syntax instead
    of AT&T.
  * `@time_imports` now shows the timing of any module `__init__()`s that
    are run.
  * The `@pure` macro is now deprecated. Use `Base.@assume_effects :foldable` instead ([#48682]).
- Set Cmake version requirement to be at least 3.22
- Accommodate renaming dependencies in specfile.
- Disable jldownload by just running true
- Add fix-dependencies-checksums.patch
  * Fix checksum checks for suitesparse aarch64. Sources are fetched from the same source.
  * Fix checksum checks for libLLVM_jll
  * It's checking for the checksums and it is also trying to fetch them from the internet 
    and idk what's the point of having the full julia tarball.
- Fix build
  * use bundled suitesparse. comment out system suitesparse build requirement
  * comment out openblas development dependencies. use bundled openblas.
  * comment out lapack development dependencies. use bundled lapack.
  * move openblas build away from the actual make build.
    this ensures that it's installed properly because doing otherwise will
    skip the install of the dependencies. weird but it works.
- Update specfile for bundled LLVM
- Add missing build requirements for bundled llvm 15
- Fix aarch64 build. it needs to download a source that can just be copied which is
  SuiteSparse.v7.2.1+1.aarch64-linux-gnu.tar.gz
- Use python3 instead of python. Python 2.x is EOL-ed. Addresses bsc#1219740
- Set suitesparse requirement to 7.2.1 and libcholmod to 5.x.x
- Add Obsoletes to obsolete older versions for julia and its subpackages.
- Enable only tier 1 architectures
- Add disable-doc-gen-in-makefile.patch
- Add disable-download-of-unicode-for-doc-gen.patch
- Add UnicodeData.txt
- Add julia-remove-libcholmod_cuda.patch
- Add julia.keyring
- Add julia-1.10.0-full.tar.gz.asc
- Update julia-hardcoded-libs.patch
- Update specfile and enable v3 CPU optimizations on x86_64 architecture
- Update to version 1.10.0:
* New language features
  - JuliaSyntax.jl is now used as the default parser, providing better diagnostics and faster
    parsing. Set environment variable `JULIA_USE_FLISP_PARSER` to `1` to switch back to the old
    parser if necessary (and if you find this necessary, please file an issue).
  - `⥺` (U+297A, `\leftarrowsubset`) and `⥷` (U+2977, `\leftarrowless`) may now be used as
  binary operators with arrow precedence.
* Language changes
  - When a task forks a child, the parent task's task-local RNG (random number generator) is no longer affected. The 
    seeding of child based on the parent task also takes a more disciplined approach to collision resistance, using a 
    design based on the SplitMix and DotMix splittable RNG schemes.
  - A new more-specific rule for methods resolves ambiguities containing Union{} in favor of
    the method defined explicitly to handle the Union{} argument. This makes it possible to
    define methods to explicitly handle Union{} without the ambiguities that commonly would
    result previously. This also lets the runtime optimize certain method lookups in a way
    that significantly improves load and inference times for heavily overloaded methods that
    dispatch on Types (such as traits and constructors).
  - The "h bar" `ℏ` (`\hslash` U+210F) character is now treated as equivalent to `ħ` (`\hbar` U+0127).
  - The `@simd` macro now has more limited and clearer semantics: it only enables reordering and contraction
    of floating-point operations, instead of turning on all "fastmath" optimizations.
    If you observe performance regressions due to this change, you can recover previous behavior 
    with `@fastmath @simd`,
    if you are OK with all the optimizations enabled by the `@fastmath` macro.
  - When a method with keyword arguments is displayed in the stack trace view, the textual
    representation of the keyword arguments' type is simplified using the new
    `@Kwargs{key1::Type1, ...}` macro syntax.
* Compiler/Runtime improvements
  - The mark phase of the garbage collector is now multi-threaded.
  - [JITLink](https://llvm.org/docs/JITLink.html) is enabled by default on Linux aarch64 when Julia 
    is linked to LLVM 15 or later versions.
    This should resolve many segmentation faults previously observed on this platform.
  - The precompilation process now uses pidfile locks and orchestrates multiple julia processes to only have one proces
    spend effort precompiling while the others wait. Previously all would do the work and race to overwrite the cache 
    files.
* Command-line option changes
  - New option `--gcthreads` to set how many threads will be used by the garbage collector.
    The default is `N/2` where `N` is the number of worker threads (`--threads`) used by Julia.
* Build system changes
  - SparseArrays and SuiteSparse are no longer included in the default system image, so the core
    language no longer contains GPL libraries. However, these libraries are still included
    alongside the language in the standard binary distribution
* New library functions
  - `tanpi` is now defined. It computes tan(π*x) more accurately than `tan(pi*x)`.
  - `fourthroot(x)` is now defined in `Base.Math` and can be used to compute the fourth root of `x`.
   It can also be accessed using the unicode character `∜`, which can be typed by `\fourthroot<tab>`.
  - `Libc.memmove`, `Libc.memset`, and `Libc.memcpy` are now defined, whose functionality matches that of their respective C calls.
  - `Base.isprecompiled(pkg::PkgId)` has been added, to identify whether a package has already been precompiled.
* New library features
  - `binomial(x, k)` now supports non-integer `x`.
  - A `CartesianIndex` is now treated as a "scalar" for broadcasting.
  - `printstyled` now supports italic output.
  - `parent` and `parentindices` support `SubString`s.
  - `replace(string, pattern...)` now supports an optional `IO` argument to
     write the output to a stream rather than returning a string.
  - `startswith` now supports seekable `IO` streams.
* Standard library changes
  - The `initialized=true` keyword assignment for `sortperm!` and `partialsortperm!`
    is now a no-op. It previously exposed unsafe behavior.
  - Printing integral `Rational`s will skip the denominator in `Rational`-typed IO context (e.g. in arrays).
* Package Manager
  - `Pkg.precompile` now accepts `timing` as a keyword argument which displays per package timing 
    information for precompilation (e.g. `Pkg.precompile(timing=true)`).
- Update specfile:
  * symlink libLLVM-14jl.so to standard LD_LIBRARY_PATH
  * new Recommends:
    - libcurl-devel for new recommends
    - openssh-clients for ssh operations
    - curl for any curl operation
- Combine these patches to julia-hardcoded-libs.patch and delete:
  * libblastrampoline-hardcoded-libs.patch
  * libgit2-libssh2-hardcoded-libs.patch
  * mbedtls-hardcoded-libs.patch
- Slight adjustment of specfile for updated patch
- Requires mbedtls-devel, libgit2-devel and libssh2-devel for dlopen

OBS-URL: https://build.opensuse.org/request/show/1175424
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/julia?expand=0&rev=3
This commit is contained in:
Ana Guerrero 2024-05-21 16:36:06 +00:00 committed by Git OBS Bridge
commit 35071ccf6f
24 changed files with 34684 additions and 1524 deletions

33797
UnicodeData.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,21 @@
diff -ruN julia-1.10.0.orig/Makefile julia-1.10.0/Makefile
--- julia-1.10.0.orig/Makefile 2023-12-27 12:31:21.449481396 +0800
+++ julia-1.10.0/Makefile 2023-12-28 13:12:34.633832260 +0800
@@ -265,7 +265,7 @@
endef
-install: $(build_depsbindir)/stringreplace docs
+install: $(build_depsbindir)/stringreplace $(BUILDROOT)/doc/_build/html/en/index.html
@$(MAKE) $(QUIET_MAKE) $(JULIA_BUILD_MODE)
@for subdir in $(bindir) $(datarootdir)/julia/stdlib/$(VERSDIR) $(docdir) $(man1dir) $(includedir)/julia $(libdir) $(private_libdir) $(sysconfdir) $(private_libexecdir); do \
mkdir -p $(DESTDIR)$$subdir; \
@@ -525,7 +525,7 @@
darwinframework:
$(MAKE) -C $(JULIAHOME)/contrib/mac/framework
-light-source-dist.tmp: docs
+light-source-dist.tmp: $(BUILDROOT)/doc/_build/html/en/index.html
ifneq ($(BUILDROOT),$(JULIAHOME))
$(error make light-source-dist does not work in out-of-tree builds)
endif

View File

@ -0,0 +1,11 @@
diff -ruN julia-1.10.0.orig/doc/Makefile julia-1.10.0/doc/Makefile
--- julia-1.10.0.orig/doc/Makefile 2023-12-27 12:31:21.472814814 +0800
+++ julia-1.10.0/doc/Makefile 2023-12-28 12:02:09.068566373 +0800
@@ -28,7 +28,6 @@
UNICODE_DATA_VERSION=13.0.0
$(SRCCACHE)/UnicodeData-$(UNICODE_DATA_VERSION).txt:
@mkdir -p "$(SRCCACHE)"
- $(JLDOWNLOAD) "$@" https://www.unicode.org/Public/$(UNICODE_DATA_VERSION)/ucd/UnicodeData.txt
deps: $(SRCCACHE)/UnicodeData-$(UNICODE_DATA_VERSION).txt
$(JLCHECKSUM) "$<"

3
julia-1.10.3-full.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d892b2123be64dacf9d05e4ccbad7f1797f6bf87c397a74804b011c8750f6c8f
size 318660498

View File

@ -0,0 +1,17 @@
-----BEGIN PGP SIGNATURE-----
iQJLBAABCAA1FiEENnPfUp2QSUd/drN1ZuPH3APW5JUFAmYxNPAXHGJ1aWxkYm90
QGp1bGlhbGFuZy5vcmcACgkQZuPH3APW5JVCGQ//TnsMX0QFBXdjl64n22FL3yeu
BYYOJTtH4d5iaz0VNVuDxBvtWiBQH/17ImnwqU7mvc3XTOhhrn3LkXCrkfP2Etje
VExElTR3yj7aFNpo87/LATSb8ZcRpcWkdAOy6+fZwtGKmADDP/Ub4VWBgnc50OBC
p5bU+6+4YaA+Lnj9uz/BLdkXX+uOWiZX5CwMdzfM8gJlua25Lb+NJq5vb7hRxAEp
LUCRDweC5jlPvLjUVkA2Gzr1LYl8y0my0QlcdgDvhpsdTgf/2ZJUyQ/oHNg/gmx2
QfZAcl2hWgbdEIfCGtSItmDRTpRrreDjPtnRGv9lTJRXRy5Vm1yJX9hmugrKuoKD
Ivx0x8GrSu8wH/OESMxn5kllPQOeW7CbdmLXYNSLAJxoyFOAnO3Dp64idtepEe9D
TieEKa1HTq5maBlxVHdQp5Rti5WvTzVDKSmmNwB3TQE+VCkF2q/0Ae+U1xdLpRVx
4we6b13OCH4/PQM/JRn4o1B4LXKRYYEJ8VVovigMD8DQseBKZ2eGpEyHwhCCefSF
UGN8FABCoQ/LpShNdVxwAGORg2d5ErNuvHPX/3D7SNWeiviOfTadzqBvQlOijexz
xpsiOKRjLbPV11d22lM6JHtKPw/vhZK/seYal6cW3ppvJgd/zWNZuogWRQNdumiD
ugh0IjZHRGiI20Rku2E=
=yT0z
-----END PGP SIGNATURE-----

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:61843b9647fd06d3b2994f3277a64de1cb5a5a5297d930b8c8e3bc0e93740024
size 294983229

View File

@ -1,28 +1,3 @@
diff --git a/stdlib/nghttp2_jll/src/nghttp2_jll.jl b/stdlib/nghttp2_jll/src/nghttp2_jll.jl
index 8b98c76ac5..77ad9e3800 100644
--- a/stdlib/nghttp2_jll/src/nghttp2_jll.jl
+++ b/stdlib/nghttp2_jll/src/nghttp2_jll.jl
@@ -22,7 +22,7 @@ if Sys.iswindows()
elseif Sys.isapple()
const libnghttp2 = "@rpath/libnghttp2.14.dylib"
else
- const libnghttp2 = "libnghttp2.so.14"
+ const libnghttp2 = "libnghttp2.so"
end
function __init__()
diff --git a/stdlib/LibGit2_jll/src/LibGit2_jll.jl b/stdlib/LibGit2_jll/src/LibGit2_jll.jl
index f0d4b5dda6..2ed3017b51 100644
--- a/stdlib/LibGit2_jll/src/LibGit2_jll.jl
+++ b/stdlib/LibGit2_jll/src/LibGit2_jll.jl
@@ -23,7 +23,7 @@ if Sys.iswindows()
elseif Sys.isapple()
const libgit2 = "@rpath/libgit2.1.5.dylib"
else
- const libgit2 = "libgit2.so.1.5"
+ const libgit2 = "libgit2.so"
end
function __init__()
diff --git a/stdlib/OpenLibm_jll/src/OpenLibm_jll.jl b/stdlib/OpenLibm_jll/src/OpenLibm_jll.jl
index 215de8aed6..918d1ffdc2 100644
@ -37,38 +12,21 @@ index 215de8aed6..918d1ffdc2 100644
end
function __init__()
diff --git a/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl b/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl
index 2940970cef..359dbd9065 100644
--- a/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl
+++ b/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl
@@ -67,18 +67,18 @@ elseif Sys.isapple()
const libsuitesparseconfig = "@rpath/libsuitesparseconfig.5.dylib"
const libumfpack = "@rpath/libumfpack.5.dylib"
From: Soc Virnyl Estela <contact@uncomfyhalomacro.pl>
Date: Sat, 09 Dec 2023 16:30:31 +0800
Subject: Change hardcoded libs for libblastrampoline
---
diff -ruN julia-1.9.4.orig/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl julia-1.9.4/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl
--- julia-1.9.4.orig/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl 2023-12-09 14:21:37.910096392 +0800
+++ julia-1.9.4/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl 2023-12-09 14:21:58.006998468 +0800
@@ -24,7 +24,7 @@
elseif Sys.isapple()
"@rpath/libblastrampoline.5.dylib"
else
- const libamd = "libamd.so.2"
- const libbtf = "libbtf.so.1"
- const libcamd = "libcamd.so.2"
- const libccolamd = "libccolamd.so.2"
- const libcholmod = "libcholmod.so.3"
- const libcolamd = "libcolamd.so.2"
- const libklu = "libklu.so.1"
- const libldl = "libldl.so.2"
- const librbio = "librbio.so.2"
- const libspqr = "libspqr.so.2"
- const libsuitesparseconfig = "libsuitesparseconfig.so.5"
- const libumfpack = "libumfpack.so.5"
+ const libamd = "libamd.so"
+ const libbtf = "libbtf.so"
+ const libcamd = "libcamd.so"
+ const libccolamd = "libccolamd.so"
+ const libcholmod = "libcholmod.so"
+ const libcolamd = "libcolamd.so"
+ const libklu = "libklu.so"
+ const libldl = "libldl.so"
+ const librbio = "librbio.so"
+ const libspqr = "libspqr.so"
+ const libsuitesparseconfig = "libsuitesparseconfig.so"
+ const libumfpack = "libumfpack.so"
- "libblastrampoline.so.5"
+ "libblastrampoline.so"
end
function __init__()

View File

@ -1,77 +0,0 @@
From 764484f58b5daead9fd58de08ce35382758d3985 Mon Sep 17 00:00:00 2001
From: Yichao Yu <yyc1992@gmail.com>
Date: Sun, 10 Sep 2023 14:07:57 -0400
Subject: [PATCH] libgit2 1.7.0 support
---
stdlib/LibGit2/src/consts.jl | 5 +++++
stdlib/LibGit2/src/types.jl | 5 ++++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/stdlib/LibGit2/src/consts.jl b/stdlib/LibGit2/src/consts.jl
index f3a460108db6b..8f0e6eeb2ec87 100644
--- a/stdlib/LibGit2/src/consts.jl
+++ b/stdlib/LibGit2/src/consts.jl
@@ -468,4 +468,9 @@ Option flags for `GitProxy`.
TRACE_TRACE
end
+# The type of object id
+@enum(GIT_OID_TYPE,
+ _OID_DEFAULT = 0,
+ OID_SHA1 = 1)
+
end
diff --git a/stdlib/LibGit2/src/types.jl b/stdlib/LibGit2/src/types.jl
index 0b653f9b6ad21..c796ff0f98b20 100644
--- a/stdlib/LibGit2/src/types.jl
+++ b/stdlib/LibGit2/src/types.jl
@@ -2,7 +2,7 @@
using Base: something
import Base.@kwdef
-import .Consts: GIT_SUBMODULE_IGNORE, GIT_MERGE_FILE_FAVOR, GIT_MERGE_FILE, GIT_CONFIG
+import .Consts: GIT_SUBMODULE_IGNORE, GIT_MERGE_FILE_FAVOR, GIT_MERGE_FILE, GIT_CONFIG, GIT_OID_TYPE
const OID_RAWSZ = 20
const OID_HEXSZ = OID_RAWSZ * 2
@@ -439,6 +439,9 @@ The fields represent:
# options controlling how the diff text is generated
context_lines::UInt32 = UInt32(3)
interhunk_lines::UInt32 = UInt32(0)
+ @static if LibGit2.VERSION >= v"1.7.0"
+ oid_type::GIT_OID_TYPE = Consts._OID_DEFAULT
+ end
id_abbrev::UInt16 = UInt16(7)
max_size::Int64 = Int64(512*1024*1024) #512Mb
old_prefix::Cstring = Cstring(C_NULL)
diff --git a/stdlib/LibGit2/test/libgit2-tests.jl b/stdlib/LibGit2/test/libgit2-tests.jl
index 4ace98a0b1..f230ff4e14 100644
--- a/stdlib/LibGit2/test/libgit2-tests.jl
+++ b/stdlib/LibGit2/test/libgit2-tests.jl
@@ -1181,19 +1177,19 @@ mktempdir() do dir
@testset "diff" begin
LibGit2.with(LibGit2.GitRepo(cache_repo)) do repo
@test !LibGit2.isdirty(repo)
- @test !LibGit2.isdirty(repo, test_file)
- @test !LibGit2.isdirty(repo, "nonexistent")
+# @test !LibGit2.isdirty(repo, test_file)
+# @test !LibGit2.isdirty(repo, "nonexistent")
@test !LibGit2.isdiff(repo, "HEAD")
@test !LibGit2.isdirty(repo, cached=true)
- @test !LibGit2.isdirty(repo, test_file, cached=true)
- @test !LibGit2.isdirty(repo, "nonexistent", cached=true)
+# @test !LibGit2.isdirty(repo, test_file, cached=true)
+# @test !LibGit2.isdirty(repo, "nonexistent", cached=true)
@test !LibGit2.isdiff(repo, "HEAD", cached=true)
open(joinpath(cache_repo,test_file), "a") do f
println(f, "zzzz")
end
@test LibGit2.isdirty(repo)
- @test LibGit2.isdirty(repo, test_file)
- @test !LibGit2.isdirty(repo, "nonexistent")
+# @test LibGit2.isdirty(repo, test_file)
+# @test !LibGit2.isdirty(repo, "nonexistent")
@test LibGit2.isdiff(repo, "HEAD")
@test !LibGit2.isdirty(repo, cached=true)
@test !LibGit2.isdiff(repo, "HEAD", cached=true)

View File

@ -1,8 +1,7 @@
diff --git a/src/debuginfo.cpp b/src/debuginfo.cpp
index 95b562311b..69fceb0cfe 100644
--- a/src/debuginfo.cpp
+++ b/src/debuginfo.cpp
@@ -265,6 +265,7 @@ public:
diff -ruN julia-1.10.3.orig/src/debuginfo.cpp julia-1.10.3/src/debuginfo.cpp
--- julia-1.10.3.orig/src/debuginfo.cpp 2024-05-15 19:29:44.237505409 +0800
+++ julia-1.10.3/src/debuginfo.cpp 2024-05-15 19:34:48.084228112 +0800
@@ -267,6 +267,7 @@
di->format = UNW_INFO_FORMAT_ARM_EXIDX;
di->start_ip = (uintptr_t)arm_text_addr;
di->end_ip = (uintptr_t)(arm_text_addr + arm_text_len);
@ -10,11 +9,11 @@ index 95b562311b..69fceb0cfe 100644
di->u.rti.name_ptr = 0;
di->u.rti.table_data = arm_exidx_addr;
di->u.rti.table_len = arm_exidx_len;
@@ -1577,6 +1578,7 @@ void register_eh_frames(uint8_t *Addr, size_t Size)
@@ -1579,6 +1580,7 @@
di->u.rti.table_data = (unw_word_t)table;
di->start_ip = start_ip;
di->end_ip = end_ip;
+ di->load_offset = 0;
jl_profile_atomic([&]() {
jl_profile_atomic([&]() JL_NOTSAFEPOINT {
_U_dyn_register(di);

View File

@ -0,0 +1,29 @@
diff --git a/Makefile b/Makefile
index 1565014a0f..5e9b4ccf54 100644
--- a/Makefile
+++ b/Makefile
@@ -196,7 +196,7 @@ else ifeq ($(JULIA_BUILD_MODE),debug)
JL_PRIVATE_LIBS-0 += libjulia-internal-debug libjulia-codegen-debug
endif
ifeq ($(USE_GPL_LIBS), 1)
-JL_PRIVATE_LIBS-$(USE_SYSTEM_LIBSUITESPARSE) += libamd libbtf libcamd libccolamd libcholmod libcholmod_cuda libcolamd libklu libldl librbio libspqr libspqr_cuda libsuitesparseconfig libumfpack
+JL_PRIVATE_LIBS-$(USE_SYSTEM_LIBSUITESPARSE) += libamd libbtf libcamd libccolamd libcholmod libcolamd libklu libldl librbio libspqr libsuitesparseconfig libumfpack
endif
JL_PRIVATE_LIBS-$(USE_SYSTEM_LIBBLASTRAMPOLINE) += libblastrampoline
JL_PRIVATE_LIBS-$(USE_SYSTEM_PCRE) += libpcre2-8
diff --git a/base/Makefile b/base/Makefile
index ad2bb6a63c..493302af78 100644
--- a/base/Makefile
+++ b/base/Makefile
@@ -269,11 +269,9 @@ $(eval $(call symlink_system_library,LIBSUITESPARSE,libamd))
$(eval $(call symlink_system_library,LIBSUITESPARSE,libcamd))
$(eval $(call symlink_system_library,LIBSUITESPARSE,libccolamd))
$(eval $(call symlink_system_library,LIBSUITESPARSE,libcholmod))
-$(eval $(call symlink_system_library,LIBSUITESPARSE,libcholmod_cuda))
$(eval $(call symlink_system_library,LIBSUITESPARSE,libcolamd))
$(eval $(call symlink_system_library,LIBSUITESPARSE,libumfpack))
$(eval $(call symlink_system_library,LIBSUITESPARSE,libspqr))
-$(eval $(call symlink_system_library,LIBSUITESPARSE,libspqr_cuda))
$(eval $(call symlink_system_library,LIBSUITESPARSE,libsuitesparseconfig))
# EXCLUDED LIBRARIES (installed/used, but not vendored for use with dlopen):
# libunwind

View File

@ -10,3 +10,12 @@ addFilter("W: hidden-file-or-dir /usr/share/julia/stdlib/v1.9/Pkg/test/test_pack
# it is dlopened
addFilter("explicit-lib-dependency")
addFilter("devel-dependency")
# Update alternatives does provide the binary
addFilter("W: desktopfile-without-binary /usr/share/applications/julia.desktop julia")
# We should not touch these
addFilter("W: hidden-file-or-dir /usr/share/julia/base/JuliaSyntax/.mailmap")
addFilter("W: hidden-file-or-dir /usr/share/julia/stdlib/v1.10/Pkg/test/test_packages/AugmentedPlatform/.pkg")
addFilter("W: hidden-file-or-dir /usr/share/julia/stdlib/v1.10/Pkg/test/test_packages/AugmentedPlatform/.pkg")
# LibGit_jll test case
addFilter("W: pem-certificate /usr/share/julia/stdlib/v1.10/LibGit2/test/bad_ca_roots.pem")
addFilter("E: shlib-policy-name-error*")

View File

@ -1,40 +0,0 @@
--- a/src/solvers/cholmod.jl.orig 2022-11-11 07:24:15.860939080 +0000
+++ b/src/solvers/cholmod.jl 2022-11-11 07:24:39.462357069 +0000
@@ -194,21 +194,6 @@
from www.julialang.org, which ship with the correct
versions of all dependencies.
"""
- elseif BUILD_VERSION.major != current_version.major
- @warn """
- CHOLMOD version incompatibility
-
- Julia was compiled with CHOLMOD version $BUILD_VERSION. It is
- currently linked with version $current_version.
- This might cause Julia to terminate when working with
- sparse matrix factorizations, e.g. solving systems of
- equations with \\.
-
- It is recommended that you use Julia with the same major
- version of CHOLMOD as the one used during the build, or
- download the generic binaries from www.julialang.org,
- which ship with the correct versions of all dependencies.
- """
end
intsize = sizeof(SuiteSparse_long)
@@ -232,15 +232,6 @@ function __init__()
"""
end
- # Register gc tracked allocator if CHOLMOD is new enough
- if current_version >= v"3.0.0"
- cnfg = cglobal((:SuiteSparse_config, :libsuitesparseconfig), Ptr{Cvoid})
- unsafe_store!(cnfg, cglobal(:jl_malloc, Ptr{Cvoid}), 1)
- unsafe_store!(cnfg, cglobal(:jl_calloc, Ptr{Cvoid}), 2)
- unsafe_store!(cnfg, cglobal(:jl_realloc, Ptr{Cvoid}), 3)
- unsafe_store!(cnfg, cglobal(:jl_free, Ptr{Cvoid}), 4)
- end
-
catch ex
@error "Error during initialization of module CHOLMOD" exception=ex,catch_backtrace()
end

View File

@ -1,3 +1,374 @@
-------------------------------------------------------------------
Mon May 20 12:12:39 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- libjulia-compat1_10 provides libjulia1_10. added rpmlint filter
to workaround rpmlint error on ldconfig_scriptlet
-------------------------------------------------------------------
Mon May 20 05:21:58 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Update rpmlint.
* bad-cert.pem is a test file in LibGit2_jll.
- Update specfile.
* cleanup symlinks. these files should just point starting from buildroot
-------------------------------------------------------------------
Sun May 19 10:18:13 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- The location of libgcc_s is different between leap and tumbleweed.
- Prevent debug-info generation touching precompiled sysimages and caches which will
invalidate checksum generation
-------------------------------------------------------------------
Sat May 18 11:34:00 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Update rpmlintrc to ignore some warnings
-------------------------------------------------------------------
Sat May 18 11:26:17 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Fix dangling symlinks errors
-------------------------------------------------------------------
Sat May 18 00:32:29 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Inconsistencies on where sbinaries are located in openSUSE Leap and Tumbleweed
has caused leap rpm generation to fail after all the builds done successfully.
-------------------------------------------------------------------
Fri May 17 07:31:28 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Julia on leap has trouble looking for libgfortran5 so symlinking it to fix it
- Format specfile
-------------------------------------------------------------------
Fri May 17 00:17:42 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Fix specfile
* p7zip for tumbleweed
* p7zip-full for leap
-------------------------------------------------------------------
Thu May 16 15:18:08 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- More cleanup
-------------------------------------------------------------------
Wed May 15 12:33:37 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Also include OPENBLAS_TARGET_ARCH=NEHALEM in %{__julia_opts} for system not tumbleweed
-------------------------------------------------------------------
Wed May 15 12:09:21 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- More specfile cleanup
* Move over some environmental variables into the %{__julia_opts} global rpm var
* Adjust to support if system is not Tumbleweed. openblas not building because libpthread troubles
-------------------------------------------------------------------
Wed May 15 11:35:28 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Fix ./julia-libunwind-1.9.patch.
-------------------------------------------------------------------
Wed May 15 10:24:04 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Cleanup specfile
* Use autosetup
* Remove patches that are not needed anymore
- llvm-link-shared.patch
- llvm-set-of-custom-patches.patch
- new-pass-manager.patch
- support-float16-depending-on-llvm-and-platform.patch
- use-newpm-asan.patch
- fix-dependencies-checksums.patch
- julia-suitesparse-7.patch
- use-system-libuv-correctly.patch
- julia-libgit2-1.7.patch
-------------------------------------------------------------------
Sun May 12 14:19:36 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Update to version 1.10.3:
* Fix outdated usage of scrubbing for log test failures
* [REPL] Fix typo in using/import completion
* Avoid compiler warning about redefining jl_globalref_t
* yet more atomics & cache-line fixes on work-stealing queue
* build: remove extra .a file
* Bump CSL to 1.1.1 to fix libgomp bug
* codegen: change tbaa of ptr_phi to tbaa_value
* Default to the medium code model in x86 linux
* Remove some duplicates from emitted compilation traces for Julia 1.10
* Add version string to sysimg triple
* Add missing GC_POP() in emit_cfunction
* typeintersect: fix UnionAll unaliasing bug caused by innervars
* Apply backported changes
- GC typo fix
- Add inventory writing via DocumenterInventoryWritingBackport
- Add mpfr-looking-for-gmp-fix.patch
- Cleanup specfile
- Limit to x86_64(-v3) architectures. aarch64 has libquadmath disabled
- Tests are currently broken. Idk how upstream was able to have all their checks green despite
I using the some bundled dependencies. Other issues are because of hardcoded libraries in
the jll packages even though their versions are non-impactful to Julia.
-------------------------------------------------------------------
Fri Apr 26 00:46:22 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Nghttp, Mbedtls, PCRE, LibGit2, LibSSH, gmp, mpfr, and DSFMT are now using the bundled dependencies.
* now added to the globally defined _privatelibs
* ./julia-hardcoded-libs.patch is now updated.
* the only dependencies that do not require much intervention is libblastrampoline and openlibm
-------------------------------------------------------------------
Wed Apr 24 10:16:59 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Update to version 1.10.2:
* JuliaSyntax.jl is now used as the default parser, providing better diagnostics and faster
parsing. Set environment variable `JULIA_USE_FLISP_PARSER` to `1` to switch back to the old
parser if necessary (and if you find this necessary, please file an issue).
* `⥺` (U+297A, `\leftarrowsubset`) and `⥷` (U+2977, `\leftarrowless`) may now be used as
binary operators with arrow precedence.
* When a task forks a child, the parent task's task-local RNG (random number
generator) is no longer affected. The seeding of child based on the parent
task also takes a more disciplined approach to collision resistance, using
a design based on the SplitMix and DotMix splittable RNG schemes.
* A new more-specific rule for methods resolves ambiguities containing Union{} in favor of
the method defined explicitly to handle the Union{} argument. This makes it possible to
define methods to explicitly handle Union{} without the ambiguities that commonly would
result previously. This also lets the runtime optimize certain method lookups in a way
that significantly improves load and inference times for heavily overloaded methods that
dispatch on Types (such as traits and constructors).
* The "h bar" `ℏ` (`\hslash` U+210F) character is now treated as equivalent to `ħ` (`\hbar` U+0127).
* The `@simd` macro now has more limited and clearer semantics: it only enables reordering and contraction
of floating-point operations, instead of turning on all "fastmath" optimizations.
If you observe performance regressions due to this change, you can
recover previous behavior with `@fastmath @simd`, if you are OK with
all the optimizations enabled by the `@fastmath` macro.
* When a method with keyword arguments is displayed in the stack trace view, the textual
representation of the keyword arguments' type is simplified using the new
`@Kwargs{key1::Type1, ...}` macro syntax.
* The mark phase of the garbage collector is now multi-threaded.
* [JITLink](https://llvm.org/docs/JITLink.html) is enabled by default on
Linux aarch64 when Julia is linked to LLVM 15 or later versions.
This should resolve many segmentation faults previously observed on this
platform.
* The precompilation process now uses pidfile locks and orchestrates
multiple julia processes to only have one process
spend effort precompiling while the others wait. Previously all would
do the work and race to overwrite the cache files.
* New option `--gcthreads` to set how many threads will be used by the
garbage collector.
The default is `N/2` where `N` is the number of worker threads
(`--threads`) used by Julia.
* SparseArrays and SuiteSparse are no longer included in the default system
image, so the core language no longer contains GPL libraries. However,
these libraries are still included alongside the language in the standard
binary distribution.
* `tanpi` is now defined. It computes tan(π*x) more accurately than
`tan(pi*x)`.
* `fourthroot(x)` is now defined in `Base.Math` and can be used to compute
the fourth root of `x`. It can also be accessed using the unicode
character `∜`, which can be typed by `\fourthroot<tab>`.
* `Libc.memmove`, `Libc.memset`, and `Libc.memcpy` are now defined, whose
functionality matches that of their respective C calls.
* `Base.isprecompiled(pkg::PkgId)` has been added, to identify whether a
package has already been precompiled.
* `binomial(x, k)` now supports non-integer `x`.
* A `CartesianIndex` is now treated as a "scalar" for broadcasting.
* `printstyled` now supports italic output.
* `parent` and `parentindices` support `SubString`s.
* `replace(string, pattern...)` now supports an optional `IO` argument to
write the output to a stream rather than returning a string.
* `startswith` now supports seekable `IO` streams.
* The `initialized=true` keyword assignment for `sortperm!` and
`partialsortperm!` is now a no-op. It previously exposed unsafe behavior.
* Printing integral `Rational`s will skip the denominator in `Rational`-typed
IO context (e.g. in arrays).
* `Pkg.precompile` now accepts `timing` as a keyword argument
which displays per package timing information for precompilation
(e.g. `Pkg.precompile(timing=true)`).
* `AbstractQ` no longer subtypes `AbstractMatrix`. Moreover,
`adjoint(Q::AbstractQ)` no longer wraps `Q` in an `Adjoint` type,
but instead in an `AdjointQ`, that itself subtypes `AbstractQ`. This
change accounts for the fact that typically `AbstractQ` instances
behave like function-based, matrix-backed linear operators, and
hence don't allow for efficient indexing. Also, many `AbstractQ`
types can act on vectors/matrices of different size, acting like a
matrix with context-dependent size. With this change, `AbstractQ`
has a well-defined API that is described in detail in the [Julia
documentation](https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#man-linalg-abstractq).
* Adjoints and transposes of `Factorization` objects are no longer wrapped
in `Adjoint` and `Transpose` wrappers, respectively. Instead, they are
wrapped in `AdjointFactorization` and `TranposeFactorization` types,
which themselves subtype `Factorization`.
* New functions `hermitianpart` and `hermitianpart!` for extracting the
Hermitian (real symmetric) part of a matrix.
* The `norm` of the adjoint or transpose of an `AbstractMatrix` now returns
the norm of the parent matrix by default, matching the current behaviour
for `AbstractVector`s.
* `eigen(A, B)` and `eigvals(A, B)`, where one of `A` or `B` is symmetric
or Hermitian, are now fully supported.
* `eigvals/eigen(A, cholesky(B))` now computes the generalized eigenvalues
(`eigen`: and eigenvectors) of `A` and `B` via Cholesky decomposition
for positive definite `B`. Note: The second argument is the output of
`cholesky`.
* Format specifiers now support dynamic width and precision, e.g. `%*s`
and `%*.*g`.
* When stack traces are printed, the printed depth of types in function
signatures will be limited
to avoid overly verbose output.
* The `@test_broken` macro (or `@test` with `broken=true`) now complains
if the test expression returns a non-boolean value in the same way as
a non-broken test.
* When a call to `@test` fails or errors inside a function, a larger
stacktrace is now printed such that the location of the test within a
`@testset` can be retrieved.
* `code_native` and `@code_native` now default to intel syntax instead
of AT&T.
* `@time_imports` now shows the timing of any module `__init__()`s that
are run.
* The `@pure` macro is now deprecated. Use `Base.@assume_effects :foldable` instead ([#48682]).
- Set Cmake version requirement to be at least 3.22
- Accommodate renaming dependencies in specfile.
- Disable jldownload by just running true
- Add fix-dependencies-checksums.patch
* Fix checksum checks for suitesparse aarch64. Sources are fetched from the same source.
* Fix checksum checks for libLLVM_jll
* It's checking for the checksums and it is also trying to fetch them from the internet
and idk what's the point of having the full julia tarball.
- Fix build
* use bundled suitesparse. comment out system suitesparse build requirement
* comment out openblas development dependencies. use bundled openblas.
* comment out lapack development dependencies. use bundled lapack.
* move openblas build away from the actual make build.
this ensures that it's installed properly because doing otherwise will
skip the install of the dependencies. weird but it works.
- Update specfile for bundled LLVM
- Add missing build requirements for bundled llvm 15
- Fix aarch64 build. it needs to download a source that can just be copied which is
SuiteSparse.v7.2.1+1.aarch64-linux-gnu.tar.gz
-------------------------------------------------------------------
Sun Feb 11 05:19:11 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Use python3 instead of python. Python 2.x is EOL-ed. Addresses bsc#1219740
-------------------------------------------------------------------
Sat Dec 30 04:16:58 UTC 2023 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Set suitesparse requirement to 7.2.1 and libcholmod to 5.x.x
-------------------------------------------------------------------
Thu Dec 28 12:58:24 UTC 2023 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Add Obsoletes to obsolete older versions for julia and its subpackages.
-------------------------------------------------------------------
Thu Dec 28 06:43:48 UTC 2023 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Enable only tier 1 architectures
- Add disable-doc-gen-in-makefile.patch
- Add disable-download-of-unicode-for-doc-gen.patch
- Add UnicodeData.txt
- Add julia-remove-libcholmod_cuda.patch
- Add julia.keyring
- Add julia-1.10.0-full.tar.gz.asc
- Update julia-hardcoded-libs.patch
- Update specfile and enable v3 CPU optimizations on x86_64 architecture
- Update to version 1.10.0:
* New language features
- JuliaSyntax.jl is now used as the default parser, providing better diagnostics and faster
parsing. Set environment variable `JULIA_USE_FLISP_PARSER` to `1` to switch back to the old
parser if necessary (and if you find this necessary, please file an issue).
- `⥺` (U+297A, `\leftarrowsubset`) and `⥷` (U+2977, `\leftarrowless`) may now be used as
binary operators with arrow precedence.
* Language changes
- When a task forks a child, the parent task's task-local RNG (random number generator) is no longer affected. The
seeding of child based on the parent task also takes a more disciplined approach to collision resistance, using a
design based on the SplitMix and DotMix splittable RNG schemes.
- A new more-specific rule for methods resolves ambiguities containing Union{} in favor of
the method defined explicitly to handle the Union{} argument. This makes it possible to
define methods to explicitly handle Union{} without the ambiguities that commonly would
result previously. This also lets the runtime optimize certain method lookups in a way
that significantly improves load and inference times for heavily overloaded methods that
dispatch on Types (such as traits and constructors).
- The "h bar" `ℏ` (`\hslash` U+210F) character is now treated as equivalent to `ħ` (`\hbar` U+0127).
- The `@simd` macro now has more limited and clearer semantics: it only enables reordering and contraction
of floating-point operations, instead of turning on all "fastmath" optimizations.
If you observe performance regressions due to this change, you can recover previous behavior
with `@fastmath @simd`,
if you are OK with all the optimizations enabled by the `@fastmath` macro.
- When a method with keyword arguments is displayed in the stack trace view, the textual
representation of the keyword arguments' type is simplified using the new
`@Kwargs{key1::Type1, ...}` macro syntax.
* Compiler/Runtime improvements
- The mark phase of the garbage collector is now multi-threaded.
- [JITLink](https://llvm.org/docs/JITLink.html) is enabled by default on Linux aarch64 when Julia
is linked to LLVM 15 or later versions.
This should resolve many segmentation faults previously observed on this platform.
- The precompilation process now uses pidfile locks and orchestrates multiple julia processes to only have one proces
spend effort precompiling while the others wait. Previously all would do the work and race to overwrite the cache
files.
* Command-line option changes
- New option `--gcthreads` to set how many threads will be used by the garbage collector.
The default is `N/2` where `N` is the number of worker threads (`--threads`) used by Julia.
* Build system changes
- SparseArrays and SuiteSparse are no longer included in the default system image, so the core
language no longer contains GPL libraries. However, these libraries are still included
alongside the language in the standard binary distribution
* New library functions
- `tanpi` is now defined. It computes tan(π*x) more accurately than `tan(pi*x)`.
- `fourthroot(x)` is now defined in `Base.Math` and can be used to compute the fourth root of `x`.
It can also be accessed using the unicode character `∜`, which can be typed by `\fourthroot<tab>`.
- `Libc.memmove`, `Libc.memset`, and `Libc.memcpy` are now defined, whose functionality matches that of their respective C calls.
- `Base.isprecompiled(pkg::PkgId)` has been added, to identify whether a package has already been precompiled.
* New library features
- `binomial(x, k)` now supports non-integer `x`.
- A `CartesianIndex` is now treated as a "scalar" for broadcasting.
- `printstyled` now supports italic output.
- `parent` and `parentindices` support `SubString`s.
- `replace(string, pattern...)` now supports an optional `IO` argument to
write the output to a stream rather than returning a string.
- `startswith` now supports seekable `IO` streams.
* Standard library changes
- The `initialized=true` keyword assignment for `sortperm!` and `partialsortperm!`
is now a no-op. It previously exposed unsafe behavior.
- Printing integral `Rational`s will skip the denominator in `Rational`-typed IO context (e.g. in arrays).
* Package Manager
- `Pkg.precompile` now accepts `timing` as a keyword argument which displays per package timing
information for precompilation (e.g. `Pkg.precompile(timing=true)`).
-------------------------------------------------------------------
Mon Dec 25 13:32:14 UTC 2023 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Update specfile:
* symlink libLLVM-14jl.so to standard LD_LIBRARY_PATH
* new Recommends:
- libcurl-devel for new recommends
- openssh-clients for ssh operations
- curl for any curl operation
-------------------------------------------------------------------
Mon Dec 25 09:25:09 UTC 2023 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>
- Combine these patches to julia-hardcoded-libs.patch and delete:
* libblastrampoline-hardcoded-libs.patch
* libgit2-libssh2-hardcoded-libs.patch
* mbedtls-hardcoded-libs.patch
- Slight adjustment of specfile for updated patch
- Requires mbedtls-devel, libgit2-devel and libssh2-devel for dlopen
-------------------------------------------------------------------
Tue Dec 19 02:34:10 UTC 2023 - Soc Virnyl Estela <uncomfy+openbuildservice@uncomfyhalomacro.pl>

51
julia.keyring Normal file
View File

@ -0,0 +1,51 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFXxFlcBEADQDEBFlzoyehPuk13Ct928WwBvb0q9OKyjz2NlYq3sL5ReTbQB
9P5hyl68q5iJ6QTjKEaxr+Kmjhib9dQGZhtBXRa9q185Fdav48rS9rDKR5/aPXNi
4aA0BSp7fHIDrTUGOUMB5TFpVZil+Sz4llpPKDlgG70dn3ZLBznJQKUXJWhxrheG
ogUK4W3WAdBBPDVraPjBjvTTSrhoOBJh/oNib3J6xTIaUMhOFz+Vuq05BZI9UO6n
OsE3dSW7X7dvqjcN3Ti7TgbJD5d4iOsQl8NhqItyS8ZULV8TPGOuwitoWxqgFIAL
5bhM9Of4xOE0+rmgke1dKmMkq3cu6yCEFypqyxwShexe+1Mvx4Tn4/OqC7wFVpTA
IH2ys7NsVcoLtZGqlBQnbXFmIu9ay51Zb4wwbJ5Qr9Rfx5xPvJoOVUpP/0I8+vlI
CmBkP6vs9vMCCKcreP0FpjCTSRApv9IXuwjumOMb6P0GJPOuFVfsy4849ONPC/yM
dMbeopi/BWfHu/Nqt7pqY210jncsdBPlPy7LvvhIkbpeZHQDoQVDPX88ZylhqKTy
gpWPBT5ezJ5ib0nSvYIZjMOMlMWxDaNDBGZlyHizVFwLZk6qHWM7I2WbJGvNgBTv
0dX9jBIDhdKdSZjc3wxh+nqZQg1l8xOOx9yCLSiBL1OHf4PYqJudL09AUwARAQAB
tDNKdWxpYSAoQmluYXJ5IHNpZ25pbmcga2V5KSA8YnVpbGRib3RAanVsaWFsYW5n
Lm9yZz6JAjgEEwECACIFAlXxFlcCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheA
AAoJEGbjx9wD1uSVg78QAJZUeygDHj1zTxt+8UAm4TMu0nWmcPjSzTGj5Wt4Gtec
HlWsXTOvFbABv8r3vzD2W1Bi0D0UcUucBy3Jf0nrUBWY89VTREcG/EWsF2SwSB7H
cL3pu+vcdLiVtRGI4AiSoZz2CXc4vHY0X/3TlPejcO0UU8A0Ukth/cX1ZqCjKP8T
ciXy89X4mlRAsAXapkHxiO+bscTd/VdWaPaUx8/TxeFoPZFB/0FIeJHYbI1chKPd
vAtFYLpB89d8zbQYgISM6oc/f1j0CQR6JdHGoAGP9Wd8wRz+mDT3WzOqL4jXctcA
CQUKGgYkOW8OEFBlfUACZK5uFxWMktN8//IlzczCTbYb9Z89UeeF7oaXfSZMFwiF
kxseUGCceXb5Kqj3fZKmmUstAEzycyNuCeXG1KXyAz1mg/ihq/rzB11vQQjY4WYJ
rIoUecRN3btSex6jcdOxAIOeGcyfigT7NMgplFXXkbuux2N7qtOkLUNx80DMOggK
tnSP60GkO1xzJLi3EHtaDVPU59KpeXjyEsNB2ngc5+LwHwbYGvaaZaFXFm7oCmM7
xG88EU14mCLZbpGleD6cmpVAprFSIXV0Z0xm6pdH9XBCT4UJ8tFXTrJsc1dYd+mw
eAwCYZ38e95kqrYrRbhjOOAKEtf3t4VnrsifbTfTVclUbsrSXVTQdHoiMlODc/WX
uQINBFXxFlcBEADNmFCh53NJ+8CQSzQda/efBX+H/SCj2b3vIYJXY2nR9h4IQ7UV
/AU5sUB/bpIN3nwwdcILYSm2oJGP8fZ8Zf46XliUOK8+yD8ApDg6okl3R1G+E9Qk
/EN49BCeXx9uT5vHpcHWkBvKmqmjUJ283i6q3QT5qzbkCGGUQ7SyhU1ywbjYIQi/
HLJpntqz44LrM+vfGUAa+CJld3DyzAm66KFSRbDU12XPE948MxUDQ1NgY9hJIlfm
ud/ShKakfQoEsLiTkUbEY7Vc19s2+aM3S1zeRfsatuayPuEUsnuz42wKWSdPNGyJ
TkLdWz46vSgN9wpe0OLoWxsuomaViRaNFDSK7Uo+AGjWcjFNlehFlW/ELji1JbS5
f5EAD1A1I2RJvLHyri3xFJtM9qbGiA3ZIfcVXq5RxAOehDPCcKzBS4w37D2vLBOQ
Xa+ExTJxwiCnMPuo7acsfkyleakAe82L/fAoVWdPcFSjq3KFvkpGpTlvvh2jwhoW
AgDGu77K9T1rHjj7t2GjuR71RVc4r0CP9iF3rAPmq/FapONW1Pz0aom7XLBZt8Zq
4wsPsGaAECmwi07bE6Vr9nqCeQb7XmjVucVJP+VXDpOJzt4J5zSzTCWGyj47/K7a
Rlz9KtYmY0s4sKnx3sjKpC8xMXaLgvSjudrQCZ/sohKRayKGAMI2p71GbQARAQAB
iQIfBBgBAgAJBQJV8RZXAhsMAAoJEGbjx9wD1uSV6+oP/3MCyMWEBiu73HVI2dS2
hDct/E9fDkpB6o/HEGhdNFTeeb/L7GqcQACJDtBDNVtMu0WhCgKeteHXM0KMy55f
6HAQEVnWhGSyR4KksV93RPZvUO+zzX5M7F2LiI59MSruKAYTC0kXbjcu9aQAn+kJ
EPHiHwsTzRkWh90q54/B2NQ6oVAHgnMIeh32OBdFMNHOnP+n1zu/+Wd4miC3fR9V
tmsVrOS8WtozdEC6TmquYswQ/gT6c0afCZSlNF/ZPPrXGGdD6t9WTJntfYB1rbEk
E/9WpaUgpKpxXQEOMzMAm+2yBoYnCpXzvbY6fzNWfOg6DJ65t0rkrCwDRHLH1grA
61OQb0Ou8LQnrFGox8L394sFebIoaBUk2Vhw5LH78X6g1f7Mj6j9Er0YSabVVpHh
ncMYflOeswrV4C1oP5UvL7K3qtCixUU4LQ4XqmioQey8AnrCdJ7S5QeyP1n5vU3e
Nz1JHCcH4/e698CuIoCZa86Edmo3S0O2hhiC5qslf5u1pdndlmbrgsWpBH5kJ7mI
edeA2ND/KrLlllE7NImLdlrciShctFP1ciqqHtTebQ+5MH17ObOhSptUDEt5LjZt
3YXZtQ+C/UmfkC+QVUdWTQ4cWUCNtuzLP+PW3o1AQHmijWbaECq5yMRVlr7JuxPr
Lr+fAJHZvbYCQjMTkZYScgYU
=XN/B
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -1,7 +1,7 @@
#
# spec file for package julia
#
# Copyright (c) 2023 SUSE LLC
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -24,14 +24,23 @@
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
%global __provides_exclude_from ^%{_libdir}/%{name}/.*\\.so$
%global julia_march native
# If not Tumbleweed. Leap 15.6 seems to have trouble with libpthread
%if 0%{?suse_version} < 1600
%global __julia_opts USE_BINARYBUILDER=0 USE_SYSTEM_CSL=1 USE_SYSTEM_LLVM=0 USE_SYSTEM_LLD=0 OPENBLAS_USE_THREAD=0 OPENBLAS_TARGET_ARCH=NEHALEM OPENBLAS_SYMBOLSUFFIX="%{?__isa_bits}_" OPENBLAS_LIBNAMESUFFIX="%{?__isa_bits}_" OPENBLAS_CFLAGS="${CFLAGS}" LIBBLAS=-lopenblas64_ LIBBLASNAME=libopenblas64_ LIBLAPACK=-lopenblas64_ LIBLAPACKNAME=libopenblas64_ SUITESPARSE_LIB="-lumfpack64_ -lcholmod64_ -lamd64_ -lcamd64_ -lcolamd64_ -lspqr64_" USE_SYSTEM_LIBUNWIND=1 USE_SYSTEM_PCRE=0 USE_SYSTEM_BLAS=0 USE_SYSTEM_LAPACK=0 USE_SYSTEM_LIBBLASTRAMPOLINE=0 USE_SYSTEM_GMP=0 USE_SYSTEM_MPFR=0 USE_SYSTEM_LIBSUITESPARSE=0 USE_SYSTEM_SUITESPARSE=0 USE_INTEL_JITEVENTS=0 USE_SYSTEM_LIBWHICH=1 USE_SYSTEM_DSFMT=0 USE_SYSTEM_LIBUV=0 USE_SYSTEM_UTF8PROC=1 USE_SYSTEM_LIBGIT2=0 USE_SYSTEM_LIBSSH2=0 USE_SYSTEM_MBEDTLS=0 USE_SYSTEM_CURL=1 USE_SYSTEM_PATCHELF=1 USE_SYSTEM_ZLIB=1 USE_SYSTEM_P7ZIP=1 USE_SYSTEM_OPENLIBM=1 USE_BLAS64=1 JLDFLAGS="$LDFLAGS" USE_BINARYBUILDER_BLASTRAMPOLINE=0 USE_BINARYBUILDER_CURL=0 USE_BINARYBUILDER_DSFMT=0 USE_BINARYBUILDER_GMP=0 USE_BINARYBUILDER_LIBGIT2=0 USE_BINARYBUILDER_LIBSSH2=0 USE_BINARYBUILDER_LIBSUITESPARSE=0 USE_BINARYBUILDER_LIBTRACYCLIENT=0 USE_BINARYBUILDER_LIBUNWIND=0 USE_BINARYBUILDER_LIBUV=0 USE_BINARYBUILDER_LLVM=0 USE_BINARYBUILDER_MBEDTLS=0 USE_BINARYBUILDER_MPFR=0 USE_BINARYBUILDER_OPENBLAS=0 USE_BINARYBUILDER_OPENLIBM=0 USE_BINARYBUILDER_P7ZIP=0 USE_BINARYBUILDER_PCRE=0 USE_BINARYBUILDER_ZLIB=0 VERBOSE=0
%else
%global __julia_opts USE_BINARYBUILDER=0 USE_SYSTEM_CSL=1 USE_SYSTEM_LLVM=0 USE_SYSTEM_LLD=0 OPENBLAS_SYMBOLSUFFIX="%{?__isa_bits}_" OPENBLAS_LIBNAMESUFFIX="%{?__isa_bits}_" OPENBLAS_CFLAGS="${CFLAGS}" LIBBLAS=-lopenblas64_ LIBBLASNAME=libopenblas64_ LIBLAPACK=-lopenblas64_ LIBLAPACKNAME=libopenblas64_ SUITESPARSE_LIB="-lumfpack64_ -lcholmod64_ -lamd64_ -lcamd64_ -lcolamd64_ -lspqr64_" USE_SYSTEM_LIBUNWIND=1 USE_SYSTEM_PCRE=0 USE_SYSTEM_BLAS=0 USE_SYSTEM_LAPACK=0 USE_SYSTEM_LIBBLASTRAMPOLINE=0 USE_SYSTEM_GMP=0 USE_SYSTEM_MPFR=0 USE_SYSTEM_LIBSUITESPARSE=0 USE_SYSTEM_SUITESPARSE=0 USE_INTEL_JITEVENTS=0 USE_SYSTEM_LIBWHICH=1 USE_SYSTEM_DSFMT=0 USE_SYSTEM_LIBUV=0 USE_SYSTEM_UTF8PROC=1 USE_SYSTEM_LIBGIT2=0 USE_SYSTEM_LIBSSH2=0 USE_SYSTEM_MBEDTLS=0 USE_SYSTEM_CURL=1 USE_SYSTEM_PATCHELF=1 USE_SYSTEM_ZLIB=1 USE_SYSTEM_P7ZIP=1 USE_SYSTEM_OPENLIBM=1 USE_BLAS64=1 JLDFLAGS="$LDFLAGS" USE_BINARYBUILDER_BLASTRAMPOLINE=0 USE_BINARYBUILDER_CURL=0 USE_BINARYBUILDER_DSFMT=0 USE_BINARYBUILDER_GMP=0 USE_BINARYBUILDER_LIBGIT2=0 USE_BINARYBUILDER_LIBSSH2=0 USE_BINARYBUILDER_LIBSUITESPARSE=0 USE_BINARYBUILDER_LIBTRACYCLIENT=0 USE_BINARYBUILDER_LIBUNWIND=0 USE_BINARYBUILDER_LIBUV=0 USE_BINARYBUILDER_LLVM=0 USE_BINARYBUILDER_MBEDTLS=0 USE_BINARYBUILDER_MPFR=0 USE_BINARYBUILDER_OPENBLAS=0 USE_BINARYBUILDER_OPENLIBM=0 USE_BINARYBUILDER_P7ZIP=0 USE_BINARYBUILDER_PCRE=0 USE_BINARYBUILDER_ZLIB=0 VERBOSE=0
%endif
# List all bundled libraries.
%global _privatelibs lib(LLVM-.*|ccalltest|llvmcalltest|uv|openblas.*|sys|julia.*)\\.so.*
%global _privatelibs lib(ssh.*|pcre.*|dSFMT.*|gmp.*|mpfr.*|git.*|mbed.*|nghttp.*||LLVM-.*|ccalltest|llvmcalltest|uv|openblas.*|lapack.*|sys|julia.*|amd|btf|camd|ccolamd|cholmod|colamd|cxsparse|graphblas|klu|klu_cholmod|lagraph|lagraphx|ldl|paru|rbio|spex|spqr|suitesparse_mongoose|suitesparseconfig|umfpack)\\.so.*
%global __provides_exclude ^(%{_privatelibs})$
%global __requires_exclude ^(%{_privatelibs})$
%define libjulia_sover_major 1
%define libjulia_sover_minor 9
%define libjulia_sover_minor 10
%define _julia_llvm_version 15.0.7-10
%if "@BUILD_FLAVOR@%{nil}" == "compat"
%define compat_mode 1
@ -40,41 +49,47 @@
%endif
%if 0%{?compat_mode}
%define libname libjulia-compat%{libjulia_sover_major}
%define libname libjulia-compat%{libjulia_sover_major}_%{libjulia_sover_minor}
%else
%define libname libjulia%{libjulia_sover_major}
%define libname libjulia%{libjulia_sover_major}_%{libjulia_sover_minor}
%endif
# LTO currently makes building blastrampoline and Julia itself fail
# It is not enabled upstream anyway
%global _lto_cflags %nil
Version: 1.9.4
Version: 1.10.3
Release: 0
URL: http://julialang.org/
Source0: https://github.com/JuliaLang/julia/releases/download/v%{version}/julia-%{version}-full.tar.gz
Source1: julia-rpmlintrc
Source1: https://github.com/JuliaLang/julia/releases/download/v%{version}/julia-%{version}-full.tar.gz.asc
Source2: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/keys/pgp/3673DF529D9049477F76B37566E3C7DC03D6E495.asc?ref_type=heads#/julia.keyring
Source3: https://www.unicode.org/Public/13.0.0/ucd/UnicodeData.txt
Source4: julia-rpmlintrc
# PATCH-FIX-OPENSUSE julia-env-script-interpreter.patch ronisbr@gmail.com -- Change script interpreted to avoid errors in rpmlint.
Patch1: julia-env-script-interpreter.patch
Patch2: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/e08e1444.patch?ref_type=heads#/new-pass-manager.patch
Patch3: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/959902f1.patch?ref_type=heads#/support-float16-depending-on-llvm-and-platform.patch
Patch4: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/f11bfc6c.patch?ref_type=heads#/use-newpm-asan.patch
Patch5: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/21d4c2f1.patch?ref_type=heads#/llvm-set-of-custom-patches.patch
Patch6: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/julia-libunwind-1.6.patch?ref_type=heads#/julia-libunwind-1.9.patch
Patch8: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/julia-libgit2-1.7.patch?ref_type=heads#/julia-libgit2-1.7.patch
Patch9: https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/julia-suitesparse-7.patch?ref_type=heads#/julia-suitesparse-7.patch
Patch10: use-system-libuv-correctly.patch
Patch11: openlibm.patch
Patch12: llvm-link-shared.patch
# Adapted from https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/julia-hardcoded-libs.patch?ref_type=heads
# We just remove the julia specific llvm sofile change
Patch13: julia-hardcoded-libs.patch
Patch14: mbedtls-hardcoded-libs.patch
Patch15: libblastrampoline-hardcoded-libs.patch
BuildRequires: arpack-ng-devel >= 3.3.0
BuildRequires: blas-devel
# PATCH-FIX-OPENSUSE -- Despite having no network, build looks for UnicodeData.txt (now Source3). Disabled with this patch.
Patch2: disable-download-of-unicode-for-doc-gen.patch
# PATCH-FIX-OPENSUSE -- Despite having no network, doc gen still wants to generate. Disabled with this patch.
Patch3: disable-doc-gen-in-makefile.patch
%if 0%{?suse_version} > 1600
# Based on https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/julia-libunwind-1.6.patch?ref_type=heads -- System libunwind compatibility
Patch4: julia-libunwind-1.9.patch
%endif
# Based of https://gitlab.archlinux.org/archlinux/packaging/packages/julia/-/raw/main/julia-libcholmod-cuda.patch?ref_type=heads -- we don't have NVIDIA or any CUDA platform by default
Patch5: julia-remove-libcholmod_cuda.patch
# PATCH-FIX-OPENSUSE -- julia hardcodes looking for the libraries
Patch6: openlibm.patch
# PATCH-FIX-OPENSUSE -- Julia packages e.g. LibCURL_jll.jl uses dlopen for libraries
Patch7: julia-hardcoded-libs.patch
# PATCH-FIX-OPENSUSE -- A bug in MPFR which they describe in their INSTALL file. So we have to assist the mpfr.mk that julia uses.
Patch8: mpfr-looking-for-gmp-fix.patch
BuildRequires: ImageMagick
BuildRequires: autoconf
BuildRequires: ca-certificates
BuildRequires: cmake
BuildRequires: dSFMT-devel
BuildRequires: cmake >= 3.22
BuildRequires: curl
BuildRequires: dos2unix
BuildRequires: double-conversion-devel
BuildRequires: fdupes
@ -83,38 +98,96 @@ BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: gcc-fortran
BuildRequires: git
BuildRequires: gmp-devel >= 6.1.2
BuildRequires: hicolor-icon-theme
BuildRequires: lapack-devel >= 3.5.0
BuildRequires: libblastrampoline-devel
BuildRequires: libboost_system-devel
BuildRequires: libboost_thread-devel
BuildRequires: libstdc++6-devel-gcc13
BuildRequires: pkgconfig
BuildRequires: pkgconfig(cunit)
BuildRequires: pkgconfig(jansson)
BuildRequires: pkgconfig(libcares)
BuildRequires: pkgconfig(libev)
BuildRequires: pkgconfig(liblzma)
BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(openssl) >= 1.1.1
BuildRequires: pkgconfig(zlib)
# Additional dependencies for libgit2
BuildRequires: fdupes
BuildRequires: gpg2
BuildRequires: libcurl-devel
BuildRequires: libgit2-devel
BuildRequires: libexpat-devel
BuildRequires: pcre2-devel
BuildRequires: perl-Error
BuildRequires: perl-MailTools
BuildRequires: python3-base
BuildRequires: xz
# These lists the supposedly dependencies that are now bundled
# BuildRequires: lapack-devel >= 3.5.0
# BuildRequires: lld15
# BuildRequires: llvm15-devel
# BuildRequires: libcholmod5
# BuildRequires: libuv-devel
# BuildRequires: libopenblas_openmp-devel >= 0.3.5
# BuildRequires: openblas-common-devel
# BuildRequires: blas-devel
# BuildRequires: suitesparse-devel >= 7.2.1
# BuildRequires: libgit2-devel
BuildConflicts: gmp-devel
BuildConflicts: mpfr-devel
# BuildRequires: dSFMT-devel
# BuildRequires: libssh2-devel >= 1.9.0
BuildRequires: libnghttp2-devel
BuildRequires: libopenblas_openmp-devel >= 0.3.5
BuildRequires: libssh2-devel >= 1.9.0
# BuildRequires: mbedtls-devel
# BuildRequires: pcre2-devel >= 10.31
BuildRequires: fipscheck
BuildRequires: glibc-devel
BuildRequires: hicolor-icon-theme
BuildRequires: libblastrampoline-devel
BuildRequires: libunwind-devel >= 1.3.1
BuildRequires: libuv-devel
BuildRequires: libwhich
BuildRequires: lld14
BuildRequires: llvm14-devel
BuildRequires: m4
BuildRequires: mbedtls-devel
BuildRequires: mpfr-devel >= 4.0.2
BuildRequires: make
BuildRequires: memory-constraints
BuildRequires: metis-devel
BuildRequires: ncurses-devel
BuildRequires: openblas-common-devel
BuildRequires: openlibm-devel
BuildRequires: openspecfun-devel
BuildRequires: openssl
BuildRequires: p7zip >= 16
# I am not sure how or why they're different in Leap and Tumbleweed
%if 0%{?suse_version} > 1600
BuildRequires: p7zip
%else
BuildRequires: p7zip-full
%endif
BuildRequires: patchelf >= 0.9
BuildRequires: pcre2-devel >= 10.31
BuildRequires: perl
BuildRequires: python >= 2.5
BuildRequires: readline-devel
BuildRequires: suitesparse-devel >= 5.4.0
BuildRequires: tbb-devel
BuildRequires: update-desktop-files
BuildRequires: utf8proc-devel
BuildRequires: zlib-devel
BuildRequires: valgrind
BuildRequires: valgrind-devel
# Additional Build Requirements needed by LLVM15
BuildRequires: binutils-devel >= 2.21.90
BuildRequires: ccache
BuildRequires: fdupes
BuildRequires: libstdc++-devel
BuildRequires: libvmmalloc-devel
BuildRequires: ninja
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
BuildRequires: python3-Sphinx
BuildRequires: python3-base
BuildRequires: python3-psutil
BuildRequires: python3-recommonmark
BuildRequires: python3-setuptools
BuildRequires: pkgconfig(libedit)
BuildRequires: pkgconfig(libzstd)
BuildRequires: pkgconfig(zlib)
Requires: ca-certificates
Requires: p7zip >= 16
Requires: readline
@ -122,42 +195,54 @@ Requires: readline
# Libraries used by CompilerSupportLibraries_jll, blastrampoline,
# nghttp2_jll but not detected as they are dlopen()ed but not linked to
%if 0%{?__isa_bits} == 64
BuildRequires: libgcc_s1
BuildRequires: libgfortran5
Requires: libgcc_s.so.1()(64bit)
Requires: libgfortran.so.5()(64bit)
Requires: libgomp.so.1()(64bit)
Requires: libnghttp2.so.14()(64bit)
Requires: libmbedcrypto.so.16()(64bit)
%else
BuildRequires: libgcc_s1
BuildRequires: libgfortran5
Requires: libgcc_s.so.1
Requires: libgfortran.so.5
Requires: libgomp.so.1
Requires: libnghttp2.so.14
Requires: libmbedcrypto.so.15
%endif
# Same as the previous comment. But the difference
# is that we applied julia-hardcoded-libs.patch
# so therefore it is needed
Requires: libblastrampoline-devel
Requires: libnghttp2-devel
Requires: openlibm-devel
Requires: suitesparse-devel
Requires: libblastrampoline-devel
# Requires: libgit2-devel
# Requires: libnghttp2-devel
# Requires: libssh2-devel
# Requires: mbedtls-devel
# Requires: suitesparse-devel
# Julia requires the devel package as well
# specifically libjulia.so
%if 0%{?compat_mode}
Requires: julia-compat-devel
Requires: julia-compat-devel = %{version}
%else
Requires: julia-devel
Requires: julia-devel = %{version}
%endif
Requires(post): %{_sbindir}/update-alternatives
Requires(post): %{_sbindir}/ldconfig
Requires(postun):%{_sbindir}/update-alternatives
Requires(postun):%{_sbindir}/ldconfig
Recommends: arpack-ng-devel
Requires(post): /sbin/ldconfig
Requires(postun): %{_sbindir}/update-alternatives
Requires(postun): /sbin/ldconfig
Recommends: curl
Recommends: git
Recommends: gmp-devel
Recommends: mpfr-devel
Recommends: openspecfun-devel
Recommends: pcre2-devel
Recommends: suitesparse-devel
Recommends: openssh-clients
# Recommends: gmp-devel
# Recommends: libcurl-devel
# Recommends: mpfr-devel
# Recommends: openspecfun-devel
# Recommends: pcre2-devel
# Recommends: suitesparse-devel
%if 0%{?compat_mode} == 0
Name: julia
%else
@ -176,10 +261,19 @@ Group: Development/Languages/Other
Conflicts: julia
Provides: julia = %{version}
%endif
Obsoletes: %{name} < %{version}
# Let's not be optimistic towards 32 bit support and other architectures
# openSUSE cannot guarantee to support, shall we?
ExclusiveArch: x86_64
# openSUSE or Julia cannot guarantee to support, shall we? Only choose
# Tier1 architectures
# libquadmath is disabled in the aarch64 build of gcc. so we cannot
# include that as exclusive arches for now.
%if 0%{?compat_mode}
ExclusiveArch: x86_64 x86_64_v3
%else
ExclusiveArch: x86_64 x86_64_v3
%endif
%{?suse_build_hwcaps_libs}
%description
Julia is a high-level, high-performance dynamic programming language for
@ -199,8 +293,9 @@ Group: Development/Languages/Other
Requires: %{libname} = %{version}
%if 0%{?compat_mode}
Conflicts: julia-devel
Provides: julia-devel
Provides: julia-devel = %{version}
%endif
Obsoletes: %{name}-devel < %{version}
%description devel
Contains library symbolic links and header files for developing applications
@ -213,224 +308,168 @@ debugging Julia itself.
Summary: Julia shared object libraries
Group: System/Libraries
%if 0%{?compat_mode}
Conflicts: libjulia%{libjulia_sover_major}
Provides: libjulia%{libjulia_sover_major}
Conflicts: libjulia%{libjulia_sover_major}_%{libjulia_sover_minor}
Provides: libjulia%{libjulia_sover_major}_%{libjulia_sover_minor} = %{version}
%endif
Obsoletes: %{libname} < %{version}
%description -n %{libname}
Contains library files for interacting with Julia through C interfaces.
%prep
%setup -q -n julia-%{version}
patch -p1 -i %{PATCH1}
# patch -p1 -i %%{PATCH2}
# patch -p1 -i %%{PATCH3}
# patch -p1 -i %%{PATCH4}
# patch -p1 -i %%{PATCH5}
# libunwind 1.6 compatibility
patch -p1 -i %{PATCH6}
# Fix tests with libgit2 1.7
patch -p1 -i %{PATCH8}
# Make.inc puts it in the wrong libpath
# patch -p1 -i %%{PATCH10}
patch -p1 -i %{PATCH11}
patch -p1 -i %{PATCH12}
patch -p1 -i %{PATCH13}
patch -p1 -i %{PATCH14}
patch -p1 -i %{PATCH15}
%autosetup -p1 -n julia-%{version}
%ifarch aarch64 %{arm}
# https://github.com/JuliaLang/julia/issues/41613#issuecomment-976535193
sed -i 's#$(eval $(call symlink_system_library,CSL,libquadmath,0))##' base/Makefile
# Copy https://www.unicode.org/Public/13.0.0/ucd/UnicodeData.txt to deps/srccache
cp %{SOURCE3} deps/srccache/UnicodeData-13.0.0.txt
# JLDOWNLOAD SHOULD BE DISABLED IF WE HAVE THE FULL TARBALL
echo "true" | tee deps/tools/jldownload
%build
# Just use native
# Offline mode
export NO_GIT=1
export CFLAGS="%{optflags}"
export CXXLAGS="%{optflags}"
export USE_CCACHE=1
export DEPS_GIT=0
export BUILD_LLD=1
export BUILD_LLDB=1
# Needed when USE_SYSTEM_CSL=1
# https://github.com/JuliaLang/julia/issues/39637
unlink %{_builddir}/%{buildsubdir}/build/usr/lib || true
mkdir -p %{_builddir}/%{buildsubdir}/build/%{_libdir}/
%if 0%{?suse_version} > 1600
ln -sf %{_libdir}/libgcc_s.so.1 %{_builddir}/%{buildsubdir}/build/%{_libdir}/libgcc_s.so.1
%else
ln -sf /%{_lib}/libgcc_s.so.1 %{_builddir}/%{buildsubdir}/build/%{_libdir}/libgcc_s.so.1
%endif
pushd stdlib/srccache
tar -xzf SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz
patch -d JuliaSparse-SparseArrays.jl-37e6e58 -p1 -i %{PATCH9}
rm SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz
tar -czf SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz JuliaSparse-SparseArrays.jl-37e6e58
md5sum SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz | cut -d ' ' -f 1 > ../../deps/checksums/SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz/md5
sha512sum SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz | cut -d ' ' -f 1 > ../../deps/checksums/SparseArrays-37e6e58706a54c5a1b96a17cda7d3e8be8bcb190.tar.gz/sha512
# I am not sure why Julia cannot find also libgfortran5.so on Leap...
ln -sf %{_libdir}/libgfortran.so.5 %{_builddir}/%{buildsubdir}/build/%{_libdir}/libgfortran.so.5
popd
# Idk how it can't find libblastrampoline?
ln -sf %{_libdir}/libblastrampoline.so %{_builddir}/%{buildsubdir}/build/%{_libdir}/libblastrampoline.so
export LD_LIBRARY_PATH="%{_builddir}/%{buildsubdir}/build/usr/lib:%{_builddir}/%{buildsubdir}/build%{_libdir}:/usr/lib64:/usr/lib"
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-pcre %{__julia_opts}
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-openblas %{__julia_opts}
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-mbedtls %{__julia_opts}
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-libssh2 %{__julia_opts}
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-libsuitesparse %{__julia_opts}
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-libuv %{__julia_opts}
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-gmp %{__julia_opts}
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-mpfr %{__julia_opts}
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-nghttp2 %{__julia_opts}
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-libgit2 %{__julia_opts}
make MARCH=%{julia_march} prefix=%{_prefix} libdir=%{_libdir} bindir=%{_bindir} build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" -C deps install-llvm %{__julia_opts}
# Based on fedora specfile
# Work around bug that prompts zlib to be downloaded even when not used
# https://github.com/JuliaLang/julia/pull/42524/files#r734972945
sed "s/ \$(build_prefix)\\/manifest\\/zlib//" -i deps/llvm.mk
%build
%if 0%{?compat_mode} == 0
%ifarch x86_64
%define julia_march core2
%endif
%ifarch %{ix86}
%define julia_march pentium4
%endif
%ifarch aarch64
%define julia_march armv8-a
%endif
%ifarch armv7l armv7hl
%define julia_march armv7-a
%endif
%ifarch armv6l armv6hl
%define julia_march armv6
%endif
%ifarch ppc64le
%define julia_march ppc64le
%endif
%if 0%{?suse_version} > 1600
RELEASE_BANNER="openSUSE Tumbleweed - Built on $(date -u)"
%else
# compat_mode is only defined for 64-bit architecture.
%define julia_march x86-64
SLE_VERSION="$(echo %{sle_version} | sed -E 's|^(15)0([0-9])00|\1.\2|m')"
RELEASE_BANNER="openSUSE Leap ${SLE_VERSION} - Built on $(date -u)"
%endif
%ifarch armv6l armv6hl
export LDFLAGS="$LDFLAGS -latomic"
%endif
export CFLAGS="%{optflags}"
export CXXFLAGS="%{optflags}"
export LD_LIBRARY_PATH=%{_builddir}/%{buildsubdir}/build/usr/lib:%{_builddir}/%{buildsubdir}/build%{_libdir}:%{_builddir}/%{buildsubdir}/usr/lib
pushd deps
export BUILDDIR="%{_builddir}/%{buildsubdir}/build"
export USE_BLAS64=1
export USE_BINARYBUILDER_OPENBLAS=0
export OPENBLAS_LIBNAMESUFFIX="%{?__isa_bits}_"
export OPENBLAS_SYMBOLSUFFIX="%{?__isa_bits}_"
export OPENBLAS_CFLAGS="%{optflags}"
make prefix=%{prefix} libdir=%{_libdir} bindir=%{_bindir} install-openblas
popd
make %{?_smp_mflags} \
MARCH=%{julia_march} \
%ifarch aarch64
JULIA_CPU_TARGET="generic;cortex-a57;thunderx2t99;armv8.2-a,crypto,fullfp16,lse,rdm" \
%endif
%ifarch x86_64
MARCH="%{julia_march}" \
%ifarch x86_64 || x86_64_v3
JULIA_CPU_TARGET="generic;sandybridge,-xsaveopt,clone_all;haswell,-rdrnd,base(1)" \
%endif
build_prefix=%{_builddir}/%{buildsubdir}/build%{_prefix} \
build_libdir=%{_builddir}/%{buildsubdir}/build%{_libdir} \
prefix=%{_prefix} \
bindir=%{_bindir} \
libdir=%{_libdir} \
libexecdir=%{_libexecdir} \
datarootdir=%{_datarootdir} \
includedir=%{_includedir} \
sysconfdir=%{_sysconfdir} \
USE_BINARYBUILDER=0 \
USE_SYSTEM_CSL=1 \
USE_SYSTEM_LLVM=0 \
USE_SYSTEM_LLD=1 \
USE_SYSTEM_LIBUNWIND=1 \
USE_SYSTEM_PCRE=1 \
USE_SYSTEM_BLAS=0 \
USE_SYSTEM_LAPACK=0 \
USE_SYSTEM_LIBBLASTRAMPOLINE=1 \
USE_SYSTEM_GMP=1 \
USE_SYSTEM_MPFR=1 \
USE_SYSTEM_LIBSUITESPARSE=1 \
USE_SYSTEM_SUITESPARSE=1 \
USE_INTEL_JITEVENTS=0 \
USE_SYSTEM_LIBWHICH=1 \
USE_SYSTEM_DSFMT=1 \
USE_SYSTEM_LIBUV=0 \
USE_SYSTEM_UTF8PROC=1 \
USE_SYSTEM_LIBGIT2=1 \
USE_SYSTEM_LIBSSH2=1 \
USE_SYSTEM_MBEDTLS=1 \
USE_SYSTEM_CURL=1 \
USE_SYSTEM_PATCHELF=1 \
USE_SYSTEM_ZLIB=1 \
USE_SYSTEM_P7ZIP=1 \
USE_SYSTEM_OPENLIBM=1 \
USE_BLAS64=1 \
JLDFLAGS="$LDFLAGS" \
VERBOSE=1 \
TAGGED_RELEASE_BANNER="openSUSE %{suse_version} experimental build (unofficial)" \
release debug
build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" \
build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" \
prefix="%{_prefix}" \
bindir="%{_bindir}" \
libdir="%{_libdir}" \
libexecdir="%{_libexecdir}" \
datarootdir="%{_datarootdir}" \
includedir="%{_includedir}" \
sysconfdir="%{_sysconfdir}" \
%{__julia_opts} \
%if 0%{?suse_version} > 1600
TAGGED_RELEASE_BANNER="${RELEASE_BANNER}" \
%else
TAGGED_RELEASE_BANNER="${RELEASE_BANNER}" \
%endif
release
# This may fix other issues where libLLVM-14jl.so is not properly copied?
# This may fix other issues where libLLVM-15jl.so is not properly copied?
if [ "x%{_lib}" != xlib ] ; then
cp -a %{_builddir}/%{buildsubdir}/build/usr/lib/* %{_builddir}/%{buildsubdir}/build/%{_libdir}
rm -rf %{_builddir}/%{buildsubdir}/build/usr/lib/
fi
%check
# The tests will only pass if openblas is being used.
# make %{?_smp_mflags} test
# Failures are to be expected if tests are done
# - int.jl not being found. see https://github.com/JuliaLang/julia/pull/53682#issuecomment-1992420825
# - Dates printing inconsistent. see https://github.com/JuliaLang/julia/issues/34655
# - hard-coded libs for non-impactful libraries e.g. zlib or mbedtls. see https://github.com/JuliaLang/julia/pull/38347#discussion_r574819534.
# understandable if LLVM and other patched libraries but for unpatched ones, i am not sure if it is a strict requirement but reports
# say mbedtls and similar work just fine.
# I might have to disable the tests for now
export LD_LIBRARY_PATH="%{_builddir}/%{buildsubdir}/build/usr/lib:%{_builddir}/%{buildsubdir}/build%{_libdir}:/usr/lib64:/usr/lib"
pushd %{_builddir}/%{buildsubdir}/test
# DISABLED FOR NOW
# ../julia --check-bounds=yes --startup-file=no ./runtests.jl || true
# Printing the version just for the sake of printing the version
../julia --version
popd
%install
%ifarch armv6l armv6hl
export LDFLAGS="$LDFLAGS -latomic"
%endif
export NO_GIT=1
export CFLAGS="%{optflags}"
export CXXFLAGS="%{optflags}"
export LD_LIBRARY_PATH=%{_builddir}/%{buildsubdir}/build/usr/lib:%{_builddir}/%{buildsubdir}/build%{_libdir}:%{_builddir}/%{buildsubdir}/usr/lib
export CXXLAGS="%{optflags}"
export USE_CCACHE=1
export DEPS_GIT=0
export BUILD_LLD=1
export BUILD_LLDB=1
export LD_LIBRARY_PATH="%{_builddir}/%{buildsubdir}/build/usr/lib:%{_builddir}/%{buildsubdir}/build%{_libdir}:/usr/lib64:/usr/lib"
%if 0%{?suse_version} > 1600
RELEASE_BANNER="openSUSE Tumbleweed - Built on $(date -u)"
%else
SLE_VERSION="$(echo %{sle_version} | sed -E 's|^(15)0([0-9])00|\1.\2|m')"
RELEASE_BANNER="openSUSE Leap ${SLE_VERSION} - Built on $(date -u)"
%endif
make install DESTDIR=%{buildroot} \
MARCH=%{julia_march} \
%ifarch aarch64
JULIA_CPU_TARGET="generic;cortex-a57;thunderx2t99;armv8.2-a,crypto,fullfp16,lse,rdm" \
make install DESTDIR="%{buildroot}" \
MARCH="%{julia_march}" \
%ifarch x86_64 || x86_64_v3
JULIA_CPU_TARGET="generic;sandybridge,-xsaveopt,clone_all;haswell,-rdrnd,base(1)" \
%endif
%ifarch x86_64
JULIA_CPU_TARGET="generic;sandybridge,-xsaveopt,clone_all;haswell,-rdrnd,base(1)" \
build_prefix="%{_builddir}/%{buildsubdir}/build%{_prefix}" \
build_libdir="%{_builddir}/%{buildsubdir}/build%{_libdir}" \
prefix="%{_prefix}" \
bindir="%{_bindir}" \
libdir="%{_libdir}" \
libexecdir="%{_libexecdir}" \
datarootdir="%{_datarootdir}" \
includedir="%{_includedir}" \
sysconfdir="%{_sysconfdir}" \
%{__julia_opts} \
%if 0%{?suse_version} > 1600
TAGGED_RELEASE_BANNER="${RELEASE_BANNER}"
%else
TAGGED_RELEASE_BANNER="${RELEASE_BANNER}"
%endif
build_prefix=%{_builddir}/%{buildsubdir}/build%{_prefix} \
build_libdir=%{_builddir}/%{buildsubdir}/build%{_libdir} \
prefix=%{_prefix} \
bindir=%{_bindir} \
libdir=%{_libdir} \
libexecdir=%{_libexecdir} \
datarootdir=%{_datarootdir} \
includedir=%{_includedir} \
sysconfdir=%{_sysconfdir} \
USE_BINARYBUILDER=0 \
USE_SYSTEM_CSL=1 \
USE_SYSTEM_LLVM=0 \
USE_SYSTEM_LLD=1 \
USE_SYSTEM_LIBUNWIND=1 \
USE_SYSTEM_PCRE=1 \
USE_SYSTEM_BLAS=0 \
USE_SYSTEM_LAPACK=0 \
USE_SYSTEM_LIBBLASTRAMPOLINE=1 \
USE_SYSTEM_GMP=1 \
USE_SYSTEM_MPFR=1 \
USE_SYSTEM_LIBSUITESPARSE=1 \
USE_SYSTEM_SUITESPARSE=1 \
USE_INTEL_JITEVENTS=0 \
USE_SYSTEM_LIBWHICH=1 \
USE_SYSTEM_DSFMT=1 \
USE_SYSTEM_LIBUV=0 \
USE_SYSTEM_UTF8PROC=1 \
USE_SYSTEM_LIBGIT2=1 \
USE_SYSTEM_LIBSSH2=1 \
USE_SYSTEM_MBEDTLS=1 \
USE_SYSTEM_CURL=1 \
USE_SYSTEM_PATCHELF=1 \
USE_SYSTEM_ZLIB=1 \
USE_SYSTEM_P7ZIP=1 \
USE_SYSTEM_OPENLIBM=1 \
USE_BLAS64=1 \
JLDFLAGS="$LDFLAGS" \
VERBOSE=1 \
TAGGED_RELEASE_BANNER="openSUSE %{suse_version} experimental build (unofficial)"
# Fix dangling symlinks
ln -sf %{_libdir}/libblastrampoline.so %{buildroot}%{_libdir}/julia/libblastrampoline.so
%if 0%{?suse_version} > 1600
ln -sf %{_libdir}/libgcc_s.so.1 %{buildroot}%{_libdir}/julia/libgcc_s.so.1
%else
ln -sf /%{_lib}/libgcc_s.so.1 %{buildroot}%{_libdir}/julia/libgcc_s.so.1
%endif
ln -sf %{_libdir}/libgfortran.so.5 %{buildroot}%{_libdir}/julia/libgfortran.so.5
ln -sf %{_libdir}/libcurl.so %{buildroot}%{_libdir}/julia/libcurl.so.4
# GZip man page.
gzip %{buildroot}/%{_mandir}/man1/julia.1
# Copy the man page for every executable.
cd %{buildroot}/%{_mandir}/man1/
rm -f %{buildroot}%{_libdir}/julia/libuv.a
rm -f %{buildroot}%{_datadir}/julia/base/build.h
rm -f %{buildroot}%{_datadir}/julia/base/Makefile
@ -445,6 +484,29 @@ ln -sfv /var/lib/ca-certificates/ca-bundle.pem %{buildroot}%{_datadir}/julia/cer
# Remove execution permission on documentation files.
chmod -x+X -R %{buildroot}%{_docdir}/julia/*
# Prevent find-debuginfo from touching precompiled caches as it
# changes checksums, which invalidates them
chmod -x %{buildroot}%{_datarootdir}/julia/compiled/*/*/*.so
# Install .desktop file and icons
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/16x16/apps/
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/24x24/apps/
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/
cp -p contrib/julia.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/%{name}.svg
convert -scale 16x16 -extent 16x16 -gravity center -background transparent \
contrib/julia.svg %{buildroot}%{_datadir}/icons/hicolor/16x16/apps/%{name}.png
convert -scale 24x24 -extent 24x24 -gravity center -background transparent \
contrib/julia.svg %{buildroot}%{_datadir}/icons/hicolor/24x24/apps/%{name}.png
convert -scale 32x32 -extent 32x32 -gravity center -background transparent \
contrib/julia.svg %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/%{name}.png
convert -scale 48x48 -extent 48x48 -gravity center -background transparent \
contrib/julia.svg %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/%{name}.png
convert -scale 256x256 -extent 256x256 -gravity center -background transparent \
contrib/julia.svg %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/%{name}.png
# Remove hidden files and zero-length files and directories from stdlib.
pushd %{buildroot}
find . -name ".codecov.yml" -prune -execdir rm -rf {} \;
@ -479,30 +541,36 @@ fi
ln -sf %{_sysconfdir}/alternatives/julia %{buildroot}%{_bindir}/julia
# Convert all eol encodings to Unix
# Julia has a custom compiled LLVM sofile with a good name. We need
# it to be discoverable in LD_LIBRARY_PATHs
# so it can be dlopened for libLLVM_jll
ln -sf %{_libdir}/julia/libLLVM-15jl.so %{buildroot}%{_libdir}/libLLVM-15jl.so
# Attempt to convert all eol encodings to Unix
find %{buildroot} -type f -execdir dos2unix -k {} \;
# make it executable
chmod +x %{buildroot}%{_datadir}/julia/stdlib/v1.9/SparseArrays/gen/generator.jl
chmod +x %{buildroot}%{_datadir}/julia/stdlib/v1.10/SparseArrays/gen/generator.jl
# Remove duplicated files.
%fdupes %{buildroot}%{_datadir}/julia
%fdupes -s %{buildroot}%{_datadir}/julia
# Remove libtool leftovers
find %{buildroot} -type f -name "*.la" -delete -print
# Set RPATHs for libmpfr.so from julia
patchelf --set-rpath "%{_libdir}/julia:%{_libdir}:%{_prefix}/lib" "%{buildroot}%{_libdir}/julia/libmpfr.so"
%post
%{_sbindir}/update-alternatives --install %{_bindir}/julia \
julia %{_bindir}/julia-base 5
%{_sbindir}/ldconfig
%postun
if [ ! -f %{_bindir}/julia-base ] ; then
%{_sbindir}/update-alternatives --remove julia %{_bindir}/julia-base
fi
%{_sbindir}/ldconfig
%post devel -p %{_sbindir}/ldconfig
%postun devel -p %{_sbindir}/ldconfig
%post -n %{libname} -p %{_sbindir}/ldconfig
%postun -n %{libname} -p %{_sbindir}/ldconfig
%ldconfig_scriptlets -n %{libname}
%files
%doc CONTRIBUTING.md NEWS.md README.md
@ -518,6 +586,12 @@ fi
%{_datadir}/julia/cert.pem
%dir %{_libexecdir}/julia
%{_libexecdir}/julia/*
%{_datadir}/icons/hicolor/scalable/apps/%{name}.svg
%{_datadir}/icons/hicolor/16x16/apps/%{name}.png
%{_datadir}/icons/hicolor/24x24/apps/%{name}.png
%{_datadir}/icons/hicolor/32x32/apps/%{name}.png
%{_datadir}/icons/hicolor/48x48/apps/%{name}.png
%{_datadir}/icons/hicolor/256x256/apps/%{name}.png
%if !%{?compat_mode}
%dir %{_datadir}/appdata/
@ -529,6 +603,7 @@ fi
%{_prefix}/lib/julia
%{_libdir}/julia/
%{_mandir}/man1/julia.1%{?ext_man}
%{_libdir}/libLLVM-15jl.so
%dir %{_sysconfdir}/julia/
%config(noreplace) %{_sysconfdir}/julia/startup.jl

View File

@ -1,18 +0,0 @@
From: Soc Virnyl Estela <contact@uncomfyhalomacro.pl>
Date: Sat, 09 Dec 2023 16:30:31 +0800
Subject: Change hardcoded libs for libblastrampoline
---
diff -ruN julia-1.9.4.orig/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl julia-1.9.4/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl
--- julia-1.9.4.orig/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl 2023-12-09 14:21:37.910096392 +0800
+++ julia-1.9.4/stdlib/libblastrampoline_jll/src/libblastrampoline_jll.jl 2023-12-09 14:21:58.006998468 +0800
@@ -24,7 +24,7 @@
elseif Sys.isapple()
"@rpath/libblastrampoline.5.dylib"
else
- "libblastrampoline.so.5"
+ "libblastrampoline.so"
end
function __init__()

View File

@ -1,29 +0,0 @@
From: Soc Virnyl Estela <contact@uncomfyhalomacro.pl>
Date: Sat, 09 Dec 2023 16:30:31 +0800
Subject: Change --link-static to --link-shared
If we don't change it to shared, it will fail to link it
since openSUSE's llvm does not have static libraries.
---
diff -ruN julia-1.9.4.orig/src/Makefile julia/src/Makefile
--- julia-1.9.4.orig/src/Makefile 2023-12-08 06:25:53.604185583 +0800
+++ julia/src/Makefile 2023-12-08 13:19:45.202318921 +0800
@@ -125,7 +125,7 @@
# USE_SYSTEM_LLVM == 0
ifneq ($(USE_LLVM_SHLIB),1)
# USE_LLVM_SHLIB != 1
-CG_LLVMLINK += $(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --libs $(CG_LLVM_LIBS) --link-static) $($(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --system-libs 2> /dev/null)
+CG_LLVMLINK += $(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --libs $(CG_LLVM_LIBS) --link-shared) $($(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --system-libs 2> /dev/null)
else
# USE_LLVM_SHLIB == 1
ifeq ($(OS), Darwin)
@@ -141,7 +141,7 @@
endif # USE_LLVM_SHLIB == 1
endif # JULIACODEGEN == LLVM
-RT_LLVM_LINK_ARGS := $(shell $(LLVM_CONFIG_HOST) --libs $(RT_LLVM_LIBS) --system-libs --link-static)
+RT_LLVM_LINK_ARGS := $(shell $(LLVM_CONFIG_HOST) --libs $(RT_LLVM_LIBS) --system-libs --link-shared)
RT_LLVMLINK += $(LLVM_LDFLAGS) $(RT_LLVM_LINK_ARGS)
ifeq ($(OS), WINNT)
RT_LLVMLINK += -luuid -lole32

View File

@ -1,411 +0,0 @@
From 921f1b9d5e9389756826898d6907c0a2829efa51 Mon Sep 17 00:00:00 2001
From: Prem Chintalapudi <prem.chintalapudi@gmail.com>
Date: Wed, 10 May 2023 09:58:04 -0400
Subject: [PATCH 1/7] Fix remarks emissions from simdloop pass
Co-authored-by: Valentin Churavy <v.churavy@gmail.com>
---
src/llvm-simdloop.cpp | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/llvm-simdloop.cpp b/src/llvm-simdloop.cpp
index 3c94b226ad7b8..233f61c9fea6b 100644
--- a/src/llvm-simdloop.cpp
+++ b/src/llvm-simdloop.cpp
@@ -165,11 +165,13 @@ static bool markLoopInfo(Module &M, Function *marker, function_ref<LoopInfo &(Fu
Instruction *I = cast<Instruction>(U);
ToDelete.push_back(I);
- LoopInfo &LI = GetLI(*I->getParent()->getParent());
- Loop *L = LI.getLoopFor(I->getParent());
- I->removeFromParent();
- if (!L)
+ BasicBlock *B = I->getParent();
+ LoopInfo &LI = GetLI(*B->getParent());
+ Loop *L = LI.getLoopFor(B);
+ if (!L) {
+ I->removeFromParent();
continue;
+ }
LLVM_DEBUG(dbgs() << "LSL: loopinfo marker found\n");
bool simd = false;
@@ -258,6 +260,8 @@ static bool markLoopInfo(Module &M, Function *marker, function_ref<LoopInfo &(Fu
}
}
+ I->removeFromParent();
+
Changed = true;
}
From b2273d39542fe803f7d9da03ef57af7e815db68c Mon Sep 17 00:00:00 2001
From: Valentin Churavy <v.churavy@gmail.com>
Date: Sun, 30 Apr 2023 20:19:08 -0400
Subject: [PATCH 3/7] Do not yet mandate opaque pointers for LLVM 15
---
src/codegen.cpp | 11 +++++++++++
src/jitlayers.cpp | 3 ---
src/llvm-version.h | 2 +-
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/codegen.cpp b/src/codegen.cpp
index a9d2cb0c60333..2e3f7eb2bf7bb 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -9083,6 +9083,17 @@ extern "C" void jl_init_llvm(void)
if (clopt && clopt->getNumOccurrences() == 0)
cl::ProvidePositionalOption(clopt, "4", 1);
+#if JL_LLVM_VERSION >= 150000
+ clopt = llvmopts.lookup("opaque-pointers");
+ if (clopt && clopt->getNumOccurrences() == 0) {
+#ifdef JL_LLVM_OPAQUE_POINTERS
+ cl::ProvidePositionalOption(clopt, "true", 1);
+#else
+ cl::ProvidePositionalOption(clopt, "false", 1);
+#endif
+ }
+#endif
+
jl_ExecutionEngine = new JuliaOJIT();
bool jl_using_gdb_jitevents = false;
diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp
index 643f0468457ae..ef7e98bb7852a 100644
--- a/src/jitlayers.cpp
+++ b/src/jitlayers.cpp
@@ -1306,9 +1306,6 @@ JuliaOJIT::JuliaOJIT()
JD(ES.createBareJITDylib("JuliaOJIT")),
ContextPool([](){
auto ctx = std::make_unique<LLVMContext>();
-#ifdef JL_LLVM_OPAQUE_POINTERS
- ctx->setOpaquePointers(true);
-#endif
return orc::ThreadSafeContext(std::move(ctx));
}),
#ifdef JL_USE_JITLINK
diff --git a/src/llvm-version.h b/src/llvm-version.h
index a3f3774b6dc15..819ec1c88976b 100644
--- a/src/llvm-version.h
+++ b/src/llvm-version.h
@@ -14,7 +14,7 @@
#error Only LLVM versions >= 12.0.0 are supported by Julia
#endif
-#if JL_LLVM_VERSION >= 150000
+#if JL_LLVM_VERSION >= 160000
#define JL_LLVM_OPAQUE_POINTERS 1
#endif
From 190f84180883eb498cb7b7ed27e10af9a6c62863 Mon Sep 17 00:00:00 2001
From: Valentin Churavy <v.churavy@gmail.com>
Date: Wed, 26 Apr 2023 20:48:45 -0400
Subject: [PATCH 4/7] Upgrade Julia to LLVM 15.0.7+5
Co-authored-by: Gabriel Baraldi <baraldigabriel@gmail.com>
---
Make.inc | 2 +-
deps/checksums/clang | 224 ++++++++--------
deps/checksums/lld | 224 ++++++++--------
deps/checksums/llvm | 452 +++++++++++++++-----------------
deps/clang.version | 2 +-
deps/lld.version | 2 +-
deps/llvm-tools.version | 4 +-
deps/llvm.version | 9 +-
stdlib/LLD_jll/Project.toml | 4 +-
stdlib/libLLVM_jll/Project.toml | 2 +-
10 files changed, 446 insertions(+), 479 deletions(-)
diff --git a/Make.inc b/Make.inc
index 4d564f057a3da..35b0657de5aa2 100644
--- a/Make.inc
+++ b/Make.inc
@@ -480,7 +480,7 @@ FC := $(CROSS_COMPILE)gfortran
ifeq ($(OS), Darwin)
APPLE_ARCH := $(shell uname -m)
ifneq ($(APPLE_ARCH),arm64)
-MACOSX_VERSION_MIN := 10.10
+MACOSX_VERSION_MIN := 10.14
else
MACOSX_VERSION_MIN := 11.0
endif
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 2e3f7eb2bf7bb..07e7b15afc165 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -9169,7 +9169,9 @@ extern "C" JL_DLLEXPORT void jl_init_codegen_impl(void)
extern "C" JL_DLLEXPORT void jl_teardown_codegen_impl() JL_NOTSAFEPOINT
{
// output LLVM timings and statistics
- jl_ExecutionEngine->printTimers();
+ // Guard against exits before we have initialized the ExecutionEngine
+ if (jl_ExecutionEngine)
+ jl_ExecutionEngine->printTimers();
PrintStatistics();
}
diff --git a/src/jitlayers.h b/src/jitlayers.h
index bbbcbe73f1e54..4c6921cd42dab 100644
--- a/src/jitlayers.h
+++ b/src/jitlayers.h
@@ -97,10 +97,8 @@ struct OptimizationOptions {
};
// LLVM's new pass manager is scheduled to replace the legacy pass manager
-// for middle-end IR optimizations. However, we have not qualified the new
-// pass manager on our optimization pipeline yet, so this remains an optional
-// define
-#if defined(HAS_SANITIZER) && JL_LLVM_VERSION >= 150000
+// for middle-end IR optimizations.
+#if JL_LLVM_VERSION >= 150000
#define JL_USE_NEW_PM
#endif
diff --git a/src/pipeline.cpp b/src/pipeline.cpp
index 4403653a9d8e4..7e61171d288e6 100644
--- a/src/pipeline.cpp
+++ b/src/pipeline.cpp
@@ -361,7 +361,8 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
{
FunctionPassManager FPM;
FPM.addPass(SROAPass());
- FPM.addPass(InstSimplifyPass());
+ // SROA can duplicate PHI nodes which can block LowerSIMD
+ FPM.addPass(InstCombinePass());
FPM.addPass(JumpThreadingPass());
FPM.addPass(CorrelatedValuePropagationPass());
FPM.addPass(ReassociatePass());
@@ -384,7 +385,7 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
#endif
LPM2.addPass(LICMPass(LICMOptions()));
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
- LPM2.addPass(SimpleLoopUnswitchPass(true, true));
+ LPM2.addPass(SimpleLoopUnswitchPass(false, true));
LPM2.addPass(LICMPass(LICMOptions()));
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
//LICM needs MemorySSA now, so we must use it
@@ -397,11 +398,11 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
LPM.addPass(LoopIdiomRecognizePass());
LPM.addPass(IndVarSimplifyPass());
LPM.addPass(LoopDeletionPass());
+ LPM.addPass(LoopFullUnrollPass());
invokeLoopOptimizerEndCallbacks(LPM, PB, O);
//We don't know if the loop end callbacks support MSSA
FPM.addPass(createFunctionToLoopPassAdaptor(std::move(LPM), /*UseMemorySSA = */false));
}
- FPM.addPass(LoopUnrollPass(LoopUnrollOptions().setRuntime(false)));
JULIA_PASS(FPM.addPass(AllocOptPass()));
FPM.addPass(SROAPass());
FPM.addPass(InstSimplifyPass());
From 2ddbb5abb93045eeb4513e223c86e9c25fa774a4 Mon Sep 17 00:00:00 2001
From: Valentin Churavy <v.churavy@gmail.com>
Date: Wed, 26 Apr 2023 20:49:16 -0400
Subject: [PATCH 6/7] Fix tests and static analyzer for LLVM 15
Co-authored-by: Gabriel Baraldi <baraldigabriel@gmail.com>
Co-authored-by: Prem Chintalapudi <prem.chintalapudi@gmail.com>
---
src/llvm-alloc-opt.cpp | 3 ++
src/llvm-late-gc-lowering.cpp | 1 +
src/llvm-lower-handlers.cpp | 1 +
src/llvm-multiversioning.cpp | 3 ++
src/llvm-ptls.cpp | 2 +
test/clangsa/MissingRoots.c | 3 ++
test/cmdlineargs.jl | 10 ++--
test/llvmpasses/pipeline-o2-broadcast.jl | 68 ++++++++++++++----------
test/llvmpasses/pipeline-o2.jl | 6 +--
9 files changed, 62 insertions(+), 35 deletions(-)
diff --git a/src/llvm-alloc-opt.cpp b/src/llvm-alloc-opt.cpp
index 1a524cbe8d419..bb6de67f347ff 100644
--- a/src/llvm-alloc-opt.cpp
+++ b/src/llvm-alloc-opt.cpp
@@ -1138,9 +1138,12 @@ void Optimizer::splitOnStack(CallInst *orig_inst)
ref->setOrdering(AtomicOrdering::NotAtomic);
operands.push_back(ref);
}
+#ifndef __clang_analyzer__
+ // FIXME: SA finds "Called C++ object pointer is null" inside the LLVM code.
auto new_call = builder.CreateCall(pass.gc_preserve_begin_func, operands);
new_call->takeName(call);
call->replaceAllUsesWith(new_call);
+#endif
call->eraseFromParent();
return;
}
diff --git a/src/llvm-late-gc-lowering.cpp b/src/llvm-late-gc-lowering.cpp
index a836ff1361768..ac70685e7431b 100644
--- a/src/llvm-late-gc-lowering.cpp
+++ b/src/llvm-late-gc-lowering.cpp
@@ -1262,6 +1262,7 @@ static bool isLoadFromConstGV(LoadInst *LI, bool &task_local, PhiSet *seen)
// We only emit single slot GV in codegen
// but LLVM global merging can change the pointer operands to GEPs/bitcasts
auto load_base = LI->getPointerOperand()->stripInBoundsOffsets();
+ assert(load_base); // Static analyzer
auto gv = dyn_cast<GlobalVariable>(load_base);
if (isTBAA(LI->getMetadata(LLVMContext::MD_tbaa),
{"jtbaa_immut", "jtbaa_const", "jtbaa_datatype"})) {
diff --git a/src/llvm-lower-handlers.cpp b/src/llvm-lower-handlers.cpp
index 919128769019b..39a36bfc3ba76 100644
--- a/src/llvm-lower-handlers.cpp
+++ b/src/llvm-lower-handlers.cpp
@@ -8,6 +8,7 @@
#include <llvm/ADT/DepthFirstIterator.h>
#include <llvm/ADT/Statistic.h>
+#include <llvm/ADT/Triple.h>
#include <llvm/Analysis/CFG.h>
#include <llvm/IR/BasicBlock.h>
#include <llvm/IR/Constants.h>
diff --git a/src/llvm-multiversioning.cpp b/src/llvm-multiversioning.cpp
index 21a090724802a..cdba03047a4b7 100644
--- a/src/llvm-multiversioning.cpp
+++ b/src/llvm-multiversioning.cpp
@@ -14,11 +14,13 @@
#include <llvm/Pass.h>
#include <llvm/ADT/BitVector.h>
#include <llvm/ADT/Statistic.h>
+#include <llvm/ADT/Triple.h>
#include <llvm/IR/Module.h>
#include <llvm/IR/LegacyPassManager.h>
#include <llvm/IR/Function.h>
#include <llvm/IR/Instructions.h>
#include <llvm/IR/Constants.h>
+#include <llvm/IR/Dominators.h>
#include <llvm/IR/LLVMContext.h>
#include <llvm/Analysis/LoopInfo.h>
#include <llvm/Analysis/CallGraph.h>
@@ -779,6 +781,7 @@ static Value *rewrite_inst_use(const Stack& stack, Type *T_size, Value *replace,
replace = inst;
continue;
}
+ assert(val);
unsigned nargs = val->getNumOperands();
args.resize(nargs);
for (unsigned j = 0; j < nargs; j++) {
diff --git a/src/llvm-ptls.cpp b/src/llvm-ptls.cpp
index 8174832b3cebf..a628710916327 100644
--- a/src/llvm-ptls.cpp
+++ b/src/llvm-ptls.cpp
@@ -9,6 +9,7 @@
#include <llvm-c/Types.h>
#include <llvm/Pass.h>
+#include <llvm/ADT/Triple.h>
#include <llvm/IR/Module.h>
#include <llvm/IR/LegacyPassManager.h>
#include <llvm/IR/Function.h>
@@ -161,6 +162,7 @@ void LowerPTLS::fix_pgcstack_use(CallInst *pgcstack, Function *pgcstack_getter,
SmallVector<uint32_t, 2> Weights{9, 1};
TerminatorInst *fastTerm;
TerminatorInst *slowTerm;
+ assert(pgcstack->getType()); // Static analyzer
auto cmp = new ICmpInst(phi, CmpInst::ICMP_NE, pgcstack, Constant::getNullValue(pgcstack->getType()));
SplitBlockAndInsertIfThenElse(cmp, phi, &fastTerm, &slowTerm,
MDB.createBranchWeights(Weights));
diff --git a/test/clangsa/MissingRoots.c b/test/clangsa/MissingRoots.c
index f0b32c54bc7b8..0ff5e633622ce 100644
--- a/test/clangsa/MissingRoots.c
+++ b/test/clangsa/MissingRoots.c
@@ -352,6 +352,9 @@ void assoc_exact_broken(jl_value_t **args, size_t n, int8_t offs, size_t world)
}
*/
+// declare
+jl_typemap_level_t *jl_new_typemap_level(void);
+
void assoc_exact_ok(jl_value_t *args1, jl_value_t **args, size_t n, int8_t offs, size_t world) {
jl_typemap_level_t *cache = jl_new_typemap_level();
JL_GC_PUSH1(&cache);
diff --git a/test/cmdlineargs.jl b/test/cmdlineargs.jl
index 389b195d97935..1d04926ef23af 100644
--- a/test/cmdlineargs.jl
+++ b/test/cmdlineargs.jl
@@ -188,10 +188,12 @@ let exename = `$(Base.julia_cmd()) --startup-file=no --color=no`
@test contains(v[2], r"enable-tail-merge + = 1")
@test isempty(v[3])
end
- @testset let v = readchomperrors(setenv(`$exename -e 0`, "JULIA_LLVM_ARGS" => "-print-options -enable-tail-merge=1 -enable-tail-merge=1", "HOME" => homedir()))
- @test !v[1]
- @test isempty(v[2])
- @test v[3] == "julia: for the --enable-tail-merge option: may only occur zero or one times!"
+ if Base.libllvm_version < v"15" #LLVM over 15 doesn't care for multiple options
+ @testset let v = readchomperrors(setenv(`$exename -e 0`, "JULIA_LLVM_ARGS" => "-print-options -enable-tail-merge=1 -enable-tail-merge=1", "HOME" => homedir()))
+ @test !v[1]
+ @test isempty(v[2])
+ @test v[3] == "julia: for the --enable-tail-merge option: may only occur zero or one times!"
+ end
end
end
diff --git a/test/llvmpasses/pipeline-o2.jl b/test/llvmpasses/pipeline-o2.jl
index 2996a44de62b3..fcb2161de7614 100644
--- a/test/llvmpasses/pipeline-o2.jl
+++ b/test/llvmpasses/pipeline-o2.jl
@@ -78,21 +78,21 @@ end
# COM: memset checks
# COM: INT64
-# ALL-LABEL: define nonnull {} addrspace(10)* @julia_zeros
+# ALL: define {{.*}} @julia_zeros
# ALL-NOT: bounds_error
# COM: memset is not used with bounds checks on (too late in the pipeline)
# BC_OFF: llvm.memset
# BC_AUTO: llvm.memset
# COM: INT32
-# ALL-LABEL: define nonnull {} addrspace(10)* @julia_zeros
+# ALL: define {{.*}} @julia_zeros
# ALL-NOT: bounds_error
# COM: memset is not used with bounds checks on (too late in the pipeline)
# BC_OFF: llvm.memset
# BC_AUTO: llvm.memset
# COM: INT16
-# ALL-LABEL: define nonnull {} addrspace(10)* @julia_zeros
+# ALL: define {{.*}} @julia_zeros
# ALL-NOT: bounds_error
# COM: memset is not used with bounds checks on (too late in the pipeline)
# BC_OFF: llvm.memset
From 77c13ad59364189386114b546a7482dbe2edf233 Mon Sep 17 00:00:00 2001
From: Valentin Churavy <v.churavy@gmail.com>
Date: Wed, 10 May 2023 10:51:16 -0400
Subject: [PATCH 7/7] Reenable NonTrivial Loop Unswitch
---
src/codegen.cpp | 3 ---
src/pipeline.cpp | 2 +-
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 07e7b15afc165..ae306d3d1cdb5 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -9073,9 +9073,6 @@ extern "C" void jl_init_llvm(void)
clopt = llvmopts.lookup("unswitch-threshold");
if (clopt->getNumOccurrences() == 0)
cl::ProvidePositionalOption(clopt, "100", 1);
- clopt = llvmopts.lookup("enable-unswitch-cost-multiplier");
- if (clopt->getNumOccurrences() == 0)
- cl::ProvidePositionalOption(clopt, "false", 1);
#endif
// if the patch adding this option has been applied, lower its limit to provide
// better DAGCombiner performance.
diff --git a/src/pipeline.cpp b/src/pipeline.cpp
index 7e61171d288e6..6e6a9a3c37d02 100644
--- a/src/pipeline.cpp
+++ b/src/pipeline.cpp
@@ -385,7 +385,7 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
#endif
LPM2.addPass(LICMPass(LICMOptions()));
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
- LPM2.addPass(SimpleLoopUnswitchPass(false, true));
+ LPM2.addPass(SimpleLoopUnswitchPass(/*NonTrivial*/true, true));
LPM2.addPass(LICMPass(LICMOptions()));
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
//LICM needs MemorySSA now, so we must use it

View File

@ -1,22 +0,0 @@
From: Soc Virnyl Estela <contact@uncomfyhalomacro.pl>
Date: Sat, 09 Dec 2023 16:30:31 +0800
Subject: Modify hardcoded libs for mbedtls
---
diff -ruN julia-1.9.4.orig/stdlib/MbedTLS_jll/src/MbedTLS_jll.jl julia/stdlib/MbedTLS_jll/src/MbedTLS_jll.jl
--- julia-1.9.4.orig/stdlib/MbedTLS_jll/src/MbedTLS_jll.jl 2023-12-08 17:54:46.804532060 +0800
+++ julia/stdlib/MbedTLS_jll/src/MbedTLS_jll.jl 2023-12-09 07:41:38.758431369 +0800
@@ -31,9 +31,9 @@
const libmbedtls = "@rpath/libmbedtls.14.dylib"
const libmbedx509 = "@rpath/libmbedx509.1.dylib"
else
- const libmbedcrypto = "libmbedcrypto.so.7"
- const libmbedtls = "libmbedtls.so.14"
- const libmbedx509 = "libmbedx509.so.1"
+ const libmbedcrypto = "libmbedcrypto.so"
+ const libmbedtls = "libmbedtls.so"
+ const libmbedx509 = "libmbedx509.so"
end
function __init__()

View File

@ -0,0 +1,25 @@
diff -ruN julia-1.10.3.orig/deps/mpfr.mk julia-1.10.3/deps/mpfr.mk
--- julia-1.10.3.orig/deps/mpfr.mk 2024-05-10 23:13:57.440776105 +0800
+++ julia-1.10.3/deps/mpfr.mk 2024-05-12 17:15:31.003123811 +0800
@@ -1,19 +1,15 @@
## MPFR ##
include $(SRCDIR)/mpfr.version
-ifeq ($(USE_SYSTEM_GMP), 0)
$(BUILDDIR)/mpfr-$(MPFR_VER)/build-configured: | $(build_prefix)/manifest/gmp
-endif
ifneq ($(USE_BINARYBUILDER_MPFR),1)
MPFR_CONFIGURE_OPTS := $(CONFIGURE_COMMON)
MPFR_CONFIGURE_OPTS += --enable-thread-safe --enable-shared-cache --disable-float128 --disable-decimal-float
MPFR_CONFIGURE_OPTS += --enable-shared --disable-static
-
-ifeq ($(USE_SYSTEM_GMP), 0)
-MPFR_CONFIGURE_OPTS += --with-gmp=$(abspath $(build_prefix))
-endif
+MPFR_CONFIGURE_OPTS += --with-gmp-lib=$(abspath $(build_prefix))/lib64
+MPFR_CONFIGURE_OPTS += --with-gmp-include=$(abspath $(build_prefix))/include
ifeq ($(SANITIZE),1)
# Force generic C build

View File

@ -1,304 +0,0 @@
From e08e14449fdec30d83ae2b9f0d6d1f4a9acf0b75 Mon Sep 17 00:00:00 2001
From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com>
Date: Mon, 17 Apr 2023 19:37:59 +0000
Subject: [PATCH] Bring in newpm (new pass manager) updates to master (#47038)
* Workaround missing ASAN global
* Add alias analysis at O2 instead of O3
* Disable runtime unrolling
* Make SimpleLoopUnswitch act like LoopUnswitch
* Add --time-passes support
* Only add verification passes in debug mode
* Hide assertion function
---
src/codegen.cpp | 11 ++++++++++-
src/jitlayers.cpp | 49 ++++++++++++++++++++++++++++++++++++-----------
src/jitlayers.h | 17 ++++++++++++----
src/pipeline.cpp | 27 ++++++++++++++------------
4 files changed, 76 insertions(+), 28 deletions(-)
diff --git a/src/codegen.cpp b/src/codegen.cpp
index b6b86ba4442e1..fb8cefe5eb44f 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -8838,6 +8838,15 @@ extern "C" void jl_init_llvm(void)
clopt = llvmopts.lookup("enable-tail-merge"); // NOO TOUCHIE; NO TOUCH! See #922
if (clopt->getNumOccurrences() == 0)
cl::ProvidePositionalOption(clopt, "0", 1);
+#ifdef JL_USE_NEW_PM
+ // For parity with LoopUnswitch
+ clopt = llvmopts.lookup("unswitch-threshold");
+ if (clopt->getNumOccurrences() == 0)
+ cl::ProvidePositionalOption(clopt, "100", 1);
+ clopt = llvmopts.lookup("enable-unswitch-cost-multiplier");
+ if (clopt->getNumOccurrences() == 0)
+ cl::ProvidePositionalOption(clopt, "false", 1);
+#endif
// if the patch adding this option has been applied, lower its limit to provide
// better DAGCombiner performance.
clopt = llvmopts.lookup("combiner-store-merge-dependence-limit");
@@ -8916,7 +8925,7 @@ extern "C" JL_DLLEXPORT void jl_init_codegen_impl(void)
extern "C" JL_DLLEXPORT void jl_teardown_codegen_impl() JL_NOTSAFEPOINT
{
// output LLVM timings and statistics
- reportAndResetTimings();
+ jl_ExecutionEngine->printTimers();
PrintStatistics();
}
diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp
index c7e202b98efab..29665d4e420b9 100644
--- a/src/jitlayers.cpp
+++ b/src/jitlayers.cpp
@@ -1103,6 +1103,8 @@ namespace {
std::unique_ptr<TargetMachine> TM;
int optlevel;
PMCreator(TargetMachine &TM, int optlevel) : TM(cantFail(createJTMBFromTM(TM, optlevel).createTargetMachine())), optlevel(optlevel) {}
+ // overload for newpm compatibility
+ PMCreator(TargetMachine &TM, int optlevel, std::vector<std::function<void()>> &) : PMCreator(TM, optlevel) {}
PMCreator(const PMCreator &other) : PMCreator(*other.TM, other.optlevel) {}
PMCreator(PMCreator &&other) : TM(std::move(other.TM)), optlevel(other.optlevel) {}
friend void swap(PMCreator &self, PMCreator &other) {
@@ -1128,16 +1131,21 @@ namespace {
struct PMCreator {
orc::JITTargetMachineBuilder JTMB;
OptimizationLevel O;
- PMCreator(TargetMachine &TM, int optlevel) : JTMB(createJTMBFromTM(TM, optlevel)), O(getOptLevel(optlevel)) {}
+ std::vector<std::function<void()>> &printers;
+ PMCreator(TargetMachine &TM, int optlevel, std::vector<std::function<void()>> &printers) JL_NOTSAFEPOINT : JTMB(createJTMBFromTM(TM, optlevel)), O(getOptLevel(optlevel)), printers(printers) {}
auto operator()() {
- return std::make_unique<NewPM>(cantFail(JTMB.createTargetMachine()), O);
+ auto NPM = std::make_unique<NewPM>(cantFail(JTMB.createTargetMachine()), O);
+ printers.push_back([NPM = NPM.get()]() JL_NOTSAFEPOINT {
+ NPM->printTimers();
+ });
+ return NPM;
}
};
#endif
struct OptimizerT {
- OptimizerT(TargetMachine &TM, int optlevel) : optlevel(optlevel), PMs(PMCreator(TM, optlevel)) {}
+ OptimizerT(TargetMachine &TM, int optlevel, std::vector<std::function<void()>> &printers) : optlevel(optlevel), PMs(PMCreator(TM, optlevel, printers)) {}
OptimizerResultT operator()(orc::ThreadSafeModule TSM, orc::MaterializationResponsibility &R) {
TSM.withModuleDo([&](Module &M) {
@@ -1247,10 +1255,14 @@ llvm::DataLayout jl_create_datalayout(TargetMachine &TM) {
return jl_data_layout;
}
-JuliaOJIT::PipelineT::PipelineT(orc::ObjectLayer &BaseLayer, TargetMachine &TM, int optlevel)
+JuliaOJIT::PipelineT::PipelineT(orc::ObjectLayer &BaseLayer, TargetMachine &TM, int optlevel, std::vector<std::function<void()>> &PrintLLVMTimers)
: CompileLayer(BaseLayer.getExecutionSession(), BaseLayer,
std::make_unique<CompilerT>(orc::irManglingOptionsFromTargetOptions(TM.Options), TM, optlevel)),
- OptimizeLayer(CompileLayer.getExecutionSession(), CompileLayer, OptimizerT(TM, optlevel)) {}
+ OptimizeLayer(CompileLayer.getExecutionSession(), CompileLayer, OptimizerT(TM, optlevel, PrintLLVMTimers)) {}
+
+#ifdef _COMPILER_ASAN_ENABLED_
+int64_t ___asan_globals_registered;
+#endif
JuliaOJIT::JuliaOJIT()
: TM(createTargetMachine()),
@@ -1285,10 +1297,10 @@ JuliaOJIT::JuliaOJIT()
),
#endif
Pipelines{
- std::make_unique<PipelineT>(ObjectLayer, *TM, 0),
- std::make_unique<PipelineT>(ObjectLayer, *TM, 1),
- std::make_unique<PipelineT>(ObjectLayer, *TM, 2),
- std::make_unique<PipelineT>(ObjectLayer, *TM, 3),
+ std::make_unique<PipelineT>(ObjectLayer, *TM, 0, PrintLLVMTimers),
+ std::make_unique<PipelineT>(ObjectLayer, *TM, 1, PrintLLVMTimers),
+ std::make_unique<PipelineT>(ObjectLayer, *TM, 2, PrintLLVMTimers),
+ std::make_unique<PipelineT>(ObjectLayer, *TM, 3, PrintLLVMTimers),
},
OptSelLayer(Pipelines)
{
@@ -1393,6 +1405,11 @@ JuliaOJIT::JuliaOJIT()
reinterpret_cast<void *>(static_cast<uintptr_t>(msan_workaround::MSanTLS::origin)), JITSymbolFlags::Exported);
cantFail(GlobalJD.define(orc::absoluteSymbols(msan_crt)));
#endif
+#ifdef _COMPILER_ASAN_ENABLED_
+ orc::SymbolMap asan_crt;
+ asan_crt[mangle("___asan_globals_registered")] = JITEvaluatedSymbol::fromPointer(&___asan_globals_registered, JITSymbolFlags::Exported);
+ cantFail(JD.define(orc::absoluteSymbols(asan_crt)));
+#endif
}
JuliaOJIT::~JuliaOJIT() = default;
@@ -1583,6 +1600,16 @@ size_t JuliaOJIT::getTotalBytes() const
}
#endif
+void JuliaOJIT::printTimers()
+{
+#ifdef JL_USE_NEW_PM
+ for (auto &printer : PrintLLVMTimers) {
+ printer();
+ }
+#endif
+ reportAndResetTimings();
+}
+
JuliaOJIT *jl_ExecutionEngine;
// destructively move the contents of src into dest
diff --git a/src/jitlayers.h b/src/jitlayers.h
index d8c06df44176f..7f07034586c80 100644
--- a/src/jitlayers.h
+++ b/src/jitlayers.h
@@ -42,9 +42,7 @@
// and feature support (e.g. Windows, JITEventListeners for various profilers,
// etc.). Thus, we currently only use JITLink where absolutely required, that is,
// for Mac/aarch64.
-// #define JL_FORCE_JITLINK
-
-#if defined(_OS_DARWIN_) && defined(_CPU_AARCH64_) || defined(JL_FORCE_JITLINK)
+#if defined(_OS_DARWIN_) && defined(_CPU_AARCH64_) || defined(_COMPILER_ASAN_ENABLED_) || defined(JL_FORCE_JITLINK)
# if JL_LLVM_VERSION < 130000
# pragma message("On aarch64-darwin, LLVM version >= 13 is required for JITLink; fallback suffers from occasional segfaults")
# endif
@@ -91,6 +89,12 @@ struct OptimizationOptions {
}
};
+// LLVM's new pass manager is scheduled to replace the legacy pass manager
+// for middle-end IR optimizations. However, we have not qualified the new
+// pass manager on our optimization pipeline yet, so this remains an optional
+// define
+// #define JL_USE_NEW_PM
+
struct NewPM {
std::unique_ptr<TargetMachine> TM;
StandardInstrumentations SI;
@@ -103,6 +107,8 @@ struct NewPM {
NewPM(std::unique_ptr<TargetMachine> TM, OptimizationLevel O, OptimizationOptions options = OptimizationOptions::defaults());
void run(Module &M);
+
+ void printTimers();
};
struct AnalysisManagers {
@@ -420,7 +426,7 @@ class JuliaOJIT {
std::unique_ptr<WNMutex> mutex;
};
struct PipelineT {
- PipelineT(orc::ObjectLayer &BaseLayer, TargetMachine &TM, int optlevel);
+ PipelineT(orc::ObjectLayer &BaseLayer, TargetMachine &TM, int optlevel, std::vector<std::function<void()>> &PrintLLVMTimers);
CompileLayerT CompileLayer;
OptimizeLayerT OptimizeLayer;
};
@@ -490,6 +496,7 @@ class JuliaOJIT {
TargetIRAnalysis getTargetIRAnalysis() const;
size_t getTotalBytes() const;
+ void printTimers();
JITDebugInfoRegistry &getDebugInfoRegistry() JL_NOTSAFEPOINT {
return DebugRegistry;
@@ -522,6 +529,8 @@ class JuliaOJIT {
jl_locked_stream dump_compiles_stream;
jl_locked_stream dump_llvm_opt_stream;
+ std::vector<std::function<void()>> PrintLLVMTimers;
+
ResourcePool<orc::ThreadSafeContext, 0, std::queue<orc::ThreadSafeContext>> ContextPool;
#ifndef JL_USE_JITLINK
diff --git a/src/pipeline.cpp b/src/pipeline.cpp
index ae2b1c3202f04..4403653a9d8e4 100644
--- a/src/pipeline.cpp
+++ b/src/pipeline.cpp
@@ -146,7 +146,7 @@ namespace {
// Opts.Recover = CodeGenOpts.SanitizeRecover.has(Mask);
// Opts.UseAfterScope = CodeGenOpts.SanitizeAddressUseAfterScope;
// Opts.UseAfterReturn = CodeGenOpts.getSanitizeAddressUseAfterReturn();
- MPM.addPass(RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
+ // MPM.addPass(RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
// MPM.addPass(ModuleAddressSanitizerPass(
// Opts, UseGlobalGC, UseOdrIndicator, DestructorKind));
//Let's assume the defaults are actually fine for our purposes
@@ -173,11 +173,13 @@ namespace {
// }
}
- void addVerificationPasses(ModulePassManager &MPM, bool llvm_only) {
+#ifdef JL_DEBUG_BUILD
+ static inline void addVerificationPasses(ModulePassManager &MPM, bool llvm_only) {
if (!llvm_only)
MPM.addPass(llvm::createModuleToFunctionPassAdaptor(GCInvariantVerifierPass()));
MPM.addPass(VerifierPass());
}
+#endif
auto basicSimplifyCFGOptions() {
return SimplifyCFGOptions()
@@ -244,9 +246,9 @@ namespace {
//Use for O1 and below
void buildBasicPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationLevel O, OptimizationOptions options) {
-// #ifdef JL_DEBUG_BUILD
+#ifdef JL_DEBUG_BUILD
addVerificationPasses(MPM, options.llvm_only);
-// #endif
+#endif
invokePipelineStartCallbacks(MPM, PB, O);
MPM.addPass(ConstantMergePass());
if (!options.dump_native) {
@@ -320,9 +322,9 @@ static void buildBasicPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimiza
//Use for O2 and above
void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationLevel O, OptimizationOptions options) {
-// #ifdef JL_DEBUG_BUILD
+#ifdef JL_DEBUG_BUILD
addVerificationPasses(MPM, options.llvm_only);
-// #endif
+#endif
invokePipelineStartCallbacks(MPM, PB, O);
MPM.addPass(ConstantMergePass());
{
@@ -382,7 +384,7 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
#endif
LPM2.addPass(LICMPass(LICMOptions()));
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
- LPM2.addPass(SimpleLoopUnswitchPass());
+ LPM2.addPass(SimpleLoopUnswitchPass(true, true));
LPM2.addPass(LICMPass(LICMOptions()));
JULIA_PASS(LPM2.addPass(JuliaLICMPass()));
//LICM needs MemorySSA now, so we must use it
@@ -399,7 +401,7 @@ static void buildFullPipeline(ModulePassManager &MPM, PassBuilder *PB, Optimizat
//We don't know if the loop end callbacks support MSSA
FPM.addPass(createFunctionToLoopPassAdaptor(std::move(LPM), /*UseMemorySSA = */false));
}
- FPM.addPass(LoopUnrollPass());
+ FPM.addPass(LoopUnrollPass(LoopUnrollOptions().setRuntime(false)));
JULIA_PASS(FPM.addPass(AllocOptPass()));
FPM.addPass(SROAPass());
FPM.addPass(InstSimplifyPass());
@@ -541,11 +543,8 @@ PIC->addClassToPassName(decltype(CREATE_PASS)::name(), NAME);
// Register the AA manager first so that our version is the one used.
FAM.registerPass([&] JL_NOTSAFEPOINT {
AAManager AA;
- // TODO: Why are we only doing this for -O3?
- if (O.getSpeedupLevel() >= 3) {
- AA.registerFunctionAnalysis<BasicAA>();
- }
if (O.getSpeedupLevel() >= 2) {
+ AA.registerFunctionAnalysis<BasicAA>();
AA.registerFunctionAnalysis<ScopedNoAliasAA>();
AA.registerFunctionAnalysis<TypeBasedAA>();
}
@@ -603,6 +602,10 @@ void NewPM::run(Module &M) {
#endif
}
+void NewPM::printTimers() {
+ SI.getTimePasses().print();
+}
+
OptimizationLevel getOptLevel(int optlevel) {
switch (std::min(std::max(optlevel, 0), 3)) {
case 0:

View File

@ -1,188 +0,0 @@
From 959902f1c6099c1b513e29103b998545c16731fc Mon Sep 17 00:00:00 2001
From: Valentin Churavy <vchuravy@users.noreply.github.com>
Date: Thu, 27 Apr 2023 16:27:09 -0400
Subject: [PATCH] Support both Float16 ABIs depending on LLVM and platform
(#49527)
There are two Float16 ABIs in the wild, one for platforms that have a
defing register and the original one where we used i16.
LLVM 15 follows GCC and uses the new ABI on x86/ARM but not PPC.
Co-authored-by: Gabriel Baraldi <baraldigabriel@gmail.com>
---
src/aotcompile.cpp | 11 +++++++--
src/codegen.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++
src/jitlayers.cpp | 2 ++
src/llvm-version.h | 10 +++++++++
4 files changed, 77 insertions(+), 2 deletions(-)
diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp
index 391c5d3df46fb..2a14e2a4fa0ab 100644
--- a/src/aotcompile.cpp
+++ b/src/aotcompile.cpp
@@ -494,6 +494,7 @@ static void reportWriterError(const ErrorInfoBase &E)
jl_safe_printf("ERROR: failed to emit output file %s\n", err.c_str());
}
+#if JULIA_FLOAT16_ABI == 1
static void injectCRTAlias(Module &M, StringRef name, StringRef alias, FunctionType *FT)
{
Function *target = M.getFunction(alias);
@@ -510,7 +511,8 @@ static void injectCRTAlias(Module &M, StringRef name, StringRef alias, FunctionT
auto val = builder.CreateCall(target, CallArgs);
builder.CreateRet(val);
}
-
+#endif
+void emitFloat16Wrappers(Module &M, bool external);
// takes the running content that has collected in the shadow module and dump it to disk
// this builds the object file portion of the sysimage files for fast startup
@@ -1003,6 +1006,7 @@ static void add_output_impl(Module &M, TargetMachine &SourceTM, std::string *out
}
if (inject_crt) {
+#if JULIA_FLOAT16_ABI == 1
// We would like to emit an alias or an weakref alias to redirect these symbols
// but LLVM doesn't let us emit a GlobalAlias to a declaration...
// So for now we inject a definition of these functions that calls our runtime
@@ -1018,6 +1023,9 @@ static void add_output_impl(Module &M, TargetMachine &SourceTM, std::string *out
FunctionType::get(Type::getHalfTy(Context), { Type::getFloatTy(Context) }, false));
injectCRTAlias(M, "__truncdfhf2", "julia__truncdfhf2",
FunctionType::get(Type::getHalfTy(Context), { Type::getDoubleTy(Context) }, false));
+#else
+ emitFloat16Wrappers(M, false);
+#endif
#if defined(_OS_WINDOWS_)
// Windows expect that the function `_DllMainStartup` is present in an dll.
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 329c4b452a9dc..f4b0fd518cd39 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -5818,6 +5818,7 @@ static void emit_cfunc_invalidate(
prepare_call_in(gf_thunk->getParent(), jlapplygeneric_func));
}
+#include <iostream>
static Function* gen_cfun_wrapper(
Module *into, jl_codegen_params_t &params,
const function_sig_t &sig, jl_value_t *ff, const char *aliasname,
@@ -8704,6 +8705,58 @@ static JuliaVariable *julia_const_gv(jl_value_t *val)
return nullptr;
}
+// Handle FLOAT16 ABI v2
+#if JULIA_FLOAT16_ABI == 2
+static void makeCastCall(Module &M, StringRef wrapperName, StringRef calledName, FunctionType *FTwrapper, FunctionType *FTcalled, bool external)
+{
+ Function *calledFun = M.getFunction(calledName);
+ if (!calledFun) {
+ calledFun = Function::Create(FTcalled, Function::ExternalLinkage, calledName, M);
+ }
+ auto linkage = external ? Function::ExternalLinkage : Function::InternalLinkage;
+ auto wrapperFun = Function::Create(FTwrapper, linkage, wrapperName, M);
+ wrapperFun->addFnAttr(Attribute::AlwaysInline);
+ llvm::IRBuilder<> builder(BasicBlock::Create(M.getContext(), "top", wrapperFun));
+ SmallVector<Value *, 4> CallArgs;
+ if (wrapperFun->arg_size() != calledFun->arg_size()){
+ llvm::errs() << "FATAL ERROR: Can't match wrapper to called function";
+ abort();
+ }
+ for (auto wrapperArg = wrapperFun->arg_begin(), calledArg = calledFun->arg_begin();
+ wrapperArg != wrapperFun->arg_end() && calledArg != calledFun->arg_end(); ++wrapperArg, ++calledArg)
+ {
+ CallArgs.push_back(builder.CreateBitCast(wrapperArg, calledArg->getType()));
+ }
+ auto val = builder.CreateCall(calledFun, CallArgs);
+ auto retval = builder.CreateBitCast(val,wrapperFun->getReturnType());
+ builder.CreateRet(retval);
+}
+
+void emitFloat16Wrappers(Module &M, bool external)
+{
+ auto &ctx = M.getContext();
+ makeCastCall(M, "__gnu_h2f_ieee", "julia__gnu_h2f_ieee", FunctionType::get(Type::getFloatTy(ctx), { Type::getHalfTy(ctx) }, false),
+ FunctionType::get(Type::getFloatTy(ctx), { Type::getInt16Ty(ctx) }, false), external);
+ makeCastCall(M, "__extendhfsf2", "julia__gnu_h2f_ieee", FunctionType::get(Type::getFloatTy(ctx), { Type::getHalfTy(ctx) }, false),
+ FunctionType::get(Type::getFloatTy(ctx), { Type::getInt16Ty(ctx) }, false), external);
+ makeCastCall(M, "__gnu_f2h_ieee", "julia__gnu_f2h_ieee", FunctionType::get(Type::getHalfTy(ctx), { Type::getFloatTy(ctx) }, false),
+ FunctionType::get(Type::getInt16Ty(ctx), { Type::getFloatTy(ctx) }, false), external);
+ makeCastCall(M, "__truncsfhf2", "julia__gnu_f2h_ieee", FunctionType::get(Type::getHalfTy(ctx), { Type::getFloatTy(ctx) }, false),
+ FunctionType::get(Type::getInt16Ty(ctx), { Type::getFloatTy(ctx) }, false), external);
+ makeCastCall(M, "__truncdfhf2", "julia__truncdfhf2", FunctionType::get(Type::getHalfTy(ctx), { Type::getDoubleTy(ctx) }, false),
+ FunctionType::get(Type::getInt16Ty(ctx), { Type::getDoubleTy(ctx) }, false), external);
+}
+
+static void init_f16_funcs(void)
+{
+ auto ctx = jl_ExecutionEngine->acquireContext();
+ auto TSM = jl_create_ts_module("F16Wrappers", ctx, imaging_default());
+ auto aliasM = TSM.getModuleUnlocked();
+ emitFloat16Wrappers(*aliasM, true);
+ jl_ExecutionEngine->addModule(std::move(TSM));
+}
+#endif
+
static void init_jit_functions(void)
{
add_named_global(jlstack_chk_guard_var, &__stack_chk_guard);
@@ -8942,6 +8995,9 @@ extern "C" JL_DLLEXPORT void jl_init_codegen_impl(void)
jl_init_llvm();
// Now that the execution engine exists, initialize all modules
init_jit_functions();
+#if JULIA_FLOAT16_ABI == 2
+ init_f16_funcs();
+#endif
}
extern "C" JL_DLLEXPORT void jl_teardown_codegen_impl() JL_NOTSAFEPOINT
diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp
index 37302e8ca2ace..b3ec102821858 100644
--- a/src/jitlayers.cpp
+++ b/src/jitlayers.cpp
@@ -1383,6 +1383,7 @@ JuliaOJIT::JuliaOJIT()
JD.addToLinkOrder(GlobalJD, orc::JITDylibLookupFlags::MatchExportedSymbolsOnly);
+#if JULIA_FLOAT16_ABI == 1
orc::SymbolAliasMap jl_crt = {
{ mangle("__gnu_h2f_ieee"), { mangle("julia__gnu_h2f_ieee"), JITSymbolFlags::Exported } },
{ mangle("__extendhfsf2"), { mangle("julia__gnu_h2f_ieee"), JITSymbolFlags::Exported } },
@@ -1391,6 +1392,7 @@ JuliaOJIT::JuliaOJIT()
{ mangle("__truncdfhf2"), { mangle("julia__truncdfhf2"), JITSymbolFlags::Exported } }
};
cantFail(GlobalJD.define(orc::symbolAliases(jl_crt)));
+#endif
#ifdef MSAN_EMUTLS_WORKAROUND
orc::SymbolMap msan_crt;
diff --git a/src/llvm-version.h b/src/llvm-version.h
index 4e15e787b7de8..a3f3774b6dc15 100644
--- a/src/llvm-version.h
+++ b/src/llvm-version.h
@@ -2,6 +2,7 @@
#include <llvm/Config/llvm-config.h>
#include "julia_assert.h"
+#include "platform.h"
// The LLVM version used, JL_LLVM_VERSION, is represented as a 5-digit integer
// of the form ABBCC, where A is the major version, B is minor, and C is patch.
@@ -17,6 +18,15 @@
#define JL_LLVM_OPAQUE_POINTERS 1
#endif
+// Pre GCC 12 libgcc defined the ABI for Float16->Float32
+// to take an i16. GCC 12 silently changed the ABI to now pass
+// Float16 in Float32 registers.
+#if JL_LLVM_VERSION < 150000 || defined(_CPU_PPC64_) || defined(_CPU_PPC_)
+#define JULIA_FLOAT16_ABI 1
+#else
+#define JULIA_FLOAT16_ABI 2
+#endif
+
#ifdef __cplusplus
#if defined(__GNUC__) && (__GNUC__ >= 9)
// Added in GCC 9, this warning is annoying

View File

@ -1,95 +0,0 @@
From f11bfc6ccad3e07fde4e40493635bd832d108477 Mon Sep 17 00:00:00 2001
From: Valentin Churavy <vchuravy@users.noreply.github.com>
Date: Thu, 27 Apr 2023 16:29:25 -0400
Subject: [PATCH] Use NewPM for ASAN/MSAN (#49530)
Co-authored-by: Gabriel Baraldi <baraldigabriel@gmail.com>
Co-authored-by: Prem Chintalapudi <prem.chintalapudi@gmail.com>
---
src/aotcompile.cpp | 4 ++++
src/cgmemmgr.cpp | 4 ++--
src/jitlayers.h | 13 +++++++++++--
3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp
index 2a14e2a4fa0ab..b89cdf550171f 100644
--- a/src/aotcompile.cpp
+++ b/src/aotcompile.cpp
@@ -1775,6 +1775,7 @@ void addOptimizationPasses(legacy::PassManagerBase *PM, int opt_level,
PM->add(createCFGSimplificationPass(basicSimplifyCFGOptions));
}
}
+#if JL_LLVM_VERSION < 150000
#if defined(_COMPILER_ASAN_ENABLED_)
PM->add(createAddressSanitizerFunctionPass());
#endif
@@ -1783,6 +1784,7 @@ void addOptimizationPasses(legacy::PassManagerBase *PM, int opt_level,
#endif
#if defined(_COMPILER_TSAN_ENABLED_)
PM->add(createThreadSanitizerLegacyPassPass());
+#endif
#endif
return;
}
@@ -1934,6 +1936,7 @@ void addOptimizationPasses(legacy::PassManagerBase *PM, int opt_level,
}
PM->add(createCombineMulAddPass());
PM->add(createDivRemPairsPass());
+#if JL_LLVM_VERSION < 150000
#if defined(_COMPILER_ASAN_ENABLED_)
PM->add(createAddressSanitizerFunctionPass());
#endif
@@ -1943,6 +1946,7 @@ void addOptimizationPasses(legacy::PassManagerBase *PM, int opt_level,
#if defined(_COMPILER_TSAN_ENABLED_)
PM->add(createThreadSanitizerLegacyPassPass());
#endif
+#endif
}
// An LLVM module pass that just runs all julia passes in order. Useful for
diff --git a/src/cgmemmgr.cpp b/src/cgmemmgr.cpp
index 9f4d69137c0fd..15d28ff270c55 100644
--- a/src/cgmemmgr.cpp
+++ b/src/cgmemmgr.cpp
@@ -860,8 +860,8 @@ uint8_t *RTDyldMemoryManagerJL::allocateCodeSection(uintptr_t Size,
StringRef SectionName)
{
// allocating more than one code section can confuse libunwind.
-#if !defined(_COMPILER_MSAN_ENABLED_)
- // TODO: Figure out why msan needs this.
+#if !defined(_COMPILER_MSAN_ENABLED_) && !defined(_COMPILER_ASAN_ENABLED_)
+ // TODO: Figure out why msan and now asan too need this.
assert(!code_allocated);
code_allocated = true;
#endif
diff --git a/src/jitlayers.h b/src/jitlayers.h
index 7f07034586c80..f63f3a42842f1 100644
--- a/src/jitlayers.h
+++ b/src/jitlayers.h
@@ -42,7 +42,14 @@
// and feature support (e.g. Windows, JITEventListeners for various profilers,
// etc.). Thus, we currently only use JITLink where absolutely required, that is,
// for Mac/aarch64.
-#if defined(_OS_DARWIN_) && defined(_CPU_AARCH64_) || defined(_COMPILER_ASAN_ENABLED_) || defined(JL_FORCE_JITLINK)
+// #define JL_FORCE_JITLINK
+
+#if defined(_COMPILER_ASAN_ENABLED_) || defined(_COMPILER_MSAN_ENABLED_) || defined(_COMPILER_TSAN_ENABLED_)
+# define HAS_SANITIZER
+#endif
+// The sanitizers don't play well with our memory manager
+
+#if defined(_OS_DARWIN_) && defined(_CPU_AARCH64_) || defined(JL_FORCE_JITLINK) || JL_LLVM_VERSION >= 150000 && defined(HAS_SANITIZER)
# if JL_LLVM_VERSION < 130000
# pragma message("On aarch64-darwin, LLVM version >= 13 is required for JITLink; fallback suffers from occasional segfaults")
# endif
@@ -93,7 +100,9 @@ struct OptimizationOptions {
// for middle-end IR optimizations. However, we have not qualified the new
// pass manager on our optimization pipeline yet, so this remains an optional
// define
-// #define JL_USE_NEW_PM
+#if defined(HAS_SANITIZER) && JL_LLVM_VERSION >= 150000
+#define JL_USE_NEW_PM
+#endif
struct NewPM {
std::unique_ptr<TargetMachine> TM;

View File

@ -1,19 +0,0 @@
From: Soc Virnyl Estela <contact@uncomfyhalomacro.pl>
Date: Sat, 09 Dec 2023 16:30:31 +0800
Subject: Julia uses a static variant of its libuv
Although this patch exists as a sample. This won't be used.
---
diff -ruN julia-1.9.4.orig/Make.inc julia-1.9.4/Make.inc
--- julia-1.9.4.orig/Make.inc 2023-12-08 06:25:53.640851723 +0800
+++ julia-1.9.4/Make.inc 2023-12-08 10:44:21.177558348 +0800
@@ -1116,7 +1116,7 @@
endif
ifeq ($(USE_SYSTEM_LIBUV), 1)
- LIBUV := $(LOCALBASE)/lib/libuv-julia.a
+ LIBUV := -luv
LIBUV_INC := $(LOCALBASE)/include
else
LIBUV := $(build_libdir)/libuv.a