bug 508861 - Build/ship the C++ runtime with MSVC/jemalloc. r=bsmedberg
authorTed Mielczarek <ted.mielczarek@gmail.com>
Mon, 17 Aug 2009 13:13:37 -0400
changeset 31983 d25e72de30f1a518690f10499d5852d8a3713816
parent 31982 7937d2b42712645953fb2dbfdf12fc1f276eae64
child 31984 cf74f6f746c3727d97d0a947a4d5f5589c34b635
child 35872 ef5eac530f6663ed097e63d78b36411157f662b3
push idunknown
push userunknown
push dateunknown
reviewersbsmedberg
bugs508861
milestone1.9.3a1pre
bug 508861 - Build/ship the C++ runtime with MSVC/jemalloc. r=bsmedberg
browser/installer/windows/packages-static
configure.in
memory/jemalloc/Makefile.in
memory/jemalloc/build-crt.py
memory/jemalloc/crtsp1.diff
--- a/browser/installer/windows/packages-static
+++ b/browser/installer/windows/packages-static
@@ -47,16 +47,17 @@ bin\mozce_shunt.dll
 #else
 #ifndef MOZ_MEMORY
 bin\Microsoft.VC80.CRT.manifest
 bin\msvcm80.dll
 bin\msvcp80.dll
 bin\msvcr80.dll
 #else
 bin\mozcrt19.dll
+bin\mozcpp19.dll
 #endif
 #endif
 
 [browser]
 ; [Base Browser Files]
 bin\@MOZ_APP_NAME@.exe
 bin\application.ini
 bin\platform.ini
--- a/configure.in
+++ b/configure.in
@@ -6660,19 +6660,17 @@ if test "$MOZ_MEMORY"; then
     fi
 
     if test ! -d "$WIN32_CRT_SRC_DIR"; then
       AC_MSG_ERROR([Invalid Win32 CRT source directory: ${WIN32_CRT_SRC_DIR}])
     fi
     WIN32_CRT_SRC_DIR=`cd "$WIN32_CRT_SRC_DIR" && pwd -W`
     _objdir_win=`pwd -W`
     WIN32_CUSTOM_CRT_DIR="$_objdir_win/memory/jemalloc/crtsrc/build/intel"
-    dnl Statically link the C++ stdlib.  We only use this for Breakpad anyway.
-    AC_DEFINE(_STATIC_CPPLIB)
-    MOZ_MEMORY_LDFLAGS="-MANIFEST:NO -LIBPATH:\"$WIN32_CUSTOM_CRT_DIR\" -NODEFAULTLIB:msvcrt -NODEFAULTLIB:msvcrtd -DEFAULTLIB:mozcrt19"
+    MOZ_MEMORY_LDFLAGS="-MANIFEST:NO -LIBPATH:\"$WIN32_CUSTOM_CRT_DIR\" -NODEFAULTLIB:msvcrt -NODEFAULTLIB:msvcrtd -NODEFAULTLIB:msvcprt -NODEFAULTLIB:msvcprtd -DEFAULTLIB:mozcrt19 -DEFAULTLIB:mozcpp19"
     dnl Also pass this to NSPR/NSS
     DLLFLAGS="$DLLFLAGS $MOZ_MEMORY_LDFLAGS"
     export DLLFLAGS
     ;;
   *wince)
     AC_DEFINE(MOZ_MEMORY_WINCE)
     AC_DEFINE(MOZ_MEMORY_WINDOWS)
     if test -z "$WINCE_WINDOWS_MOBILE"; then
--- a/memory/jemalloc/Makefile.in
+++ b/memory/jemalloc/Makefile.in
@@ -48,25 +48,28 @@ MODULE		= jemalloc
 # jemalloc.c properly uses 'static', so don't burden it with manually exposing
 # symbols.
 VISIBILITY_FLAGS=
 
 ifeq (WINNT,$(OS_TARGET))
 # Building the CRT from source
 CRT_OBJ_DIR = $(CURDIR)/crtsrc
 MOZ_CRT_DLL_NAME = mozcrt19
+MOZ_CRTCPP_DLL_NAME = mozcpp19
 MOZ_CRT_STATIC_LIBS = libcmt libcpmt
 MOZ_CRT_DLL = $(CRT_OBJ_DIR)/build/intel/$(MOZ_CRT_DLL_NAME).dll
 MOZ_CRT_IMPORT_LIB = $(CRT_OBJ_DIR)/build/intel/$(MOZ_CRT_DLL_NAME).lib
+MOZ_CRTCPP_DLL = $(CRT_OBJ_DIR)/build/intel/$(MOZ_CRTCPP_DLL_NAME).dll
+MOZ_CRTCPP_IMPORT_LIB = $(CRT_OBJ_DIR)/build/intel/$(MOZ_CRTCPP_DLL_NAME).lib
 
-# copy the CRT DLL to dist/bin,
-# copy the import lib to dist/lib
+# copy the CRT DLLs to dist/bin,
+# copy the import libs to dist/lib
 libs:: $(MOZ_CRT_DLL) $(MOZ_CRT_IMPORT_LIB)
-	$(INSTALL) $(MOZ_CRT_DLL) $(FINAL_TARGET)
-	$(INSTALL) $(MOZ_CRT_IMPORT_LIB) $(DIST)/lib
+	$(INSTALL) $(MOZ_CRT_DLL) $(MOZ_CRTCPP_DLL) $(FINAL_TARGET)
+	$(INSTALL) $(MOZ_CRT_IMPORT_LIB) $(MOZ_CRTCPP_IMPORT_LIB) $(DIST)/lib
 
 $(MOZ_CRT_IMPORT_LIB): $(MOZ_CRT_DLL)
 
 define EXTRACT_CMD
 cd $(CRT_OBJ_DIR)/intel/$(i)_lib && lib "-extract:..\\build\\intel\\$(i)_obj\\unhandld.obj" eh.lib
 
 endef # don't touch the blank line. actually, don't touch anything in this file.
 
--- a/memory/jemalloc/build-crt.py
+++ b/memory/jemalloc/build-crt.py
@@ -1,16 +1,16 @@
 #!/usr/bin/env python
 
 import os, sys
 from subprocess import Popen, STDOUT, PIPE
 
 if 'MAKEFLAGS' in os.environ:
   del os.environ['MAKEFLAGS']
-proc = Popen(['nmake', 'dll_', 'mt'], stdout=PIPE, stderr=STDOUT,
+proc = Popen(['nmake', 'dll_', 'dll_p', 'mt'], stdout=PIPE, stderr=STDOUT,
              cwd=sys.argv[1])
 
 while True:
   line = proc.stdout.readline()
   if line == '':
     break
   line = line.rstrip()
   # explicitly ignore this fatal-sounding non-fatal error
--- a/memory/jemalloc/crtsp1.diff
+++ b/memory/jemalloc/crtsp1.diff
@@ -1,28 +1,16 @@
 # The Microsoft C Runtime source code to which this document refers is available
 # directly from Microsoft Corporation, under a separate license.
 # Please ensure that if you are using that source code, you have appropriate
 # rights to use it.  By providing you access to this file, Mozilla Corporation
 # and its affiliates do not purport to grant any rights in that source code. 
 # Binaries are available under separate licenses at 
 # http://www.microsoft.com/downloads/details.aspx?familyid=200b2fd9-ae1a-4a14-984d-389c36f85647&displaylang=en
-diff -re crt/src/crt0.c crt-sp1/src/crt0.c
-273c
-	/*
-	 * this used to happen in _mtinit, but we need it before malloc
-	 */
-	_init_pointers();       /* initialize global function pointers */
-
-        if ( malloc_init_hard() )           /* initialize heap */
-.
-101a
-extern BOOL malloc_init_hard(void);
-.
-diff -re crt/src/_sample_.rc crt-sp1/src/_sample_.rc
+diff -re crt/src/_sample_.rc ./crtsrc/_sample_.rc
 41c
             VALUE "ProductName", "Mozilla Custom C Runtime"
 .
 39c
             VALUE "OriginalFilename", "MOZCRT19.DLL"
 .
 37c
             VALUE "OriginalFilename", "MOZCRT19D.DLL"
@@ -31,29 +19,40 @@ 33c
             VALUE "InternalName", "MOZCRT19.DLL"
 .
 31c
             VALUE "InternalName", "MOZCRT19D.DLL"
 .
 27c
             VALUE "CompanyName", "Mozilla Foundation"
 .
-
-diff -re crt/src/crt0dat.c crt-sp1/src/crt0dat.c
+diff -re crt/src/crt0.c ./crtsrc/crt0.c
+273c
+	/*
+	 * this used to happen in _mtinit, but we need it before malloc
+	 */
+	_init_pointers();       /* initialize global function pointers */
+
+        if ( malloc_init_hard() )           /* initialize heap */
+.
+101a
+extern BOOL malloc_init_hard(void);
+.
+diff -re crt/src/crt0dat.c ./crtsrc/crt0dat.c
 789d
 778d
-diff -re crt/src/crtexe.c crt-sp1/src/crtexe.c
+diff -re crt/src/crtexe.c ./crtsrc/crtexe.c
 333,335d
-diff -re crt/src/crtheap.c crt-sp1/src/crtheap.c
+diff -re crt/src/crtheap.c ./crtsrc/crtheap.c
 61c
     pv = calloc(count, size);
 .
 58,59d
-diff -re crt/src/crtlib.c crt-sp1/src/crtlib.c
-779,786d
+diff -re crt/src/crtlib.c ./crtsrc/crtlib.c
+781,788d
 416d
 400a
 		malloc_shutdown();
 
 .
 359d
 340d
 310,311d
@@ -66,23 +65,23 @@ 287c
 
             if ( malloc_init_hard() )   /* initialize heap */
 .
 43a
 extern BOOL malloc_init_hard(void);
 extern void malloc_shutdown(void);
 
 .
-diff -re crt/src/dllcrt0.c crt-sp1/src/dllcrt0.c
+diff -re crt/src/dllcrt0.c ./crtsrc/dllcrt0.c
 236,237d
 183d
 173d
 158d
 153,155d
-diff -re crt/src/intel/_sample_.def crt-sp1/src/intel/_sample_.def
+diff -re crt/src/intel/_sample_.def ./crtsrc/intel/_sample_.def
 1208d
 723,724d
 669a
     posix_memalign
 .
 643a
     memalign
 .
@@ -91,28 +90,35 @@ 500a
 .
 336,341d
 324d
 313,314d
 81d
 9c
 LIBRARY MOZCRT19
 .
-diff -re crt/src/internal.h crt-sp1/src/internal.h
+diff -re crt/src/internal.h ./crtsrc/internal.h
 407a
 #endif
 .
 403a
 #if 0
 .
-diff -re crt/src/makefile crt-sp1/src/makefile
+diff -re crt/src/makefile ./crtsrc/makefile
+1840c
+-def:$(DEFFILE2_DIR)\sample_p.def
+.
+1816c
+ $(DEFFILE2_DIR)\sample_p.def $(CPPSRC_OBJS_DLL:*=dll) \
+.
 1745a
 $(DEFFILE_DIR)\$(RETAIL_LIB_NAME).def : $(DEFFILE_DIR)\_sample_.def
 	copy $** $@
 .
+1274d
 1228,1230d
 754c
 dll_ :: $(OBJROOT) $(OBJCPUDIR) $(OBJDIR_DLL) $(OBJDIR_DLL)\$(PURE_OBJ_DIR) \
    	$(OBJDIR_DLL)\$(CPP_OBJ_DIR) \
    	$(RELDIR_CPU) $(PDBDIR_CPU_DLL) $(MAKE_DIRS_DLL)
 .
 334c
 CC_OPTS_BASE=-c -nologo -Zlp8 -W3 -GFy -DWIND32
@@ -123,75 +129,100 @@ LINKLIB=link -lib
 LINKIMPLIB=link -lib
 .
 302,304c
 LINKER=link -nologo
 LINKLIB=link -lib -nologo
 LINKIMPLIB=link -lib -nologo
 .
 209d
-21,22c
+21,24c
 RETAIL_DLL_NAME=MOZCRT19
 RETAIL_LIB_NAME=mozcrt19
+RETAIL_DLLCPP_NAME=MOZCPP19
+RETAIL_LIBCPP_NAME=mozcpp19
 .
-diff -re crt/src/makefile.inc crt-sp1/src/makefile.inc
-1623a
-
+diff -re crt/src/makefile.inc ./crtsrc/makefile.inc
+1624a
 $(OBJDIR)\unhandld.obj: $(PREOBJDIR)\unhandld.obj
         copy $(PREOBJDIR)\unhandld.obj $@
+
 .
 618d
 402d
 342,353c
         $(OBJDIR)\jemalloc.obj \
 .
 334,335d
 329,330d
 327d
 323d
 320d
-diff -re crt/src/makefile.sub crt-sp1/src/makefile.sub
+diff -re crt/src/makefile.sub ./crtsrc/makefile.sub
 103c
 LIB=link -lib -nologo
 .
 69c
 CFLAGS=$(CFLAGS) -O2 -DMOZ_MEMORY=1 -DMOZ_MEMORY_WINDOWS=1
 .
-diff -re crt/src/malloc.h crt-sp1/src/malloc.h
+diff -re crt/src/malloc.h ./crtsrc/malloc.h
 189a
 #endif
 .
 177a
 
 #if 0
 .
 161d
 83a
 #endif
 .
 70a
 #if 0
 .
-diff -re crt/src/mlock.c crt-sp1/src/mlock.c
+diff -re crt/src/mlock.c ./crtsrc/mlock.c
 274c
 #endif
 .
 262a
 #if 0
 .
-diff -re crt/src/new.cpp crt-sp1/src/new.cpp
+diff -re crt/src/new.cpp ./crtsrc/new.cpp
 60d
 52,55d
 37,38c
         break;
 .
-diff -re crt/src/nothrownew.cpp crt-sp1/src/nothrownew.cpp
+diff -re crt/src/nothrownew.cpp ./crtsrc/nothrownew.cpp
 37a
 #endif
 .
 31a
 #if 1
         break;
 #else
 
 .
-diff -re crt/src/tidtable.c crt-sp1/src/tidtable.c
+diff -re crt/src/sample_p.def ./crtsrc/sample_p.def
+8c
+LIBRARY MOZCPP19
+.
+diff -re crt/src/sample_p.rc ./crtsrc/sample_p.rc
+41c
+            VALUE "ProductName", "Mozilla Custom C++ Runtime"
+.
+39c
+            VALUE "OriginalFilename", "MOZCPP19.DLL"
+.
+37c
+            VALUE "OriginalFilename", "MOZCPP19D.DLL"
+.
+33c
+            VALUE "InternalName", "MOZCPP19.DLL"
+.
+31c
+            VALUE "InternalName", "MOZCPP19D.DLL"
+.
+27c
+            VALUE "CompanyName", "Mozilla Foundation"
+.
+diff -re crt/src/tidtable.c ./crtsrc/tidtable.c
 393,394d