build:configure
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
build:configure [2016/04/08 15:20] – [Linear algebra] Yann Pouillon | build:configure [2024/10/10 07:52] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <WRAP important> | ||
+ | |||
====== Configuring the build of Abinit ====== | ====== Configuring the build of Abinit ====== | ||
- | //Please read the [[wiki: | + | //Please read the [[wiki: |
+ | |||
+ | |||
+ | ===== Tutorials for beginners ===== | ||
+ | |||
+ | * {{ : | ||
===== The configure script ===== | ===== The configure script ===== | ||
Line 55: | Line 63: | ||
Please note that // | Please note that // | ||
- | If you use GCC compilers, you may sometimes want to use the // | + | <WRAP important> |
- | <WRAP important> | + | ==== LIBRARY_PATH ==== |
+ | |||
+ | If you use GCC compilers, you may sometimes want to use the // | ||
==== PYTHONPATH ==== | ==== PYTHONPATH ==== | ||
- | Python is usually installed by system administrators in a standard way on most computers. However, if you use a version of PYTHON | + | Python is usually installed by system administrators in a standard way on most computers. However, if you use custom Python modules |
==== Language-specific variables ==== | ==== Language-specific variables ==== | ||
Line 88: | Line 98: | ||
In order to accommodate as many situations as possible, we have designed a flexible mechanism to handle config files: | In order to accommodate as many situations as possible, we have designed a flexible mechanism to handle config files: | ||
* first, the build system looks into the build directory for a config file, which lets you import parameters for a specific build; | * first, the build system looks into the build directory for a config file, which lets you import parameters for a specific build; | ||
- | * if not found, it looks into the source directory, which allows | + | * if not found, it looks into the source directory, which allows |
* if still not found, it looks into the // | * if still not found, it looks into the // | ||
* finally, it looks into the // | * finally, it looks into the // | ||
- | Of these 4 possibilities, | + | Of these 4 possibilities, |
Since many developers of Abinit work on shared filesystems, | Since many developers of Abinit work on shared filesystems, | ||
Line 108: | Line 118: | ||
===== Tuning configure options ===== | ===== Tuning configure options ===== | ||
- | <WRAP tip> | + | <WRAP tip> |
- | ==== Compilers ==== | + | The build system of Abinit is quite modular and is composed of logical blocks addressing each a specific configuration issue. The following documents will help you tune the build parameters depending on what you want to adjust. |
- | Coming soon ... | + | // |
- | ==== Serial | + | // |
- | OpenMP, MPI, GPU, ... | + | // |
- | ==== Linear algebra ==== | + | // |
- | Linear algebra is the most critical dependency to consider, since Abinit could not be built nor run without it. It is also the most complex one, due to: | + | //[[build:feature_triggers|Configuring feature triggers]]// provides |
- | * the different components to select and their various interactions with external factors, e.g. using ScaLAPACK only makes sense if your environment supports MPI; | + | |
- | * the way each component is provided, e.g. one component per library or all components in one library; | + | |
- | * the tremendous diversity of the available implementations, | + | |
- | + | ||
- | It logically corresponds to the most complex core block of the build system. On one side, there are //__vendors__//, | + | |
- | + | ||
- | We have designed our implementation to cover the highest possible number of cases, while preserving a relative simplicity in the configuration of their parameters. For this, we have grouped the 3 above concepts under //flavors// that users select depending on their situations and preferences. | + | |
- | + | ||
- | Take your time to read this section and feel free to come back as many times as you wish. | + | |
- | + | ||
- | The following table summarizes the linear algebra components supported by Abinit: | + | |
- | + | ||
- | ^ Component ^ Type ^ Flavors | + | |
- | | blas | Mandatory | acml, asl, essl, atlas, mkl, netlib, openblas | Required by all other components | | + | |
- | | lapack | + | |
- | | lapacke | + | |
- | | scalapack | Optional | + | |
- | | elpa | Optional | + | |
- | | plasma | + | |
- | | magma | Optional | + | |
- | + | ||
- | By default, the build system assumes that you want the fastest possible linear algebra operations. When no linear algebra option is specified, it thus looks for each component as soon as its prerequisites are met. The only required components are BLAS and LAPACK, since Abinit relies on them in each and every situation. The other components are enabled only if their prerequisites are met, their detection succeeds, and are proved working. | + | |
- | + | ||
- | To deal more easily with the various linear algebra implementations that can be used concurrently on the same computer, Abinit provides the //with_linalg_flavor// | + | |
- | + | ||
- | <WRAP tip> | + | |
- | + | ||
- | You can tune the detection mechanism through the // | + | |
- | * by just specifying a plus-separated list of flavors, in which case the build system will figure out how to assign which flavor to which component; | + | |
- | * architecture-wise, | + | |
- | * component-wise, | + | |
- | + | ||
- | Please note that you can only use one of these 3 methods at a time. Mixes are explicitly forbidden. Omitting an architectural item or a linear algebra component | + | |
- | + | ||
- | __Example 1__: | + | |
- | < | + | |
- | will cause the build system to look for OpenBLAS for the //blas// component and use Netlib for the other ones, i.e. //lapack// for the serial case and // | + | |
- | + | ||
- | __Example 2__: | + | |
- | < | + | |
- | will cause the build system to look for Atlas for //blas//, Netlib for //lapack// and // | + | |
- | + | ||
- | __Example 3__: | + | |
- | < | + | |
- | will cause the build system to look for the //blas//, //lapack// and //elpa// components, but not for // | + | |
- | + | ||
- | The other options provide hints to the build system and determine which kinds of tests will be performed: | + | |
- | * // | + | |
- | * // | + | |
- | * // | + | |
- | * // | + | |
- | + | ||
- | ==== Optional features ==== | + | |
- | + | ||
- | The capabilities of Abinit | + | |
- | * // | + | |
- | * // | + | |
- | * // | + | |
- | * // | + | |
- | * // | + | |
- | In each of the previous items, **package** will be replaced by the names listed below. Please note that the use of // | + | |
- | + | ||
- | The // | + | |
- | < | + | |
- | * binaries in /// | + | |
- | * include files in /// | + | |
- | * libraries in /// | + | |
- | + | ||
- | The following table summarizes the available optional features of Abinit. To enable them, you will have to make sure that the corresponding [[build: | + | |
- | + | ||
- | ^ Package | + | |
- | | BigDFT | + | |
- | | ETSF_IO | + | |
- | | FoX | Mature | + | |
- | | Libpspio | + | |
- | | LibXC | Mature | + | |
- | | LibYAML | + | |
- | | Wannier90 | Mature | + | |
- | + | ||
- | The following table indicates which options are allowed for each package and whether it is enabled by default. For purely optional | + | |
- | + | ||
- | ^ Package ID ^ Default | + | |
- | | bigdft | + | |
- | | etsf_io | + | |
- | | fox | Disabled | Yes | No | Yes | Yes | | + | |
- | | libpspio | + | |
- | | libxc | Enabled | + | |
- | | libyaml | + | |
- | | wannier90 | + | |
- | + | ||
- | For instance, LibXC support is enabled by default, and there are // | + | |
- | + | ||
- | All these options cen be overridden by // | + | |
- | + | ||
- | ===== Environment variables ===== | + | |
- | Coming soon ... | + | |
- | ===== Useful configure tips and tricks ===== | ||
- | Coming soon ... |
build/configure.1460128851.txt.gz · Last modified: 2016/04/08 15:20 by Yann Pouillon