Skip to content

Commit 6166123

Browse files
nspringmeta-codesync[bot]
authored andcommitted
update findibverbs to provide version
Summary: X-link: https://github.com/facebookexternal/rdma_gen/pull/17 Findibverbs.cmake found the library, but we want to require a recent one and fail if that is not present. If pkg-config doesn't know the version, we fall back to figuring it out from the name of the .so file. Reviewed By: ahornby Differential Revision: D88577550 fbshipit-source-id: dc32140f9786a1af4739656468e5c08ffde6ae36
1 parent 9e559d9 commit 6166123

File tree

1 file changed

+53
-2
lines changed

1 file changed

+53
-2
lines changed

build/fbcode_builder/CMake/Findibverbs.cmake

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
# IBVERBS_FOUND
2424
# IBVERBS_INCLUDE_DIRS
2525
# IBVERBS_LIBRARIES
26+
# IBVERBS_VERSION
2627

2728
find_path(IBVERBS_INCLUDE_DIRS
2829
NAMES infiniband/verbs.h
@@ -38,6 +39,56 @@ find_library(IBVERBS_LIBRARIES
3839
${IBVERBS_ROOT_DIR}
3940
${IBVERBS_ROOT_DIR}/lib)
4041

42+
# Try to determine the rdma-core version
43+
if(IBVERBS_INCLUDE_DIRS AND IBVERBS_LIBRARIES)
44+
# First try using pkg-config if available
45+
find_package(PkgConfig QUIET)
46+
if(PKG_CONFIG_FOUND)
47+
pkg_check_modules(PC_RDMA_CORE QUIET rdma-core)
48+
if(PC_RDMA_CORE_VERSION)
49+
set(IBVERBS_VERSION ${PC_RDMA_CORE_VERSION})
50+
endif()
51+
endif()
52+
53+
# If pkg-config didn't work, try to extract version from library filename
54+
# According to rdma-core Documentation/versioning.md:
55+
# Library filename format:
56+
# libibverbs.so.SONAME.ABI.PACKAGE_VERSION_MAIN[.PACKAGE_VERSION_BRANCH]
57+
# Where:
58+
# - SONAME: Major version (1st field)
59+
# - ABI: ABI version number (2nd field)
60+
# - PACKAGE_VERSION_MAIN: Main package version (3rd field)
61+
# - PACKAGE_VERSION_BRANCH: Optional counter for branched stable
62+
# releases (4th field, part of PACKAGE_VERSION)
63+
# Example: libibverbs.so.1.14.57.0 → SONAME=1, ABI=14,
64+
# PACKAGE_VERSION=57.0
65+
if(NOT IBVERBS_VERSION)
66+
# Get the real path of the library (follows symlinks)
67+
get_filename_component(IBVERBS_REAL_PATH "${IBVERBS_LIBRARIES}" REALPATH)
68+
get_filename_component(IBVERBS_LIB_NAME "${IBVERBS_REAL_PATH}" NAME)
69+
70+
# Extract version from filename
71+
if(IBVERBS_LIB_NAME MATCHES
72+
"libibverbs\\.so\\.([0-9]+)\\.([0-9]+)\\.([0-9]+)\\.([0-9]+)")
73+
# Four-component version: PACKAGE_VERSION_MAIN.PACKAGE_VERSION_BRANCH
74+
set(IBVERBS_VERSION_MAJOR ${CMAKE_MATCH_3})
75+
set(IBVERBS_VERSION_MINOR ${CMAKE_MATCH_4})
76+
set(IBVERBS_VERSION "${IBVERBS_VERSION_MAJOR}.${IBVERBS_VERSION_MINOR}")
77+
elseif(IBVERBS_LIB_NAME MATCHES
78+
"libibverbs\\.so\\.([0-9]+)\\.([0-9]+)\\.([0-9]+)")
79+
# Three-component version: PACKAGE_VERSION_MAIN only
80+
set(IBVERBS_VERSION_MAJOR ${CMAKE_MATCH_3})
81+
set(IBVERBS_VERSION "${IBVERBS_VERSION_MAJOR}.0")
82+
else()
83+
# If we can't parse the filename, set to empty string
84+
# Feature detection will be done in CMakeLists.txt
85+
set(IBVERBS_VERSION "")
86+
endif()
87+
endif()
88+
endif()
89+
4190
include(FindPackageHandleStandardArgs)
42-
find_package_handle_standard_args(ibverbs DEFAULT_MSG IBVERBS_INCLUDE_DIRS IBVERBS_LIBRARIES)
43-
mark_as_advanced(IBVERBS_INCLUDE_DIRS IBVERBS_LIBRARIES)
91+
find_package_handle_standard_args(ibverbs
92+
REQUIRED_VARS IBVERBS_INCLUDE_DIRS IBVERBS_LIBRARIES
93+
VERSION_VAR IBVERBS_VERSION)
94+
mark_as_advanced(IBVERBS_INCLUDE_DIRS IBVERBS_LIBRARIES IBVERBS_VERSION)

0 commit comments

Comments
 (0)