From c6ae2e83bcf9da8869364921db39ebd317faf7d4 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Tue, 28 Apr 2020 18:29:20 -0700 Subject: [PATCH] fix libzstd-mt underlinking issue fix #2045 When compiling `libzstd` in multithreading mode, the `libzstd-mt` recipe would not include `-pthread`, resulting in an underlinked dynamic library. Added a test on Travis to check that the library is fully linked. This makes it possible, in some future release, to build a multi-threaded `libzstd` dynamic library by default as it would no longer impact the build script of user programs. --- .travis.yml | 4 +++- lib/Makefile | 18 +++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index e4e455602..31fc42571 100644 --- a/.travis.yml +++ b/.travis.yml @@ -56,12 +56,14 @@ matrix: # DEVNULLRIGHTS : will request sudo rights to test permissions on /dev/null - DEVNULLRIGHTS=test make test - - name: gcc-6 + gcc-7 compilation # ~ 3mn + - name: gcc-6 + gcc-7 + libzstdmt compilation # ~ 6mn script: - make gcc6install gcc7install - CC=gcc-6 CFLAGS=-Werror make -j all - make clean - CC=gcc-7 CFLAGS=-Werror make -j all + - make clean + - LDFLAGS=-Wl,--no-undefined make -C lib libzstd-mt - name: gcc-8 + ASan + UBSan + Test Zstd # ~6.5mn script: diff --git a/lib/Makefile b/lib/Makefile index fc7daf080..7a05b158d 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -154,9 +154,6 @@ libzstd.a: $(ZSTD_OBJ) @echo compiling static library @$(AR) $(ARFLAGS) $@ $^ -libzstd.a-mt: CPPFLAGS += -DZSTD_MULTITHREAD -libzstd.a-mt: libzstd.a - ifneq (,$(filter Windows%,$(OS))) LIBZSTD = dll\libzstd.dll @@ -180,17 +177,20 @@ endif libzstd : $(LIBZSTD) -libzstd-mt : CPPFLAGS += -DZSTD_MULTITHREAD +lib : libzstd.a libzstd + +%-mt : CPPFLAGS += -DZSTD_MULTITHREAD +%-mt : LDFLAGS += -pthread + libzstd-mt : libzstd -lib: libzstd.a libzstd +libzstd.a-mt: libzstd.a -lib-mt: CPPFLAGS += -DZSTD_MULTITHREAD -lib-mt: lib +lib-mt : lib -lib-release lib-release-mt: DEBUGFLAGS := +%-release : DEBUGFLAGS := lib-release: lib -lib-release-mt: lib-mt +lib-mt-release : lib-mt # Special case : building library in single-thread mode _and_ without zstdmt_compress.c ZSTDMT_FILES = compress/zstdmt_compress.c