Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
352 changes: 253 additions & 99 deletions CMakeLists.txt

Large diffs are not rendered by default.

31 changes: 25 additions & 6 deletions cmake/FindFFTW.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,17 @@ endif()

macro(find_ffftw_component name lib_name lib_symbol)
# set paths to look for library
set(_FFTW_${name}_PATHS ${FFTW_${name}_ROOT} $ENV{FFTW_${name}_ROOT})
set(_FFTW_${name}_INCLUDE_PATHS)

if(DEFINED ENV{FFTW_${name}_ROOT} AND NOT "$ENV{FFTW_${name}_ROOT}" STREQUAL "")
set(_FFTW_${name}_PATHS $ENV{FFTW_${name}_ROOT})
else()
# Check for FFTW_ROOT environment variable
if(DEFINED ENV{FFTW_ROOT} AND NOT "$ENV{FFTW_ROOT}" STREQUAL "")
set(_FFTW_${name}_PATHS $ENV{FFTW_ROOT})
endif()
endif()
set(_FFTW_${name}_DEFAULT_PATH_SWITCH)


# check if FFTW is contained in BLAS library
if(TARGET BLAS::BLAS)
set(CMAKE_REQUIRED_LIBRARIES BLAS::BLAS)

Expand All @@ -50,6 +55,10 @@ macro(find_ffftw_component name lib_name lib_symbol)
endif()
endif()

# also add MKLROOT if it is defined:
if(DEFINED ENV{MKLROOT})
list(APPEND _FFTW_${name}_PATHS $ENV{MKLROOT})
endif()

if(_FFTW_${name}_PATHS)
# disable default paths if ROOT is set
Expand All @@ -69,7 +78,7 @@ macro(find_ffftw_component name lib_name lib_symbol)
FFTW_${name}_LIBRARIES
NAMES ${lib_name}
HINTS ${_FFTW_${name}_PATHS}
PATH_SUFFIXES "lib" "lib64"
PATH_SUFFIXES "lib" "lib64" "lib/x86_64-linux-gnu"
${_FFTW_${name}_DEFAULT_PATH_SWITCH}
)
endif()
Expand All @@ -84,11 +93,19 @@ macro(find_ffftw_component name lib_name lib_symbol)

# add target to link against
if(FFTW_${name}_LIBRARIES AND FFTW_${name}_INCLUDE_DIRS)
if(NOT FFTW_MESSAGE_SHOWN)
if(${FFTW_${name}_LIBRARIES} STREQUAL "BLAS::BLAS")
message(STATUS "Found FFTW library: ${FFTW_${name}_LIBRARIES} (contained in BLAS)")
else()
message(STATUS "Found FFTW library: ${FFTW_${name}_LIBRARIES}")
endif()
endif()
if(NOT TARGET FFTW::FFTW_${name})
add_library(FFTW::FFTW_${name} INTERFACE IMPORTED)
endif()
set_property(TARGET FFTW::FFTW_${name} PROPERTY INTERFACE_LINK_LIBRARIES ${FFTW_${name}_LIBRARIES})
set_property(TARGET FFTW::FFTW_${name} PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${FFTW_${name}_INCLUDE_DIRS})
set(FFTW_MESSAGE_SHOWN TRUE CACHE INTERNAL "Message shown flag")
endif()

# prevent clutter in cache
Expand Down Expand Up @@ -125,5 +142,7 @@ endforeach()

# check if found
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(FFTW REQUIRED_VARS ${FFTW_REQUIRED_VARS})
find_package_handle_standard_args(FFTW
REQUIRED_VARS ${FFTW_REQUIRED_VARS}
FAIL_MESSAGE "Could not find FFTW libraries, please specify FFTW_ROOT or set as environment variable")
MARK_AS_ADVANCED(FFTW_FOUND)
19 changes: 13 additions & 6 deletions cmake/FindLibXC.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
# LibXC::libxc

#set paths to look for library from ROOT variables.If new policy is set, find_library() automatically uses them.
set(_LibXC_PATHS)
if(NOT POLICY CMP0074)
set(_LibXC_PATHS ${LibXC_ROOT} $ENV{LibXC_ROOT})
endif()
Expand All @@ -44,15 +45,21 @@ find_path(

# check if found
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LibXC REQUIRED_VARS LibXC_INCLUDE_DIRS LibXC_LIBRARIES LibXC_FORTRAN_LIBRARIES)
find_package_handle_standard_args(LibXC
REQUIRED_VARS LibXC_INCLUDE_DIRS LibXC_LIBRARIES LibXC_FORTRAN_LIBRARIES
FAIL_MESSAGE "Could not find LibXC library, please specify LibXC_ROOT or set as environment variable")

# add target to link against
if(LibXC_FOUND)
if(NOT TARGET LibXC::libxc)
add_library(LibXC::libxc INTERFACE IMPORTED)
endif()
set_property(TARGET LibXC::libxc PROPERTY INTERFACE_LINK_LIBRARIES ${LibXC_LIBRARIES} ${LibXC_FORTRAN_LIBRARIES})
set_property(TARGET LibXC::libxc PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${LibXC_INCLUDE_DIRS})
if(NOT LIBXC_MESSAGE_SHOWN)
message(STATUS "Found LIBXC library: ${LibXC_LIBRARIES}")
endif()
set(LIBXC_MESSAGE_SHOWN TRUE CACHE INTERNAL "Message shown flag")
if(NOT TARGET LibXC::libxc)
add_library(LibXC::libxc INTERFACE IMPORTED)
endif()
set_property(TARGET LibXC::libxc PROPERTY INTERFACE_LINK_LIBRARIES ${LibXC_LIBRARIES} ${LibXC_FORTRAN_LIBRARIES})
set_property(TARGET LibXC::libxc PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${LibXC_INCLUDE_DIRS})
endif()

# prevent clutter in cache
Expand Down
19 changes: 13 additions & 6 deletions cmake/FindQD.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
# QD::qd

#set paths to look for library from ROOT variables.If new policy is set, find_library() automatically uses them.
set(_QD_PATHS)
if(NOT POLICY CMP0074)
set(_QD_PATHS ${QD_ROOT} $ENV{QD_ROOT})
endif()
Expand Down Expand Up @@ -55,15 +56,21 @@ find_path(

# check if found
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(QD REQUIRED_VARS QD_INCLUDE_DIRS QD_LIBRARIES QD_FORTRAN_LIBRARIES)
find_package_handle_standard_args(QD
REQUIRED_VARS QD_INCLUDE_DIRS QD_LIBRARIES QD_FORTRAN_LIBRARIES
FAIL_MESSAGE "Could not find QD library, please specify QD_ROOT or set as environment variable")

# add target to link against
if(QD_FOUND)
if(NOT TARGET QD::qd)
add_library(QD::qd INTERFACE IMPORTED)
endif()
set_property(TARGET QD::qd PROPERTY INTERFACE_LINK_LIBRARIES ${QD_LIBRARIES} ${QD_FORTRAN_LIBRARIES})
set_property(TARGET QD::qd PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${QD_INCLUDE_DIRS})
if(NOT QD_MESSAGE_SHOWN)
message(STATUS "Found QD library: ${QD_LIBRARIES}")
endif()
set(QD_MESSAGE_SHOWN TRUE CACHE INTERNAL "Message shown flag")
if(NOT TARGET QD::qd)
add_library(QD::qd INTERFACE IMPORTED)
endif()
set_property(TARGET QD::qd PROPERTY INTERFACE_LINK_LIBRARIES ${QD_LIBRARIES} ${QD_FORTRAN_LIBRARIES})
set_property(TARGET QD::qd PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${QD_INCLUDE_DIRS})
endif()

# prevent clutter in cache
Expand Down
121 changes: 74 additions & 47 deletions cmake/FindSCALAPACK.cmake
Original file line number Diff line number Diff line change
@@ -1,65 +1,92 @@
#.rst:
# FindSCALAPACK
# -----------
#
# This module searches for the ScaLAPACK library.
#
# The following variables are set
#
# ::
#
# SCALAPACK_FOUND - True if double precision ScaLAPACK library is found
# SCALAPACK_FLOAT_FOUND - True if single precision ScaLAPACK library is found
# SCALAPACK_LIBRARIES - The required libraries
# SCALAPACK_INCLUDE_DIRS - The required include directory
#
# The following import target is created
#
# ::
#
# SCALAPACK::SCALAPACK



# set paths to look for library
set(_SCALAPACK_PATHS ${SCALAPACK_ROOT} $ENV{SCALAPACK_ROOT})
set(MKLROOT $ENV{MKLROOT})
set(_SCALAPACK_INCLUDE_PATHS)

set(_SCALAPACK_DEFAULT_PATH_SWITCH)

# First try to see if the user has its own build scalapack library and prioritize it
if(_SCALAPACK_PATHS)
# disable default paths if ROOT is set
set(_SCALAPACK_DEFAULT_PATH_SWITCH NO_DEFAULT_PATH)
# disable default paths if ROOT is set
set(_SCALAPACK_DEFAULT_PATH_SWITCH NO_DEFAULT_PATH)
else()
# try to detect location with pkgconfig
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PKG_SCALAPACK QUIET "scalapack")
endif()
set(_SCALAPACK_PATHS ${PKG_SCALAPACK_LIBRARY_DIRS})
set(_SCALAPACK_INCLUDE_PATHS ${PKG_SCALAPACK_INCLUDE_DIRS})
# try to detect location with pkgconfig
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PKG_SCALAPACK QUIET "scalapack")
endif()
set(_SCALAPACK_PATHS ${PKG_SCALAPACK_LIBRARY_DIRS})
set(_SCALAPACK_INCLUDE_PATHS ${PKG_SCALAPACK_INCLUDE_DIRS})
endif()

find_library(
SCALAPACK_LIBRARIES
NAMES "scalapack" "scalapack-mpich" "scalapack-openmpi"
HINTS ${_SCALAPACK_PATHS}
PATH_SUFFIXES "lib" "lib64"
${_SCALAPACK_DEFAULT_PATH_SWITCH}
SCALAPACK_LIBRARIES
NAMES scalapack scalapack-mpich scalapack-openmpi
HINTS ${_SCALAPACK_PATHS}
PATH_SUFFIXES "lib" "lib64"
${_SCALAPACK_DEFAULT_PATH_SWITCH}
)

# check if found
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SCALAPACK REQUIRED_VARS SCALAPACK_LIBRARIES )
# if we did not find it yet and LAPACK is provided by Intel MKL try this
if(NOT SCALAPACK_LIBRARIES AND LAPACK_LIBRARIES MATCHES "mkl")

# check first if we are using openmpi
set (MPI_IS_OMPI FALSE)
execute_process(COMMAND grep -i "OMPI_MPI" ${MPI_Fortran_F77_HEADER_DIR}/mpi.h
RESULT_VARIABLE MPI_GREP_RESULT
OUTPUT_QUIET
ERROR_QUIET)

if(MPI_GREP_RESULT EQUAL 0)
set(MPI_MODE openmpi)
else()
set(MPI_MODE intelmpi)
endif()

# now check if lapack is lp or ilp and use scalapack from mkl
if(LAPACK_LIBRARIES MATCHES "ilp64")
set(MKL_SCALAPACK_NAMES mkl_scalapack_ilp64)
set(MKL_BLACS_MPI_NAMES mkl_blacs_${$MPI_MODE}_ilp64)
else()
set(MKL_SCALAPACK_NAMES mkl_scalapack_lp64)
set(MKL_BLACS_MPI_NAMES mkl_blacs_${MPI_MODE}_lp64)
endif()

find_library(
MKL_SCALAPACK_LIBRARY
NAMES ${MKL_SCALAPACK_NAMES}
HINTS ${_SCALAPACK_PATHS} ${MKLROOT}
PATH_SUFFIXES "lib" "lib64" "lib/intel64"
)

find_library(
MKL_BLACS_LIBRARY
NAMES ${MKL_BLACS_MPI_NAMES}
HINTS ${_SCALAPACK_PATHS} ${MKLROOT}
PATH_SUFFIXES "lib" "lib64" "lib/intel64"
)

if(MKL_SCALAPACK_LIBRARY AND MKL_BLACS_LIBRARY)
if(NOT SCALAPACK_MESSAGE_SHOWN)
message(STATUS "Found ScaLAPACK provided via Intel MKL")
endif()
set(SCALAPACK_LIBRARIES ${MKL_SCALAPACK_LIBRARY} ${MKL_BLACS_LIBRARY})
else()
message(STATUS "Could not find Intel MKL Scalapack or BLACS libraries")
endif()
endif()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SCALAPACK
REQUIRED_VARS SCALAPACK_LIBRARIES
FAIL_MESSAGE "Could not find ScaLAPACK, please specify SCALAPACK_ROOT or set as environment variable")

# add target to link against
if(SCALAPACK_FOUND)
if(NOT TARGET SCALAPACK::SCALAPACK)
add_library(SCALAPACK::SCALAPACK INTERFACE IMPORTED)
endif()
set_property(TARGET SCALAPACK::SCALAPACK PROPERTY INTERFACE_LINK_LIBRARIES ${SCALAPACK_LIBRARIES})
if(NOT TARGET SCALAPACK::SCALAPACK)
add_library(SCALAPACK::SCALAPACK INTERFACE IMPORTED)
endif()
set_property(TARGET SCALAPACK::SCALAPACK PROPERTY INTERFACE_LINK_LIBRARIES ${SCALAPACK_LIBRARIES})
set(SCALAPACK_MESSAGE_SHOWN TRUE CACHE INTERNAL "Message shown flag")
endif()

# prevent clutter in cache
MARK_AS_ADVANCED(SCALAPACK_FOUND SCALAPACK_LIBRARIES SCALAPACK_INCLUDE_DIRS pkgcfg_lib_PKG_SCALAPACK_scalapack )
mark_as_advanced(SCALAPACK_FOUND SCALAPACK_LIBRARIES SCALAPACK_INCLUDE_DIRS pkgcfg_lib_PKG_SCALAPACK_scalapack )
19 changes: 13 additions & 6 deletions cmake/FindWANNIER90.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
# WANNIER90::wannier90

#set paths to look for library from ROOT variables.If new policy is set, find_library() automatically uses them.
set(_WANNIER90_PATHS)
if(NOT POLICY CMP0074)
set(_WANNIER90_PATHS ${WANNIER90_ROOT} $ENV{WANNIER90_ROOT})
endif()
Expand All @@ -38,15 +39,21 @@ find_path(

# check if found
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(WANNIER90 REQUIRED_VARS WANNIER90_INCLUDE_DIRS WANNIER90_LIBRARIES)
find_package_handle_standard_args(WANNIER90
REQUIRED_VARS WANNIER90_INCLUDE_DIRS WANNIER90_LIBRARIES
FAIL_MESSAGE "Could not find Wannier90 library, please specify WANNIER90_ROOT or set as environment variable")

# add target to link against
if(WANNIER90_FOUND)
if(NOT TARGET WANNIER90::wannier90)
add_library(WANNIER90::wannier90 INTERFACE IMPORTED)
endif()
set_property(TARGET WANNIER90::wannier90 PROPERTY INTERFACE_LINK_LIBRARIES ${WANNIER90_LIBRARIES})
set_property(TARGET WANNIER90::wannier90 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${WANNIER90_INCLUDE_DIRS})
if(NOT W90_MESSAGE_SHOWN)
message(STATUS "Found Wannier90 library: ${WANNIER90_LIBRARIES}")
endif()
set(W90_MESSAGE_SHOWN TRUE CACHE INTERNAL "Message shown flag")
if(NOT TARGET WANNIER90::wannier90)
add_library(WANNIER90::wannier90 INTERFACE IMPORTED)
endif()
set_property(TARGET WANNIER90::wannier90 PROPERTY INTERFACE_LINK_LIBRARIES ${WANNIER90_LIBRARIES})
set_property(TARGET WANNIER90::wannier90 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${WANNIER90_INCLUDE_DIRS})
endif()

# prevent clutter in cache
Expand Down
Loading