Known issues when building SIESTA ################################# SIESTA does not recognize the compiler I want to use ---------------------------------------------------- Different environments might result in SIESTA not detecting automatically your compiler and defaulting to the GNU compiler, getting the following message:: -- The Fortran compiler identification is GNU 9.4.0 -- The C compiler identification is GNU 9.4.0 If your intention was to use other compilers, such as Intel or Cray, you can override the compiler in cmake using the ``CC``, ``FC`` and ``MPIFC`` environment variables at the configuration step. For example:: CC=icc FC=ifort MPIFC=mpiifort cmake -S. -B _build ...[Your Options Here]... In this case, this will force cmake to use the Intel compiler (if available). SIESTA does not recognize GNU ScaLAPACK --------------------------------------- In some Linux-native versions of the ScaLAPACK distribution, CMake detection might fail with the following message:: CMake Warning at CMakeLists.txt:63 (message): MPI is found, but ScaLAPACK library cannot be found (or compiled against). If parallel support is required please supply the ScaLAPACK library with appropriate flags: -DSCALAPACK_LIBRARY= In order to fix this, the cmake variable -DSCALAPACK_LIBRARY must be explicitly set to ``-DSCALAPACK_LIBRARY="-lscalapack-openmpi"`` (or the appropriate ScaLAPACK version in your system):: cmake -S. -B _build ...[Your Options Here]... -DSCALAPACK_LIBRARY="-lscalapack-openmpi" SIESTA does not recognize Intel MKL libraries --------------------------------------------- When using Intel-provided compilers and libraries (such as OneAPI), you might need to set the name for linear algebra libraries manually:: cmake -S. -B _build ...[Your Options Here]... \ -DLAPACK_LIBRARY="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core" \ -DSCALAPACK_LIBRARY="-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core" SIESTA with PEXSI does not recognize MPI functions -------------------------------------------------- When installing SIESTA with the provided ELSI-PEXSI support, you might come across a variant of this error:: /usr/bin/ld: _deps/elsi-build/lib/libpexsi.a(interface.cpp.o): in function `MPI::Op::Init(void (*)(void const*, void*, int, MPI::Datatype const&), bool)': interface.cpp:(.text._ZN3MPI2Op4InitEPFvPKvPviRKNS_8DatatypeEEb[_ZN3MPI2Op4InitEPFvPKvPviRKNS_8DatatypeEEb]+0x1d): undefined reference to `ompi_mpi_cxx_op_intercept' /usr/bin/ld: _deps/elsi-build/lib/libpexsi.a(interface.cpp.o): in function `MPI::Intracomm::Clone() const': interface.cpp:(.text._ZNK3MPI9Intracomm5CloneEv[_ZNK3MPI9Intracomm5CloneEv]+0x40): undefined reference to `MPI::Comm::Comm()' /usr/bin/ld: _deps/elsi-build/lib/libpexsi.a(interface.cpp.o): in function `MPI::Graphcomm::Clone() const': interface.cpp:(.text._ZNK3MPI9Graphcomm5CloneEv[_ZNK3MPI9Graphcomm5CloneEv]+0x3a): undefined reference to `MPI::Comm::Comm()' This is because CMake fails to recognize the proper MPI-C++ compiler wrapper. You can solve this by explicitly providing the compiler via `-DCMAKE_CXX_COMPILER`:: cmake -S. -B _build ...[Your Options Here]... \ -DCMAKE_CXX_COMPILER=mpicxx For Intel compilers, you should use `mpiicpc` instead. MPI_COMM_WORLD has not been declared or is a variable ----------------------------------------------------- This error might appear with old implementations of OpenMPI or with forked implementations of the standard (such as Fujitsu). The error looks like this:: mpi_siesta.F90:65:44: MPI_COMM_TYPE, public :: MPI_Comm_World = true_MPI_Comm_World Error: Parameter 'true_mpi_comm_world' at (1) has not been declared or is a variable, which does not reduce to a constant expression The workaround is to set the SIESTA_WITH_MPI_INTERFACES variable to "legacy" when configuring SIESTA with cmake:: cmake -S. -B _build ...[Your Options Here]... -DSIESTA_WITH_MPI_INTERFACES=legacy Issues with Cray compilers -------------------------- There are few known issues when compiling SIESTA with Cray compilers. * Compilation with debug information "-g" fails for Cray Compiler versions lower than 14.0.3. * For Cray versions 15.0 or higher available on certain systems, it might be mandatory to manually add a compiler flag for OpenMP compilations. For example:: cmake -S. -B _build ...[Your Options Here]... -DFortran_FLAGS="-fopenmp" Missing readline (FLOOK) ------------------------ CMake configuration may fail with an error similar to this one:: CMake Error at External/Lua-Engine/CMakeLists.txt:49 (find_library): Could not find _flook_lib_readline using the following names: readline Call Stack (most recent call first): External/Lua-Engine/CMakeLists.txt:229 (flook_add_dependencies) This happens when you are missing the `readline package `_ in your system. You can either disable FLOOK for your compilation if you don't need it (``-DSIESTA_WITH_FLOOK=off``), or install readline. In modern Debian-based distributions such as Ubuntu this is as easy as:: apt install readline-common libreadline8