Home | History | Annotate | Download | only in vendor
      1 #
      2 # ***** BEGIN LICENSE BLOCK *****
      3 # Version: MPL 1.1/GPL 2.0/LGPL 2.1
      4 #
      5 # The contents of this file are subject to the Mozilla Public License Version
      6 # 1.1 (the "License"); you may not use this file except in compliance with
      7 # the License. You may obtain a copy of the License at
      8 # http://www.mozilla.org/MPL/
      9 #
     10 # Software distributed under the License is distributed on an "AS IS" basis,
     11 # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
     12 # for the specific language governing rights and limitations under the
     13 # License.
     14 #
     15 # The Original Code is mozilla.org code.
     16 #
     17 # The Initial Developer of the Original Code is
     18 # Mozilla Foundation
     19 # Portions created by the Initial Developer are Copyright (C) 2008
     20 # the Initial Developer. All Rights Reserved.
     21 #
     22 # Contributor(s):
     23 #  Ted Mielczarek <ted.mielczarek (at] gmail.com>
     24 #
     25 # Alternatively, the contents of this file may be used under the terms of
     26 # either of the GNU General Public License Version 2 or later (the "GPL"),
     27 # or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
     28 # in which case the provisions of the GPL or the LGPL are applicable instead
     29 # of those above. If you wish to allow use of your version of this file only
     30 # under the terms of either the GPL or the LGPL, and not to allow others to
     31 # use your version of this file under the terms of the MPL, indicate your
     32 # decision by deleting the provisions above and replace them with the notice
     33 # and other provisions required by the GPL or the LGPL. If you do not delete
     34 # the provisions above, a recipient may use your version of this file under
     35 # the terms of any one of the MPL, the GPL or the LGPL.
     36 #
     37 # ***** END LICENSE BLOCK *****
     38 
     39 DEPTH		= ../..
     40 topsrcdir	= @top_srcdir@
     41 srcdir		= @srcdir@
     42 VPATH		= @srcdir@
     43 
     44 include $(DEPTH)/config/autoconf.mk
     45 
     46 MODULE		= jemalloc
     47 
     48 # jemalloc.c properly uses 'static', so don't burden it with manually exposing
     49 # symbols.
     50 VISIBILITY_FLAGS=
     51 
     52 ifeq (WINNT,$(OS_TARGET))
     53 # Building the CRT from source
     54 CRT_OBJ_DIR = $(CURDIR)/crtsrc
     55 MOZ_CRT_DLL_NAME = mozcrt19
     56 MOZ_CRT_STATIC_LIBS = libcmt libcpmt
     57 MOZ_CRT_DLL = $(CRT_OBJ_DIR)/build/intel/$(MOZ_CRT_DLL_NAME).dll
     58 MOZ_CRT_IMPORT_LIB = $(CRT_OBJ_DIR)/build/intel/$(MOZ_CRT_DLL_NAME).lib
     59 
     60 # copy the CRT DLL to dist/bin,
     61 # copy the import lib to dist/lib
     62 libs:: $(MOZ_CRT_DLL) $(MOZ_CRT_IMPORT_LIB)
     63 	$(INSTALL) $(MOZ_CRT_DLL) $(FINAL_TARGET)
     64 	$(INSTALL) $(MOZ_CRT_IMPORT_LIB) $(DIST)/lib
     65 
     66 $(MOZ_CRT_IMPORT_LIB): $(MOZ_CRT_DLL)
     67 
     68 define EXTRACT_CMD
     69 cd $(CRT_OBJ_DIR)/intel/$(i)_lib && lib "-extract:..\\build\\intel\\$(i)_obj\\unhandld.obj" eh.lib
     70 
     71 endef # don't touch the blank line. actually, don't touch anything in this file.
     72 
     73 # patch if necessary
     74 $(CRT_OBJ_DIR)/jemalloc.c: $(srcdir)/crtsp1.diff
     75 	rm -rf $(CRT_OBJ_DIR)
     76 	cp -R "$(WIN32_CRT_SRC_DIR)" $(CRT_OBJ_DIR)
     77 # per http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1189363&SiteID=1
     78 	$(foreach i,dll mt xdll xmt,$(EXTRACT_CMD))
     79 # truly awful
     80 #XXX: get ed into mozillabuild, bug 415123
     81 	$(PERL) $(srcdir)/apply-ed-patches.pl $(srcdir)/crtsp1.diff \
     82 	$(CRT_OBJ_DIR) $(srcdir)/ed.exe
     83 
     84 $(MOZ_CRT_DLL): \
     85   $(CRT_OBJ_DIR)/jemalloc.c $(srcdir)/jemalloc.c $(srcdir)/jemalloc.h \
     86   $(srcdir)/ql.h $(srcdir)/qr.h $(srcdir)/rb.h
     87 	cp $(srcdir)/jemalloc.c $(srcdir)/jemalloc.h $(srcdir)/ql.h \
     88 	$(srcdir)/qr.h $(srcdir)/rb.h $(CRT_OBJ_DIR)
     89 # this pretty much sucks, but nmake and make don't play well together
     90 	$(PYTHON) $(srcdir)/build-crt.py $(CRT_OBJ_DIR)
     91 # XXX: these don't link right for some reason; the problem is likely
     92 # that  not all the standard symbols are exported; looks like MSFT
     93 # never updated the sample.def files; could probably fix if someone
     94 # were ever bored enough. :-)
     95 	rm -f $(addsuffix .lib, $(addprefix $(CRT_OBJ_DIR)/build/intel/, $(MOZ_CRT_STATIC_LIBS)))
     96 	rm -f $(addsuffix .pdb, $(addprefix $(CRT_OBJ_DIR)/build/intel/, $(MOZ_CRT_STATIC_LIBS)))
     97 
     98 else # Not Windows
     99 
    100 MODULE_OPTIMIZE_FLAGS = -O2
    101 ifeq ($(OS_ARCH),SunOS)
    102 ifndef GNU_CC
    103 MODULE_OPTIMIZE_FLAGS = -xO5
    104 endif
    105 endif
    106 
    107 LIBRARY_NAME	= jemalloc
    108 
    109 # Build jemalloc as a shared lib.  This is mandatory for Darwin, since a library
    110 # init function is used on that platform.
    111 ifeq ($(OS_ARCH),Darwin)
    112 FORCE_SHARED_LIB= 1
    113 else
    114 DIST_INSTALL = 1
    115 FORCE_STATIC_LIB= 1
    116 endif
    117 
    118 EXPORTS = jemalloc.h
    119 CSRCS   = jemalloc.c
    120 
    121 #XXX: PGO on Linux causes problems here
    122 # See bug 419470
    123 NO_PROFILE_GUIDED_OPTIMIZE = 1
    124 endif
    125 
    126 include $(topsrcdir)/config/rules.mk
    127 
    128 ifeq (Darwin,$(OS_TARGET))
    129 LDFLAGS += -init _jemalloc_darwin_init
    130 endif
    131