@@ -27,7 +27,6 @@ list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
2727find_package (cxxopts REQUIRED )
2828find_package (spdlog REQUIRED )
2929file (GLOB_RECURSE SOURCE_FILES src/cxl*.cpp src/policy.cpp src/helper.cpp src/incore.cpp src/uncore.cpp src/perf.cpp src/monitor.cpp )
30- set (SERVER_SOURCES src/main_server.cc src/shared_memory_manager.cc src/shm_communication.cpp src/distributed_server.cpp src/rdma_communication.cpp src/hdm_decoder.cpp src/coherency_engine.cpp)
3130
3231execute_process (COMMAND uname -r OUTPUT_VARIABLE arch OUTPUT_STRIP_TRAILING_WHITESPACE )
3332set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -Wall -fPIC -pthread" )
@@ -45,10 +44,6 @@ set_target_properties(cxlmemsim_latency PROPERTIES
4544 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR }
4645)
4746
48- # Build server
49- add_executable (cxlmemsim_server ${SERVER_SOURCES} )
50- target_include_directories (cxlmemsim_server PRIVATE include ${cxxopts_INCLUDE_DIR} ${spdlog_INCLUDE_DIR} )
51- target_link_libraries (cxlmemsim_server cxlmemsim cxxopts::cxxopts spdlog::spdlog_header_only rt )
5247# Find RDMA libraries
5348find_package (PkgConfig REQUIRED )
5449pkg_check_modules (RDMACM REQUIRED librdmacm )
@@ -61,23 +56,41 @@ if(ENABLE_RDMA)
6156 if (RDMACM_FOUND AND IBV_FOUND)
6257 message (STATUS "RDMA support enabled" )
6358 add_definitions (-DHAVE_RDMA )
64-
65- # Add RDMA include directories
6659 include_directories (${RDMACM_INCLUDE_DIRS} )
6760 include_directories (${IBV_INCLUDE_DIRS} )
68-
69- # Add RDMA libraries
7061 set (RDMA_LIBRARIES ${RDMACM_LIBRARIES} ${IBV_LIBRARIES} )
71-
72- # Link RDMA libraries to main server (distributed_server.cpp uses RDMA)
73- target_link_libraries (cxlmemsim_server ${RDMA_LIBRARIES} )
74- target_compile_options (cxlmemsim_server PRIVATE ${RDMACM_CFLAGS_OTHER} ${IBV_CFLAGS_OTHER} )
7562 else ()
7663 message (WARNING "RDMA libraries not found. RDMA support disabled." )
7764 set (ENABLE_RDMA OFF )
7865 endif ()
7966endif ()
8067
68+ # Server library (shared between server executable and tests)
69+ set (SERVER_LIB_SOURCES src/shared_memory_manager.cc src/shm_communication.cpp src/distributed_server.cpp src/rdma_communication.cpp src/hdm_decoder.cpp src/coherency_engine.cpp)
70+ add_library (cxlmemsim_server_lib STATIC ${SERVER_LIB_SOURCES} )
71+ target_include_directories (cxlmemsim_server_lib PUBLIC include src ${cxxopts_INCLUDE_DIR} ${spdlog_INCLUDE_DIR} )
72+ target_link_libraries (cxlmemsim_server_lib cxlmemsim cxxopts::cxxopts spdlog::spdlog_header_only rt )
73+ if (ENABLE_RDMA)
74+ target_link_libraries (cxlmemsim_server_lib ${RDMA_LIBRARIES} )
75+ target_compile_options (cxlmemsim_server_lib PRIVATE ${RDMACM_CFLAGS_OTHER} ${IBV_CFLAGS_OTHER} )
76+ endif ()
77+
78+ # Build server (uses server library + main)
79+ add_executable (cxlmemsim_server src/main_server.cc )
80+ target_include_directories (cxlmemsim_server PRIVATE include src ${cxxopts_INCLUDE_DIR} ${spdlog_INCLUDE_DIR} )
81+ target_link_libraries (cxlmemsim_server cxlmemsim_server_lib cxlmemsim cxxopts::cxxopts spdlog::spdlog_header_only rt )
82+ if (ENABLE_RDMA)
83+ target_link_libraries (cxlmemsim_server ${RDMA_LIBRARIES} )
84+ endif ()
85+
86+ # Distributed SHM test
87+ add_executable (test_distributed_shm tests/test_distributed_shm.cpp )
88+ target_include_directories (test_distributed_shm PRIVATE include src ${cxxopts_INCLUDE_DIR} ${spdlog_INCLUDE_DIR} )
89+ target_link_libraries (test_distributed_shm cxlmemsim_server_lib cxlmemsim cxxopts::cxxopts spdlog::spdlog_header_only rt )
90+ if (ENABLE_RDMA)
91+ target_link_libraries (test_distributed_shm ${RDMA_LIBRARIES} )
92+ endif ()
93+
8194# Installation targets
8295if (ENABLE_RDMA)
8396 install (TARGETS cxlmemsim_server
0 commit comments