# -*- Mode: makefile -*- # # ***** 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 Communicator client code, released # March 31, 1998. # # The Initial Developer of the Original Code is # Netscape Communications Corporation. # Portions created by the Initial Developer are Copyright (C) 1998 # the Initial Developer. All Rights Reserved. # # Contributor(s): # # 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@ run_for_side_effects := $(shell echo "MAKE: $(MAKE)") include $(DEPTH)/config/autoconf.mk DIRS = config ifdef DEHYDRA_PATH DIRS += analysis-tests endif ifdef JS_NATIVE_EDITLINE DIRS += editline endif # editline needs to get built before the shell ifndef JS_DISABLE_SHELL DIRS += shell endif # FIXME: bug 530688 covers getting these working on Android ifneq ($(OS_ARCH),ANDROID) ifdef ENABLE_TESTS DIRS += jsapi-tests endif endif ifdef ENABLE_TESTS DIRS += tests endif MODULE = js LIBRARY_NAME = mozjs STATIC_LIBRARY_NAME = js_static GRE_MODULE = 1 LIBS = $(NSPR_LIBS) ifeq ($(OS_ARCH),WINNT) NO_PROFILE_GUIDED_OPTIMIZE = 1 endif # JavaScript must be built shared, even for static builds, as it is used by # other modules which are always built shared. Failure to do so results in # the js code getting copied into xpinstall and jsd as well as mozilla-bin, # and then the static data cells used for locking no longer work. # # In fact, we now build both a static and a shared library, as the # JS shell would like to link to the static library. ifdef JS_SHARED_LIBRARY FORCE_SHARED_LIB = 1 endif FORCE_STATIC_LIB = 1 DIST_INSTALL = 1 VPATH = \ $(srcdir) \ $(srcdir)/builtin \ $(srcdir)/ds \ $(srcdir)/frontend \ $(srcdir)/gc \ $(srcdir)/vm \ $(NULL) CPPSRCS = \ jsalloc.cpp \ jsanalyze.cpp \ jsapi.cpp \ jsarray.cpp \ jsatom.cpp \ jsbool.cpp \ jsclone.cpp \ jscntxt.cpp \ jscompartment.cpp \ jsdate.cpp \ jsdbgapi.cpp \ jsdhash.cpp \ jsdtoa.cpp \ jsexn.cpp \ jsfriendapi.cpp \ jsfun.cpp \ jsgc.cpp \ jsgcmark.cpp \ jsgcchunk.cpp \ jsgcstats.cpp \ jscrashreport.cpp \ jshash.cpp \ jsinfer.cpp \ jsinterp.cpp \ jsiter.cpp \ jslog2.cpp \ jsmath.cpp \ jsnativestack.cpp \ jsnum.cpp \ jsobj.cpp \ json.cpp \ jsonparser.cpp \ jsopcode.cpp \ jsproxy.cpp \ jsprf.cpp \ jsprobes.cpp \ jspropertycache.cpp \ jspropertytree.cpp \ jsreflect.cpp \ jsscope.cpp \ jsscript.cpp \ jsstr.cpp \ jstypedarray.cpp \ jsutil.cpp \ jswatchpoint.cpp \ jsweakmap.cpp \ jswrapper.cpp \ jsxdrapi.cpp \ jsxml.cpp \ prmjtime.cpp \ sharkctl.cpp \ ScopeObject.cpp \ Debugger.cpp \ GlobalObject.cpp \ Stack.cpp \ String.cpp \ BytecodeCompiler.cpp \ BytecodeEmitter.cpp \ FoldConstants.cpp \ ParseMaps.cpp \ ParseNode.cpp \ Parser.cpp \ SemanticAnalysis.cpp \ TokenStream.cpp \ LifoAlloc.cpp \ MemoryMetrics.cpp \ RegExpObject.cpp \ RegExpStatics.cpp \ RegExp.cpp \ Statistics.cpp \ Unicode.cpp \ $(NULL) # Changes to internal header files, used externally, massively slow down # browser builds. Don't add new files here unless you know what you're # doing! INSTALLED_HEADERS = \ js-config.h \ jscpucfg.h \ $(CURDIR)/jsautokw.h \ js.msg \ jsalloc.h \ jsapi.h \ jsatom.h \ jsclass.h \ jsclist.h \ jsclone.h \ jscompat.h \ jsdbgapi.h \ jsdhash.h \ jsfriendapi.h \ jsgc.h \ jscell.h \ jsgcchunk.h \ jsgcstats.h \ jshash.h \ jslock.h \ json.h \ jsopcode.tbl \ jsopcode.h \ jsproxy.h \ jsprf.h \ jsproto.tbl \ jsprvtd.h \ jspubtd.h \ jsstdint.h \ jstypedarray.h \ jstypes.h \ jsutil.h \ jsversion.h \ jswrapper.h \ jsxdrapi.h \ jsval.h \ $(NULL) ###################################################### # BEGIN exported headers that are only exported # because of inclusion by an INSTALLED_HEADER # EXPORTS_NAMESPACES += vm ds gc EXPORTS_vm = \ String.h \ $(NULL) EXPORTS_ds = \ BitArray.h \ $(NULL) EXPORTS_gc = \ Statistics.h \ Barrier.h \ $(NULL) ###################################################### # BEGIN include exported headers from the JS engine # # Ultimately, after cleansing INSTALLED_HEADERS, # these will be the ONLY headers exported by # the js engine # VPATH += \ $(srcdir)/../public \ $(NULL) EXPORTS_NAMESPACES += js # If you add a header here, add it to js/src/jsapi-tests/testIntTypesABI.cpp so # that we ensure we don't over-expose our internal integer typedefs. Note that # LegacyIntTypes.h below is deliberately exempted from this requirement. EXPORTS_js = \ HashTable.h \ LegacyIntTypes.h \ MemoryMetrics.h \ TemplateLib.h \ Utility.h \ Vector.h \ $(NULL) ############################################### # BEGIN include sources for low-level code shared with mfbt # VPATH += $(srcdir)/../../mfbt include $(srcdir)/../../mfbt/exported_headers.mk ifdef ENABLE_METHODJIT ############################################### # BEGIN include sources for the method JIT # VPATH += $(srcdir)/methodjit CPPSRCS += MethodJIT.cpp \ StubCalls.cpp \ Compiler.cpp \ FrameState.cpp \ FastArithmetic.cpp \ FastBuiltins.cpp \ FastOps.cpp \ LoopState.cpp \ StubCompiler.cpp \ MonoIC.cpp \ PolyIC.cpp \ ImmutableSync.cpp \ InvokeHelpers.cpp \ Retcon.cpp \ TrampolineCompiler.cpp \ $(NULL) ifeq (86, $(findstring 86,$(TARGET_CPU))) ifeq (x86_64, $(TARGET_CPU)) ifdef _MSC_VER ASFILES += TrampolineMasmX64.asm endif ifeq ($(OS_ARCH),WINNT) ifdef GNU_CC ASFILES += TrampolineMingwX64.s endif endif ifdef SOLARIS_SUNPRO_CXX ASFILES += TrampolineSUNWX64.s endif #CPPSRCS += only_on_x86_64.cpp else #CPPSRCS += only_on_x86.cpp ifdef SOLARIS_SUNPRO_CXX ASFILES += TrampolineSUNWX86.s endif endif endif ifeq (arm, $(TARGET_CPU)) #CPPSRCS += only_on_arm.cpp endif ifeq (sparc, $(findstring sparc,$(TARGET_CPU))) ASFILES += TrampolineSparc.s endif ifeq (mips, $(findstring mips,$(TARGET_CPU))) CPPSRCS += TrampolineMIPS.cpp endif # # END enclude sources for the method JIT ############################################# endif ############################################### # BEGIN include sources for V8 dtoa # VPATH += $(srcdir)/v8-dtoa \ $(NONE) CPPSRCS += checks.cc \ conversions.cc \ diy-fp.cc \ v8-dtoa.cc \ fast-dtoa.cc \ platform.cc \ utils.cc \ $(NONE) # # END enclude sources for V8 dtoa ############################################# # For architectures without YARR JIT, PCRE is faster than the YARR # interpreter (bug 684559). ifeq (,$(filter arm% sparc %86 x86_64 mips%,$(TARGET_CPU))) VPATH += $(srcdir)/yarr/pcre \ $(NULL) CPPSRCS += \ pcre_compile.cpp \ pcre_exec.cpp \ pcre_tables.cpp \ pcre_xclass.cpp \ pcre_ucp_searchfuncs.cpp \ $(NULL) else ############################################### # BEGIN include sources for the Nitro assembler # ENABLE_YARR_JIT = 1 VPATH += $(srcdir)/assembler \ $(srcdir)/assembler/wtf \ $(srcdir)/assembler/jit \ $(srcdir)/assembler/assembler \ $(srcdir)/methodjit \ $(srcdir)/yarr \ $(NONE) CPPSRCS += Assertions.cpp \ ExecutableAllocator.cpp \ ARMAssembler.cpp \ MacroAssemblerARM.cpp \ MacroAssemblerX86Common.cpp \ PageBlock.cpp \ YarrInterpreter.cpp \ YarrJIT.cpp \ YarrPattern.cpp \ YarrSyntaxChecker.cpp \ $(NONE) ifdef MOZ_DEBUG CPPSRCS += Logging.cpp endif ifneq (,$(filter-out OS2 WINNT,$(OS_ARCH))) CPPSRCS += ExecutableAllocatorPosix.cpp \ OSAllocatorPosix.cpp \ $(NONE) endif ifeq ($(OS_ARCH),WINNT) CPPSRCS += ExecutableAllocatorWin.cpp \ OSAllocatorWin.cpp \ $(NONE) endif ifeq ($(OS_ARCH),OS2) CPPSRCS += ExecutableAllocatorOS2.cpp \ OSAllocatorOS2.cpp \ $(NONE) endif ifeq (86, $(findstring 86,$(TARGET_CPU))) ifeq (x86_64, $(TARGET_CPU)) #CPPSRCS += only_on_x86_64.cpp else #CPPSRCS += only_on_x86.cpp endif endif ifeq (arm, $(TARGET_CPU)) #CPPSRCS += only_on_arm.cpp endif # # END enclude sources for the Nitro assembler ############################################# endif ifdef JS_HAS_CTYPES VPATH += $(srcdir)/ctypes CPPSRCS += \ CTypes.cpp \ Library.cpp \ $(NULL) ifdef MOZ_NATIVE_FFI LOCAL_INCLUDES = $(MOZ_FFI_CFLAGS) else LOCAL_INCLUDES = -Ictypes/libffi/include endif LOCAL_INCLUDES += \ -I. \ $(NULL) ifdef MOZ_NATIVE_FFI EXTRA_DSO_LDOPTS += $(MOZ_FFI_LIBS) else ifeq ($(OS_ARCH),OS2) SHARED_LIBRARY_LIBS += \ ctypes/libffi/.libs/ffi.a \ $(NULL) else SHARED_LIBRARY_LIBS += \ ctypes/libffi/.libs/libffi.$(LIB_SUFFIX) \ $(NULL) endif endif endif # JS_HAS_CTYPES ifdef HAVE_DTRACE INSTALLED_HEADERS += \ $(CURDIR)/javascript-trace.h \ $(NULL) endif # PerfMeasurement is available regardless of low-level support for it; # it just doesn't necessarily do anything useful. There is one # implementation source file per supported operating system, plus a stub # for unsupported OSes, plus the Javascript wrapper. VPATH += $(srcdir)/perf INSTALLED_HEADERS += jsperf.h CPPSRCS += jsperf.cpp ifdef HAVE_LINUX_PERF_EVENT_H CPPSRCS += pm_linux.cpp else CPPSRCS += pm_stub.cpp endif EXPORTS = $(INSTALLED_HEADERS) DASH_R = -r ifneq (,$(filter OS2 WINNT,$(OS_ARCH))) SDK_LIBRARY = $(IMPORT_LIBRARY) else SDK_LIBRARY = $(SHARED_LIBRARY) endif # for compiler bug (http://support.microsoft.com/kb/982107) for MSVC x64 ifdef _MSC_VER ifneq (,$(filter 1400 1500,$(_MSC_VER))) ifeq ($(OS_TEST),x86_64) ASFILES += jswin64.asm endif endif endif include $(topsrcdir)/config/config.mk EXTRA_DSO_LDOPTS += $(NSPR_LIBS) ifndef BUILD_OPT MOCHAFILE = 1 endif # Define keyword generator before rules.mk, see bug 323979 comment 50 HOST_SIMPLE_PROGRAMS += host_jskwgen$(HOST_BIN_SUFFIX) GARBAGE += jsautokw.h host_jskwgen$(HOST_BIN_SUFFIX) HOST_SIMPLE_PROGRAMS += host_jsoplengen$(HOST_BIN_SUFFIX) GARBAGE += jsautooplen.h host_jsoplengen$(HOST_BIN_SUFFIX) USE_HOST_CXX = 1 ifdef HAVE_DTRACE ifneq ($(OS_ARCH),Darwin) DTRACE_PROBE_OBJ = $(LIBRARY_NAME)-dtrace.$(OBJ_SUFFIX) endif MOZILLA_DTRACE_SRC = $(srcdir)/javascript-trace.d endif default:: ifneq (,$(CROSS_COMPILE)$(filter-out WINNT OS2,$(OS_ARCH))) # nsinstall doesn't get built until we enter config/ in the exports phase, # so we'll have to manually ensure it gets built here if we want to use # $(EXPORTS) export:: config/nsinstall$(HOST_BIN_SUFFIX) $(PUBLIC) $(SDK_PUBLIC): config/nsinstall$(HOST_BIN_SUFFIX) config/nsinstall$(HOST_BIN_SUFFIX): $(srcdir)/config/nsinstall.c $(srcdir)/config/pathsub.c $(MAKE) -C config/ nsinstall$(HOST_BIN_SUFFIX) endif include $(topsrcdir)/config/rules.mk ifdef JS_HAS_CTYPES ifndef MOZ_NATIVE_FFI # Build libffi proper as part of the 'exports' target, so things get built # in the right order. export:: $(call SUBMAKE,,ctypes/libffi) distclean clean:: $(call SUBMAKE,$@,ctypes/libffi) endif endif # Because the SpiderMonkey can be distributed and built independently # of the Mozilla source tree, it contains its own copies of many of # the files used by the top-level Mozilla build process, from the # 'config' and 'build' subtrees. # # To make it simpler to keep the copies in sync, we follow the policy # that the SpiderMonkey copies must always be exact copies of those in # the containing Mozilla tree. If you've made a change in one, it # belongs in the other as well. If the change isn't right for both # places, then that's something to bring up with the other developers. # # Some files are reasonable to diverge; for example, # js/config/autoconf.mk.in doesn't need most of the stuff in # config/autoconf.mk.in. check-sync-dirs-cmd = $(PYTHON) $(srcdir)/config/check-sync-dirs.py check-sync-dirs: $(check-sync-dirs-cmd) $(srcdir)/config $(MOZ_SYNC_BUILD_FILES)/config $(check-sync-dirs-cmd) $(srcdir)/build $(MOZ_SYNC_BUILD_FILES)/build ifdef MOZ_SYNC_BUILD_FILES check:: check-sync-dirs endif # The "find any vanilla new/new[] calls" script is tailored to Linux, so # only run it there. That should be enough to catch any such calls that # creep in. check-vanilla-new: $(srcdir)/config/find_vanilla_new_calls $(LIBRARY) ifeq ($(OS_ARCH),Linux) check:: check-vanilla-new endif # Help ensure that the number of OOM errors in SpiderMonkey doesn't increase. # If the number of OOM errors changes, update the number below. We intend this # number to go down over time, by fixing OOMs. check-ooms: $(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON) -u $(srcdir)/config/find_OOM_errors.py --regression 125 ifeq ($(MOZ_DEBUG),1) #check:: check-ooms endif ## Prevent regressing in our deprecation of non-preferred memory management functions. # We use all the files in the distribution so that different configurations # don't give different results. We skip the contents of objdirs using |find| # (it can't be done with %-expansion, because the files we want to skip aren't # in the vpath). ALL_FILES=$(shell find $(srcdir) \( -name "*.cpp" -o -name "*.h" \) ! -path "*/dist/*" ! -path "*/config/*") check-malloc-function-usage: $(filter-out %jsalloc.h %jscntxt.h %jsutil.h, $(ALL_FILES)) # js_malloc and friends are only used by other memory managers, and should # never be used elsewhere directly. $(srcdir)/config/check_source_count.py "\bjs_malloc\b" 0 \ "in Makefile.in" "cx->malloc_ or rt->malloc_" $^ $(srcdir)/config/check_source_count.py "\bjs_calloc\b" 0 \ "in Makefile.in" "cx->calloc_ or rt->calloc_" $^ $(srcdir)/config/check_source_count.py "\bjs_realloc\b" 0 \ "in Makefile.in" "cx->realloc_ or rt->realloc_" $^ $(srcdir)/config/check_source_count.py "\bjs_free\b" 0 \ "in Makefile.in" "cx->free_" $^ # We desire these numbers to go down, not up. See "User guide to memory # management within SpiderMonkey" in jsutil.h. $(srcdir)/config/check_source_count.py OffTheBooks:: 58 \ "in Makefile.in" "{cx,rt}->{new_,array_new,malloc_,calloc_,realloc_}" $^ # This should go to zero, if possible. $(srcdir)/config/check_source_count.py UnwantedForeground:: 31 \ "in Makefile.in" "{cx,rt}->{free_,delete_,array_delete}" $^ ifneq ($(OS_ARCH),WINNT) # FIXME: this should be made work on Windows too. #check:: check-malloc-function-usage FIXME: disable on JM until closer to merge time. endif JITFLAGS = ,m,am,amd,n,mn,amn,amdn,mdn check-jit-test:: $(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON) -u $(srcdir)/jit-test/jit_test.py \ --valgrind --no-slow --no-progress --tinderbox --jitflags=$(JITFLAGS) $(DIST)/bin/js$(BIN_SUFFIX) check:: check-jit-test # jstests doesn't have a --jitflags option, so we need to loop, updating the # exit code (RC) after each invocation. # FIXME: MethodJIT doesn't work for 1 test case (bug 644393), so # --no-extensions is set to skip that test. Remove as soon as possible. check-jstests: RC=0; \ for f in `echo "$(JITFLAGS)" | tr ',' '\n'`; \ do \ $(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON) -u $(srcdir)/tests/jstests.py \ --tinderbox --no-progress \ --no-extensions \ --timeout 300 \ --args="`echo $$f | sed 's/\(.\)/ -\1/g'`" \ $(DIST)/bin/js$(BIN_SUFFIX); \ RC=$$(( $$RC || $$?)); \ done; \ exit $$RC # FIXME: # We want to run check-jstests as part of |make check| on all platforms, on # tinderbox. However, some configurations don't work quite right just yet. # Rather than risking regressions in major configurations while fixing these # secondary configuration, we work around them and fix the bugs later. # # Bug 652154: On Windows, SM(!m !t) don't work because of path problems with # their unusual directory layout # # Bug 652155: On Mac, SM(d) doesn't work for unknown reasons ifeq ($(OS_ARCH),WINNT) ifdef ENABLE_METHODJIT endif else ifndef HAVE_DTRACE #check:: check-jstests endif endif DIST_GARBAGE = config.cache config.log config.status \ config/autoconf.mk \ unallmakefiles js-config js-config.h js-confdefs.h distclean:: cat unallmakefiles | $(XARGS) rm -f $(RM) $(DIST_GARBAGE) DEFINES += -DEXPORT_JS_API # mfbt is always packed with us, so if we're building a shared object, # we need to declare "exported" mfbt symbols on its behalf when we use # its headers. DEFINES += -DIMPL_MFBT INCLUDES += -I$(srcdir) ifdef JS_THREADSAFE DEFINES += -DJS_THREADSAFE endif ifdef JS_HAS_CTYPES DEFINES += -DJS_HAS_CTYPES DEFINES += -DDLL_PREFIX=\"$(DLL_PREFIX)\" -DDLL_SUFFIX=\"$(DLL_SUFFIX)\" endif ifdef JS_VERSION DEFINES += -DJS_VERSION=$(JS_VERSION) endif # We do not want to have obsolete NSPR functionality in threadsafe builds. DEFINES += -DNO_NSPR_10_SUPPORT ifneq ($(findstring -L,$(NSPR_LIBS)),) NSPR_STATIC_PATH = $(subst -L,,$(findstring -L,$(NSPR_LIBS))) else NSPR_STATIC_PATH = $(DIST)/lib endif ifdef MOZ_VTUNE CXXFLAGS += -IC:/Program\ Files/Intel/VTune/Analyzer/Include EXTRA_DSO_LDOPTS += C:/Program\ Files/Intel/VTune/Analyzer/Lib/VtuneApi.lib LIBS += C:/Program\ Files/Intel/VTune/Analyzer/Lib/VtuneApi.lib endif ifdef MOZ_ETW # This will get the ETW provider resources into the library mozjs.dll RESFILE = ETWProvider.res endif # HP-UX does not require the extra linking of "-lm" ifeq (,$(filter HP-UX WINNT OS2,$(OS_ARCH))) EXTRA_LIBS += -lm endif # Prevent floating point errors caused by VC++ optimizations ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_) ifeq (,$(filter-out 1200 1300 1310,$(_MSC_VER))) CFLAGS += -Op else CFLAGS += -fp:precise endif endif # WINNT ifeq ($(OS_ARCH),FreeBSD) EXTRA_LIBS += -pthread endif ifeq ($(OS_ARCH),Linux) EXTRA_LIBS += -ldl endif # Silence warnings on AIX/HP-UX from non-GNU compilers ifndef GNU_CC ifeq ($(OS_ARCH),AIX) # Suppress warnings from xlC # 1540-1281: offsetof() on null non-POD types # 1540-1608: anonymous unions using static data members CFLAGS += -qsuppress=1540-1281 -qsuppress=1540-1608 CXXFLAGS += -qsuppress=1540-1281 -qsuppress=1540-1608 endif ifeq ($(OS_ARCH),HP-UX) # Suppress warnings from aCC # 3055: anonymous unions declaring types # 4189: offsetof() on non-POD types CFLAGS += +W3055,4189 CXXFLAGS += +W3055,4189 endif endif ifeq ($(OS_ARCH),SunOS) ifeq ($(TARGET_CPU),sparc) ifdef GNU_CC CFLAGS += -mcpu=v9 CXXFLAGS += -mcpu=v9 endif # GNU_CC endif ifeq ($(OS_RELEASE),4.1) EXTRA_LIBS += -ldl -lnsl else EXTRA_LIBS += -lposix4 -ldl -lnsl -lsocket endif endif # An AIX Optimization bug causes PR_dtoa() & JS_dtoa to produce wrong result. # This suppresses optimization for this single compilation unit. ifeq ($(OS_ARCH),AIX) jsatom.o: jsatom.cpp Makefile.in $(REPORT_BUILD) @$(MAKE_DEPS_AUTO_CXX) $(CXX) -o $@ -c $(filter-out $(MOZ_OPTIMIZE_FLAGS), $(COMPILE_CFLAGS)) $< jsdtoa.o: jsdtoa.cpp Makefile.in $(REPORT_BUILD) @$(MAKE_DEPS_AUTO_CXX) $(CXX) -o $@ -c $(filter-out $(MOZ_OPTIMIZE_FLAGS), $(COMPILE_CFLAGS)) $< endif # Compute the linker flags that programs linking against SpiderMonkey should # pass to get SpiderMonkey and its dependencies, beyond just the -L and -l # for the SpiderMonkey library itself. # - EXTRA_DSO_LDOPTS includes the NSPR -L and -l flags. # - OS_LIBS includes libraries selected by the configure script. # - EXTRA_LIBS includes libraries selected by this Makefile. JS_CONFIG_LIBS=$(EXTRA_DSO_LDOPTS) $(OS_LIBS) $(EXTRA_LIBS) # The configure script invokes this rule explicitly at configure time! # It's important that js-config be ready by the time we're done # configuring, because we may be running other configure scripts that # would like to run js-config themselves, before js is built. # # This file and rules.mk go through a certain amount of work to decide # which libraries to build, what to name them, and what flags to pass # when linking them (and thus what flags its own clients must pass). # All this information needs to go into the js-config script. To # avoid trying to re-compute all that in the configure script, we just # have the configure script generate this Makefile, and then invoke # this rule. at=@ js-config: js-config.in Makefile $(DEPTH)/config/autoconf.mk $(topsrcdir)/config/config.mk $(topsrcdir)/config/rules.mk $(RM) js-config.tmp sed < $< > js-config.tmp \ -e 's|$(at)prefix$(at)|$(prefix)|' \ -e 's|$(at)exec_prefix$(at)|$(exec_prefix)|' \ -e 's|$(at)includedir$(at)|$(includedir)|' \ -e 's|$(at)libdir$(at)|$(libdir)|' \ -e 's|$(at)MOZILLA_VERSION$(at)|$(MOZILLA_VERSION)|' \ -e 's|$(at)LIBRARY_NAME$(at)|$(LIBRARY_NAME)|' \ -e 's|$(at)NSPR_CFLAGS$(at)|$(NSPR_CFLAGS)|' \ -e 's|$(at)JS_CONFIG_LIBS$(at)|$(JS_CONFIG_LIBS)|' \ -e 's|$(at)MOZ_JS_LIBS$(at)|$(MOZ_JS_LIBS)|' \ && mv js-config.tmp $@ && chmod +x $@ SCRIPTS = js-config SDK_BINARY = js-config install:: $(INSTALLED_HEADERS) $(SYSINSTALL) $^ $(DESTDIR)$(includedir)/$(MODULE) install:: $(SCRIPTS) $(SYSINSTALL) $^ $(DESTDIR)$(bindir) install:: $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY) ifneq (,$(LIBRARY)) $(SYSINSTALL) $(LIBRARY) $(DESTDIR)$(libdir) endif ifneq (,$(SHARED_LIBRARY)) $(SYSINSTALL) $(SHARED_LIBRARY) $(DESTDIR)$(libdir) endif ifneq (,$(IMPORT_LIBRARY)) $(SYSINSTALL) $(IMPORT_LIBRARY) $(DESTDIR)$(libdir) endif # Extra dependancies and rules for auto-generated headers host_jskwgen.$(OBJ_SUFFIX): jsversion.h jskeyword.tbl # Use CURDIR to avoid finding a jsautokw.h in the source tree (from a # previous build?) via VPATH when we're building in a separate tree. $(CURDIR)/jsautokw.h: host_jskwgen$(HOST_BIN_SUFFIX) ./host_jskwgen$(HOST_BIN_SUFFIX) $@ host_jsoplengen.$(OBJ_SUFFIX): jsopcode.tbl # Use CURDIR to avoid finding a jsautooplen.h in the source tree (from # a previous build?) via VPATH when we're building in a separate tree. $(CURDIR)/jsautooplen.h: host_jsoplengen$(HOST_BIN_SUFFIX) ./host_jsoplengen$(HOST_BIN_SUFFIX) $@ # Force auto-header generation before compiling any source that may use them $(patsubst %.cc,%.$(OBJ_SUFFIX),$(CPPSRCS:%.cpp=%.$(OBJ_SUFFIX))): $(CURDIR)/jsautokw.h $(CURDIR)/jsautooplen.h ifdef MOZ_ETW ETWProvider.h ETWProvider.rc ETWProvider.mof: ETWProvider.man $(MC) -um -mof $^ jsprobes.$(OBJ_SUFFIX): ETWProvider.h ETWProvider.res: ETWProvider.rc $(RC) -r -i "$(SDKDIR)Include" $^ export:: ETWProvider.res install:: ETWProvider.mof ETWProvider.man $(SYSINSTALL) $^ $(DESTDIR)$(bindir) endif ifdef HAVE_DTRACE $(CURDIR)/javascript-trace.h: $(srcdir)/javascript-trace.d dtrace -h -s $(srcdir)/javascript-trace.d -o javascript-trace.h.in sed -e 's/if _DTRACE_VERSION/ifdef INCLUDE_MOZILLA_DTRACE/' \ -e '/const/!s/char \*/const char */g' \ javascript-trace.h.in > javascript-trace.h # We can't automatically generate dependencies on auto-generated headers; # we have to list them explicitly. $(addsuffix .$(OBJ_SUFFIX),jsprobes jsinterp jsobj): $(CURDIR)/javascript-trace.h endif ############################################### # BEGIN kludges for the Nitro assembler # # Needed to "configure" it correctly. Unfortunately these # flags wind up being applied to all code in js/src, not just # the code in js/src/assembler. CXXFLAGS += -DUSE_SYSTEM_MALLOC=1 -DENABLE_ASSEMBLER=1 ifneq (,$(ENABLE_YARR_JIT)$(ENABLE_METHODJIT)) CXXFLAGS += -DENABLE_JIT=1 endif INCLUDES += -I$(srcdir)/assembler -I$(srcdir)/yarr ifdef ENABLE_METHODJIT # Build a standalone test program that exercises the assembler # sources a bit. TESTMAIN_OBJS = \ Assertions.$(OBJ_SUFFIX) \ ExecutableAllocator.$(OBJ_SUFFIX) \ ARMAssembler.$(OBJ_SUFFIX) \ MacroAssemblerARM.$(OBJ_SUFFIX) \ TestMain.$(OBJ_SUFFIX) \ jsutil.$(OBJ_SUFFIX) \ jslog2.$(OBJ_SUFFIX) ifeq ($(OS_ARCH),WINNT) TESTMAIN_OBJS += ExecutableAllocatorWin.$(OBJ_SUFFIX) else TESTMAIN_OBJS += ExecutableAllocatorPosix.$(OBJ_SUFFIX) endif TestMain$(HOST_BIN_SUFFIX): $(TESTMAIN_OBJS) $(CXX) -o TestMain$(HOST_BIN_SUFFIX) $(TESTMAIN_OBJS) endif # # END kludges for the Nitro assembler ###############################################