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:
commit
35071ccf6f
33797
UnicodeData.txt
Normal file
33797
UnicodeData.txt
Normal file
File diff suppressed because it is too large
Load Diff
21
disable-doc-gen-in-makefile.patch
Normal file
21
disable-doc-gen-in-makefile.patch
Normal 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
|
11
disable-download-of-unicode-for-doc-gen.patch
Normal file
11
disable-download-of-unicode-for-doc-gen.patch
Normal 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
3
julia-1.10.3-full.tar.gz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d892b2123be64dacf9d05e4ccbad7f1797f6bf87c397a74804b011c8750f6c8f
|
||||
size 318660498
|
17
julia-1.10.3-full.tar.gz.asc
Normal file
17
julia-1.10.3-full.tar.gz.asc
Normal 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-----
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:61843b9647fd06d3b2994f3277a64de1cb5a5a5297d930b8c8e3bc0e93740024
|
||||
size 294983229
|
@ -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__()
|
||||
|
@ -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)
|
@ -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);
|
||||
|
29
julia-remove-libcholmod_cuda.patch
Normal file
29
julia-remove-libcholmod_cuda.patch
Normal 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
|
@ -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*")
|
||||
|
@ -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
|
371
julia.changes
371
julia.changes
@ -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
51
julia.keyring
Normal 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-----
|
585
julia.spec
585
julia.spec
@ -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
|
||||
|
||||
|
@ -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__()
|
@ -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
|
@ -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
|
@ -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__()
|
25
mpfr-looking-for-gmp-fix.patch
Normal file
25
mpfr-looking-for-gmp-fix.patch
Normal 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
|
@ -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:
|
@ -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 ¶ms,
|
||||
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
|
@ -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;
|
@ -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
|
Loading…
Reference in New Issue
Block a user