|
| 1 | +# user should download rdma first from subversion repository |
| 2 | + |
| 3 | +# execute following instruction to download svn mannally |
| 4 | +# svn co https://svn.baidu.com/sys/ip/trunk/rdma/sockrdmav1 rdma/ |
| 5 | +# svn co https://svn.baidu.com/sys/ip/trunk/rdma/thirdparty rdma/ |
| 6 | +# we use static output in svn repositories to avoid implict bugs from not standard runtime env. |
| 7 | + |
| 8 | +set(RDMA_ROOT $ENV{RDMA_ROOT} CACHE PATH "Folder contains RDMA sock library and thirdparty library") |
| 9 | + |
| 10 | +function(generate_rdma_links) |
| 11 | + #redirect to current DIR to isolate the pollution from system runtime environment |
| 12 | + #it can benifits unified control for different gcc environment. |
| 13 | + #e.g, by default gcc48 did not refer /usr/lib64 which could contain low version |
| 14 | + #runtime libraries that will crash process while loading it. That redirect trick |
| 15 | + #can fix it. |
| 16 | + execute_process( |
| 17 | + COMMAND mkdir -p librdma |
| 18 | + COMMAND ln -s -f /usr/lib64/libibverbs.so.1.0.0 librdma/libibverbs.so.1 |
| 19 | + COMMAND ln -s -f /usr/lib64/libibverbs.so.1.0.0 librdma/libibverbs.so |
| 20 | + COMMAND ln -s -f /usr/lib64/librdmacm.so.1.0.0 librdma/librdmacm.so.1 |
| 21 | + COMMAND ln -s -f /usr/lib64/librdmacm.so.1.0.0 librdma/librdmacm.so |
| 22 | + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} |
| 23 | + ) |
| 24 | +endfunction(generate_rdma_links) |
| 25 | + |
| 26 | + |
| 27 | +#check and set headers |
| 28 | +find_path(RDMA_INC_SXISOCK sxi_sock.h PATHS ${RDMA_ROOT}/sockrdmav1/output/include) |
| 29 | +find_path(RDMA_INC_XIO libxio.h PATHS ${RDMA_ROOT}/thirdparty/output/accelio) |
| 30 | +find_path(RDMA_INC_EVENT event2 PATHS ${RDMA_ROOT}/thirdparty/output/libevent) |
| 31 | +find_path(RDMA_INC_NUMA numa.h PATHS ${RDMA_ROOT}/thirdparty/output/libnuma) |
| 32 | + |
| 33 | +#check and set libs |
| 34 | +find_library(RDMA_LIB_SXISOCK NAMES sxisock PATHS ${RDMA_ROOT}/sockrdmav1/output) |
| 35 | +find_library(RDMA_LIB_XIO NAMES xio PATHS ${RDMA_ROOT}/thirdparty/output/accelio) |
| 36 | +find_library(RDMA_LIB_EVENT NAMES event PATHS ${RDMA_ROOT}/thirdparty/output/libevent) |
| 37 | +find_library(RDMA_LIB_EVENT_CORE NAMES event_core PATHS ${RDMA_ROOT}/thirdparty/output/libevent) |
| 38 | +find_library(RDMA_LIB_EVENT_EXTRA NAMES event_extra PATHS ${RDMA_ROOT}/thirdparty/output/libevent) |
| 39 | +find_library(RDMA_LIB_EVENT_PTHREADS NAMES event_pthreads PATHS ${RDMA_ROOT}/thirdparty/output/libevent) |
| 40 | +find_library(RDMA_LIB_NUMA NAMES numa PATHS ${RDMA_ROOT}/thirdparty/output/libnuma) |
| 41 | + |
| 42 | +if( |
| 43 | + RDMA_INC_SXISOCK AND |
| 44 | + RDMA_INC_XIO AND |
| 45 | + RDMA_INC_EVENT AND |
| 46 | + RDMA_INC_NUMA AND |
| 47 | + RDMA_LIB_SXISOCK AND |
| 48 | + RDMA_LIB_XIO AND |
| 49 | + RDMA_LIB_EVENT AND |
| 50 | + RDMA_LIB_EVENT_CORE AND |
| 51 | + RDMA_LIB_EVENT_EXTRA AND |
| 52 | + RDMA_LIB_EVENT_PTHREADS AND |
| 53 | + RDMA_LIB_NUMA |
| 54 | + ) |
| 55 | + |
| 56 | + set(RDMA_INC_DIR |
| 57 | + ${RDMA_INC_SXISOCK} |
| 58 | + ${RDMA_INC_XIO} |
| 59 | + ${RDMA_INC_EVENT} |
| 60 | + ${RDMA_INC_NUMA}) |
| 61 | + set(RDMA_LIBS |
| 62 | + ${RDMA_LIB_SXISOCK} |
| 63 | + ${RDMA_LIB_XIO} |
| 64 | + ${RDMA_LIB_EVENT} |
| 65 | + ${RDMA_LIB_EVENT_CORE} |
| 66 | + ${RDMA_LIB_EVENT_EXTRA} |
| 67 | + ${RDMA_LIB_EVENT_PTHREADS} |
| 68 | + ${RDMA_LIB_NUMA} |
| 69 | + ) |
| 70 | + set(RDMA_LD_FLAGS "-L./librdma -libverbs -lrdmacm -Xlinker -rpath ./librdma") |
| 71 | + return() |
| 72 | +endif() |
| 73 | + |
| 74 | +#if this module is not called, RDMA_INC_DIR RDMA_LIBS will be null, so top module always refer this variable |
| 75 | + |
| 76 | +message(FATAL_ERROR, "RDMA libraries are not found, try to set RDMA_ROOT or check all related libraries.") |
0 commit comments