Building ALM using conda

ALM is written in C++. To build it, a set of build tools is needed. Currently using conda gives a relatively simple and uniform way to perform building the ALM python module, ALM library for C++, and ALMM command executable. In this documentation, it is presented a step-by-step procedure to build them using conda.

Preparing build tools by conda

At first, it is recommended to prepare a conda environment by:

% conda create --name alm -c conda-forge python=3.7

Here the name of the conda environment is chosen alm. The detailed instruction about the conda environment is found here. For linux and macOS, compilers provided by conda are different. Then to build ALM on linux or macOS, the following conda packages are installed by

For linux

% conda install -c conda-forge gcc_linux-64 gxx_linux-64 h5py scipy numpy boost eigen cmake spglib ipython

For macOS

% conda install -c conda-forge clang_osx-64 clangxx_osx-64 llvm-openmp cmake boost eigen numpy scipy h5py spglib ipython

Building ALM

Now the directory structure supposed in this document is shown as below:

$HOME
|-- alm
|   `-- ALM
|       |-- bin/
|       |-- include/
|       |-- lib/
|       |-- python/setup.py
|       |-- src/
|       |-- _build/
|       |-- CMakeLists.txt
|       |-- CMakeLists.txt.conda
|       `-- ...
|
|-- $CONDA_PREFIX/include
|-- $CONDA_PREFIX/include/eigen3
|-- $CONDA_PREFIX/lib
`-- ...

alm directory is created by us and we move to this directory. Now we are in $HOME/alm. In this direcotry, ALM is downloaded from github. ALM directorie is created running the following commands:

% git clone https://github.com/ttadano/ALM.git

Make sure that you are using develop branch by

% cd ALM
% git branch
* develop

When this is done on $HOME/ALM, the above directory structure is made. If git command doesn’t exist in your system, it is also obtained from conda by conda install git.

Building ALM python module

The ALM python module is built on the directory $HOME/alm/ALM/python. So first you have to move to this directory. The build and installation in the user directory is done by

% python setup.py build
% pip install -e .

Building ALM executable and C++ library

If you need only ALM python module, this section can be skipped.

Let’s assume we are in the directory $HOME/alm/ALM (see above directory structure). The ALM library for C++ is built using cmake. The cmake’s configuration file has to have the filename CMakeLists.txt. So its example of CMakeLists.txt.conda is renamed to CMakeLists.txt, i.e.,

% cp CMakeLists.txt.conda CMakeLists.txt

Then this CMakeLists.txt may be modified appropriately when the following compilation fails. Using this CMakeLists.txt, the ALM library for c++ is built for Linux by

% mkdir _build && cd _build
% cmake ..
% make -j4
% make install

and for macOS

% mkdir _build && cd _build
% cmake -DCMAKE_C_COMPILER='clang' -DCMAKE_CXX_COMPILER='clang++' ..
% make -j4
% make install

To see detailed make log, -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON option for cmake should be added.

The dynamic and static link libraries and the head file are installed at

  • $HOME/alm/ALM/lib/libalmcxx.dylib or $HOME/alm/ALM/lib/libalmcxx.so
  • $HOME/alm/ALM/lib/libalmcxx.a
  • $HOME/alm/ALM/include/alm.h

The executable is found at

  • $HOME/alm/ALM/bin/alm

To use the dynamic link library, it may be necessary to set $LD_LIBRARY_PATH to

% export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$HOME/alm/ALM/lib:$LD_LIBRARY_PATH

and to use the executable

% export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH