[PATCH 6/7] Limit the number of flags directly given to the linker, and refactor rpath

Mike Hommey mh+jemalloc at glandium.org
Mon Apr 16 07:30:25 PDT 2012


From: Mike Hommey <mh at glandium.org>

This will make things easier for MSVC support.
---
 Makefile.in  |   17 +++++------------
 configure.ac |   11 +++++------
 2 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 146f57f..ef8f717 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -33,23 +33,20 @@ O := @o@
 A := @a@
 EXE := @exe@
 LIB := @lib@
-ifeq (macho, @abi@)
-WL_SONAME := dylib_install_name
-else
-WL_SONAME := soname
-endif
 REV := @rev@
 install_suffix := @install_suffix@
 ABI := @abi@
 XSLTPROC := @XSLTPROC@
 AUTOCONF := @AUTOCONF@
-RPATH := @RPATH@
+_RPATH = @RPATH@
+RPATH = $(if $(1),$(call _RPATH,$(1)))
 cfghdrs_in := @cfghdrs_in@
 cfghdrs_out := @cfghdrs_out@
 cfgoutputs_in := @cfgoutputs_in@
 cfgoutputs_out := @cfgoutputs_out@
 enable_autogen := @enable_autogen@
 enable_experimental := @enable_experimental@
+DSO_LDFLAGS = @DSO_LDFLAGS@
 
 ifeq (macho, $(ABI))
 TEST_LIBRARY_PATH := DYLD_FALLBACK_LIBRARY_PATH=$(objroot)lib
@@ -136,7 +133,7 @@ $(objroot)src/%.pic.$(O): $(srcroot)src/%.c
 
 $(objroot)lib/$(LIBJEMALLOC).$(SO).$(REV) : $(CSRCS:$(srcroot)%.c=$(objroot)%.pic.$(O))
 	@mkdir -p $(@D)
-	$(CC) -shared -Wl,-$(WL_SONAME),$(@F) $(RPATH_EXTRA:%=$(RPATH)%) -o $@ $+ $(LDFLAGS) $(LIBS)
+	$(CC) $(DSO_LDFLAGS) $(call RPATH,$(RPATH_EXTRA)) -o $@ $+ $(LDFLAGS) $(LIBS)
 
 $(objroot)lib/$(LIBJEMALLOC)_pic.$(A) : $(CSRCS:$(srcroot)%.c=$(objroot)%.pic.$(O))
 	@mkdir -p $(@D)
@@ -154,11 +151,7 @@ $(objroot)test/%.$(O): $(srcroot)test/%.c
 $(objroot)test/%$(EXE): $(objroot)test/%.$(O) \
 		 $(objroot)lib/$(LIBJEMALLOC).$(SO)
 	@mkdir -p $(@D)
-ifneq ($(RPATH), )
-	$(CC) -o $@ $< $(RPATH)$(objroot)lib -L$(objroot)lib -ljemalloc$(install_suffix) $(LIBS)
-else
-	$(CC) -o $@ $< -L$(objroot)lib -ljemalloc$(install_suffix) $(LIBS)
-endif
+	$(CC) -o $@ $< $(call RPATH,$(objroot)lib) -L$(objroot)lib -ljemalloc$(install_suffix) $(LIBS)
 
 build_lib_shared: $(DSOS)
 build_lib_static: $(STATIC_LIBS)
diff --git a/configure.ac b/configure.ac
index 11b09e8..8b9ba00 100644
--- a/configure.ac
+++ b/configure.ac
@@ -199,6 +199,8 @@ o="o"
 a="a"
 exe=
 lib="lib"
+DSO_LDFLAGS='-shared -Wl,-soname,$(@F)'
+RPATH='-Wl,-rpath,$(1)'
 
 dnl Heap profiling uses the log(3) function.
 LIBS="$LIBS -lm"
@@ -219,12 +221,12 @@ case "${host}" in
 	LD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES"
 	so="dylib"
 	force_tls="0"
+	DSO_LDFLAGS='-shared -Wl,-dylib_install_name,$(@F)'
 	;;
   *-*-freebsd*)
 	CFLAGS="$CFLAGS"
 	abi="elf"
 	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
-	RPATH="-Wl,-rpath,"
 	force_lazy_lock="1"
 	;;
   *-*-linux*)
@@ -233,7 +235,6 @@ case "${host}" in
 	abi="elf"
 	AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED], [ ])
 	AC_DEFINE([JEMALLOC_THREADED_INIT], [ ])
-	RPATH="-Wl,-rpath,"
 	;;
   *-*-netbsd*)
 	AC_MSG_CHECKING([ABI])
@@ -248,12 +249,11 @@ case "${host}" in
                           [abi="aout"])
 	AC_MSG_RESULT([$abi])
 	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
-	RPATH="-Wl,-rpath,"
 	;;
   *-*-solaris2*)
 	CFLAGS="$CFLAGS"
 	abi="elf"
-	RPATH="-Wl,-R,"
+	RPATH='-Wl,-R,$(1)'
 	dnl Solaris needs this for sigwait().
 	CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
 	LIBS="$LIBS -lposix4 -lsocket -lnsl"
@@ -267,12 +267,10 @@ case "${host}" in
 	  LD_PRELOAD_VAR="LDR_PRELOAD"
 	fi
 	abi="xcoff"
-	RPATH="-Wl,-rpath,"
 	;;
   *)
 	AC_MSG_RESULT([Unsupported operating system: ${host}])
 	abi="elf"
-	RPATH="-Wl,-rpath,"
 	;;
 esac
 AC_SUBST([abi])
@@ -283,6 +281,7 @@ AC_SUBST([o])
 AC_SUBST([a])
 AC_SUBST([exe])
 AC_SUBST([lib])
+AC_SUBST([DSO_LDFLAGS])
 
 JE_COMPILABLE([__attribute__ syntax],
               [static __attribute__((unused)) void foo(void){}],
-- 
1.7.10




More information about the jemalloc-discuss mailing list