From 09f238645db2ed42656435e981627e8ede9e1d4d Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 1 Sep 2011 14:11:56 +0200 Subject: [PATCH 1/6] Bug 680440 - Clean up jemalloc linkage. r=khuey --- browser/app/Makefile.in | 2 -- config/autoconf.mk.in | 6 ++---- config/config.mk | 19 ++++++------------- config/rules.mk | 16 ++++++++-------- configure.in | 24 ++++++++++++++++++++---- ipc/app/Makefile.in | 4 ---- js/src/Makefile.in | 6 ------ js/src/config/autoconf.mk.in | 1 + js/src/config/config.mk | 19 ++++++------------- js/src/config/rules.mk | 16 ++++++++-------- js/src/configure.in | 1 + memory/jemalloc/Makefile.in | 7 +++++-- memory/mozalloc/Makefile.in | 6 ------ mobile/app/Makefile.in | 2 -- other-licenses/android/Makefile.in | 1 + toolkit/library/libxul-rules.mk | 6 ------ xpcom/typelib/xpidl/Makefile.in | 5 ----- xulrunner/app/Makefile.in | 2 -- xulrunner/stub/Makefile.in | 2 -- 19 files changed, 58 insertions(+), 87 deletions(-) diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in index 9a39a45e48a..e40172f9e24 100644 --- a/browser/app/Makefile.in +++ b/browser/app/Makefile.in @@ -85,8 +85,6 @@ ifdef MOZ_APP_PROFILE DEFINES += -DMOZ_APP_PROFILE="$(MOZ_APP_PROFILE)" endif -LIBS += $(JEMALLOC_LIBS) - ifdef LIBXUL_SDK include $(topsrcdir)/config/rules.mk else diff --git a/config/autoconf.mk.in b/config/autoconf.mk.in index 6f63b2a367c..84f2fc48256 100644 --- a/config/autoconf.mk.in +++ b/config/autoconf.mk.in @@ -197,7 +197,6 @@ RM = rm -f MOZ_UI_LOCALE = @MOZ_UI_LOCALE@ MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS = @MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS@ -MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS = @MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS@ MOZ_COMPONENT_NSPR_LIBS=@MOZ_COMPONENT_NSPR_LIBS@ MOZ_FIX_LINK_PATHS=@MOZ_FIX_LINK_PATHS@ @@ -630,12 +629,11 @@ MOZ_QUANTIFY = @MOZ_QUANTIFY@ MSMANIFEST_TOOL = @MSMANIFEST_TOOL@ WIN32_REDIST_DIR = @WIN32_REDIST_DIR@ MOZ_MEMORY_LDFLAGS = @MOZ_MEMORY_LDFLAGS@ +MOZ_MEMORY_PROGRAM_LDFLAGS = @MOZ_MEMORY_PROGRAM_LDFLAGS@ WIN32_CRT_LIBS = @WIN32_CRT_LIBS@ -# This is for custom CRT building -ifdef MOZ_MEMORY +# This is used to pass jemalloc flags to NSS DLLFLAGS = @DLLFLAGS@ -endif # Codesighs tools option, enables win32 mapfiles. MOZ_MAPINFO = @MOZ_MAPINFO@ diff --git a/config/config.mk b/config/config.mk index 54c03ed8e98..f755567b492 100644 --- a/config/config.mk +++ b/config/config.mk @@ -149,17 +149,6 @@ FINAL_LINK_COMP_NAMES = $(DEPTH)/config/final-link-comp-names MOZ_UNICHARUTIL_LIBS = $(LIBXUL_DIST)/lib/$(LIB_PREFIX)unicharutil_s.$(LIB_SUFFIX) MOZ_WIDGET_SUPPORT_LIBS = $(DIST)/lib/$(LIB_PREFIX)widgetsupport_s.$(LIB_SUFFIX) -ifdef MOZ_MEMORY -ifneq ($(OS_ARCH),WINNT) -JEMALLOC_LIBS = $(MKSHLIB_FORCE_ALL) $(call EXPAND_MOZLIBNAME,jemalloc) $(MKSHLIB_UNFORCE_ALL) -# If we are linking jemalloc into a program, we want the jemalloc symbols -# to be exported -ifneq (,$(SIMPLE_PROGRAMS)$(PROGRAM)) -JEMALLOC_LIBS += $(MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS) -endif -endif -endif - CC := $(CC_WRAPPER) $(CC) CXX := $(CXX_WRAPPER) $(CXX) MKDIR ?= mkdir @@ -247,13 +236,17 @@ endif # MOZ_DEBUG # We don't build a static CRT when building a custom CRT, # it appears to be broken. So don't link to jemalloc if # the Makefile wants static CRT linking. -ifeq ($(MOZ_MEMORY)_$(USE_STATIC_LIBS),1_) +ifeq ($(MOZ_MEMORY)_$(USE_STATIC_LIBS),1_1) # Disable default CRT libs and add the right lib path for the linker -OS_LDFLAGS += $(MOZ_MEMORY_LDFLAGS) +MOZ_MEMORY_LDFLAGS= endif endif # WINNT && !GNU_CC +ifndef MOZ_MEMORY_PROGRAM_LDFLAGS +MOZ_MEMORY_PROGRAM_LDFLAGS=$(MOZ_MEMORY_LDFLAGS) +endif + # # Build using PIC by default # diff --git a/config/rules.mk b/config/rules.mk index 726368514ec..0dc5216e8c0 100644 --- a/config/rules.mk +++ b/config/rules.mk @@ -875,7 +875,7 @@ alltags: $(PROGRAM): $(PROGOBJS) $(LIBS_DEPS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS) @$(RM) $@.manifest ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) - $(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) + $(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ if test -f "$(srcdir)/$@.manifest"; then \ @@ -897,10 +897,10 @@ ifdef MOZ_PROFILE_GENERATE endif else # !WINNT || GNU_CC ifeq ($(CPP_PROG_LINK),1) - $(EXPAND_CCC) -o $@ $(CXXFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) + $(EXPAND_CCC) -o $@ $(CXXFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) @$(call CHECK_STDCXX,$@) else # ! CPP_PROG_LINK - $(EXPAND_CC) -o $@ $(CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) + $(EXPAND_CC) -o $@ $(CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) endif # CPP_PROG_LINK endif # WINNT && !GNU_CC @@ -946,7 +946,7 @@ endif # $(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS) ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) - $(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) + $(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ @@ -955,10 +955,10 @@ ifdef MSMANIFEST_TOOL endif # MSVC with manifest tool else ifeq ($(CPP_PROG_LINK),1) - $(EXPAND_CCC) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) + $(EXPAND_CCC) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) @$(call CHECK_STDCXX,$@) else - $(EXPAND_CC) $(CFLAGS) $(OUTOPTION)$@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) + $(EXPAND_CC) $(CFLAGS) $(OUTOPTION)$@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) endif # CPP_PROG_LINK endif # WINNT && !GNU_CC @@ -1069,10 +1069,10 @@ ifdef DTRACE_LIB_DEPENDENT ifndef XP_MACOSX dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS)) endif - $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) + $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(MOZ_MEMORY_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) @$(RM) $(DTRACE_PROBE_OBJ) else # ! DTRACE_LIB_DEPENDENT - $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) + $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(RESFILE) $(LDFLAGS) $(MOZ_MEMORY_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) endif # DTRACE_LIB_DEPENDENT @$(call CHECK_STDCXX,$@) diff --git a/configure.in b/configure.in index f780a4b50b6..cdb0700900b 100644 --- a/configure.in +++ b/configure.in @@ -2723,7 +2723,6 @@ dnl ======================================================== case "$target" in *-linux*|*-kfreebsd*-gnu|*-gnu*) MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script' - MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS='-rdynamic -Wl,--version-script -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/jemalloc-standalone-linkage-version-script' ;; *-solaris*) if test -z "$GNU_CC"; then @@ -7101,6 +7100,21 @@ if test -z "$MOZ_MEMORY"; then ;; esac else + if test "${OS_TARGET}" = "Android"; then + dnl On Android, we use WRAP_MALLOC to link everything to jemalloc, through mozutils + : + elif test "${OS_TARGET}" = "WINNT" -o "${OS_TARGET}" = "Darwin" -o "${OS_TARGET}" = "OS2"; then + dnl On Windows, OSX and OS2, we want to link all our binaries against jemalloc + MOZ_MEMORY_LDFLAGS='$(call EXPAND_LIBNAME_PATH,jemalloc,$(LIBXUL_DIST)/lib)' + else + dnl On other Unix systems, we only want to link executables against jemalloc + MOZ_MEMORY_PROGRAM_LDFLAGS='$(MKSHLIB_FORCE_ALL) $(call EXPAND_LIBNAME_PATH,jemalloc,$(LIBXUL_DIST)/lib) $(MKSHLIB_UNFORCE_ALL)' + if test -n "$GNU_CC"; then + dnl And we need jemalloc symbols to be exported. + MOZ_MEMORY_PROGRAM_LDFLAGS="$MOZ_MEMORY_PROGRAM_LDFLAGS -rdynamic" + fi + fi + dnl Don't try to run compiler tests on Windows if test "$OS_ARCH" = "WINNT"; then if test -z "$HAVE_64BIT_OS"; then @@ -7141,6 +7155,7 @@ else AC_DEFINE(MOZ_MEMORY_LINUX) AC_DEFINE(MOZ_MEMORY_ANDROID) _WRAP_MALLOC=1 + MOZ_MEMORY_LDFLAGS= ;; *-*linux*) AC_DEFINE(MOZ_MEMORY_LINUX) @@ -7163,8 +7178,6 @@ else lib -NOLOGO -OUT:crtdll.obj $WIN32_CRT_LIBS -EXTRACT:$WIN32_CRTDLL_FULLPATH if grep -q '__imp__\{0,1\}free' crtdll.obj; then MOZ_MEMORY_LDFLAGS='-LIBPATH:$(DIST)/lib -NODEFAULTLIB:msvcrt -NODEFAULTLIB:msvcrtd -NODEFAULTLIB:msvcprt -NODEFAULTLIB:msvcprtd -DEFAULTLIB:mozcrt' - else - MOZ_MEMORY_LDFLAGS='$(DIST)/../memory/jemalloc/jemalloc.lib' fi rm crtdll.obj @@ -7186,6 +7199,7 @@ else fi # MOZ_MEMORY AC_SUBST(MOZ_MEMORY) AC_SUBST(MOZ_MEMORY_LDFLAGS) +AC_SUBST(MOZ_MEMORY_PROGRAM_LDFLAGS) AC_SUBST(WIN32_CRT_LIBS) dnl Need to set this for make because NSS doesn't have configure AC_SUBST(DLLFLAGS) @@ -8601,7 +8615,6 @@ AC_SUBST(USE_ELF_DYNSTR_GC) AC_SUBST(USE_ELF_HACK) AC_SUBST(INCREMENTAL_LINKER) AC_SUBST(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS) -AC_SUBST(MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS) AC_SUBST(MOZ_COMPONENT_NSPR_LIBS) AC_SUBST(MOZ_FIX_LINK_PATHS) @@ -9178,6 +9191,9 @@ if test "$MOZ_MEMORY"; then if test -n "$MOZ_MEMORY_LDFLAGS"; then export MOZ_MEMORY_LDFLAGS fi + if test -n "$MOZ_MEMORY_PROGRAM_LDFLAGS"; then + export MOZ_MEMORY_PROGRAM_LDFLAGS + fi fi export MOZ_APP_NAME AC_OUTPUT_SUBDIRS(js/src) diff --git a/ipc/app/Makefile.in b/ipc/app/Makefile.in index bc1833b39bb..c7ac94bdf0c 100644 --- a/ipc/app/Makefile.in +++ b/ipc/app/Makefile.in @@ -90,10 +90,6 @@ OS_LIBS += $(call EXPAND_LIBNAME,comctl32 comdlg32 uuid shell32 ole32 oleaut32 v OS_LIBS += $(call EXPAND_LIBNAME,usp10 msimg32) endif -ifneq (Android,$(OS_TARGET)) -LIBS += $(JEMALLOC_LIBS) -endif - include $(topsrcdir)/config/rules.mk ifeq ($(OS_ARCH),WINNT) diff --git a/js/src/Makefile.in b/js/src/Makefile.in index 04269ef0459..9e79d0acea2 100644 --- a/js/src/Makefile.in +++ b/js/src/Makefile.in @@ -829,12 +829,6 @@ EXTRA_LIBS += -lposix4 -ldl -lnsl -lsocket endif endif -ifdef MOZ_MEMORY -ifeq ($(OS_ARCH),Darwin) -LDFLAGS += -ljemalloc -endif -endif - ifdef SOLARIS_SUNPRO_CXX ifeq ($(TARGET_CPU),sparc) # Sun Studio SPARC doesn't work well with gcc inline asm, use lock_SunOS_sparc*.il diff --git a/js/src/config/autoconf.mk.in b/js/src/config/autoconf.mk.in index a719c93c3e1..d1512a3459e 100644 --- a/js/src/config/autoconf.mk.in +++ b/js/src/config/autoconf.mk.in @@ -320,6 +320,7 @@ MOZ_TOOLS_DIR = @MOZ_TOOLS_DIR@ MOZ_QUANTIFY = @MOZ_QUANTIFY@ MSMANIFEST_TOOL = @MSMANIFEST_TOOL@ MOZ_MEMORY_LDFLAGS = @MOZ_MEMORY_LDFLAGS@ +MOZ_MEMORY_PROGRAM_LDFLAGS = @MOZ_MEMORY_PROGRAM_LDFLAGS@ # Codesighs tools option, enables win32 mapfiles. MOZ_MAPINFO = @MOZ_MAPINFO@ diff --git a/js/src/config/config.mk b/js/src/config/config.mk index 54c03ed8e98..f755567b492 100644 --- a/js/src/config/config.mk +++ b/js/src/config/config.mk @@ -149,17 +149,6 @@ FINAL_LINK_COMP_NAMES = $(DEPTH)/config/final-link-comp-names MOZ_UNICHARUTIL_LIBS = $(LIBXUL_DIST)/lib/$(LIB_PREFIX)unicharutil_s.$(LIB_SUFFIX) MOZ_WIDGET_SUPPORT_LIBS = $(DIST)/lib/$(LIB_PREFIX)widgetsupport_s.$(LIB_SUFFIX) -ifdef MOZ_MEMORY -ifneq ($(OS_ARCH),WINNT) -JEMALLOC_LIBS = $(MKSHLIB_FORCE_ALL) $(call EXPAND_MOZLIBNAME,jemalloc) $(MKSHLIB_UNFORCE_ALL) -# If we are linking jemalloc into a program, we want the jemalloc symbols -# to be exported -ifneq (,$(SIMPLE_PROGRAMS)$(PROGRAM)) -JEMALLOC_LIBS += $(MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS) -endif -endif -endif - CC := $(CC_WRAPPER) $(CC) CXX := $(CXX_WRAPPER) $(CXX) MKDIR ?= mkdir @@ -247,13 +236,17 @@ endif # MOZ_DEBUG # We don't build a static CRT when building a custom CRT, # it appears to be broken. So don't link to jemalloc if # the Makefile wants static CRT linking. -ifeq ($(MOZ_MEMORY)_$(USE_STATIC_LIBS),1_) +ifeq ($(MOZ_MEMORY)_$(USE_STATIC_LIBS),1_1) # Disable default CRT libs and add the right lib path for the linker -OS_LDFLAGS += $(MOZ_MEMORY_LDFLAGS) +MOZ_MEMORY_LDFLAGS= endif endif # WINNT && !GNU_CC +ifndef MOZ_MEMORY_PROGRAM_LDFLAGS +MOZ_MEMORY_PROGRAM_LDFLAGS=$(MOZ_MEMORY_LDFLAGS) +endif + # # Build using PIC by default # diff --git a/js/src/config/rules.mk b/js/src/config/rules.mk index 726368514ec..0dc5216e8c0 100644 --- a/js/src/config/rules.mk +++ b/js/src/config/rules.mk @@ -875,7 +875,7 @@ alltags: $(PROGRAM): $(PROGOBJS) $(LIBS_DEPS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS) @$(RM) $@.manifest ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) - $(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) + $(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ if test -f "$(srcdir)/$@.manifest"; then \ @@ -897,10 +897,10 @@ ifdef MOZ_PROFILE_GENERATE endif else # !WINNT || GNU_CC ifeq ($(CPP_PROG_LINK),1) - $(EXPAND_CCC) -o $@ $(CXXFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) + $(EXPAND_CCC) -o $@ $(CXXFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) @$(call CHECK_STDCXX,$@) else # ! CPP_PROG_LINK - $(EXPAND_CC) -o $@ $(CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) + $(EXPAND_CC) -o $@ $(CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) endif # CPP_PROG_LINK endif # WINNT && !GNU_CC @@ -946,7 +946,7 @@ endif # $(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS) ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) - $(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) + $(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ @@ -955,10 +955,10 @@ ifdef MSMANIFEST_TOOL endif # MSVC with manifest tool else ifeq ($(CPP_PROG_LINK),1) - $(EXPAND_CCC) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) + $(EXPAND_CCC) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) @$(call CHECK_STDCXX,$@) else - $(EXPAND_CC) $(CFLAGS) $(OUTOPTION)$@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) + $(EXPAND_CC) $(CFLAGS) $(OUTOPTION)$@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) endif # CPP_PROG_LINK endif # WINNT && !GNU_CC @@ -1069,10 +1069,10 @@ ifdef DTRACE_LIB_DEPENDENT ifndef XP_MACOSX dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS)) endif - $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) + $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(MOZ_MEMORY_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) @$(RM) $(DTRACE_PROBE_OBJ) else # ! DTRACE_LIB_DEPENDENT - $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) + $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(RESFILE) $(LDFLAGS) $(MOZ_MEMORY_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) endif # DTRACE_LIB_DEPENDENT @$(call CHECK_STDCXX,$@) diff --git a/js/src/configure.in b/js/src/configure.in index cd6d63436c7..44d0e62a528 100644 --- a/js/src/configure.in +++ b/js/src/configure.in @@ -4559,6 +4559,7 @@ if test "$MOZ_MEMORY"; then fi AC_SUBST(MOZ_MEMORY) AC_SUBST(MOZ_MEMORY_LDFLAGS) +AC_SUBST(MOZ_MEMORY_PROGRAM_LDFLAGS) dnl ======================================================== dnl = Use malloc wrapper lib diff --git a/memory/jemalloc/Makefile.in b/memory/jemalloc/Makefile.in index a61deb0f53c..39401784449 100644 --- a/memory/jemalloc/Makefile.in +++ b/memory/jemalloc/Makefile.in @@ -52,17 +52,20 @@ VISIBILITY_FLAGS= CSRCS = jemalloc.c EXPORTS = jemalloc.h jemalloc_types.h LIBRARY_NAME = jemalloc +MOZ_MEMORY_LDFLAGS = # Don't link against ourselves ifeq (WINNT,$(OS_TARGET)) FORCE_SHARED_LIB = 1 -MOZ_MEMORY_LDFLAGS = # Don't link against ourselves - DEFFILE = $(srcdir)/jemalloc.def LDFLAGS += -ENTRY:DllMain +ifneq (,$(filter -DEFAULTLIB:mozcrt,$(MOZ_MEMORY_LDFLAGS))) +# Don't install the import library if we use mozcrt NO_INSTALL_IMPORT_LIBRARY = 1 +endif + else # Not Windows ifeq ($(OS_ARCH),SunOS) diff --git a/memory/mozalloc/Makefile.in b/memory/mozalloc/Makefile.in index edbd05ab3da..c95f1bee7b5 100644 --- a/memory/mozalloc/Makefile.in +++ b/memory/mozalloc/Makefile.in @@ -54,12 +54,6 @@ LIBRARY_NAME = mozalloc FORCE_SHARED_LIB= 1 DIST_INSTALL = 1 -ifdef MOZ_MEMORY -ifeq ($(OS_ARCH),Darwin) -EXTRA_DSO_LDOPTS += -L$(DIST)/lib -ljemalloc -endif -endif - ifeq (,$(filter-out OS2,$(OS_ARCH))) # The strndup declaration in string.h is in an ifdef __USE_GNU section DEFINES += -D_GNU_SOURCE diff --git a/mobile/app/Makefile.in b/mobile/app/Makefile.in index 4c2c272a211..4f466df3899 100644 --- a/mobile/app/Makefile.in +++ b/mobile/app/Makefile.in @@ -60,8 +60,6 @@ LOCAL_INCLUDES += -I$(topsrcdir)/xpcom/build DEFINES += -DXPCOM_GLUE STL_FLAGS= -LIBS += $(JEMALLOC_LIBS) - LIBS += \ $(EXTRA_DSO_LIBS) \ $(XPCOM_STANDALONE_GLUE_LDOPTS) \ diff --git a/other-licenses/android/Makefile.in b/other-licenses/android/Makefile.in index 5e1fd3e2238..cf054e1b92d 100644 --- a/other-licenses/android/Makefile.in +++ b/other-licenses/android/Makefile.in @@ -79,5 +79,6 @@ SHARED_LIBRARY_LIBS = $(call EXPAND_LIBNAME_PATH,jemalloc,$(DEPTH)/memory/jemall endif WRAP_LDFLAGS = +MOZ_MEMORY_LDFLAGS = include $(topsrcdir)/config/rules.mk diff --git a/toolkit/library/libxul-rules.mk b/toolkit/library/libxul-rules.mk index 5335d970862..e4517595f0c 100644 --- a/toolkit/library/libxul-rules.mk +++ b/toolkit/library/libxul-rules.mk @@ -45,12 +45,6 @@ LOCAL_INCLUDES += \ OS_LIBS += $(LIBICONV) -ifdef MOZ_MEMORY -ifeq ($(OS_ARCH),Darwin) -EXTRA_DSO_LDOPTS += -L$(DIST)/lib -ljemalloc -endif -endif - DEFINES += \ -D_IMPL_NS_COM \ -D_IMPL_NS_STRINGAPI \ diff --git a/xpcom/typelib/xpidl/Makefile.in b/xpcom/typelib/xpidl/Makefile.in index 90d6b2c97a2..a5fe8f59f4a 100644 --- a/xpcom/typelib/xpidl/Makefile.in +++ b/xpcom/typelib/xpidl/Makefile.in @@ -111,11 +111,6 @@ include $(topsrcdir)/config/rules.mk CFLAGS += $(LIBIDL_CFLAGS) -# Do not link to jemalloc -ifeq ($(OS_ARCH),SunOS) -SOLARIS_JEMALLOC_LDFLAGS = -endif - # Compile directly against the static lib, so we can use xpidl during the build # without the shared library path being set. ifneq (,$(filter WINNT OS2,$(OS_ARCH))) diff --git a/xulrunner/app/Makefile.in b/xulrunner/app/Makefile.in index 10ebe166dfe..d8e4184bb48 100644 --- a/xulrunner/app/Makefile.in +++ b/xulrunner/app/Makefile.in @@ -130,8 +130,6 @@ endif RCFLAGS += -DXULRUNNER_ICO=\"$(DIST)/branding/xulrunner.ico\" -DDOCUMENT_ICO=\"$(DIST)/branding/document.ico\" endif -LIBS += $(JEMALLOC_LIBS) - include $(topsrcdir)/config/rules.mk DEFINES += -DXULRUNNER_ICO=\"$(DIST)/branding/xulrunner.ico\" -DDOCUMENT_ICO=\"$(DIST)/branding/document.ico\" diff --git a/xulrunner/stub/Makefile.in b/xulrunner/stub/Makefile.in index 37ac92efbc4..5ca03f5acd2 100644 --- a/xulrunner/stub/Makefile.in +++ b/xulrunner/stub/Makefile.in @@ -97,8 +97,6 @@ ifdef _MSC_VER WIN32_EXE_LDFLAGS += -ENTRY:wmainCRTStartup endif -LIBS += $(JEMALLOC_LIBS) - include $(topsrcdir)/config/rules.mk ifeq ($(OS_ARCH),WINNT) From 9d35d35976591b8ba2fe021c0738da782df7c0ed Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 1 Sep 2011 14:12:10 +0200 Subject: [PATCH 2/6] Bug 677501 - Build a mozutils library containing jemalloc and other things. r=khuey --HG-- rename : memory/jemalloc/Makefile.in => memory/mozutils/Makefile.in rename : memory/jemalloc/fixcrt.py => memory/mozutils/fixcrt.py rename : memory/jemalloc/jemalloc.def => memory/mozutils/mozutils.def.in --- Makefile.in | 6 +- browser/installer/package-manifest.in | 7 +- browser/installer/removed-files.in | 2 +- build/win32/Makefile.in | 2 + build/win32/crashinjectdll/Makefile.in | 2 + build/win32/vmwarerecordinghelper/Makefile.in | 2 + config/autoconf.mk.in | 4 +- config/config.mk | 6 +- config/rules.mk | 16 +- configure.in | 48 ++--- js/src/config/autoconf.mk.in | 4 +- js/src/config/config.mk | 6 +- js/src/config/rules.mk | 16 +- js/src/configure.in | 6 +- memory/Makefile.in | 1 + memory/jemalloc/Makefile.in | 113 +----------- memory/mozutils/Makefile.in | 171 ++++++++++++++++++ memory/{jemalloc => mozutils}/fixcrt.py | 0 .../jemalloc.def => mozutils/mozutils.def.in} | 4 +- mobile/installer/package-manifest.in | 4 +- other-licenses/android/Makefile.in | 16 +- 21 files changed, 243 insertions(+), 193 deletions(-) create mode 100644 memory/mozutils/Makefile.in rename memory/{jemalloc => mozutils}/fixcrt.py (100%) rename memory/{jemalloc/jemalloc.def => mozutils/mozutils.def.in} (97%) diff --git a/Makefile.in b/Makefile.in index ee1da71bde9..573b2f2baa1 100644 --- a/Makefile.in +++ b/Makefile.in @@ -65,15 +65,11 @@ tier_base_dirs = \ $(NULL) ifndef LIBXUL_SDK -ifdef MOZ_MEMORY -tier_base_dirs += memory/jemalloc -endif - ifeq ($(OS_TARGET),Android) tier_base_dirs += other-licenses/android endif -tier_base_dirs += memory/mozalloc +tier_base_dirs += memory endif ifdef COMPILE_ENVIRONMENT diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in index bd99d63ebd1..2f2edf0b549 100644 --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -45,9 +45,7 @@ @BINPATH@/@DLL_PREFIX@xpcom@DLL_SUFFIX@ @BINPATH@/@DLL_PREFIX@nspr4@DLL_SUFFIX@ @BINPATH@/@DLL_PREFIX@mozalloc@DLL_SUFFIX@ -#ifdef MOZ_MEMORY_DARWIN -@BINPATH@/@DLL_PREFIX@jemalloc@DLL_SUFFIX@ -#endif +@BINPATH@/@DLL_PREFIX@mozutils@DLL_SUFFIX@ #ifdef XP_MACOSX @BINPATH@/XUL #else @@ -60,9 +58,6 @@ @BINPATH@/@MOZ_CHILD_PROCESS_NAME@ #endif #ifdef XP_WIN32 -#ifdef MOZ_MEMORY -@BINPATH@/jemalloc.dll -#endif #if _MSC_VER == 1400 @BINPATH@/Microsoft.VC80.CRT.manifest @BINPATH@/msvcm80.dll diff --git a/browser/installer/removed-files.in b/browser/installer/removed-files.in index 746627754a9..dde9c503893 100644 --- a/browser/installer/removed-files.in +++ b/browser/installer/removed-files.in @@ -9,6 +9,7 @@ @DLL_PREFIX@xpcom_compat@DLL_SUFFIX@ @DLL_PREFIX@xpistub@DLL_SUFFIX@ @DLL_PREFIX@zlib@DLL_SUFFIX@ +@DLL_PREFIX@jemalloc@DLL_SUFFIX@ #ifdef MOZ_STATIC_JS @DLL_PREFIX@mozjs@DLL_SUFFIX@ #endif @@ -1258,7 +1259,6 @@ xpicleanup@BIN_SUFFIX@ dictionaries/PL.dic icons/mozicon16.xpm icons/mozicon50.xpm - libjemalloc.so plugins/libnullplugin.so readme.txt #endif diff --git a/build/win32/Makefile.in b/build/win32/Makefile.in index 7f6688b5cb8..e65bfcb77f4 100644 --- a/build/win32/Makefile.in +++ b/build/win32/Makefile.in @@ -62,6 +62,8 @@ CPPSRCS = crashinject.cpp endif # ENABLE_TESTS +MOZ_UTILS_LDFLAGS = + include $(topsrcdir)/config/rules.mk ifdef WIN32_REDIST_DIR diff --git a/build/win32/crashinjectdll/Makefile.in b/build/win32/crashinjectdll/Makefile.in index 14ffaac4e4a..a7cd0ab962b 100644 --- a/build/win32/crashinjectdll/Makefile.in +++ b/build/win32/crashinjectdll/Makefile.in @@ -50,4 +50,6 @@ USE_STATIC_LIBS = 1 CPPSRCS = crashinjectdll.cpp +MOZ_UTILS_LDFLAGS = + include $(topsrcdir)/config/rules.mk diff --git a/build/win32/vmwarerecordinghelper/Makefile.in b/build/win32/vmwarerecordinghelper/Makefile.in index 01457deac0b..7c0e459dd70 100644 --- a/build/win32/vmwarerecordinghelper/Makefile.in +++ b/build/win32/vmwarerecordinghelper/Makefile.in @@ -51,4 +51,6 @@ USE_STATIC_LIBS = 1 CPPSRCS = $(LIBRARY_NAME).cpp +MOZ_UTILS_LDFLAGS = + include $(topsrcdir)/config/rules.mk diff --git a/config/autoconf.mk.in b/config/autoconf.mk.in index 84f2fc48256..c426a35d73b 100644 --- a/config/autoconf.mk.in +++ b/config/autoconf.mk.in @@ -628,8 +628,8 @@ MOZ_TOOLS_DIR = @MOZ_TOOLS_DIR@ MOZ_QUANTIFY = @MOZ_QUANTIFY@ MSMANIFEST_TOOL = @MSMANIFEST_TOOL@ WIN32_REDIST_DIR = @WIN32_REDIST_DIR@ -MOZ_MEMORY_LDFLAGS = @MOZ_MEMORY_LDFLAGS@ -MOZ_MEMORY_PROGRAM_LDFLAGS = @MOZ_MEMORY_PROGRAM_LDFLAGS@ +MOZ_UTILS_LDFLAGS = @MOZ_UTILS_LDFLAGS@ +MOZ_UTILS_PROGRAM_LDFLAGS = @MOZ_UTILS_PROGRAM_LDFLAGS@ WIN32_CRT_LIBS = @WIN32_CRT_LIBS@ # This is used to pass jemalloc flags to NSS diff --git a/config/config.mk b/config/config.mk index f755567b492..162cdaec2a7 100644 --- a/config/config.mk +++ b/config/config.mk @@ -238,13 +238,13 @@ endif # MOZ_DEBUG # the Makefile wants static CRT linking. ifeq ($(MOZ_MEMORY)_$(USE_STATIC_LIBS),1_1) # Disable default CRT libs and add the right lib path for the linker -MOZ_MEMORY_LDFLAGS= +MOZ_UTILS_LDFLAGS= endif endif # WINNT && !GNU_CC -ifndef MOZ_MEMORY_PROGRAM_LDFLAGS -MOZ_MEMORY_PROGRAM_LDFLAGS=$(MOZ_MEMORY_LDFLAGS) +ifndef MOZ_UTILS_PROGRAM_LDFLAGS +MOZ_UTILS_PROGRAM_LDFLAGS=$(MOZ_UTILS_LDFLAGS) endif # diff --git a/config/rules.mk b/config/rules.mk index 0dc5216e8c0..cfe2e7398bc 100644 --- a/config/rules.mk +++ b/config/rules.mk @@ -875,7 +875,7 @@ alltags: $(PROGRAM): $(PROGOBJS) $(LIBS_DEPS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS) @$(RM) $@.manifest ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) - $(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) + $(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ if test -f "$(srcdir)/$@.manifest"; then \ @@ -897,10 +897,10 @@ ifdef MOZ_PROFILE_GENERATE endif else # !WINNT || GNU_CC ifeq ($(CPP_PROG_LINK),1) - $(EXPAND_CCC) -o $@ $(CXXFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) + $(EXPAND_CCC) -o $@ $(CXXFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) @$(call CHECK_STDCXX,$@) else # ! CPP_PROG_LINK - $(EXPAND_CC) -o $@ $(CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) + $(EXPAND_CC) -o $@ $(CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) endif # CPP_PROG_LINK endif # WINNT && !GNU_CC @@ -946,7 +946,7 @@ endif # $(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS) ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) - $(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) + $(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ @@ -955,10 +955,10 @@ ifdef MSMANIFEST_TOOL endif # MSVC with manifest tool else ifeq ($(CPP_PROG_LINK),1) - $(EXPAND_CCC) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) + $(EXPAND_CCC) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) @$(call CHECK_STDCXX,$@) else - $(EXPAND_CC) $(CFLAGS) $(OUTOPTION)$@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) + $(EXPAND_CC) $(CFLAGS) $(OUTOPTION)$@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) endif # CPP_PROG_LINK endif # WINNT && !GNU_CC @@ -1069,10 +1069,10 @@ ifdef DTRACE_LIB_DEPENDENT ifndef XP_MACOSX dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS)) endif - $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(MOZ_MEMORY_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) + $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(MOZ_UTILS_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) @$(RM) $(DTRACE_PROBE_OBJ) else # ! DTRACE_LIB_DEPENDENT - $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(RESFILE) $(LDFLAGS) $(MOZ_MEMORY_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) + $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(RESFILE) $(LDFLAGS) $(MOZ_UTILS_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) endif # DTRACE_LIB_DEPENDENT @$(call CHECK_STDCXX,$@) diff --git a/configure.in b/configure.in index cdb0700900b..bd4bf5acefd 100644 --- a/configure.in +++ b/configure.in @@ -7091,6 +7091,21 @@ if test "$NS_TRACE_MALLOC"; then MOZ_MEMORY= fi +if test "${OS_TARGET}" = "Android"; then + dnl On Android, we use WRAP_LDFLAGS to link everything to mozutils + : +elif test "${OS_TARGET}" = "WINNT" -o "${OS_TARGET}" = "Darwin" -o "${OS_TARGET}" = "OS2"; then + dnl On Windows, OSX and OS2, we want to link all our binaries against mozutils + MOZ_UTILS_LDFLAGS='$(call EXPAND_LIBNAME_PATH,mozutils,$(LIBXUL_DIST)/lib)' +else + dnl On other Unix systems, we only want to link executables against mozutils + MOZ_UTILS_PROGRAM_LDFLAGS='$(MKSHLIB_FORCE_ALL) $(call EXPAND_LIBNAME_PATH,mozutils,$(LIBXUL_DIST)/lib) $(MKSHLIB_UNFORCE_ALL)' + if test -n "$GNU_CC"; then + dnl And we need mozutils symbols to be exported. + MOZ_UTILS_PROGRAM_LDFLAGS="$MOZ_UTILS_PROGRAM_LDFLAGS -rdynamic" + fi +fi + if test -z "$MOZ_MEMORY"; then case "${target}" in *-mingw*) @@ -7100,21 +7115,6 @@ if test -z "$MOZ_MEMORY"; then ;; esac else - if test "${OS_TARGET}" = "Android"; then - dnl On Android, we use WRAP_MALLOC to link everything to jemalloc, through mozutils - : - elif test "${OS_TARGET}" = "WINNT" -o "${OS_TARGET}" = "Darwin" -o "${OS_TARGET}" = "OS2"; then - dnl On Windows, OSX and OS2, we want to link all our binaries against jemalloc - MOZ_MEMORY_LDFLAGS='$(call EXPAND_LIBNAME_PATH,jemalloc,$(LIBXUL_DIST)/lib)' - else - dnl On other Unix systems, we only want to link executables against jemalloc - MOZ_MEMORY_PROGRAM_LDFLAGS='$(MKSHLIB_FORCE_ALL) $(call EXPAND_LIBNAME_PATH,jemalloc,$(LIBXUL_DIST)/lib) $(MKSHLIB_UNFORCE_ALL)' - if test -n "$GNU_CC"; then - dnl And we need jemalloc symbols to be exported. - MOZ_MEMORY_PROGRAM_LDFLAGS="$MOZ_MEMORY_PROGRAM_LDFLAGS -rdynamic" - fi - fi - dnl Don't try to run compiler tests on Windows if test "$OS_ARCH" = "WINNT"; then if test -z "$HAVE_64BIT_OS"; then @@ -7155,7 +7155,7 @@ else AC_DEFINE(MOZ_MEMORY_LINUX) AC_DEFINE(MOZ_MEMORY_ANDROID) _WRAP_MALLOC=1 - MOZ_MEMORY_LDFLAGS= + MOZ_UTILS_LDFLAGS= ;; *-*linux*) AC_DEFINE(MOZ_MEMORY_LINUX) @@ -7177,12 +7177,12 @@ else WIN32_CRTDLL_FULLPATH=`lib -nologo -list $WIN32_CRT_LIBS | grep crtdll\\.obj` lib -NOLOGO -OUT:crtdll.obj $WIN32_CRT_LIBS -EXTRACT:$WIN32_CRTDLL_FULLPATH if grep -q '__imp__\{0,1\}free' crtdll.obj; then - MOZ_MEMORY_LDFLAGS='-LIBPATH:$(DIST)/lib -NODEFAULTLIB:msvcrt -NODEFAULTLIB:msvcrtd -NODEFAULTLIB:msvcprt -NODEFAULTLIB:msvcprtd -DEFAULTLIB:mozcrt' + MOZ_UTILS_LDFLAGS='-LIBPATH:$(DIST)/lib -NODEFAULTLIB:msvcrt -NODEFAULTLIB:msvcrtd -NODEFAULTLIB:msvcprt -NODEFAULTLIB:msvcprtd -DEFAULTLIB:mozcrt' fi rm crtdll.obj dnl Also pass this to NSPR/NSS - DLLFLAGS="$DLLFLAGS $MOZ_MEMORY_LDFLAGS" + DLLFLAGS="$DLLFLAGS $MOZ_UTILS_LDFLAGS" export DLLFLAGS ;; *) @@ -7198,8 +7198,8 @@ else AC_DEFINE(HAVE_JEMALLOC_MEMALIGN) fi # MOZ_MEMORY AC_SUBST(MOZ_MEMORY) -AC_SUBST(MOZ_MEMORY_LDFLAGS) -AC_SUBST(MOZ_MEMORY_PROGRAM_LDFLAGS) +AC_SUBST(MOZ_UTILS_LDFLAGS) +AC_SUBST(MOZ_UTILS_PROGRAM_LDFLAGS) AC_SUBST(WIN32_CRT_LIBS) dnl Need to set this for make because NSS doesn't have configure AC_SUBST(DLLFLAGS) @@ -9188,11 +9188,11 @@ ac_configure_args="$ac_configure_args --prefix=$dist" ac_configure_args="$ac_configure_args --with-sync-build-files=$_topsrcdir" if test "$MOZ_MEMORY"; then ac_configure_args="$ac_configure_args --enable-jemalloc" - if test -n "$MOZ_MEMORY_LDFLAGS"; then - export MOZ_MEMORY_LDFLAGS + if test -n "$MOZ_UTILS_LDFLAGS"; then + export MOZ_UTILS_LDFLAGS fi - if test -n "$MOZ_MEMORY_PROGRAM_LDFLAGS"; then - export MOZ_MEMORY_PROGRAM_LDFLAGS + if test -n "$MOZ_UTILS_PROGRAM_LDFLAGS"; then + export MOZ_UTILS_PROGRAM_LDFLAGS fi fi export MOZ_APP_NAME diff --git a/js/src/config/autoconf.mk.in b/js/src/config/autoconf.mk.in index d1512a3459e..6eb14b48245 100644 --- a/js/src/config/autoconf.mk.in +++ b/js/src/config/autoconf.mk.in @@ -319,8 +319,8 @@ MOZ_BROWSE_INFO = @MOZ_BROWSE_INFO@ MOZ_TOOLS_DIR = @MOZ_TOOLS_DIR@ MOZ_QUANTIFY = @MOZ_QUANTIFY@ MSMANIFEST_TOOL = @MSMANIFEST_TOOL@ -MOZ_MEMORY_LDFLAGS = @MOZ_MEMORY_LDFLAGS@ -MOZ_MEMORY_PROGRAM_LDFLAGS = @MOZ_MEMORY_PROGRAM_LDFLAGS@ +MOZ_UTILS_LDFLAGS = @MOZ_UTILS_LDFLAGS@ +MOZ_UTILS_PROGRAM_LDFLAGS = @MOZ_UTILS_PROGRAM_LDFLAGS@ # Codesighs tools option, enables win32 mapfiles. MOZ_MAPINFO = @MOZ_MAPINFO@ diff --git a/js/src/config/config.mk b/js/src/config/config.mk index f755567b492..162cdaec2a7 100644 --- a/js/src/config/config.mk +++ b/js/src/config/config.mk @@ -238,13 +238,13 @@ endif # MOZ_DEBUG # the Makefile wants static CRT linking. ifeq ($(MOZ_MEMORY)_$(USE_STATIC_LIBS),1_1) # Disable default CRT libs and add the right lib path for the linker -MOZ_MEMORY_LDFLAGS= +MOZ_UTILS_LDFLAGS= endif endif # WINNT && !GNU_CC -ifndef MOZ_MEMORY_PROGRAM_LDFLAGS -MOZ_MEMORY_PROGRAM_LDFLAGS=$(MOZ_MEMORY_LDFLAGS) +ifndef MOZ_UTILS_PROGRAM_LDFLAGS +MOZ_UTILS_PROGRAM_LDFLAGS=$(MOZ_UTILS_LDFLAGS) endif # diff --git a/js/src/config/rules.mk b/js/src/config/rules.mk index 0dc5216e8c0..cfe2e7398bc 100644 --- a/js/src/config/rules.mk +++ b/js/src/config/rules.mk @@ -875,7 +875,7 @@ alltags: $(PROGRAM): $(PROGOBJS) $(LIBS_DEPS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS) @$(RM) $@.manifest ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) - $(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) + $(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ if test -f "$(srcdir)/$@.manifest"; then \ @@ -897,10 +897,10 @@ ifdef MOZ_PROFILE_GENERATE endif else # !WINNT || GNU_CC ifeq ($(CPP_PROG_LINK),1) - $(EXPAND_CCC) -o $@ $(CXXFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) + $(EXPAND_CCC) -o $@ $(CXXFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) @$(call CHECK_STDCXX,$@) else # ! CPP_PROG_LINK - $(EXPAND_CC) -o $@ $(CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) + $(EXPAND_CC) -o $@ $(CFLAGS) $(PROGOBJS) $(RESFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) $(EXE_DEF_FILE) endif # CPP_PROG_LINK endif # WINNT && !GNU_CC @@ -946,7 +946,7 @@ endif # $(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS) ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH)) - $(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) + $(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) ifdef MSMANIFEST_TOOL @if test -f $@.manifest; then \ mt.exe -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ @@ -955,10 +955,10 @@ ifdef MSMANIFEST_TOOL endif # MSVC with manifest tool else ifeq ($(CPP_PROG_LINK),1) - $(EXPAND_CCC) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) + $(EXPAND_CCC) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) @$(call CHECK_STDCXX,$@) else - $(EXPAND_CC) $(CFLAGS) $(OUTOPTION)$@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_MEMORY_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) + $(EXPAND_CC) $(CFLAGS) $(OUTOPTION)$@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_UTILS_PROGRAM_LDFLAGS) $(WRAP_LDFLAGS) $(LIBS_DIR) $(LIBS) $(OS_LIBS) $(EXTRA_LIBS) $(BIN_FLAGS) endif # CPP_PROG_LINK endif # WINNT && !GNU_CC @@ -1069,10 +1069,10 @@ ifdef DTRACE_LIB_DEPENDENT ifndef XP_MACOSX dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS)) endif - $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(MOZ_MEMORY_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) + $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(MOZ_UTILS_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) @$(RM) $(DTRACE_PROBE_OBJ) else # ! DTRACE_LIB_DEPENDENT - $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(RESFILE) $(LDFLAGS) $(MOZ_MEMORY_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) + $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(LOBJS) $(SUB_SHLOBJS) $(RESFILE) $(LDFLAGS) $(MOZ_UTILS_LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) endif # DTRACE_LIB_DEPENDENT @$(call CHECK_STDCXX,$@) diff --git a/js/src/configure.in b/js/src/configure.in index 44d0e62a528..06c1484a09b 100644 --- a/js/src/configure.in +++ b/js/src/configure.in @@ -4543,7 +4543,7 @@ if test "$MOZ_MEMORY"; then ;; *-mingw*) AC_DEFINE(MOZ_MEMORY_WINDOWS) - # the interesting bits will get passed down in MOZ_MEMORY_LDFLAGS + # the interesting bits will get passed down in MOZ_UTILS_LDFLAGS ;; *) AC_MSG_ERROR([--enable-jemalloc not supported on ${target}]) @@ -4558,8 +4558,8 @@ if test "$MOZ_MEMORY"; then fi fi AC_SUBST(MOZ_MEMORY) -AC_SUBST(MOZ_MEMORY_LDFLAGS) -AC_SUBST(MOZ_MEMORY_PROGRAM_LDFLAGS) +AC_SUBST(MOZ_UTILS_LDFLAGS) +AC_SUBST(MOZ_UTILS_PROGRAM_LDFLAGS) dnl ======================================================== dnl = Use malloc wrapper lib diff --git a/memory/Makefile.in b/memory/Makefile.in index 408d49f6f51..c61e5cf7834 100644 --- a/memory/Makefile.in +++ b/memory/Makefile.in @@ -47,6 +47,7 @@ ifdef MOZ_MEMORY DIRS += jemalloc endif +DIRS += mozutils DIRS += mozalloc include $(topsrcdir)/config/rules.mk diff --git a/memory/jemalloc/Makefile.in b/memory/jemalloc/Makefile.in index 39401784449..4c572c56c4e 100644 --- a/memory/jemalloc/Makefile.in +++ b/memory/jemalloc/Makefile.in @@ -52,21 +52,7 @@ VISIBILITY_FLAGS= CSRCS = jemalloc.c EXPORTS = jemalloc.h jemalloc_types.h LIBRARY_NAME = jemalloc -MOZ_MEMORY_LDFLAGS = # Don't link against ourselves - -ifeq (WINNT,$(OS_TARGET)) -FORCE_SHARED_LIB = 1 - -DEFFILE = $(srcdir)/jemalloc.def - -LDFLAGS += -ENTRY:DllMain - -ifneq (,$(filter -DEFAULTLIB:mozcrt,$(MOZ_MEMORY_LDFLAGS))) -# Don't install the import library if we use mozcrt -NO_INSTALL_IMPORT_LIBRARY = 1 -endif - -else # Not Windows +FORCE_STATIC_LIB= 1 ifeq ($(OS_ARCH),SunOS) ifndef GNU_CC @@ -74,105 +60,10 @@ MODULE_OPTIMIZE_FLAGS = -xO5 endif endif -# Build jemalloc as a shared lib. This is mandatory for Darwin, since a library -# init function is used on that platform. -ifeq ($(OS_ARCH),Darwin) -FORCE_SHARED_LIB= 1 -else -# On Android, we're going to link jemalloc into mozutils, and that only works -# properly if we only build a fakelib, which won't happen if we DIST_INSTALL -ifneq ($(OS_TARGET),Android) -DIST_INSTALL = 1 -endif -FORCE_STATIC_LIB= 1 -endif - +ifeq (Linux,$(OS_TARGET)) #XXX: PGO on Linux causes problems here # See bug 419470 NO_PROFILE_GUIDED_OPTIMIZE = 1 endif include $(topsrcdir)/config/rules.mk - -ifeq (Darwin,$(OS_TARGET)) -LDFLAGS += -init _jemalloc_darwin_init -endif - -ifeq (WINNT,$(OS_TARGET)) -# Roll our own custom logic here for the import library - -############################################################################### -# -# Linking Mozilla itself to jemalloc is not particularly difficult. To do this -# we avoid linking directly to the Microsoft-provided CRT import libraries. -# Instead, we link to our own import library which we generate here. To -# replace the CRT's malloc/free/other memory management symbols we export -# our own versions out of jemalloc.dll. We then take the import library that -# the compiler generates for jemalloc.dll and combine it with the MS CRT import -# libraries. We put our library on the command line first, and the CRT symbols -# are discarded in favor of our versions! -# -# Unfortunately that was too easy. The CRT import library is not a standard -# import library that contains a list of symbols and whatnot. It also includes -# object files that are linked into generated programs. One of these, -# crtdll.obj is (as one might expect) linked into all DLLs that link against -# the CRT. This file does things like run static C++ constructors when the -# DLL is attached, call DllMain, etc. -# -# In the CRT source all malloc/free calls are made to malloc_crt and free_crt. -# In debug builds these are both defined to malloc_dbg and free_dbg. In opt -# builds malloc_crt is an actual function, implemented and exposed from the -# CRT. free_crt is, however, defined to be just plain old free. This works -# fine inside the CRT where malloc_crt and free operate on the same heap. -# Outside the CRT malloc_crt is in the CRT's heap, but free is in jemalloc's -# heap. This causes much pain at shutdown :-( -# -# The obvious solution here is to override malloc_crt too. Unfortunately, -# that doesn't work because the CRT expects to be able to call msize on this -# piece of memory deep inside the CRT, which will fail because it'll call the -# CRT's msize on a pointer in jemalloc's heap. -# -# Our solution to this is quite devious. We take apart the CRT's import lib -# and remove the problematic object file. We then poke at the object file's -# symbol table and replace '__imp__free' (which means grab free from some -# other DLL) with '__imp__frex'. Then we define our own dummy no-op function -# in jemalloc.dll and export it as frex. Then we put the CRT import lib -# back together with the patched crtdll.obj, glue it to the end of jemalloc's -# import library and link the rest of Mozilla to that. -# -# The result? A binary that uses jemalloc, doesn't crash, and leaks a tiny -# amount of memory (32 words per DLL in the 2010 CRT) at shutdown. -# -############################################################################### - -libs:: mozcrt.lib - $(INSTALL) $(IFLAGS2) mozcrt.lib $(DIST)/lib - -# And finally combine that with the jemalloc import library to get an import -# library that has our malloc/free/etc and the CRT's everything else -mozcrt.lib: $(IMPORT_LIBRARY) msvc_modified.lib - lib -OUT:$@ $^ - -# Put the fixed object file back in -msvc_modified.lib: msvc_removed.lib crtdll_fixed.obj - lib -OUT:$@ $^ - -# Fix the object file -crtdll_fixed.obj: crtdll.obj - $(PYTHON) $(srcdir)/fixcrt.py - -# Find the path of crtdll.obj -CRTDLL_FULLPATH=$(subst \,\\,$(shell lib -list msvc_combined.lib | grep crtdll\\.obj)) - -# Remove the broken object file, only after we have extracted it -msvc_removed.lib: msvc_combined.lib crtdll.obj - lib -OUT:$@ msvc_combined.lib -REMOVE:$(CRTDLL_FULLPATH) - -# Extract the broken object file out of the combined library -crtdll.obj: msvc_combined.lib - lib -OUT:$@ $^ -EXTRACT:$(CRTDLL_FULLPATH) - -# Grab both CRT libraries and combine them into one library to simplify things -msvc_combined.lib: - lib -OUT:$@ $(WIN32_CRT_LIBS) -endif diff --git a/memory/mozutils/Makefile.in b/memory/mozutils/Makefile.in new file mode 100644 index 00000000000..eba3a92f0bb --- /dev/null +++ b/memory/mozutils/Makefile.in @@ -0,0 +1,171 @@ +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2008 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Ted Mielczarek +# +# Alternatively, the contents of this file may be used under the terms of +# either of the GNU General Public License Version 2 or later (the "GPL"), +# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +MODULE = mozutils +LIBRARY_NAME = mozutils +DIST_INSTALL = 1 + +ifdef MOZ_MEMORY +SHARED_LIBRARY_LIBS = $(call EXPAND_LIBNAME_PATH,jemalloc,../jemalloc) +endif + +# Build mozutils as a shared lib on Windows, OSX and Android. +ifneq (,$(filter WINNT Darwin Android,$(OS_TARGET))) +FORCE_SHARED_LIB = 1 +else +FORCE_STATIC_LIB = 1 +endif + +MOZ_UTILS_LDFLAGS = # Don't link against ourselves + +ifeq (WINNT,$(OS_TARGET)) +DEFFILE = mozutils.def + +mozutils.def: mozutils.def.in + $(PYTHON) $(topsrcdir)/config/Preprocessor.py $(ACDEFINES) $< > $@ + +GARBAGE += mozutils.def + +LDFLAGS += -ENTRY:DllMain + +ifneq (,$(filter -DEFAULTLIB:mozcrt,$(MOZ_UTILS_LDFLAGS))) +# Don't install the import library if we use mozcrt +NO_INSTALL_IMPORT_LIBRARY = 1 +endif +endif + +ifeq (Android, $(OS_TARGET)) +# Add Android linker +EXTRA_DSO_LDOPTS += $(ZLIB_LIBS) +SHARED_LIBRARY_LIBS += $(call EXPAND_LIBNAME_PATH,android,$(DEPTH)/other-licenses/android) +WRAP_LDFLAGS = +endif + +include $(topsrcdir)/config/rules.mk + +ifdef MOZ_MEMORY +ifeq (Darwin,$(OS_TARGET)) +LDFLAGS += -init _jemalloc_darwin_init +endif + +ifeq (WINNT,$(OS_TARGET)) +# Roll our own custom logic here for the import library + +############################################################################### +# +# Linking Mozilla itself to jemalloc is not particularly difficult. To do this +# we avoid linking directly to the Microsoft-provided CRT import libraries. +# Instead, we link to our own import library which we generate here. To +# replace the CRT's malloc/free/other memory management symbols we export +# our own versions out of jemalloc.dll. We then take the import library that +# the compiler generates for jemalloc.dll and combine it with the MS CRT import +# libraries. We put our library on the command line first, and the CRT symbols +# are discarded in favor of our versions! +# +# Unfortunately that was too easy. The CRT import library is not a standard +# import library that contains a list of symbols and whatnot. It also includes +# object files that are linked into generated programs. One of these, +# crtdll.obj is (as one might expect) linked into all DLLs that link against +# the CRT. This file does things like run static C++ constructors when the +# DLL is attached, call DllMain, etc. +# +# In the CRT source all malloc/free calls are made to malloc_crt and free_crt. +# In debug builds these are both defined to malloc_dbg and free_dbg. In opt +# builds malloc_crt is an actual function, implemented and exposed from the +# CRT. free_crt is, however, defined to be just plain old free. This works +# fine inside the CRT where malloc_crt and free operate on the same heap. +# Outside the CRT malloc_crt is in the CRT's heap, but free is in jemalloc's +# heap. This causes much pain at shutdown :-( +# +# The obvious solution here is to override malloc_crt too. Unfortunately, +# that doesn't work because the CRT expects to be able to call msize on this +# piece of memory deep inside the CRT, which will fail because it'll call the +# CRT's msize on a pointer in jemalloc's heap. +# +# Our solution to this is quite devious. We take apart the CRT's import lib +# and remove the problematic object file. We then poke at the object file's +# symbol table and replace '__imp__free' (which means grab free from some +# other DLL) with '__imp__frex'. Then we define our own dummy no-op function +# in jemalloc.dll and export it as frex. Then we put the CRT import lib +# back together with the patched crtdll.obj, glue it to the end of jemalloc's +# import library and link the rest of Mozilla to that. +# +# The result? A binary that uses jemalloc, doesn't crash, and leaks a tiny +# amount of memory (32 words per DLL in the 2010 CRT) at shutdown. +# +############################################################################### + +libs:: mozcrt.lib + $(INSTALL) $(IFLAGS2) mozcrt.lib $(DIST)/lib + +# And finally combine that with the jemalloc import library to get an import +# library that has our malloc/free/etc and the CRT's everything else +mozcrt.lib: $(IMPORT_LIBRARY) msvc_modified.lib + lib -OUT:$@ $^ + +# Put the fixed object file back in +msvc_modified.lib: msvc_removed.lib crtdll_fixed.obj + lib -OUT:$@ $^ + +# Fix the object file +crtdll_fixed.obj: crtdll.obj + $(PYTHON) $(srcdir)/fixcrt.py + +# Find the path of crtdll.obj +CRTDLL_FULLPATH=$(subst \,\\,$(shell lib -list msvc_combined.lib | grep crtdll\\.obj)) + +# Remove the broken object file, only after we have extracted it +msvc_removed.lib: msvc_combined.lib crtdll.obj + lib -OUT:$@ msvc_combined.lib -REMOVE:$(CRTDLL_FULLPATH) + +# Extract the broken object file out of the combined library +crtdll.obj: msvc_combined.lib + lib -OUT:$@ $^ -EXTRACT:$(CRTDLL_FULLPATH) + +# Grab both CRT libraries and combine them into one library to simplify things +msvc_combined.lib: + lib -OUT:$@ $(WIN32_CRT_LIBS) +endif +endif # MOZ_MEMORY diff --git a/memory/jemalloc/fixcrt.py b/memory/mozutils/fixcrt.py similarity index 100% rename from memory/jemalloc/fixcrt.py rename to memory/mozutils/fixcrt.py diff --git a/memory/jemalloc/jemalloc.def b/memory/mozutils/mozutils.def.in similarity index 97% rename from memory/jemalloc/jemalloc.def rename to memory/mozutils/mozutils.def.in index 9193d2df289..92c71f7e253 100644 --- a/memory/jemalloc/jemalloc.def +++ b/memory/mozutils/mozutils.def.in @@ -33,9 +33,10 @@ ; ; ***** END LICENSE BLOCK ***** -LIBRARY jemalloc.dll +LIBRARY mozutils.dll EXPORTS +#ifdef MOZ_MEMORY ; symbols that are actually useful malloc=je_malloc valloc=je_valloc @@ -53,3 +54,4 @@ EXPORTS jemalloc_stats ; A hack to work around the CRT (see giant comment in Makefile.in) frex=je_dumb_free_thunk +#endif diff --git a/mobile/installer/package-manifest.in b/mobile/installer/package-manifest.in index 464d14220d4..a9c8c938207 100644 --- a/mobile/installer/package-manifest.in +++ b/mobile/installer/package-manifest.in @@ -47,6 +47,7 @@ @BINPATH@/@DLL_PREFIX@xpcom@DLL_SUFFIX@ @BINPATH@/@DLL_PREFIX@nspr4@DLL_SUFFIX@ @BINPATH@/@DLL_PREFIX@mozalloc@DLL_SUFFIX@ +@BINPATH@/@DLL_PREFIX@mozutils@DLL_SUFFIX@ #ifdef XP_MACOSX @BINPATH@/XUL #else @@ -58,9 +59,6 @@ @BINPATH@/@MOZ_CHILD_PROCESS_NAME@ #endif #ifdef XP_WIN32 -#ifdef MOZ_MEMORY -@BINPATH@/jemalloc.dll -#endif #if _MSC_VER == 1400 @BINPATH@/Microsoft.VC80.CRT.manifest @BINPATH@/msvcm80.dll diff --git a/other-licenses/android/Makefile.in b/other-licenses/android/Makefile.in index cf054e1b92d..181d401e5fe 100644 --- a/other-licenses/android/Makefile.in +++ b/other-licenses/android/Makefile.in @@ -42,10 +42,9 @@ VPATH = @srcdir@ include $(DEPTH)/config/autoconf.mk -MODULE = mozutils -LIBRARY_NAME = mozutils -FORCE_SHARED_LIB = 1 -DIST_INSTALL = 1 +MODULE = android +LIBRARY_NAME = android +FORCE_STATIC_LIB = 1 DEFINES += \ -DLINKER_DEBUG=0 \ @@ -72,13 +71,4 @@ CSRCS = \ EXPORTS = APKOpen.h -EXTRA_DSO_LDOPTS += $(ZLIB_LIBS) - -ifdef MOZ_MEMORY -SHARED_LIBRARY_LIBS = $(call EXPAND_LIBNAME_PATH,jemalloc,$(DEPTH)/memory/jemalloc) -endif - -WRAP_LDFLAGS = -MOZ_MEMORY_LDFLAGS = - include $(topsrcdir)/config/rules.mk From 01a5793c645be8c3ffec5e0fbfeedc357e4ec676 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 1 Sep 2011 14:12:13 +0200 Subject: [PATCH 3/6] Bug 677501 - Add a dummy symbol to libmozutils until bug 662814 lands. r=me --- memory/mozutils/Makefile.in | 4 ++++ memory/mozutils/dummy.cpp | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 memory/mozutils/dummy.cpp diff --git a/memory/mozutils/Makefile.in b/memory/mozutils/Makefile.in index eba3a92f0bb..30a09c3368b 100644 --- a/memory/mozutils/Makefile.in +++ b/memory/mozutils/Makefile.in @@ -49,6 +49,10 @@ DIST_INSTALL = 1 ifdef MOZ_MEMORY SHARED_LIBRARY_LIBS = $(call EXPAND_LIBNAME_PATH,jemalloc,../jemalloc) +else +# Temporary, until bug 662814 lands +VISIBILITY_FLAGS = +CPPSRCS = dummy.cpp endif # Build mozutils as a shared lib on Windows, OSX and Android. diff --git a/memory/mozutils/dummy.cpp b/memory/mozutils/dummy.cpp new file mode 100644 index 00000000000..b7196600f30 --- /dev/null +++ b/memory/mozutils/dummy.cpp @@ -0,0 +1,2 @@ +void _dummy(void) { +} From 051f260874229516e2a305669e8f212ef55e9ab0 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 1 Sep 2011 18:26:07 +0200 Subject: [PATCH 4/6] Bug 683875 - Remove stale static library when only creating a fakelib. r=ted --- config/rules.mk | 4 +++- js/src/config/rules.mk | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/config/rules.mk b/config/rules.mk index cfe2e7398bc..e584c2005a8 100644 --- a/config/rules.mk +++ b/config/rules.mk @@ -250,7 +250,7 @@ endif # ENABLE_TESTS ifndef LIBRARY ifdef STATIC_LIBRARY_NAME -_LIBRARY := $(LIB_PREFIX)$(STATIC_LIBRARY_NAME).$(LIB_SUFFIX) +REAL_LIBRARY := $(LIB_PREFIX)$(STATIC_LIBRARY_NAME).$(LIB_SUFFIX) # Only build actual library if it is installed in DIST/lib or SDK ifeq (,$(SDK_LIBRARY)$(DIST_INSTALL)$(NO_EXPAND_LIBS)) LIBRARY := $(_LIBRARY).$(LIBS_DESC_SUFFIX) @@ -1016,6 +1016,8 @@ $(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS_DEP $(RANLIB) $@ $(filter-out %.$(LIB_SUFFIX),$(LIBRARY)): $(filter %.$(LIB_SUFFIX),$(LIBRARY)) $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS) +# When we only build a library descriptor, blow out any existing library + $(if $(filter %.$(LIB_SUFFIX),$(LIBRARY)),,$(RM) $(REAL_LIBRARY) $(EXPORT_LIBRARY:%=%/$(REAL_LIBRARY))) $(EXPAND_LIBS_GEN) $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS) > $@ ifeq ($(OS_ARCH),WINNT) diff --git a/js/src/config/rules.mk b/js/src/config/rules.mk index cfe2e7398bc..e584c2005a8 100644 --- a/js/src/config/rules.mk +++ b/js/src/config/rules.mk @@ -250,7 +250,7 @@ endif # ENABLE_TESTS ifndef LIBRARY ifdef STATIC_LIBRARY_NAME -_LIBRARY := $(LIB_PREFIX)$(STATIC_LIBRARY_NAME).$(LIB_SUFFIX) +REAL_LIBRARY := $(LIB_PREFIX)$(STATIC_LIBRARY_NAME).$(LIB_SUFFIX) # Only build actual library if it is installed in DIST/lib or SDK ifeq (,$(SDK_LIBRARY)$(DIST_INSTALL)$(NO_EXPAND_LIBS)) LIBRARY := $(_LIBRARY).$(LIBS_DESC_SUFFIX) @@ -1016,6 +1016,8 @@ $(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS_DEP $(RANLIB) $@ $(filter-out %.$(LIB_SUFFIX),$(LIBRARY)): $(filter %.$(LIB_SUFFIX),$(LIBRARY)) $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS) +# When we only build a library descriptor, blow out any existing library + $(if $(filter %.$(LIB_SUFFIX),$(LIBRARY)),,$(RM) $(REAL_LIBRARY) $(EXPORT_LIBRARY:%=%/$(REAL_LIBRARY))) $(EXPAND_LIBS_GEN) $(OBJS) $(LOBJS) $(SHARED_LIBRARY_LIBS) > $@ ifeq ($(OS_ARCH),WINNT) From b8edc1a0481fc8b0da555ba78aed196f4fecf62d Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 1 Sep 2011 18:41:33 +0200 Subject: [PATCH 5/6] Bug 683171 - Fixup. r=me --- toolkit/mozapps/installer/packager.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toolkit/mozapps/installer/packager.mk b/toolkit/mozapps/installer/packager.mk index bcbbf6e1493..46c8a9c9411 100644 --- a/toolkit/mozapps/installer/packager.mk +++ b/toolkit/mozapps/installer/packager.mk @@ -420,7 +420,7 @@ GENERATE_CACHE = \ rm startupCache.zip && \ $(ZIP) -r9m omni.jar jsloader/resource/$(PRECOMPILE_RESOURCE) else -GENERATE_CACHE = +GENERATE_CACHE = true endif endif From 066dc50bdf7c57383aff7ef55f317d14d2fadce6 Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Thu, 1 Sep 2011 20:24:13 +0200 Subject: [PATCH 6/6] Bug 683875 - Fixup. r=me --- config/rules.mk | 4 ++-- js/src/config/rules.mk | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/rules.mk b/config/rules.mk index e584c2005a8..33339b221f8 100644 --- a/config/rules.mk +++ b/config/rules.mk @@ -253,9 +253,9 @@ ifdef STATIC_LIBRARY_NAME REAL_LIBRARY := $(LIB_PREFIX)$(STATIC_LIBRARY_NAME).$(LIB_SUFFIX) # Only build actual library if it is installed in DIST/lib or SDK ifeq (,$(SDK_LIBRARY)$(DIST_INSTALL)$(NO_EXPAND_LIBS)) -LIBRARY := $(_LIBRARY).$(LIBS_DESC_SUFFIX) +LIBRARY := $(REAL_LIBRARY).$(LIBS_DESC_SUFFIX) else -LIBRARY := $(_LIBRARY) $(_LIBRARY).$(LIBS_DESC_SUFFIX) +LIBRARY := $(REAL_LIBRARY) $(REAL_LIBRARY).$(LIBS_DESC_SUFFIX) endif endif # STATIC_LIBRARY_NAME endif # LIBRARY diff --git a/js/src/config/rules.mk b/js/src/config/rules.mk index e584c2005a8..33339b221f8 100644 --- a/js/src/config/rules.mk +++ b/js/src/config/rules.mk @@ -253,9 +253,9 @@ ifdef STATIC_LIBRARY_NAME REAL_LIBRARY := $(LIB_PREFIX)$(STATIC_LIBRARY_NAME).$(LIB_SUFFIX) # Only build actual library if it is installed in DIST/lib or SDK ifeq (,$(SDK_LIBRARY)$(DIST_INSTALL)$(NO_EXPAND_LIBS)) -LIBRARY := $(_LIBRARY).$(LIBS_DESC_SUFFIX) +LIBRARY := $(REAL_LIBRARY).$(LIBS_DESC_SUFFIX) else -LIBRARY := $(_LIBRARY) $(_LIBRARY).$(LIBS_DESC_SUFFIX) +LIBRARY := $(REAL_LIBRARY) $(REAL_LIBRARY).$(LIBS_DESC_SUFFIX) endif endif # STATIC_LIBRARY_NAME endif # LIBRARY