You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: README.md
+28-4
Original file line number
Diff line number
Diff line change
@@ -294,15 +294,15 @@ Building Julia requires that the following software be installed:
294
294
295
295
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`:
296
296
297
-
-**[LLVM]** (3.9) — compiler infrastructure.
297
+
-**[LLVM]** (3.9 + patches) — compiler infrastructure (see [note below](#llvm)).
298
298
-**[FemtoLisp]** — packaged with Julia source, and used to implement the compiler front-end.
-**[OpenLibm]** — portable libm library containing elementary math functions.
301
301
-**[DSFMT]** — fast Mersenne Twister pseudorandom number generator library.
302
-
-**[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).
302
+
-**[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)).
303
303
-**[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.
304
304
-**[MKL]** (optional) – OpenBLAS and LAPACK may be replaced by Intel's MKL library.
305
-
-**[SuiteSparse]** (>= 4.1) — library of linear algebra routines for sparse matrices.
305
+
-**[SuiteSparse]** (>= 4.1) — library of linear algebra routines for sparse matrices (see [note below](#suitesparse)).
306
306
-**[ARPACK]** — collection of subroutines designed to solve large, sparse eigenvalue problems.
Package maintainers will typically want to make use of system libraries where possible. Please refer to the above version requirements and additional notes below. A list of maintained Julia packages for various platforms is available at https://julialang.org/downloads/platform.html.
354
+
350
355
### System Provided Libraries
351
356
352
357
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`.
353
358
354
359
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.
355
360
361
+
### LLVM
362
+
363
+
The most complicated dependency is LLVM, for which we require version 3.9 with some additional patches from upstream (LLVM is not backward compatible). For packaging Julia, we recommend either:
364
+
- bundling a Julia-only LLVM library inside the Julia package, or
365
+
- adding the patches to the LLVM 3.9 package of the distribution.
366
+
* A complete list of patches is available in `deps/llvm.mk`, and the patches themselves are in `deps/patches/`.
367
+
* The only Julia-specific patch is the lib renaming (`llvm-symver-jlprefix.patch`), which should _not_ be applied to a system LLVM.
368
+
* The remaining patches are all upstream bug fixes, and have been contributed into upstream LLVM.
369
+
370
+
Using an unpatched or different version of LLVM will result in errors and/or poor performance. Though Julia can be built with newer LLVM versions, support for this should be regarded as experimental and not suitable for packaging.
371
+
372
+
### libuv
373
+
374
+
Julia uses a custom fork of libuv. It is a small dependency, and can be safely bundled in the same package as Julia, and will not conflict with the system library. Julia builds should _not_ try to use the system libuv.
375
+
376
+
### BLAS and LAPACK
377
+
378
+
As a high-performance numerical language, Julia should be linked to a multi-threaded BLAS and LAPACK, such as OpenBLAS or ATLAS, which will provide much better performance than the reference `libblas` implementations which may be default on some systems.
379
+
356
380
### SuiteSparse
357
381
358
382
SuiteSparse is a special case, since it is typically only installed as a static library, while `USE_SYSTEM_SUITESPARSE=1` requires that it is a shared library. Running the script `contrib/repackage_system_suitesparse4.make` will copy your static system SuiteSparse installation into the shared library format required by Julia. `make USE_SYSTEM_SUITESPARSE=1` will then use the SuiteSparse that has been copied into Julia's directory, but will not build a new SuiteSparse library from scratch.
0 commit comments