mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-13 08:41:16 +00:00
90 lines
3.0 KiB
CMake
90 lines
3.0 KiB
CMake
################################################################################
|
|
# Copyright (C) 2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
|
# #
|
|
# This software is distributed under the terms of the #
|
|
# GNU Lesser General Public Licence (LGPL) version 3, #
|
|
# copied verbatim in the file "LICENSE" #
|
|
################################################################################
|
|
|
|
# According to the docs the modification of the PKG_CONFIG_PATH environment should
|
|
# not be necessary, but it does not work otherwise.
|
|
if(OFI_ROOT)
|
|
list(APPEND CMAKE_PREFIX_PATH "${OFI_ROOT}/lib/pkgconfig")
|
|
set(ENV{PKG_CONFIG_PATH} "${OFI_ROOT}/lib/pkgconfig:" $ENV{PKG_CONFIG_PATH})
|
|
endif()
|
|
|
|
if(ENV{OFI_ROOT})
|
|
list(APPEND CMAKE_PREFIX_PATH "$ENV{OFI_ROOT}/lib/pkgconfig")
|
|
set(ENV{PKG_CONFIG_PATH} "$ENV{OFI_ROOT}/lib/pkgconfig:" $ENV{PKG_CONFIG_PATH})
|
|
endif()
|
|
|
|
# This should be the default as of CMake 3.1, but it is not set. BUG? Also, it does not work
|
|
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH 1)
|
|
find_package(PkgConfig)
|
|
|
|
if(PKG_CONFIG_FOUND)
|
|
# Find include dir and dependencies from pkgconfig
|
|
pkg_check_modules(_OFI libfabric QUIET)
|
|
|
|
# Retrieve version from pkgconfig
|
|
execute_process(
|
|
COMMAND ${PKG_CONFIG_EXECUTABLE} libfabric --modversion
|
|
OUTPUT_VARIABLE OFI_VERSION
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
|
|
# The IMPORTED_TARGET option of the pkg_check_modules() function is useless,
|
|
# so let's build it ourselves
|
|
find_library(OFI_LIBFABRIC
|
|
NAMES libfabric.so libfabric.dylib
|
|
HINTS ${OFI_ROOT} $ENV{OFI_ROOT}
|
|
PATH_SUFFIXES lib
|
|
)
|
|
|
|
# Just take the include dirs found by the PkgConfig module
|
|
set(OFI_INCLUDE_DIRS ${_OFI_INCLUDE_DIRS})
|
|
|
|
# Find fi_info command to be able to check required features of the OFI installation
|
|
find_program(OFI_INFO_EXECUTABLE
|
|
NAMES fi_info
|
|
HINTS ${OFI_ROOT} $ENV{OFI_ROOT}
|
|
PATH_SUFFIXES bin
|
|
)
|
|
|
|
# Detect ofi providers, they can be required via the COMPONENTS argument of find_package
|
|
if(OFI_INFO_EXECUTABLE)
|
|
execute_process(
|
|
COMMAND ${OFI_INFO_EXECUTABLE} -l
|
|
OUTPUT_VARIABLE output
|
|
)
|
|
string(REPLACE "\n" ";" lines ${output})
|
|
foreach(line IN LISTS lines)
|
|
string(REGEX
|
|
MATCH "^([a-zA-Z0-9_]+):"
|
|
found "${line}"
|
|
)
|
|
if(found)
|
|
string(TOLOWER "${CMAKE_MATCH_1}" provider)
|
|
set(OFI_fi_${provider}_FOUND TRUE)
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
# Check search result, check version constraints and print status
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(OFI
|
|
REQUIRED_VARS OFI_LIBFABRIC OFI_INCLUDE_DIRS OFI_INFO_EXECUTABLE
|
|
VERSION_VAR OFI_VERSION
|
|
HANDLE_COMPONENTS
|
|
)
|
|
endif()
|
|
|
|
if(OFI_FOUND)
|
|
# Define an imported target
|
|
add_library(OFI::libfabric SHARED IMPORTED GLOBAL)
|
|
set_target_properties(OFI::libfabric PROPERTIES
|
|
IMPORTED_LOCATION ${OFI_LIBFABRIC}
|
|
INTERFACE_INCLUDE_DIRECTORIES ${OFI_INCLUDE_DIRS}
|
|
)
|
|
endif()
|