-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Add notes for package maintainers #25912
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 8 commits
5be21a9
a5c1d79
bc026a0
ea24f56
7b0d032
501bff0
0e7526d
9534d93
3e10b43
a3f39c6
665035a
0d1846e
5fa9587
59c26e7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
|
|
@@ -294,15 +294,15 @@ Building Julia requires that the following software be installed: | |||||||
|
|
||||||||
| Julia uses the following external libraries, which are automatically downloaded (or in a few cases, included in the Julia source repository) and then compiled from source the first time you run `make`: | ||||||||
|
|
||||||||
| - **[LLVM]** (3.9) — compiler infrastructure. | ||||||||
| - **[LLVM]** (3.9 + patches) — compiler infrastructure (see [note below](#llvm)). | ||||||||
| - **[FemtoLisp]** — packaged with Julia source, and used to implement the compiler front-end. | ||||||||
| - **[libuv]** — portable, high-performance event-based I/O library. | ||||||||
| - **[libuv]** (custom fork) — portable, high-performance event-based I/O library. | ||||||||
| - **[OpenLibm]** — portable libm library containing elementary math functions. | ||||||||
| - **[DSFMT]** — fast Mersenne Twister pseudorandom number generator library. | ||||||||
| - **[OpenBLAS]** — fast, open, and maintained [basic linear algebra subprograms (BLAS)](https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms) library, based on [Kazushige Goto's](https://en.wikipedia.org/wiki/Kazushige_Goto) famous [GotoBLAS](https://www.tacc.utexas.edu/research-development/tacc-software/gotoblas2). | ||||||||
| - **[OpenBLAS]** — fast, open, and maintained [basic linear algebra subprograms (BLAS)](https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms) library, based on [Kazushige Goto's](https://en.wikipedia.org/wiki/Kazushige_Goto) famous [GotoBLAS](https://www.tacc.utexas.edu/research-development/tacc-software/gotoblas2) (see [note below](#blas-and-lapack)). | ||||||||
| - **[LAPACK]** (>= 3.5) — library of linear algebra routines for solving systems of simultaneous linear equations, least-squares solutions of linear systems of equations, eigenvalue problems, and singular value problems. | ||||||||
| - **[MKL]** (optional) – OpenBLAS and LAPACK may be replaced by Intel's MKL library. | ||||||||
| - **[SuiteSparse]** (>= 4.1) — library of linear algebra routines for sparse matrices. | ||||||||
| - **[SuiteSparse]** (>= 4.1) — library of linear algebra routines for sparse matrices (see [note below](#suitesparse)). | ||||||||
| - **[ARPACK]** — collection of subroutines designed to solve large, sparse eigenvalue problems. | ||||||||
| - **[PCRE]** (>= 10.00) — Perl-compatible regular expressions library. | ||||||||
| - **[GMP]** (>= 5.0) — GNU multiple precision arithmetic library, needed for `BigInt` support. | ||||||||
|
|
@@ -318,6 +318,7 @@ Julia uses the following external libraries, which are automatically downloaded | |||||||
| [patch]: http://www.gnu.org/software/patch | ||||||||
| [wget]: http://www.gnu.org/software/wget | ||||||||
| [m4]: http://www.gnu.org/software/m4 | ||||||||
| [awk]: http://www.gnu.org/software/gawk | ||||||||
| [gcc]: http://gcc.gnu.org | ||||||||
| [clang]: http://clang.llvm.org | ||||||||
| [python]: https://www.python.org/ | ||||||||
|
|
@@ -347,12 +348,41 @@ Julia uses the following external libraries, which are automatically downloaded | |||||||
| [mbedtls]: https://tls.mbed.org/ | ||||||||
| [pkg-config]: https://www.freedesktop.org/wiki/Software/pkg-config/ | ||||||||
|
|
||||||||
| ### Notes for distribution package maintainers | ||||||||
|
|
||||||||
| Package maintaners will typically want to make use of system libraries where possible. Please refer to the above version requirements and additional notes below. | ||||||||
|
|
||||||||
| Currently community maintained packages are: | ||||||||
|
||||||||
| - Fedora: [official](https://src.fedoraproject.org/rpms/julia), [Copr (for backports)](https://copr.fedorainfracloud.org/coprs/nalimilan/julia/) | ||||||||
| - [Arch](https://www.archlinux.org/packages/community/x86_64/julia/) | ||||||||
| - [Gentoo](https://packages.gentoo.org/packages/dev-lang/julia) | ||||||||
| - [Raspbian](https://github.com/JuliaBerry/julia-raspbian) | ||||||||
|
|
||||||||
| Additionally, the following unmaintained packages may still be useful: | ||||||||
| - [Homebrew](https://github.com/staticfloat/homebrew-julia) | ||||||||
| - [Ubuntu PPA](https://launchpad.net/~staticfloat/+archive/ubuntu/juliareleases) (0.5) | ||||||||
| - [Debian](https://packages.debian.org/sid/julia) (0.4) | ||||||||
|
|
||||||||
| ### System Provided Libraries | ||||||||
|
|
||||||||
| If you already have one or more of these packages installed on your system, you can prevent Julia from compiling duplicates of these libraries by passing `USE_SYSTEM_...=1` to `make` or adding the line to `Make.user`. The complete list of possible flags can be found in `Make.inc`. | ||||||||
|
|
||||||||
| Please be aware that this procedure is not officially supported, as it introduces additional variability into the installation and versioning of the dependencies, and is recommended only for system package maintainers. Unexpected compile errors may result, as the build system will do no further checking to ensure the proper packages are installed. | ||||||||
|
|
||||||||
| ### LLVM | ||||||||
|
|
||||||||
| The most complicated dependency is LLVM, for which we require version 3.9 with some additional patches (LLVM is not backward compatible). We recommend either: | ||||||||
|
||||||||
| - adding the patches to the LLVM 3.9 package of the distribution (note: these are backported upstream bug fixes, _not_ Julia-specific patches: all have been contributed into upstream LLVM), or | ||||||||
|
||||||||
| # Independent to the llvm version add a JL prefix to the version map | |
| # Depends on `llvm-D31524-sovers_4.0` for LLVM_VER==3.9 | |
| $(eval $(call LLVM_PATCH,llvm-symver-jlprefix)) # DO NOT REMOVE |
llvm is modified so that it can be used safely with other versions of llvm (4.0 or a system 3.9). This is only true for Julia 0.7+, before that collisions between the Julia version and the system version are likely.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe that note would be better if it appeared in the Makefile itself? (it does appear apart from the others)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@vchuravy Would you mind adding something to that effect (since I don't quite understand these issues)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What Valentine just said seems to conflict with the text; that sure seems like a julia-specific patch. (But does it matter if we're using distribution-packaged LLVM? We don't care about conflicts then ight?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure what this patch does exactly, but we should leave packagers deal with the issue of parallel installation of multiple LLVM versions. It's kind of complex, with some hacking and lots of options to set, and it's far beyond the scope of Julia-specific patches. If that's useful, you can point at how Fedora handles this: https://src.fedoraproject.org/rpms/llvm3.9/blob/master/f/llvm3.9.spec
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't quite understand what this means; are you saying that there are flags I can set within the Makefile to say "I'm building with LLVM 3.9 without julia patches"?
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Including an example here would be nice. Something like "For example, packages such as ATLAS or OpenBLAS will provide much higher performance than the default reference libblas".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maintaners ==> maintainers