Skip to content

Commit a137152

Browse files
committed
Update deps/libvalkey to version 0.3.0
Squashed 'deps/libvalkey/' changes from b012f8e85..62e757d17 62e757d17 Release 0.3.0 (valkey-io#283) a554f0942 Fix potential uint32_t underflow issue (valkey-io#280) 8f9051ae0 Correcting command parser bug (valkey-io#277) 29023eb36 Add valkey-json, valkey-bloom, valkey-search to cmddef.h ae756bc89 Update cmddef.h to Valkey 9.0.0 21abd737e Replace problematic alloca() with fixed stack alloc 38191079c Fix compilation on Solaris with Sun/Solaris Studio ef5de0312 Make libvalkey initialization thread-safe ae341dea5 Support slotmap updates using CLUSTER NODES in RESP3 (valkey-io#262) 36f6e2292 Fix the long-blocking read for Valkey RDMA. (valkey-io#233) c090c28be Use a uintptr_t hop for casting pointers to ints daa7f11ac Avoid heap buffer overflow in valkeyAsyncFormattedCommand (valkey-io#245) 15974930d Add option to select a logical database (valkey-io#244) 983d67e4f Install the macosx adapter on Apple platforms only ... git-subtree-dir: deps/libvalkey git-subtree-split: 62e757d174748642ddd0cefad1ebae3941a6bb92 Signed-off-by: Björn Svensson <bjorn.a.svensson@est.tech>
1 parent 80bd689 commit a137152

28 files changed

Lines changed: 742 additions & 209 deletions

deps/libvalkey/CMakeLists.txt

Lines changed: 78 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ getDefinedVersion(VERSION_MAJOR)
1111
getDefinedVersion(VERSION_MINOR)
1212
getDefinedVersion(VERSION_PATCH)
1313
set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
14-
MESSAGE("Detected version: ${VERSION}")
14+
message("Detected libvalkey version: ${VERSION}")
1515

16-
PROJECT(valkey LANGUAGES "C" VERSION "${VERSION}")
16+
project(libvalkey LANGUAGES "C" VERSION "${VERSION}")
1717
INCLUDE(GNUInstallDirs)
1818

19+
option(ENABLE_THREADS "Enable thread-safe initialization" ON)
1920
OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON)
2021
OPTION(ENABLE_TLS "Build valkey_tls for TLS support" OFF)
2122
OPTION(DISABLE_TESTS "If tests should be compiled or not" OFF)
@@ -70,18 +71,36 @@ set_target_properties(valkey PROPERTIES
7071
SOVERSION "${VERSION_MAJOR}"
7172
VERSION "${VERSION}")
7273

73-
IF(MSVC)
74-
SET_TARGET_PROPERTIES(valkey
75-
PROPERTIES COMPILE_FLAGS /Z7)
76-
ENDIF()
74+
if(MSVC)
75+
# Produce object files that contain debug info.
76+
target_compile_options(valkey PRIVATE /Z7)
77+
endif()
78+
79+
set(valkey_link_libraries)
80+
set(valkey_compile_definitions)
81+
7782
IF(WIN32)
78-
TARGET_LINK_LIBRARIES(valkey PUBLIC ws2_32 crypt32)
83+
list(APPEND valkey_link_libraries ws2_32 crypt32)
7984
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
80-
TARGET_LINK_LIBRARIES(valkey PUBLIC m)
85+
list(APPEND valkey_link_libraries m)
8186
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
82-
TARGET_LINK_LIBRARIES(valkey PUBLIC socket)
87+
list(APPEND valkey_link_libraries socket)
8388
ENDIF()
8489

90+
if(ENABLE_THREADS)
91+
find_package(Threads REQUIRED)
92+
list(APPEND valkey_link_libraries Threads::Threads)
93+
list(APPEND valkey_compile_definitions VALKEY_USE_THREADS)
94+
endif()
95+
96+
if(valkey_link_libraries)
97+
target_link_libraries(valkey PUBLIC ${valkey_link_libraries})
98+
endif()
99+
100+
if(valkey_compile_definitions)
101+
target_compile_definitions(valkey PRIVATE ${valkey_compile_definitions})
102+
endif()
103+
85104
TARGET_INCLUDE_DIRECTORIES(valkey
86105
PUBLIC
87106
$<INSTALL_INTERFACE:include>
@@ -94,8 +113,9 @@ TARGET_INCLUDE_DIRECTORIES(valkey
94113
CONFIGURE_FILE(valkey.pc.in valkey.pc @ONLY)
95114

96115
set(CPACK_PACKAGE_VENDOR "Valkey")
116+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Minimalistic C client library for Valkey")
97117
set(CPACK_PACKAGE_DESCRIPTION "\
98-
Libvalkey is a minimalistic C client library for the Valkey, KeyDB, and Redis databases
118+
Libvalkey is a minimalistic C client library for the Valkey, KeyDB, and Redis databases.
99119
100120
It is minimalistic because it just adds minimal support for the protocol, \
101121
but at the same time it uses a high level printf-alike API in order to make \
@@ -107,7 +127,7 @@ reply parser that is decoupled from the I/O layer. It is a stream parser designe
107127
for easy reusability, which can for instance be used in higher level language bindings \
108128
for efficient reply parsing.
109129
110-
valkey only supports the binary-safe RESP protocol, so you can use it with any Redis \
130+
Libvalkey only supports the binary-safe RESP protocol, so you can use it with any Redis \
111131
compatible server >= 1.2.0.
112132
113133
The library comes with multiple APIs. There is the synchronous API, the asynchronous API \
@@ -116,7 +136,9 @@ set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/valkey-io/libvalkey")
116136
set(CPACK_PACKAGE_CONTACT "michael dot grunder at gmail dot com")
117137
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
118138
set(CPACK_RPM_PACKAGE_AUTOREQPROV ON)
119-
139+
set(CPACK_RPM_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}")
140+
set(CPACK_RPM_PACKAGE_GROUP "Productivity/Databases/Clients")
141+
set(CPACK_RPM_PACKAGE_LICENSE "BSD-3-Clause")
120142
include(CPack)
121143

122144
INSTALL(TARGETS valkey
@@ -125,17 +147,23 @@ INSTALL(TARGETS valkey
125147
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
126148
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
127149

128-
if (MSVC AND BUILD_SHARED_LIBS)
129-
INSTALL(FILES $<TARGET_PDB_FILE:valkey>
130-
DESTINATION ${CMAKE_INSTALL_BINDIR}
131-
CONFIGURATIONS Debug RelWithDebInfo)
150+
if(MSVC AND BUILD_SHARED_LIBS)
151+
# Install linker generated program database file.
152+
install(FILES $<TARGET_PDB_FILE:valkey>
153+
DESTINATION ${CMAKE_INSTALL_BINDIR}
154+
CONFIGURATIONS Debug RelWithDebInfo)
132155
endif()
133156

134157
# Install public headers
135158
install(DIRECTORY include/valkey
136159
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
137160
PATTERN "tls.h" EXCLUDE
138-
PATTERN "rdma.h" EXCLUDE)
161+
PATTERN "rdma.h" EXCLUDE
162+
PATTERN "adapters/macosx.h" EXCLUDE)
163+
if(APPLE)
164+
install(FILES include/valkey/adapters/macosx.h
165+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/valkey/adapters)
166+
endif()
139167

140168
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/valkey.pc
141169
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
@@ -187,23 +215,16 @@ IF(ENABLE_TLS)
187215
$<BUILD_INTERFACE:${SDS_INCLUDE_DIR}>
188216
)
189217

190-
IF (APPLE AND BUILD_SHARED_LIBS)
191-
SET_PROPERTY(TARGET valkey_tls PROPERTY LINK_FLAGS "-Wl,-undefined -Wl,dynamic_lookup")
192-
ENDIF()
193-
194218
set_target_properties(valkey_tls PROPERTIES
195219
C_VISIBILITY_PRESET hidden
196220
WINDOWS_EXPORT_ALL_SYMBOLS TRUE
197221
SOVERSION "${VERSION_MAJOR}"
198222
VERSION "${VERSION}")
199-
IF(MSVC)
200-
SET_TARGET_PROPERTIES(valkey_tls
201-
PROPERTIES COMPILE_FLAGS /Z7)
202-
ENDIF()
203-
TARGET_LINK_LIBRARIES(valkey_tls PRIVATE OpenSSL::SSL)
204-
if(WIN32 OR CYGWIN)
205-
target_link_libraries(valkey_tls PRIVATE valkey)
223+
if(MSVC)
224+
# Produce object files that contain debug info.
225+
target_compile_options(valkey_tls PRIVATE /Z7)
206226
endif()
227+
target_link_libraries(valkey_tls PRIVATE valkey::valkey OpenSSL::SSL)
207228
CONFIGURE_FILE(valkey_tls.pc.in valkey_tls.pc @ONLY)
208229

209230
INSTALL(TARGETS valkey_tls
@@ -216,10 +237,11 @@ IF(ENABLE_TLS)
216237
install(FILES include/valkey/tls.h
217238
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/valkey)
218239

219-
if (MSVC AND BUILD_SHARED_LIBS)
220-
INSTALL(FILES $<TARGET_PDB_FILE:valkey_tls>
221-
DESTINATION ${CMAKE_INSTALL_BINDIR}
222-
CONFIGURATIONS Debug RelWithDebInfo)
240+
if(MSVC AND BUILD_SHARED_LIBS)
241+
# Install linker generated program database file.
242+
install(FILES $<TARGET_PDB_FILE:valkey_tls>
243+
DESTINATION ${CMAKE_INSTALL_BINDIR}
244+
CONFIGURATIONS Debug RelWithDebInfo)
223245
endif()
224246

225247
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/valkey_tls.pc
@@ -254,7 +276,7 @@ if(ENABLE_RDMA)
254276
add_library(valkey_rdma ${valkey_rdma_sources})
255277
add_library(valkey::valkey_rdma ALIAS valkey_rdma)
256278

257-
target_link_libraries(valkey_rdma LINK_PRIVATE ${RDMACM_LIBRARIES} ${IBVERBS_LIBRARIES})
279+
target_link_libraries(valkey_rdma PRIVATE valkey::valkey ${RDMACM_LIBRARIES} ${IBVERBS_LIBRARIES})
258280
target_include_directories(valkey_rdma
259281
PRIVATE
260282
$<INSTALL_INTERFACE:include>
@@ -303,26 +325,32 @@ endif()
303325

304326
# Add tests
305327
if(NOT DISABLE_TESTS)
306-
if(BUILD_SHARED_LIBS)
307-
# Test using a static library since symbols are not hidden then.
308-
# Use same source, include dirs and dependencies as the shared library.
309-
add_library(valkey_unittest STATIC ${valkey_sources})
310-
get_target_property(include_directories valkey::valkey INCLUDE_DIRECTORIES)
311-
target_include_directories(valkey_unittest PUBLIC ${include_directories})
312-
get_target_property(link_libraries valkey::valkey LINK_LIBRARIES)
313-
if(link_libraries)
314-
target_link_libraries(valkey_unittest PUBLIC ${link_libraries})
315-
endif()
316-
# Create libvalkey_unittest.a in the tests directory.
317-
set_target_properties(valkey_unittest PROPERTIES
318-
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/tests")
319-
else()
320-
# Target is an alias for the static library.
321-
add_library(valkey_unittest ALIAS valkey)
328+
# Unit tests uses a static library to ensure all symbols are visible.
329+
# This single library also bundles TLS and RDMA when enabled.
330+
add_library(valkey_unittest STATIC ${valkey_sources} ${valkey_tls_sources} ${valkey_rdma_sources})
331+
332+
# Mirror the include directories.
333+
get_target_property(include_directories valkey::valkey INCLUDE_DIRECTORIES)
334+
target_include_directories(valkey_unittest PUBLIC ${include_directories})
335+
336+
if(valkey_compile_definitions)
337+
target_compile_definitions(valkey_unittest PRIVATE ${valkey_compile_definitions})
338+
endif()
339+
if(valkey_link_libraries)
340+
target_link_libraries(valkey_unittest PUBLIC ${valkey_link_libraries})
341+
endif()
342+
if(ENABLE_TLS)
343+
target_link_libraries(valkey_unittest PRIVATE OpenSSL::SSL)
322344
endif()
345+
if(ENABLE_RDMA)
346+
target_link_libraries(valkey_unittest PRIVATE ${RDMACM_LIBRARIES} ${IBVERBS_LIBRARIES})
347+
endif()
348+
349+
# Create libvalkey_unittest.a in the tests directory.
350+
set_target_properties(valkey_unittest PROPERTIES
351+
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/tests")
323352

324353
# Make sure ctest prints the output when a test fails.
325-
# Must be set before including CTest.
326354
set(CMAKE_CTEST_ARGUMENTS "--output-on-failure")
327355
include(CTest)
328356
add_subdirectory(tests)

deps/libvalkey/CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ Adhere to the existing coding style and make sure to mimic best possible.
6969
### Code formatting
7070

7171
When making a change, please use `git clang-format` or [format-files.sh](./scripts/format-files.sh) to format your changes properly.
72-
This repository is currently using `clang-format` 18.1.3 to format the code, which can be installed using `pip install clang-format==18.1.3` or other preferred method.
72+
This repository is currently using `clang-format` 18.1.8 to format the code, which can be installed using `pip install clang-format==18.1.8` or other preferred method.
7373

7474
## Running cluster tests
7575

deps/libvalkey/Makefile

Lines changed: 61 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ DYLIB_MAJOR_NAME=$(LIBNAME).$(DYLIBSUFFIX).$(LIBVALKEY_MAJOR)
8686
DYLIB_ROOT_NAME=$(LIBNAME).$(DYLIBSUFFIX)
8787
DYLIBNAME=$(LIB_DIR)/$(DYLIB_ROOT_NAME)
8888

89-
DYLIB_MAKE_CMD=$(CC) $(OPTIMIZATION) $(PLATFORM_FLAGS) -shared -Wl,-soname,$(DYLIB_MAJOR_NAME)
89+
DYLIB_MAKE_CMD=$(CC) $(PLATFORM_FLAGS) -shared -Wl,-soname,$(DYLIB_MAJOR_NAME)
9090
STLIBNAME=$(LIB_DIR)/$(LIBNAME).$(STLIBSUFFIX)
9191
STLIB_MAKE_CMD=$(AR) rcs
9292

@@ -99,7 +99,7 @@ TLS_DYLIB_MAJOR_NAME=$(TLS_LIBNAME).$(DYLIBSUFFIX).$(LIBVALKEY_MAJOR)
9999
TLS_DYLIB_ROOT_NAME=$(TLS_LIBNAME).$(DYLIBSUFFIX)
100100
TLS_DYLIBNAME=$(LIB_DIR)/$(TLS_LIBNAME).$(DYLIBSUFFIX)
101101
TLS_STLIBNAME=$(LIB_DIR)/$(TLS_LIBNAME).$(STLIBSUFFIX)
102-
TLS_DYLIB_MAKE_CMD=$(CC) $(OPTIMIZATION) $(PLATFORM_FLAGS) -shared -Wl,-soname,$(TLS_DYLIB_MAJOR_NAME)
102+
TLS_DYLIB_MAKE_CMD=$(CC) $(PLATFORM_FLAGS) -shared -Wl,-soname,$(TLS_DYLIB_MAJOR_NAME)
103103

104104
USE_TLS?=0
105105

@@ -130,7 +130,7 @@ RDMA_DYLIB_MAJOR_NAME=$(RDMA_LIBNAME).$(DYLIBSUFFIX).$(LIBVALKEY_MAJOR)
130130
RDMA_DYLIB_ROOT_NAME=$(RDMA_LIBNAME).$(DYLIBSUFFIX)
131131
RDMA_DYLIBNAME=$(LIB_DIR)/$(RDMA_LIBNAME).$(DYLIBSUFFIX)
132132
RDMA_STLIBNAME=$(LIB_DIR)/$(RDMA_LIBNAME).$(STLIBSUFFIX)
133-
RDMA_DYLIB_MAKE_CMD=$(CC) $(OPTIMIZATION) $(PLATFORM_FLAGS) -shared -Wl,-soname,$(RDMA_DYLIB_MAJOR_NAME)
133+
RDMA_DYLIB_MAKE_CMD=$(CC) $(PLATFORM_FLAGS) -shared -Wl,-soname,$(RDMA_DYLIB_MAJOR_NAME)
134134

135135
USE_RDMA?=0
136136

@@ -182,28 +182,63 @@ ifeq ($(USE_TLS),1)
182182
TLS_LDFLAGS+=-lssl -lcrypto
183183
endif
184184

185-
ifeq ($(uname_S),FreeBSD)
186-
LDFLAGS += -lm
187-
else ifeq ($(UNAME_S),SunOS)
188-
ifeq ($(shell $(CC) -V 2>&1 | grep -iq 'sun\|studio' && echo true),true)
185+
USE_THREADS?=1
186+
ifeq ($(USE_THREADS),1)
187+
CFLAGS+=-DVALKEY_USE_THREADS
188+
endif
189+
190+
PTHREAD_FLAGS :=
191+
192+
ifeq ($(uname_S),Linux)
193+
ifeq ($(USE_THREADS),1)
194+
PTHREAD_FLAGS += -pthread
195+
endif
196+
else ifeq ($(uname_S),FreeBSD)
197+
REAL_LDFLAGS += -lm
198+
ifeq ($(USE_THREADS),1)
199+
PTHREAD_FLAGS += -pthread
200+
endif
201+
else ifeq ($(uname_S),SunOS)
202+
# Solaris' default grep doesn't have -E so we need two checks
203+
CC_VERSION := $(shell $(CC) -V 2>&1 || echo unknown)
204+
ifneq (,$(findstring Sun C,$(CC_VERSION)))
205+
HAVE_SUN_CC := 1
206+
else ifneq (,$(findstring Studio,$(CC_VERSION)))
207+
HAVE_SUN_CC := 1
208+
endif
209+
210+
ifeq ($(HAVE_SUN_CC),1)
189211
SUN_SHARED_FLAG = -G
212+
REAL_CFLAGS += -mt
213+
ifeq ($(USE_THREADS),1)
214+
PTHREAD_FLAGS += -mt
215+
endif
190216
else
191217
SUN_SHARED_FLAG = -shared
218+
ifeq ($(USE_THREADS),1)
219+
PTHREAD_FLAGS += -pthread
220+
endif
192221
endif
193222
REAL_LDFLAGS += -ldl -lnsl -lsocket
194-
DYLIB_MAKE_CMD = $(CC) $(OPTIMIZATION) $(SUN_SHARED_FLAG) -o $(DYLIBNAME) -h $(DYLIB_PATCH_NAME) $(LDFLAGS)
195-
TLS_DYLIB_MAKE_CMD = $(CC) $(SUN_SHARED_FLAG) -o $(TLS_DYLIBNAME) -h $(TLS_DYLIB_PATCH_NAME) $(LDFLAGS) $(TLS_LDFLAGS)
223+
DYLIB_MAKE_CMD = $(CC) $(SUN_SHARED_FLAG) -h $(DYLIB_PATCH_NAME)
224+
TLS_DYLIB_MAKE_CMD = $(CC) $(SUN_SHARED_FLAG) -h $(TLS_DYLIB_PATCH_NAME)
196225
else ifeq ($(uname_S),Darwin)
226+
ifeq ($(USE_THREADS),1)
227+
PTHREAD_FLAGS += -pthread
228+
endif
197229
DYLIBSUFFIX=dylib
198230
DYLIB_PATCH_NAME=$(LIBNAME).$(LIBVALKEY_MAJOR).$(LIBVALKEY_MINOR).$(LIBVALKEY_PATCH).$(DYLIBSUFFIX)
199231
DYLIB_MAJOR_NAME=$(LIBNAME).$(LIBVALKEY_MAJOR).$(DYLIBSUFFIX)
200-
DYLIB_MAKE_CMD=$(CC) -dynamiclib -Wl,-install_name,$(PREFIX)/$(LIBRARY_PATH)/$(DYLIB_PATCH_NAME) -o $(DYLIBNAME) $(LDFLAGS)
232+
DYLIB_MAKE_CMD=$(CC) -dynamiclib \
233+
-Wl,-install_name,$(PREFIX)/$(LIBRARY_PATH)/$(DYLIB_PATCH_NAME)
201234
TLS_DYLIB_PATCH_NAME=$(TLS_LIBNAME).$(LIBVALKEY_MAJOR).$(LIBVALKEY_MINOR).$(LIBVALKEY_PATCH).$(DYLIBSUFFIX)
202235
TLS_DYLIB_MAJOR_NAME=$(TLS_LIBNAME).$(LIBVALKEY_MAJOR).$(DYLIBSUFFIX)
203-
TLS_DYLIB_MAKE_CMD=$(CC) -dynamiclib -Wl,-install_name,$(PREFIX)/$(LIBRARY_PATH)/$(TLS_DYLIB_PATCH_NAME) -o $(TLS_DYLIBNAME) $(LDFLAGS) $(TLS_LDFLAGS)
204-
DYLIB_PLUGIN=-Wl,-undefined -Wl,dynamic_lookup
236+
TLS_DYLIB_MAKE_CMD=$(CC) -dynamiclib \
237+
-Wl,-install_name,$(PREFIX)/$(LIBRARY_PATH)/$(TLS_DYLIB_PATCH_NAME)
205238
endif
206239

240+
REAL_LDFLAGS += $(PTHREAD_FLAGS)
241+
207242
all: dynamic static pkgconfig tests
208243

209244
$(DYLIBNAME): $(OBJS) | $(LIB_DIR)
@@ -212,14 +247,16 @@ $(DYLIBNAME): $(OBJS) | $(LIB_DIR)
212247
$(STLIBNAME): $(OBJS) | $(LIB_DIR)
213248
$(STLIB_MAKE_CMD) $(STLIBNAME) $(OBJS)
214249

215-
$(TLS_DYLIBNAME): $(TLS_OBJS)
216-
$(TLS_DYLIB_MAKE_CMD) $(DYLIB_PLUGIN) -o $(TLS_DYLIBNAME) $(TLS_OBJS) $(REAL_LDFLAGS) $(LDFLAGS) $(TLS_LDFLAGS)
250+
$(TLS_DYLIBNAME): $(TLS_OBJS) $(DYLIBNAME) | $(LIB_DIR)
251+
$(TLS_DYLIB_MAKE_CMD) -o $(TLS_DYLIBNAME) \
252+
$(TLS_OBJS) $(REAL_LDFLAGS) $(DYLIBNAME) $(TLS_LDFLAGS)
217253

218254
$(TLS_STLIBNAME): $(TLS_OBJS)
219255
$(STLIB_MAKE_CMD) $(TLS_STLIBNAME) $(TLS_OBJS)
220256

221-
$(RDMA_DYLIBNAME): $(RDMA_OBJS)
222-
$(RDMA_DYLIB_MAKE_CMD) $(DYLIB_PLUGIN) -o $(RDMA_DYLIBNAME) $(RDMA_OBJS) $(REAL_LDFLAGS) $(LDFLAGS) $(RDMA_LDFLAGS)
257+
$(RDMA_DYLIBNAME): $(RDMA_OBJS) $(DYLIBNAME) | $(LIB_DIR)
258+
$(RDMA_DYLIB_MAKE_CMD) -o $(RDMA_DYLIBNAME) \
259+
$(RDMA_OBJS) $(REAL_LDFLAGS) $(DYLIBNAME) $(RDMA_LDFLAGS)
223260

224261
$(RDMA_STLIBNAME): $(RDMA_OBJS)
225262
$(STLIB_MAKE_CMD) $(RDMA_STLIBNAME) $(RDMA_OBJS)
@@ -230,8 +267,8 @@ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
230267
$(OBJ_DIR)/%.o: $(TEST_DIR)/%.c | $(OBJ_DIR)
231268
$(CC) -std=c99 -pedantic $(REAL_CFLAGS) -I$(INCLUDE_DIR) -I$(SDS_INCLUDE_DIR) -I$(DICT_INCLUDE_DIR) -I$(SRC_DIR) -MMD -MP -c $< -o $@
232269

233-
$(TEST_DIR)/%: $(OBJ_DIR)/%.o $(STLIBNAME)
234-
$(CC) -o $@ $< $(RDMA_STLIB) $(STLIBNAME) $(TLS_STLIB) $(LDFLAGS) $(TEST_LDFLAGS)
270+
$(TEST_DIR)/%: $(OBJ_DIR)/%.o $(STLIBNAME) $(TLS_STLIB)
271+
$(CC) -o $@ $< $(RDMA_STLIB) $(STLIBNAME) $(TLS_STLIB) $(REAL_LDFLAGS) $(TEST_LDFLAGS)
235272

236273
$(OBJ_DIR):
237274
mkdir -p $(OBJ_DIR)
@@ -249,7 +286,12 @@ pkgconfig: $(PKGCONFNAME) $(TLS_PKGCONF) $(RDMA_PKGCONF)
249286

250287
TEST_LDFLAGS = $(TLS_LDFLAGS) $(RDMA_LDFLAGS)
251288
ifeq ($(USE_TLS),1)
252-
TEST_LDFLAGS += -pthread
289+
# Tests need pthreads if TLS is enabled, but only add it once
290+
ifeq ($(HAVE_SUN_CC),1)
291+
TEST_LDFLAGS += -mt
292+
else ifeq (,$(findstring -pthread,$(REAL_LDFLAGS) $(TEST_LDFLAGS)))
293+
TEST_LDFLAGS += -pthread
294+
endif
253295
endif
254296
ifeq ($(TEST_ASYNC),1)
255297
TEST_LDFLAGS += -levent

0 commit comments

Comments
 (0)