diff options
author | Arun Sharma <asharma@fb.com> | 2011-02-15 22:13:38 (GMT) |
---|---|---|
committer | je <je@fb.com> | 2011-03-02 19:14:50 (GMT) |
commit | af5d6987f829ccd6e14dd1f57586cfb072a533c7 (patch) | |
tree | c4c9ddc247ddd551a671de8980361bd9a94b1004 /jemalloc | |
parent | 655f04a5a47b5292e328bb902fb5f574d09e2e9d (diff) | |
download | jemalloc-af5d6987f829ccd6e14dd1f57586cfb072a533c7.zip jemalloc-af5d6987f829ccd6e14dd1f57586cfb072a533c7.tar.gz jemalloc-af5d6987f829ccd6e14dd1f57586cfb072a533c7.tar.bz2 |
Build both PIC and no PIC static libraries
When jemalloc is linked into an executable (as opposed to a shared
library), compiling with -fno-pic can have significant advantages,
mainly because we don't have to go throught the GOT (global offset
table).
Users who want to link jemalloc into a shared library that could
be dlopened need to link with libjemalloc_pic.a or libjemalloc.so.
Diffstat (limited to 'jemalloc')
-rw-r--r-- | jemalloc/Makefile.in | 25 | ||||
-rw-r--r-- | jemalloc/include/jemalloc/internal/jemalloc_internal.h.in | 5 |
2 files changed, 19 insertions, 11 deletions
diff --git a/jemalloc/Makefile.in b/jemalloc/Makefile.in index eb8a21f..6dfaf5b 100644 --- a/jemalloc/Makefile.in +++ b/jemalloc/Makefile.in @@ -20,7 +20,7 @@ MANDIR := $(DESTDIR)@MANDIR@ # Build parameters. CPPFLAGS := @CPPFLAGS@ -I@srcroot@include -I@objroot@include -CFLAGS := @CFLAGS@ -fPIC -DPIC +CFLAGS := @CFLAGS@ ifeq (macho, @abi@) CFLAGS += -dynamic endif @@ -55,6 +55,7 @@ CSRCS := @srcroot@src/jemalloc.c @srcroot@src/arena.c @srcroot@src/base.c \ ifeq (macho, @abi@) CSRCS += @srcroot@src/zone.c endif +STATIC_LIBS := @objroot@lib/libjemalloc@install_suffix@.a DSOS := @objroot@lib/libjemalloc@install_suffix@.$(SO).$(REV) \ @objroot@lib/libjemalloc@install_suffix@.$(SO) \ @objroot@lib/libjemalloc@install_suffix@_pic.a @@ -75,7 +76,7 @@ CTESTS := @srcroot@test/allocated.c @srcroot@test/allocm.c \ .SECONDARY : $(CTESTS:@srcroot@%.c=@objroot@%.o) # Default target. -all: $(DSOS) +all: $(DSOS) $(STATIC_LIBS) dist: doc @@ -99,15 +100,24 @@ doc: $(DOCS) $(CC) $(CFLAGS) -c $(CPPFLAGS) -o $@ $< @$(SHELL) -ec "$(CC) -MM $(CPPFLAGS) $< | sed \"s/\($(subst /,\/,$(notdir $(basename $@)))\)\.o\([ :]*\)/$(subst /,\/,$(strip $(dir $@)))\1.o \2/g\" > $(@:%.o=%.d)" +@objroot@src/%.pic.o: @srcroot@src/%.c + @mkdir -p $(@D) + $(CC) $(CFLAGS) -fPIC -DPIC -c $(CPPFLAGS) -o $@ $< + @$(SHELL) -ec "$(CC) -MM $(CPPFLAGS) $< | sed \"s/\($(subst /,\/,$(notdir $(basename $@)))\)\.o\([ :]*\)/$(subst /,\/,$(strip $(dir $@)))\1.o \2/g\" > $(@:%.o=%.d)" + %.$(SO) : %.$(SO).$(REV) @mkdir -p $(@D) ln -sf $(<F) $@ -@objroot@lib/libjemalloc@install_suffix@.$(SO).$(REV) : $(CSRCS:@srcroot@%.c=@objroot@%.o) +@objroot@lib/libjemalloc@install_suffix@.$(SO).$(REV) : $(CSRCS:@srcroot@%.c=@objroot@%.pic.o) @mkdir -p $(@D) $(CC) -shared -Wl,-$(WL_SONAME),$(@F) $(RPATH_EXTRA:%=@RPATH@%) -o $@ $+ $(LDFLAGS) $(LIBS) -@objroot@lib/libjemalloc@install_suffix@_pic.a : $(CSRCS:@srcroot@%.c=@objroot@%.o) +@objroot@lib/libjemalloc@install_suffix@_pic.a : $(CSRCS:@srcroot@%.c=@objroot@%.pic.o) + @mkdir -p $(@D) + ar crus $@ $+ + +@objroot@lib/libjemalloc@install_suffix@.a : $(CSRCS:@srcroot@%.c=@objroot@%.o) @mkdir -p $(@D) ar crus $@ $+ @@ -139,11 +149,12 @@ install_include: install -m 644 $$h $(INCLUDEDIR)/jemalloc; \ done -install_lib: $(DSOS) +install_lib: $(DSOS) $(STATIC_LIBS) install -d $(LIBDIR) install -m 755 @objroot@lib/libjemalloc@install_suffix@.$(SO).$(REV) $(LIBDIR) ln -sf libjemalloc@install_suffix@.$(SO).$(REV) $(LIBDIR)/libjemalloc@install_suffix@.$(SO) install -m 755 @objroot@lib/libjemalloc@install_suffix@_pic.a $(LIBDIR) + install -m 755 @objroot@lib/libjemalloc@install_suffix@.a $(LIBDIR) install_html: install -d $(DATADIR)/doc/jemalloc@install_suffix@ @@ -195,12 +206,14 @@ check: tests clean: rm -f $(CSRCS:@srcroot@%.c=@objroot@%.o) + rm -f $(CSRCS:@srcroot@%.c=@objroot@%.pic.o) rm -f $(CSRCS:@srcroot@%.c=@objroot@%.d) + rm -f $(CSRCS:@srcroot@%.c=@objroot@%.pic.d) rm -f $(CTESTS:@srcroot@%.c=@objroot@%) rm -f $(CTESTS:@srcroot@%.c=@objroot@%.o) rm -f $(CTESTS:@srcroot@%.c=@objroot@%.d) rm -f $(CTESTS:@srcroot@%.c=@objroot@%.out) - rm -f $(DSOS) + rm -f $(DSOS) $(STATIC_LIBS) distclean: clean rm -rf @objroot@autom4te.cache diff --git a/jemalloc/include/jemalloc/internal/jemalloc_internal.h.in b/jemalloc/include/jemalloc/internal/jemalloc_internal.h.in index 14686bf..a27416c 100644 --- a/jemalloc/include/jemalloc/internal/jemalloc_internal.h.in +++ b/jemalloc/include/jemalloc/internal/jemalloc_internal.h.in @@ -148,11 +148,6 @@ extern void (*JEMALLOC_P(malloc_message))(void *wcbopaque, const char *s); #define SIZEOF_PTR (1U << LG_SIZEOF_PTR) -/* We can't use TLS in non-PIC programs, since TLS relies on loader magic. */ -#if (!defined(PIC) && !defined(NO_TLS)) -# define NO_TLS -#endif - /* * Maximum size of L1 cache line. This is used to avoid cache line aliasing. * In addition, this controls the spacing of cacheline-spaced size classes. |