Skip to content

Commit 5bed44d

Browse files
authored
Fix linker errors when building with Makefile and --no-undefined (#250)
- Fix linker errors when building with Makefile and `--no-undefined`. Adds dependency to $(DYLIBNAME), i.e libvalkey.so, in libvalkey_rdma.so and libvalkye_tls.so - Remove superfluous -Wl,-undefined -Wl,dynamic_lookup Additional cleanups: - Cleanup of DYLIB_MAKE_CMD in Makefile - Remove OPTIMIZATION, not applicable for linker - Remove duplicate '-o' flag on SunOS and macOS - Remove duplicate '$(TLS_LDFLAGS)' on SunOS and macOS - Only modify and use REAL_LDFLAGS in Makefile. Signed-off-by: Björn Svensson <bjorn.a.svensson@est.tech>
1 parent c090c28 commit 5bed44d

File tree

3 files changed

+16
-19
lines changed

3 files changed

+16
-19
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ jobs:
9191
packages: libevent-dev valgrind valkey-server
9292
version: 1.0
9393
- name: Build
94-
run: USE_TLS=1 TEST_ASYNC=1 make
94+
run: USE_TLS=1 TEST_ASYNC=1 make -j$(nproc)
9595
- name: Run tests
9696
working-directory: tests
9797
env:

CMakeLists.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,6 @@ IF(ENABLE_TLS)
193193
$<BUILD_INTERFACE:${SDS_INCLUDE_DIR}>
194194
)
195195

196-
IF (APPLE AND BUILD_SHARED_LIBS)
197-
SET_PROPERTY(TARGET valkey_tls PROPERTY LINK_FLAGS "-Wl,-undefined -Wl,dynamic_lookup")
198-
ENDIF()
199-
200196
set_target_properties(valkey_tls PROPERTIES
201197
C_VISIBILITY_PRESET hidden
202198
WINDOWS_EXPORT_ALL_SYMBOLS TRUE

Makefile

Lines changed: 15 additions & 14 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

@@ -183,25 +183,24 @@ ifeq ($(USE_TLS),1)
183183
endif
184184

185185
ifeq ($(uname_S),FreeBSD)
186-
LDFLAGS += -lm
186+
REAL_LDFLAGS += -lm
187187
else ifeq ($(uname_S),SunOS)
188188
ifeq ($(shell $(CC) -V 2>&1 | grep -iq 'sun\|studio' && echo true),true)
189189
SUN_SHARED_FLAG = -G
190190
else
191191
SUN_SHARED_FLAG = -shared
192192
endif
193193
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)
194+
DYLIB_MAKE_CMD = $(CC) $(SUN_SHARED_FLAG) -h $(DYLIB_PATCH_NAME)
195+
TLS_DYLIB_MAKE_CMD = $(CC) $(SUN_SHARED_FLAG) -h $(TLS_DYLIB_PATCH_NAME)
196196
else ifeq ($(uname_S),Darwin)
197197
DYLIBSUFFIX=dylib
198198
DYLIB_PATCH_NAME=$(LIBNAME).$(LIBVALKEY_MAJOR).$(LIBVALKEY_MINOR).$(LIBVALKEY_PATCH).$(DYLIBSUFFIX)
199199
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)
200+
DYLIB_MAKE_CMD=$(CC) -dynamiclib -Wl,-install_name,$(PREFIX)/$(LIBRARY_PATH)/$(DYLIB_PATCH_NAME)
201201
TLS_DYLIB_PATCH_NAME=$(TLS_LIBNAME).$(LIBVALKEY_MAJOR).$(LIBVALKEY_MINOR).$(LIBVALKEY_PATCH).$(DYLIBSUFFIX)
202202
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
203+
TLS_DYLIB_MAKE_CMD=$(CC) -dynamiclib -Wl,-install_name,$(PREFIX)/$(LIBRARY_PATH)/$(TLS_DYLIB_PATCH_NAME)
205204
endif
206205

207206
all: dynamic static pkgconfig tests
@@ -212,14 +211,16 @@ $(DYLIBNAME): $(OBJS) | $(LIB_DIR)
212211
$(STLIBNAME): $(OBJS) | $(LIB_DIR)
213212
$(STLIB_MAKE_CMD) $(STLIBNAME) $(OBJS)
214213

215-
$(TLS_DYLIBNAME): $(TLS_OBJS)
216-
$(TLS_DYLIB_MAKE_CMD) $(DYLIB_PLUGIN) -o $(TLS_DYLIBNAME) $(TLS_OBJS) $(REAL_LDFLAGS) $(LDFLAGS) $(TLS_LDFLAGS)
214+
$(TLS_DYLIBNAME): $(TLS_OBJS) $(DYLIBNAME) | $(LIB_DIR)
215+
$(TLS_DYLIB_MAKE_CMD) -o $(TLS_DYLIBNAME) \
216+
$(TLS_OBJS) $(REAL_LDFLAGS) $(DYLIBNAME) $(TLS_LDFLAGS)
217217

218218
$(TLS_STLIBNAME): $(TLS_OBJS)
219219
$(STLIB_MAKE_CMD) $(TLS_STLIBNAME) $(TLS_OBJS)
220220

221-
$(RDMA_DYLIBNAME): $(RDMA_OBJS)
222-
$(RDMA_DYLIB_MAKE_CMD) $(DYLIB_PLUGIN) -o $(RDMA_DYLIBNAME) $(RDMA_OBJS) $(REAL_LDFLAGS) $(LDFLAGS) $(RDMA_LDFLAGS)
221+
$(RDMA_DYLIBNAME): $(RDMA_OBJS) $(DYLIBNAME) | $(LIB_DIR)
222+
$(RDMA_DYLIB_MAKE_CMD) -o $(RDMA_DYLIBNAME) \
223+
$(RDMA_OBJS) $(REAL_LDFLAGS) $(DYLIBNAME) $(RDMA_LDFLAGS)
223224

224225
$(RDMA_STLIBNAME): $(RDMA_OBJS)
225226
$(STLIB_MAKE_CMD) $(RDMA_STLIBNAME) $(RDMA_OBJS)
@@ -231,7 +232,7 @@ $(OBJ_DIR)/%.o: $(TEST_DIR)/%.c | $(OBJ_DIR)
231232
$(CC) -std=c99 -pedantic $(REAL_CFLAGS) -I$(INCLUDE_DIR) -I$(SDS_INCLUDE_DIR) -I$(DICT_INCLUDE_DIR) -I$(SRC_DIR) -MMD -MP -c $< -o $@
232233

233234
$(TEST_DIR)/%: $(OBJ_DIR)/%.o $(STLIBNAME)
234-
$(CC) -o $@ $< $(RDMA_STLIB) $(STLIBNAME) $(TLS_STLIB) $(LDFLAGS) $(TEST_LDFLAGS)
235+
$(CC) -o $@ $< $(RDMA_STLIB) $(STLIBNAME) $(TLS_STLIB) $(REAL_LDFLAGS) $(TEST_LDFLAGS)
235236

236237
$(OBJ_DIR):
237238
mkdir -p $(OBJ_DIR)

0 commit comments

Comments
 (0)