Skip to content

Commit aa40c41

Browse files
committed
Add cmake support for RDMA
Signed-off-by: zhenwei pi <[email protected]>
1 parent b5d39c0 commit aa40c41

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

CMakeLists.txt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ OPTION(DISABLE_TESTS "If tests should be compiled or not" OFF)
2323
OPTION(ENABLE_EXAMPLES "Enable building valkey examples" OFF)
2424
option(ENABLE_IPV6_TESTS "Enable IPv6 tests requiring special prerequisites" OFF)
2525
OPTION(ENABLE_NUGET "Install NuGET packaging details" OFF)
26+
OPTION(ENABLE_RDMA "Build valkey_rdma for RDMA support" OFF)
2627

2728
# valkey requires C99
2829
SET(CMAKE_C_STANDARD 99)
@@ -227,6 +228,53 @@ IF(ENABLE_SSL)
227228
DESTINATION ${CMAKE_CONF_INSTALL_DIR})
228229
ENDIF()
229230

231+
IF(ENABLE_RDMA)
232+
find_library(RDMACM_LIBRARIES rdmacm)
233+
find_library(IBVERBS_LIBRARIES ibverbs)
234+
SET(valkey_rdma_sources src/rdma.c)
235+
ADD_LIBRARY(valkey_rdma ${valkey_rdma_sources})
236+
ADD_LIBRARY(valkey::valkey_rdma ALIAS valkey_rdma)
237+
238+
TARGET_LINK_LIBRARIES(valkey_rdma LINK_PRIVATE ${RDMACM_LIBRARIES} ${IBVERBS_LIBRARIES})
239+
TARGET_INCLUDE_DIRECTORIES(valkey_rdma
240+
PRIVATE
241+
$<INSTALL_INTERFACE:include>
242+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/valkey>
243+
)
244+
245+
SET_TARGET_PROPERTIES(valkey_rdma
246+
PROPERTIES
247+
WINDOWS_EXPORT_ALL_SYMBOLS TRUE
248+
VERSION "${LIBVALKEY_SONAME}")
249+
CONFIGURE_FILE(valkey_rdma.pc.in valkey_rdma.pc @ONLY)
250+
251+
INSTALL(TARGETS valkey_rdma
252+
EXPORT valkey_rdma-targets
253+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
254+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
255+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
256+
257+
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/valkey_rdma.pc
258+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
259+
260+
export(EXPORT valkey_rdma-targets
261+
FILE "${CMAKE_CURRENT_BINARY_DIR}/valkey_rdma-targets.cmake"
262+
NAMESPACE valkey::)
263+
264+
SET(CMAKE_CONF_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/valkey_rdma)
265+
configure_package_config_file(valkey_rdma-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/valkey_rdma-config.cmake
266+
INSTALL_DESTINATION ${CMAKE_CONF_INSTALL_DIR}
267+
PATH_VARS INCLUDE_INSTALL_DIR)
268+
269+
INSTALL(EXPORT valkey_rdma-targets
270+
FILE valkey_rdma-targets.cmake
271+
NAMESPACE valkey::
272+
DESTINATION ${CMAKE_CONF_INSTALL_DIR})
273+
274+
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/valkey_rdma-config.cmake
275+
DESTINATION ${CMAKE_CONF_INSTALL_DIR})
276+
ENDIF()
277+
230278
# Add tests
231279
if(NOT DISABLE_TESTS)
232280
# Make sure ctest prints the output when a test fails.

tests/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ endif()
8080
if(SSL_LIBRARY)
8181
set_property(TEST client_test PROPERTY ENVIRONMENT "TEST_SSL=1")
8282
endif()
83+
if(ENABLE_RDMA)
84+
target_compile_definitions(client_test PUBLIC VALKEY_TEST_RDMA=1)
85+
target_link_libraries(client_test valkey_rdma)
86+
set_property(TEST client_test PROPERTY ENVIRONMENT "TEST_RDMA=1")
87+
endif()
8388

8489
# Add cluster tests if we have libevent
8590
if (LIBEVENT_LIBRARY)

valkey_rdma-config.cmake.in

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
@PACKAGE_INIT@
2+
3+
set_and_check(valkey_rdma_INCLUDEDIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
4+
5+
IF (NOT TARGET valkey::valkey_rdma)
6+
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/valkey_rdma-targets.cmake)
7+
ENDIF()
8+
9+
SET(valkey_rdma_LIBRARIES valkey::valkey_rdma)
10+
SET(valkey_rdma_INCLUDE_DIRS ${valkey_rdma_INCLUDEDIR})
11+
12+
check_required_components(valkey_rdma)
13+

0 commit comments

Comments
 (0)