libinstaller/README.md

82 lines
4.6 KiB
Markdown
Raw Normal View History

2022-09-18 20:45:42 +02:00
# libinstaller
2022-09-29 19:44:06 +02:00
This Python tool has been developed to automate the installation of libraries frequently used by HPC applications.
## Basic Usage
To install the library `<lib>` using compiler `<compiler>` and MPI `<mpi>` make sure to have a configuration file `<lib>.json` in the `config` directory and invoke the tool as follows:
```
./libinstaller --compiler <compiler> --mpi <mpi> --<lib>
2022-09-29 19:44:06 +02:00
```
To install all libraries with build recipes in `config`:
```
2022-09-29 21:52:31 +02:00
./libinstaller --compiler <compiler> --mpi <mpi> --all
2022-09-29 19:44:06 +02:00
```
For further supported options and their default values, please have a look at `./libinstaller -h`:
2022-09-29 19:44:06 +02:00
```
usage: libinstaller [-h] [--config CONFIG] [--prefix PREFIX] [--src SRC] [--work WORK] [--keep-work] [--compiler COMPILER] [--mpi MPI] [--threads THREADS] [--verbose] [--separate-lib64] [--disable-shared] [--all]
2022-09-29 19:44:06 +02:00
options:
-h, --help show this help message and exit
--config CONFIG Path to config directory [$pwd/config]
--prefix PREFIX Path where install directory should be generated [$pwd]
--src SRC Path where to download source code to [$pwd/src]
--work WORK Path to working directory for builds [$pwd/work]
--keep-work Disable removal of work directory after successful builds
--compiler COMPILER Select compiler (gnu, intel, aocc) [gnu]
--mpi MPI Select compiler (hpcx, intelmpi, openmpi) [hpcx]
--threads THREADS Number of threads used for make [8]
--verbose Print build output to screen instead piping it to logfile
--separate-lib64 Do not create symbolic links of files from lib64 in lib
--disable-shared Disable building of shared libraries
--all Install all libraries with config file in config/
```
Per library configuration available in `config`, the corresponding `--<lib>` and `--<lib>-version`options are added automatically, eg:
```
--hdf5 Enable build of hdf5
--hdf5-version HDF5_VERSION Set hdf5 version [1.13.2]
```
The name of the installation directory is automatically generated and has the form
```
<prefix>/inst-<compiler>_<compiler_version>_<mpi>_<mpi_version>
```
## Library configuration files
The `config` directory contains various json files describing how to obtain and build the corresponding library. It must have the following structure (all keys are mandantory):
```
{
"name" : "mylib",
"dependencies" : "lib_a,lib_b",
"default version" : "x.y.z",
"download" : "git clone --depth 1 --branch hdf5-$VERSION https://myurl.com/mylib.git mylib-$VERSION",
"configure" : "autoreconf -fi ; ./configure --config-option --prefix=$PREFIX $SHARED",
"build" : "make -j $BUILDTHREADS",
"install" : "make install",
"object files" : "123"
}
```
### name, default version
On startup, the installer tool will read the configuration files in `config` and add coreesponding options to the argument parser. In case `--<lib>-version` is not set, the default version from the json file is used.
### dependencies
Dependencies are used to determine the best installation order of selected librarie to satisfy all dependencies. Note that it is assumed that you supply needed dependencies via `LD_LIBRARY_PATH` in case they are not part of the current install.
Also note that `$PREFIX/lib` is automatically added to `LD_LIBRARY_PATH`
### download
Download command. This is being executed in a subshell. Make sure that it works in the shell used to start libinstaller.
The command may contain the variables `$VERSION` which will be replaced by the selected code version of the form `XXX.YYY.ZZZ` or `$VERSION_UNDERSCORE` which will be replaced by `XXX_YYY_ZZZ`.
The files will be downloaded to the `<src>`directory
### configure
Configure command. This is being executed in a subshell. Make sure that it works in the shell used to start libinstaller.
The variable `$PREFIX` will be replaced by the installation directory. The vairable `$SHARED` will be replaced by `--disable-shared` in case the respective option is set when invoking libinstaller.
### build
Build command. This is being executed in a subshell. Make sure that it works in the shell used to start libinstaller.
The variable `$BUILDTHREADS` will be replaced by the number of threads set when invoking libinstaller (`--threads`).
### install
Build command. This is being executed in a subshell. Make sure that it works in the shell used to start libinstaller.
The variable `$PREFIX` will be replaced by the installation directory.
### object files
The number of `*.o` files generated during compilation. It will be used to draw progress bars in case `--verbose` is not set.