Added CMake finder for external libraries

This commit is contained in:
Daniele Cesarini 2022-02-16 12:53:33 +01:00
parent a7abbe586e
commit ed144104cf
9 changed files with 384 additions and 147 deletions

View File

@ -112,6 +112,14 @@ set(QE_FFTW_VENDOR "AUTO" CACHE
STRING "select a specific FFTW library [Intel_DFTI, Intel_FFTW3, ArmPL, IBMESSL, FFTW3, Internal]")
set(QE_ENABLE_SANITIZER "none" CACHE STRING "none,asan,ubsan,tsan,msan")
set(QE_ENABLE_PLUGINS "" CACHE STRING "Semicolon-separated list of plugins")
option(QE_FOX_VENDOR
"enable FoX vendoring" ON)
option(QE_WANNIER90_VENDOR
"enable Wannier90 vendoring" ON)
option(QE_MBD_VENDOR
"enable LibMBD vendoring" ON)
option(QE_DEVICEXLIB_VENDOR
"enable DeviceXlib vendoring" ON)
# TODO change all ifdefs throughout code base to match
# cmake options

View File

@ -0,0 +1,69 @@
#[=======================================================================[.rst:
FindDEVICEXLIB
----------
Find DEVICEXLIB library
This module finds an installed DeviceXlib library.
Input Variables
^^^^^^^^^^^^^^^
The following variables may be set to influence this module's behavior:
``DEVICEXLIB_ROOT``
The path to the installation folder of DeviceXlib library
Imported targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` targets:
``DeviceXlib::DeviceXlib``
Result Variables
^^^^^^^^^^^^^^^^
This module will set the following variables in your project:
``DEVICEXLIB_FOUND``
DeviceXlib is found
``DEVICEXLIB_LIBRARIES``
the libraries needed to use DeviceXlib.
``DEVICEXLIB_INCLUDE_DIRS``
where to find modules and headers for DeviceXlib
#]=======================================================================]
find_library(
DEVICEXLIB_LIBRARIES
NAMES "devXlib"
HINTS ${DEVICEXLIB_ROOT}
PATH_SUFFIXES
"lib"
"src")
find_path(
DEVICEXLIB_INCLUDE_DIRS
NAMES "device_fbuff_m.mod"
HINTS ${DEVICEXLIB_ROOT}
PATH_SUFFIXES
"include"
"finclude"
"mod"
"module"
"modules"
"src")
find_package_handle_standard_args(DEVICEXLIB
REQUIRED_VARS
DEVICEXLIB_LIBRARIES
DEVICEXLIB_INCLUDE_DIRS)
if(DEVICEXLIB_FOUND)
add_library(DeviceXlib::DeviceXlib INTERFACE IMPORTED)
target_link_libraries(DeviceXlib::DeviceXlib
INTERFACE ${DEVICEXLIB_LIBRARIES})
target_include_directories(DeviceXlib::DeviceXlib
INTERFACE ${DEVICEXLIB_INCLUDE_DIRS})
endif()

153
cmake/FindFoX.cmake Normal file
View File

@ -0,0 +1,153 @@
#[=======================================================================[.rst:
FindFoX
----------
Find FoX library
This module finds an installed FoX library.
Input Variables
^^^^^^^^^^^^^^^
The following variables may be set to influence this module's behavior:
``FOX_ROOT``
The path to the installation folder of FoX library
Imported targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` targets:
``FoX::FoX``
``FoX::DOM``
``FoX::SAX``
``FoX::WXML``
``FoX::Common``
``FoX::Utils``
``FoX::FSys``
Result Variables
^^^^^^^^^^^^^^^^
This module will set the following variables in your project:
``FOX_FOUND``
FoX is found
``FOX_LIBRARIES``
the libraries needed to use FoX.
``FOX_INCLUDE_DIRS``
where to find modules and headers for FoX
``FOX_DOM_LIB``
DOM interface of FoX
``FOX_SAX_LIB``
SAX interface of FoX
``FOX_WXML_LIB``
VoiceXML interface of FoX
``FOX_COMMON_LIB``
Interface for common functions of FoX
``FOX_UTILS_LIB``
Interface for util functions of FoX
``FOX_FSYS_LIB``
Interface for file system functions of FoX
#]=======================================================================]
find_library(
FOX_DOM_LIB
NAMES "FoX_dom"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib")
find_library(
FOX_SAX_LIB
NAMES "FoX_sax"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib")
find_library(
FOX_WXML_LIB
NAMES "FoX_wxml"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib")
find_library(
FOX_COMMON_LIB
NAMES "FoX_common"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib")
find_library(
FOX_UTILS_LIB
NAMES "FoX_utils"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib")
find_library(
FOX_FSYS_LIB
NAMES "FoX_fsys"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib")
set(FOX_LIBRARIES
${FOX_DOM_LIB}
${FOX_SAX_LIB}
${FOX_WXML_LIB}
${FOX_COMMON_LIB}
${FOX_UTILS_LIB}
${FOX_FSYS_LIB})
find_path(
FOX_INCLUDE_DIRS
NAMES "m_common_io.mod"
HINTS ${FOX_ROOT}
PATH_SUFFIXES
"include"
"finclude"
"mod"
"module"
"modules")
find_package_handle_standard_args(FOX
REQUIRED_VARS
FOX_LIBRARIES
FOX_DOM_LIB
FOX_SAX_LIB
FOX_WXML_LIB
FOX_COMMON_LIB
FOX_UTILS_LIB
FOX_FSYS_LIB
FOX_INCLUDE_DIRS)
if(FOX_FOUND)
add_library(FoX::FoX INTERFACE IMPORTED)
add_library(FoX::DOM INTERFACE IMPORTED)
add_library(FoX::SAX INTERFACE IMPORTED)
add_library(FoX::WXML INTERFACE IMPORTED)
add_library(FoX::Common INTERFACE IMPORTED)
add_library(FoX::Utils INTERFACE IMPORTED)
add_library(FoX::FSys INTERFACE IMPORTED)
target_link_libraries(FoX::FoX
INTERFACE
FoX::DOM
FoX::SAX
FoX::WXML
FoX::Common
FoX::Utils
FoX::FSys)
target_link_libraries(FoX::DOM INTERFACE ${FOX_DOM_LIB})
target_link_libraries(FoX::SAX INTERFACE ${FOX_SAX_LIB})
target_link_libraries(FoX::WXML INTERFACE ${FOX_WXML_LIB})
target_link_libraries(FoX::Common INTERFACE ${FOX_COMMON_LIB})
target_link_libraries(FoX::Utils INTERFACE ${FOX_UTILS_LIB})
target_link_libraries(FoX::FSys INTERFACE ${FOX_FSYS_LIB})
target_include_directories(FoX::DOM INTERFACE ${FOX_INCLUDE_DIRS})
target_include_directories(FoX::SAX INTERFACE ${FOX_INCLUDE_DIRS})
target_include_directories(FoX::WXML INTERFACE ${FOX_INCLUDE_DIRS})
target_include_directories(FoX::Common INTERFACE ${FOX_INCLUDE_DIRS})
target_include_directories(FoX::Utils INTERFACE ${FOX_INCLUDE_DIRS})
target_include_directories(FoX::FSys INTERFACE ${FOX_INCLUDE_DIRS})
endif()

67
cmake/FindMBD.cmake Normal file
View File

@ -0,0 +1,67 @@
#[=======================================================================[.rst:
FindMBD
----------
Find MBD library
This module finds an installed MBD library.
Input Variables
^^^^^^^^^^^^^^^
The following variables may be set to influence this module's behavior:
``MBD_ROOT``
The path to the installation folder of MBD library
Imported targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` targets:
``MBD::MBD``
Result Variables
^^^^^^^^^^^^^^^^
This module will set the following variables in your project:
``MBD_FOUND``
MBD is found
``MBD_LIBRARIES``
the libraries needed to use MBD.
``MBD_INCLUDE_DIRS``
where to find modules and headers for MBD
#]=======================================================================]
find_library(
MBD_LIBRARIES
NAMES "mbd"
HINTS ${MBD_ROOT}
PATH_SUFFIXES "lib")
find_path(
MBD_INCLUDE_DIRS
NAMES "mbd.mod"
HINTS ${MBD_ROOT}
PATH_SUFFIXES
"mbd"
"include"
"finclude"
"mod"
"module"
"modules")
find_package_handle_standard_args(MBD
REQUIRED_VARS
MBD_LIBRARIES
MBD_INCLUDE_DIRS)
if(MBD_FOUND)
add_library(MBD::MBD INTERFACE IMPORTED)
target_link_libraries(MBD::MBD
INTERFACE ${MBD_LIBRARIES})
target_include_directories(MBD::MBD
INTERFACE ${MBD_INCLUDE_DIRS})
endif()

67
cmake/FindWannier90.cmake Normal file
View File

@ -0,0 +1,67 @@
#[=======================================================================[.rst:
FindWannier90
----------
Find Wannier90 library
This module finds an installed Wannier90 library.
Input Variables
^^^^^^^^^^^^^^^
The following variables may be set to influence this module's behavior:
``WANNIER90_ROOT``
The path to the installation folder of Wannier90 library
Imported targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` targets:
``Wannier90::Wannier90``
Result Variables
^^^^^^^^^^^^^^^^
This module will set the following variables in your project:
``WANNIER90_FOUND``
Wannier90 is found
``WANNIER90_LIBRARIES``
the libraries needed to use Wannier90.
``WANNIER90_INCLUDE_DIRS``
where to find modules and headers for Wannier90
#]=======================================================================]
find_library(
WANNIER90_LIBRARIES
NAMES "wannier"
HINTS ${WANNIER90_ROOT}
PATH_SUFFIXES "lib")
find_path(
WANNIER90_INCLUDE_DIRS
NAMES "w90_io.mod"
HINTS ${WANNIER90_ROOT}
PATH_SUFFIXES
"wannier90"
"include"
"finclude"
"mod"
"module"
"modules")
find_package_handle_standard_args(WANNIER90
REQUIRED_VARS
WANNIER90_LIBRARIES
WANNIER90_INCLUDE_DIRS)
if(WANNIER90_FOUND)
add_library(Wannier90::Wannier90 INTERFACE IMPORTED)
target_link_libraries(Wannier90::Wannier90
INTERFACE ${WANNIER90_LIBRARIES})
target_include_directories(Wannier90::Wannier90
INTERFACE ${WANNIER90_INCLUDE_DIRS})
endif()

View File

@ -1,34 +1,7 @@
###########################################################
# DeviceXlib
###########################################################
if(DEVXLIB_ROOT)
add_library(qe_devxlib INTERFACE)
find_library(
DEVXLIB_LIB
NAMES "devXlib"
HINTS ${DEVXLIB_ROOT}
PATH_SUFFIXES
"lib"
"src"
REQUIRED)
find_path(
DEVXLIB_INC
NAMES "device_fbuff_m.mod"
HINTS ${DEVXLIB_ROOT}
PATH_SUFFIXES
"include"
"finclude"
"mod"
"module"
"modules"
"src"
REQUIRED)
target_link_libraries(qe_devxlib INTERFACE ${DEVXLIB_LIB})
target_include_directories(qe_devxlib INTERFACE ${DEVXLIB_INC})
else()
if(QE_DEVICEXLIB_VENDOR)
qe_git_submodule_update(external/devxlib)
set(src_devxlib
@ -46,6 +19,10 @@ else()
qe_add_library(qe_devxlib ${src_devxlib})
target_include_directories(qe_devxlib PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/devxlib/src")
target_include_directories(qe_devxlib PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/devxlib/include")
target_include_directories(qe_devxlib PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/devxlib/include")
else()
add_library(qe_devxlib INTERFACE)
find_package(DeviceXlib REQUIRED)
target_link_libraries(qe_devxlib INTERFACE DeviceXlib::DeviceXlib)
endif()
qe_install_targets(qe_devxlib)

69
external/fox.cmake vendored
View File

@ -3,71 +3,7 @@
###########################################################
add_library(qe_fox INTERFACE)
qe_install_targets(qe_fox)
if(FOX_ROOT)
find_library(
FOX_DOM_LIB
NAMES "FoX_dom"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib"
REQUIRED)
find_library(
FOX_SAX_LIB
NAMES "FoX_sax"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib"
REQUIRED)
find_library(
FOX_WXML_LIB
NAMES "FoX_wxml"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib"
REQUIRED)
find_library(
FOX_COMMON_LIB
NAMES "FoX_common"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib"
REQUIRED)
find_library(
FOX_UTILS_LIB
NAMES "FoX_utils"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib"
REQUIRED)
find_library(
FOX_FSYS_LIB
NAMES "FoX_fsys"
HINTS ${FOX_ROOT}
PATH_SUFFIXES "lib"
REQUIRED)
find_path(
FOX_INC
NAMES "m_common_io.mod"
HINTS ${FOX_ROOT}
PATH_SUFFIXES
"include"
"finclude"
"mod"
"module"
"modules"
REQUIRED)
target_link_libraries(qe_fox
INTERFACE
${FOX_DOM_LIB}
${FOX_SAX_LIB}
${FOX_WXML_LIB}
${FOX_COMMON_LIB}
${FOX_UTILS_LIB}
${FOX_FSYS_LIB})
target_include_directories(qe_fox INTERFACE ${FOX_INC})
else()
if(QE_FOX_VENDOR)
message(STATUS "Installing FoX via submodule")
set(fox_targets FoX_fsys FoX_utils FoX_common FoX_dom FoX_sax FoX_wxml)
set(FoX_ENABLE_EXAMPLES
@ -78,4 +14,7 @@ else()
target_link_libraries(qe_fox INTERFACE ${fox_targets})
qe_fix_fortran_modules(${fox_targets})
qe_install_targets(${fox_targets})
else()
find_package(FoX REQUIRED)
target_link_libraries(qe_fox INTERFACE FoX::FoX)
endif()

28
external/mbd.cmake vendored
View File

@ -3,30 +3,7 @@
###########################################################
add_library(qe_mbd INTERFACE)
qe_install_targets(qe_mbd)
if(MBD_ROOT)
find_library(
MBD_LIB
NAMES "mbd"
HINTS ${MBD_ROOT}
PATH_SUFFIXES "lib"
REQUIRED)
find_path(
MBD_INC
NAMES "mbd.mod"
HINTS ${MBD_ROOT}
PATH_SUFFIXES
"mbd"
"include"
"finclude"
"mod"
"module"
"modules"
REQUIRED)
target_link_libraries(qe_mbd INTERFACE "${MBD_LIB}")
target_include_directories(qe_mbd INTERFACE "${MBD_INC}")
else()
if(QE_MBD_VENDOR)
message(STATUS "Installing MBD via submodule")
qe_git_submodule_update(external/mbd)
if(NOT BUILD_SHARED_LIBS)
@ -40,4 +17,7 @@ else()
unset(BUILD_SHARED_LIBS)
endif()
target_link_libraries(qe_mbd INTERFACE Mbd)
else()
find_package(MBD REQUIRED)
target_link_libraries(qe_mbd INTERFACE MBD::MBD)
endif()

View File

@ -1,34 +1,7 @@
###########################################################
# WANNIER90
###########################################################
if(WANNIER90_ROOT)
add_library(qe_wannier90 INTERFACE)
qe_install_targets(qe_wannier90)
find_library(
WANNIER90_LIB
NAMES "wannier"
HINTS ${WANNIER90_ROOT}
PATH_SUFFIXES "lib"
REQUIRED)
find_path(
WANNIER90_INC
NAMES "w90_io.mod"
HINTS ${WANNIER90_ROOT}
PATH_SUFFIXES
"wannier90"
"include"
"finclude"
"mod"
"module"
"modules"
REQUIRED)
target_link_libraries(qe_wannier90 INTERFACE "${WANNIER90_LIB}")
target_include_directories(qe_wannier90 INTERFACE "${WANNIER90_INC}")
else()
if(QE_WANNIER90_VENDOR)
qe_git_submodule_update(external/wannier90)
set(sources
@ -93,5 +66,9 @@ else()
qe_wannier90
# Executables
qe_wannierprog_exe qe_w90chk2chk_exe qe_wannier90_postw90_exe)
else()
add_library(qe_wannier90 INTERFACE)
qe_install_targets(qe_wannier90)
find_package(Wannier90 REQUIRED)
target_link_libraries(qe_wannier90 INTERFACE Wannier90::Wannier90)
endif()