Commit d69100e9 authored by EVPath Upstream's avatar EVPath Upstream Committed by Atkins, Charles Vernon
Browse files

EVPath 2018-03-27 (8438f58c)

Code extracted from:

    https://github.com/GTkorvo/EVPath.git

at commit 8438f58c025355f4ab9084f425290502738a6322 (master).

Upstream Shortlog
-----------------

Chuck Atkins (6):
      1ee903e4 Make find modules more consistent with best practices
      fbb4f7ea Fix library output name properties
      6986238e Fix CMAKE(SOURCE|BINARY)_DIR issues
      270109d0 Bump patch version to deal with reworked CMake interface
      fb369820 Bump patch version for reworked cmake interface
      dea14531 Misc. CMake fixes
parent 01783a85
Loading
Loading
Loading
Loading
+55 −66
Original line number Diff line number Diff line
cmake_minimum_required(VERSION 3.0.0)
project(EVPath VERSION 4.3.0 LANGUAGES C)
project(EVPath VERSION 4.3.1 LANGUAGES C)

# Some boilerplate to setup nice output directories
set(CMAKE_INSTALL_BINDIR bin CACHE STRING "Installation runtime subdirectory")
set(CMAKE_INSTALL_LIBDIR lib CACHE STRING "Installation library subdirectory")
set(CMAKE_INSTALL_INCLUDEDIR include
  CACHE STRING "Installation include subdirectory")
set(CMAKE_INSTALL_CMAKEDIR ${CMAKE_INSTALL_LIBDIR}/cmake
set(CMAKE_INSTALL_CMAKEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/EVPath
  CACHE STRING "Installation CMake subdirectory")
mark_as_advanced(CMAKE_INSTALL_BINDIR)
mark_as_advanced(CMAKE_INSTALL_LIBDIR)
@@ -130,13 +130,8 @@ target_include_directories(EVPath PUBLIC
set(EVPATH_LIBRARY_PREFIX "" CACHE STRING
  "Prefix to prepend to the output library name")
mark_as_advanced(EVPATH_LIBRARY_PREFIX)
if(EVPATH_LIBRARY_PREFIX)
set_target_properties(EVPath PROPERTIES
    LIBRARY_OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}evpath)
else()
  set_target_properties(EVPath PROPERTIES LIBRARY_OUTPUT_NAME evpath)
endif()

  OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}evpath)

set(EVPATH_TRANSPORT_DEP_LIBS)

@@ -150,21 +145,22 @@ cmake_dependent_option(EVPATH_TRANSPORT_MODULES
)

list(INSERT CMAKE_PREFIX_PATH 0 ${CMAKE_INSTALL_PREFIX})
find_package(atl REQUIRED)
find_package(ffs REQUIRED)
find_package(dill REQUIRED)
find_package(atl 2.2.1 REQUIRED)
find_package(ffs 1.5.1 REQUIRED)
find_package(dill 2.3.1 REQUIRED)
target_link_libraries(EVPath PUBLIC atl::atl ffs::ffs PRIVATE dill::dill)

find_package(Threads)
if(Threads_FOUND)
  set(EVPATH_PRIVATE_Threads ON)
  target_link_libraries(EVPath PRIVATE ${CMAKE_THREAD_LIBS_INIT})
endif()

find_package(NVML QUIET)
find_package(NVML)
if(NVML_FOUND)
  target_include_directories(EVPath PRIVATE ${NVML_INCLUDE_DIR})
  target_link_libraries(EVPath PRIVATE ${NVML_LIBRARY})
  if(NOT BUILD_SHARED_LIBS)
    list(APPEND EXTRA_INSTALL_PACKAGES NVML)
  endif()
  target_link_libraries(EVPath PRIVATE nvml::nvml)
endif()

include(CheckSymbolExists)
@@ -188,12 +184,10 @@ if(EVPATH_TRANSPORT_MODULES)
  add_library(cmudp MODULE cmudp.c)
  add_library(cmmulticast MODULE cmmulticast.c)

  if(EVPATH_LIBRARY_PREFIX)
  foreach(M cmselect cmsockets cmudp cmmulticast)
    set_target_properties(${M} PROPERTIES
        LIBRARY_OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}${M})
      OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}${M})
  endforeach()
  endif()

  target_link_libraries(cmselect evpath atl::atl)
  target_link_libraries(cmsockets evpath atl::atl)
@@ -215,15 +209,13 @@ set(RUN_NNTI_TESTS FALSE)

# enet transport
set(RUN_ENET_TESTS FALSE)
find_package(enet)
find_package(enet 1.3.13)
if(ENET_FOUND)
  set(RUN_ENET_TESTS TRUE)
  if(EVPATH_TRANSPORT_MODULES)
    add_library(cmenet MODULE cmenet.c ip_config.c)
    if(EVPATH_LIBRARY_PREFIX)
    set_target_properties(cmenet PROPERTIES
        LIBRARY_OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}cmenet)
    endif()
      OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}cmenet)

    target_link_libraries(cmenet evpath enet::enet)
    list(APPEND EVPATH_TRANSPORT_TARGETS cmenet)
@@ -236,17 +228,18 @@ else()
endif()

# libfabric transport
find_package(LibFabric)
find_package(LIBFABRIC)
if(LIBFABRIC_FOUND) 
  if(EVPATH_TRANSPORT_MODULES)
    add_library(cmfabric MODULE cmfabric.c ip_config.c)
    if(EVPATH_LIBRARY_PREFIX)
    set_target_properties(cmfabric PROPERTIES
        LIBRARY_OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}cmfabric)
    endif()
      OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}cmfabric)
    target_link_libraries(cmfabric evpath atl::atl libfabric::libfabric)
    list(APPEND EVPATH_TRANSPORT_TARGETS cmfabric)
  else()
    if(NOT BUILD_SHARED_LIBS)
      list(APPEND EXTRA_INSTALL_PACKAGES LIBFABRIC)
    endif()
    target_sources(EVPath PRIVATE cmfabric.c)
    target_link_libraries(EVPath PRIVATE libfabric::libfabric)
  endif()
@@ -260,19 +253,18 @@ CHECK_LIBRARY_EXISTS(ibverbs ibv_create_qp "" HAVE_IBVERBS)
if(HAVE_IBVERBS)
  if(BUILD_TESTING)
    if(NOT CMAKE_CROSSCOMPILING)
      message(STATUS "Check for enough rlimit to run IB tests")
      message(STATUS "Check MEMLOCK rlimit for IB tests")
      file(READ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GOOD_MEMLOCK_LIMIT.c" _SOURCE)
      CHECK_C_SOURCE_RUNS("${_SOURCE}" GOOD_MEMLOCK_LIMIT)
      if(GOOD_MEMLOCK_LIMIT)
        message(STATUS
          "Check for large enough MEMLOCK rlimit to run IB tests - yes" )
        message(STATUS "Check MEMLOCK rlimit for IB tests - yes" )
        set(RUN_IB_TESTS TRUE)
        set(RUN_NNTI_TESTS FALSE)
      else()
        message(STATUS "Check for large enough MEMLOCK rlimit to run IB tests - no")
        message(WARNING 
          "Building InfiniBand transport, but current RLIMIT_MEMLOCK value " 
          "will prevent successful runs.  Not running IB transport tests.")
        message(STATUS "Check MEMLOCK rlimit for IB tests - no")
	message(STATUS "  Building InfiniBand transport, but current")
        message(STATUS "  RLIMIT_MEMLOCK value will prevent successful runs.")
        message(STATUS "  Not running IB transport tests.")
      endif()
    else()
      set(RUN_IB_TESTS TRUE)
@@ -282,10 +274,8 @@ if(HAVE_IBVERBS)

  if(EVPATH_TRANSPORT_MODULES)
    add_library(cmib MODULE cmib.c)
    if(EVPATH_LIBRARY_PREFIX)
    set_target_properties(cmib PROPERTIES
        LIBRARY_OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}cmib)
    endif()
      OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}cmib)
    target_link_libraries(cmib evpath ibverbs)
    list(APPEND EVPATH_TRANSPORT_TARGETS cmib)
  else()
@@ -308,31 +298,37 @@ endif()
CHECK_LIBRARY_EXISTS(ugni GNI_CqCreate "" HAVE_UGNI)

if(HAVE_IBVERBS OR HAVE_UGNI)
  find_package (nnti)
  find_package(NNTI)
  if(NNTI_FOUND)
    string(REGEX REPLACE trios_nnti trios_support
      NNTI_SUP_LIB "${NNTI_LIBRARIES}")
    list(APPEND NNTI_LIBRARIES ${NNTI_SUP_LIB})
    if(CercsArch STREQUAL "ppc64")
      set(RUN_NNTI_TESTS FALSE)
    endif()
    if(EVPATH_TRANSPORT_MODULES)
      add_library(cmnnti MODULE cmnnti.c)
      if(EVPATH_LIBRARY_PREFIX)
      set_target_properties(cmnnti PROPERTIES
          LIBRARY_OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}cmnnti)
      endif()
      target_include_directories(cmnnti PRIVATE ${NNTI_INCLUDE_DIR})
      target_link_libraries(cmnnti evpath ${NNTI_LIBRARIES} enet::enet atl::atl)
        OUTPUT_NAME ${EVPATH_LIBRARY_PREFIX}cmnnti)
      target_link_libraries(cmnnti evpath nnti::nnti enet::enet atl::atl)
      list(APPEND EVPATH_TRANSPORT_TARGETS cmnnti)
    else()
      if(NOT BUILD_SHARED_LIBS)
        list(APPEND EXTRA_INSTALL_PACKAGES NNTI)
      endif()
      target_sources(EVPath PRIVATE cmnnti.c)
      target_include_directories(EVPath PRIVATE ${NNTI_INCLUDE_DIR})
      target_link_libraries(EVPath PRIVATE ${NNTI_LIBRARIES})
      target_link_libraries(EVPath PRIVATE nnti::nnti enet::enet atl::atl)
    endif()
  endif()
endif()

# Extra find module dependencies
foreach(P ${EXTRA_INSTALL_PACKAGES})
  configure_file(
    ${EVPath_SOURCE_DIR}/cmake/Find${P}.cmake
    ${EVPath_BINARY_DIR}/Find${P}.cmake
    COPYONLY)
  install(FILES ${EVPath_BINARY_DIR}/Find${P}.cmake
    DESTINATION ${CMAKE_INSTALL_CMAKEDIR})
endforeach()

add_custom_command(
  OUTPUT "cm_interface.c" "revp.c" "revpath.h"
  SOURCE
@@ -461,14 +457,7 @@ export(EXPORT EVPathTargets NAMESPACE EVPath::
# targets from these, which can be used in many ways in the same way as a
# normal library target created via a normal add_library().
install(EXPORT EVPathTargets NAMESPACE EVPath::
  DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/EVPath)

# figure out the relative path from the installed Config.cmake file to the
# install prefix (which may be at runtime different from the chosen
# CMAKE_INSTALL_PREFIX if under Windows the package was installed anywhere)
# This relative path will be configured into the EVPathConfig.cmake
file(RELATIVE_PATH relInstallDir
  ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_CMAKEDIR} ${CMAKE_INSTALL_PREFIX})
  DESTINATION ${CMAKE_INSTALL_CMAKEDIR})

# Create a EVPathConfig.cmake file. <name>Config.cmake files are searched by
# find_package() automatically. We configure that file so that we can put any
@@ -480,7 +469,7 @@ configure_file(
)

# So, this big ol thing...
# This function will walk to dependency graph of a target and determine the full
# This function will walk the dependency graph of a target to determine the full
# list of transitive library and header information needed to use it.  The
# purpose is to extract the necessary usage requirements for a non-CMake
# project to consume evpath
@@ -557,7 +546,7 @@ file(GENERATE
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/evpath_config
  INPUT ${CMAKE_CURRENT_BINARY_DIR}/evpath_config.gen
)
install(PROGRAMS ${CMAKE_BINARY_DIR}/evpath_config
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/evpath_config
  DESTINATION ${CMAKE_INSTALL_BINDIR})

# Additionally, when cmake has found a EVPathConfig.cmake, it can check for a
@@ -575,7 +564,7 @@ install(
  FILES
    ${CMAKE_CURRENT_BINARY_DIR}/EVPathConfig.cmake
    ${CMAKE_CURRENT_BINARY_DIR}/EVPathConfigVersion.cmake
  DESTINATION ${CMAKE_INSTALL_CMAKEDIR}/EVPath
  DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
)

configure_file(
+23 −13
Original line number Diff line number Diff line
include("${CMAKE_CURRENT_LIST_DIR}/EVPathConfigVersion.cmake")
  
include(CMakeFindDependencyMacro)
set(_evpath_required_vars REQUIRED_VARS)

find_dependency(atl)
list(APPEND _evpath_required_vars ATL_FOUND)

find_dependency(ffs)
list(APPEND _evpath_required_vars FFS_FOUND)
find_dependency(atl @atl_VERSION@)
find_dependency(ffs @ffs_VERSION@)

if(NOT @BUILD_SHARED_LIBS@)
  find_dependency(dill)
  list(APPEND _evpath_required_vars DILL_FOUND)
  list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_LIST_DIR}")

  find_dependency(dill @dill_VERSION@)

  if(@ENET_FOUND@ AND NOT @EVPATH_TRANSPORT_MODULES@)
    find_dependency(enet)
    list(APPEND _evpath_required_vars ENET_FOUND)
  if(@NVML_FOUND@)
    find_dependency(NVML)
  endif()

  if(NOT @EVPATH_TRANSPORT_MODULES@)
    if(@ENET_FOUND@)
      find_dependency(enet @enet_VERSION@)
    endif()

    if(@LIBFABRIC_FOUND@)
      find_dependency(LIBFABRIC)
    endif()

    if(@NNTI_FOUND@)
     find_dependency(NNTI)
    endif()
  endif()
endif()

set(EVPath_LIBRARIES EVPath::EVPath)
include(FindPackageHandleStandardArgs)
set(EVPath_CONFIG "${CMAKE_CURRENT_LIST_FILE}")
find_package_handle_standard_args(EVPath CONFIG_MODE ${_evpath_required_vars})
find_package_handle_standard_args(EVPath CONFIG_MODE)

if(NOT TARGET EVPath::EVPath)
  include("${CMAKE_CURRENT_LIST_DIR}/EVPathTargets.cmake")
+13 −22
Original line number Diff line number Diff line
# This is a very basic file for the new style find_package() search mode,
# i.e. Config-mode.
# In this mode find_package() searches for a <package>Config.cmake 
# file and an associated <package>Version.cmake file, which it loads to check 
# the version number.
# This file can be used with configure_file() to generate such a file for a project
# with very basic logic.
# It sets PACKAGE_VERSION_EXACT if the current version string and the requested
# version string are exactly the same and it sets PACKAGE_VERSION_COMPATIBLE
# if the current version is >= requested version.
# If this is not good enough for your project, you need to write your own
# improved <package>Version.cmake file.


set(PACKAGE_VERSION_MAJOR @EVPath_VERSION_MAJOR@)
set(PACKAGE_VERSION_MINOR @EVPath_VERSION_MINOR@)
set(PACKAGE_VERSION_PATCH @EVPath_VERSION_PATCH@)
set(PACKAGE_VERSION @EVPath_VERSION@)

if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
# Check whether the requested PACKAGE_FIND_VERSION is compatible
if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION OR
   PACKAGE_VERSION_MAJOR GREATER PACKAGE_FIND_VERSION_MAJOR)
  set(PACKAGE_VERSION_COMPATIBLE FALSE)
else("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
else()
  set(PACKAGE_VERSION_COMPATIBLE TRUE)
   if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
  if(PACKAGE_VERSION VERSION_EQUAL PACKAGE_FIND_VERSION)
    set(PACKAGE_VERSION_EXACT TRUE)
   endif( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
endif("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" )
  endif()
endif()
+3 −3
Original line number Diff line number Diff line
@@ -28,9 +28,9 @@ FUNCTION (ADD_LIBTOOL_LIBRARY)
  CMAKE_PARSE_ARGUMENTS(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

  set(VERSION_TEXT "")
  if (EXISTS "${CMAKE_SOURCE_DIR}/version.c")
    file (STRINGS "${CMAKE_SOURCE_DIR}/version.c" VERSION_TEXT REGEX "^static.*")
  endif (EXISTS "${CMAKE_SOURCE_DIR}/version.c")
  if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/version.c")
    file (STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/version.c" VERSION_TEXT REGEX "^static.*")
  endif (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/version.c")
  if (${VERSION_TEXT} MATCHES ".*${NAME}.*") 
    STRING(REGEX REPLACE ".*Version ([0-9]+.[0-9]+.[0-9]+).*" "\\1" VERSION_TEXT "${VERSION_TEXT}")
    STRING(REGEX REPLACE "([0-9]+)[.][0-9.]*$" "\\1" MAJOR_VERSION_STRING ${VERSION_TEXT})
+3 −3
Original line number Diff line number Diff line
@@ -4,9 +4,9 @@
execute_process(COMMAND uname -m OUTPUT_VARIABLE ARCH)

set(VERSION_TEXT "")
if (EXISTS "${CMAKE_SOURCE_DIR}/version.c")
    file (STRINGS "${CMAKE_SOURCE_DIR}/version.c" VERSION_TEXT REGEX "^static.*")
endif (EXISTS "${CMAKE_SOURCE_DIR}/version.c")
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/version.c")
    file (STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/version.c" VERSION_TEXT REGEX "^static.*")
endif (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/version.c")
if (${VERSION_TEXT} MATCHES ".*${NAME}.*") 
    STRING(REGEX REPLACE ".*Version ([0-9]+.[0-9]+.[0-9]+).*" "\\1" VERSION_TEXT "${VERSION_TEXT}")
    STRING(REGEX REPLACE "([0-9]+)[.][0-9.]*$" "\\1" MAJOR_VERSION_STRING ${VERSION_TEXT})
Loading