| # -*- Mode: makefile -*- |
| # |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| DEPTH = @DEPTH@ |
| topsrcdir = @top_srcdir@ |
| srcdir = @srcdir@ |
| |
| TOPLEVEL_BUILD := 1 |
| |
| run_for_side_effects := $(shell echo "MAKE: $(MAKE)") |
| include $(DEPTH)/config/autoconf.mk |
| |
| ifdef JS_STANDALONE |
| LIBRARY_NAME = mozjs-@MOZILLA_SYMBOLVERSION@ |
| else |
| LIBRARY_NAME = mozjs |
| endif |
| |
| STATIC_LIBRARY_NAME = js_static |
| MSVC_ENABLE_PGO := 1 |
| LIBS = $(NSPR_LIBS) |
| |
| # 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 |
| |
| ############################################### |
| # BEGIN include sources for low-level code shared with mfbt |
| # |
| MFBT_ROOT = $(srcdir)/../../mfbt |
| VPATH += $(MFBT_ROOT) |
| include $(MFBT_ROOT)/exported_headers.mk |
| |
| VPATH += \ |
| $(srcdir) \ |
| $(srcdir)/builtin \ |
| $(srcdir)/devtools \ |
| $(srcdir)/ds \ |
| $(srcdir)/frontend \ |
| $(srcdir)/gc \ |
| $(srcdir)/vm \ |
| $(NULL) |
| |
| ###################################################### |
| # BEGIN include exported headers from the JS engine |
| # |
| # Ultimately, after cleansing EXPORTS, |
| # these will be the ONLY headers exported by |
| # the js engine |
| # |
| VPATH += \ |
| $(srcdir)/../public \ |
| $(NULL) |
| |
| ############################################### |
| # BEGIN enable non-releasable features |
| # |
| ifdef NIGHTLY_BUILD |
| DEFINES += -DENABLE_PARALLEL_JS |
| endif |
| |
| # Ion |
| ifdef ENABLE_ION |
| VPATH += $(srcdir)/jit |
| VPATH += $(srcdir)/jit/shared |
| |
| ifeq (86, $(findstring 86,$(TARGET_CPU))) |
| ifeq (x86_64, $(TARGET_CPU)) |
| VPATH += $(srcdir)/jit/x64 |
| else |
| VPATH += $(srcdir)/jit/x86 |
| endif |
| endif |
| ifeq (arm, $(findstring arm, $(TARGET_CPU))) |
| VPATH += $(srcdir)/jit/arm |
| endif |
| endif #ENABLE_ION |
| |
| ############################################### |
| # BEGIN include sources for the Nitro assembler |
| # |
| |
| VPATH += $(srcdir)/assembler \ |
| $(srcdir)/assembler/wtf \ |
| $(srcdir)/assembler/jit \ |
| $(srcdir)/yarr \ |
| $(NONE) |
| |
| ifneq (,$(ENABLE_ION)$(ENABLE_YARR_JIT)) |
| VPATH += $(srcdir)/assembler/assembler \ |
| $(NONE) |
| endif |
| |
| # |
| # END enclude sources for the Nitro assembler |
| ############################################# |
| |
| ifdef JS_HAS_CTYPES |
| VPATH += $(srcdir)/ctypes |
| |
| 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 |
| |
| LOCAL_INCLUDES += -I$(MFBT_ROOT)/double-conversion |
| |
| # 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 |
| |
| DASH_R = -r |
| |
| ifneq (,$(filter OS2 WINNT,$(OS_ARCH))) |
| SDK_LIBRARY = $(IMPORT_LIBRARY) |
| else |
| SDK_LIBRARY = $(SHARED_LIBRARY) |
| endif |
| |
| include $(topsrcdir)/config/config.mk |
| |
| ifeq (,$(MOZ_GLUE_PROGRAM_LDFLAGS)) |
| # When building standalone, we need to include mfbt sources, and to declare |
| # "exported" mfbt symbols on its behalf when we use its headers. |
| include $(MFBT_ROOT)/sources.mk |
| DEFINES += -DIMPL_MFBT |
| endif |
| |
| EXTRA_DSO_LDOPTS += $(NSPR_LIBS) |
| |
| ifndef BUILD_OPT |
| MOCHAFILE = 1 |
| endif |
| |
| # Define keyword generator before rules.mk, see bug 323979 comment 50 |
| |
| HOST_CPPSRCS += jskwgen.cpp |
| HOST_SIMPLE_PROGRAMS += host_jskwgen$(HOST_BIN_SUFFIX) |
| GARBAGE += jsautokw.h host_jskwgen$(HOST_BIN_SUFFIX) |
| |
| HOST_CPPSRCS += jsoplengen.cpp |
| HOST_SIMPLE_PROGRAMS += host_jsoplengen$(HOST_BIN_SUFFIX) |
| GARBAGE += jsautooplen.h host_jsoplengen$(HOST_BIN_SUFFIX) |
| |
| GARBAGE += selfhosted.out.h |
| |
| USE_HOST_CXX = 1 |
| |
| ifdef HAVE_DTRACE |
| ifneq ($(OS_ARCH),Darwin) |
| DTRACE_PROBE_OBJ = $(LIBRARY_NAME)-dtrace.$(OBJ_SUFFIX) |
| endif |
| MOZILLA_DTRACE_SRC = $(srcdir)/devtools/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 |
| |
| # Ensure symbol versions of shared library on Linux do not conflict |
| # with those in libxul. |
| ifeq (Linux,$(OS_TARGET)) |
| EXTRA_DSO_LDOPTS += -Wl,-version-script,symverscript |
| |
| symverscript: symverscript.in |
| $(PYTHON) $(topsrcdir)/config/Preprocessor.py \ |
| -DVERSION="$(subst -,_,$(LIBRARY_NAME))" $< > $@ |
| |
| EXTRA_DEPS += symverscript |
| 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 |
| |
| |
| ############################################# |
| # BEGIN ECMAScript Internationalization API |
| # |
| |
| # ICU headers need to be available whether we build with the complete |
| # Internationalization API or not - ICU stubs rely on them. |
| |
| LOCAL_INCLUDES += \ |
| -I$(topsrcdir)/../../intl/icu/source/common \ |
| -I$(topsrcdir)/../../intl/icu/source/i18n \ |
| $(NULL) |
| |
| ifdef ENABLE_INTL_API |
| |
| ifeq ($(OS_ARCH),WINNT) |
| # Library names: On Windows, ICU uses modified library names for static |
| # and debug libraries. |
| ifdef MOZ_DEBUG |
| ICU_LIB_SUFFIX=d |
| endif |
| ICU_LIB_RENAME = $(foreach libname,$(ICU_LIB_NAMES),\ |
| cp -p intl/icu/lib/s$(libname)$(ICU_LIB_SUFFIX).lib intl/icu/lib/$(libname).lib;) |
| endif |
| |
| ifdef .PYMAKE |
| ICU_MAKE = $(GMAKE) |
| else |
| ICU_MAKE = $(MAKE) |
| endif |
| |
| # - Build ICU as part of the "export" target, so things get built |
| # in the right order. |
| # - ICU requires GNU make according to its readme.html. pymake can't be used |
| # because it doesn't support order only dependencies. |
| # - Force ICU to use the standard suffix for object files because expandlibs |
| # will discard all files with a non-standard suffix (bug 857450). |
| # - Options for genrb: -k strict parsing; -R omit collation tailoring rules. |
| export:: |
| # ICU's build system is full of races, so force non-parallel build. |
| +$(ICU_MAKE) -j1 -C intl/icu STATIC_O=$(OBJ_SUFFIX) GENRBOPTS='-k -R' |
| $(ICU_LIB_RENAME) |
| |
| distclean clean:: |
| $(call SUBMAKE,$@,intl/icu) |
| |
| endif |
| |
| # |
| # END ECMAScript Internationalization API |
| ############################################# |
| |
| |
| # 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 |
| |
| ifdef MOZ_VALGRIND |
| ifndef MOZ_ASAN |
| JITTEST_VALGRIND_FLAG = --valgrind |
| endif |
| endif |
| |
| check-jit-test:: |
| $(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON) -u $(srcdir)/jit-test/jit_test.py \ |
| --no-slow --no-progress --tinderbox --tbpl $(JITTEST_VALGRIND_FLAG) \ |
| $(DIST)/bin/$(JS_SHELL_NAME)$(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_SHELL_NAME)$(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 config/emptyvars.mk \ |
| unallmakefiles $(JS_CONFIG_NAME) js-config.h js-confdefs.h \ |
| backend.mk config/backend.mk devtools/backend.mk editline/backend.mk \ |
| gdb/backend.mk jsapi-tests/backend.mk shell/backend.mk tests/backend.mk \ |
| backend.RecursiveMakeBackend.built backend.RecursiveMakeBackend.built.pp \ |
| devtools/rootAnalysis/Makefile |
| |
| distclean:: |
| cat unallmakefiles | $(XARGS) rm -f |
| $(RM) $(DIST_GARBAGE) |
| rm -rf intl _virtualenv |
| |
| DEFINES += -DEXPORT_JS_API |
| |
| 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 |
| |
| ifneq ($(findstring -L,$(NSPR_LIBS)),) |
| NSPR_STATIC_PATH = $(subst -L,,$(findstring -L,$(NSPR_LIBS))) |
| else |
| NSPR_STATIC_PATH = $(DIST)/lib |
| endif |
| |
| ifdef MOZ_VTUNE |
| ifeq ($(OS_ARCH), WINNT) |
| EXTRA_DSO_LDOPTS += $(VTUNE_LIBRARIES) |
| LIBS += $(VTUNE_LIBRARIES) |
| else |
| SHARED_LIBRARY_LIBS += $(VTUNE_LIBRARIES) |
| endif # WINNT |
| endif # MOZ_VTUNE |
| |
| 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 |
| |
| CFLAGS += $(MOZ_ZLIB_CFLAGS) |
| EXTRA_LIBS += $(MOZ_ZLIB_LIBS) |
| # Enable zlib usage if zlib has been located. When building the browser on |
| # Windows, MOZ_ZLIB_LIBS is empty because zlib is part of libmozglue. We thus |
| # also enable zlib if mozglue is present. |
| ifneq (,$(MOZ_ZLIB_LIBS)$(MOZ_GLUE_LDFLAGS)) |
| DEFINES += -DUSE_ZLIB |
| endif |
| |
| SHARED_LIBRARY_LIBS += $(ICU_LIBS) |
| |
| # Prevent floating point errors caused by VC++ optimizations |
| ifdef _MSC_VER |
| # XXX We should add this to CXXFLAGS, too? |
| CFLAGS += -fp:precise |
| |
| ifeq ($(CPU_ARCH),x86) |
| # Workaround compiler bug on PGO (Bug 721284) |
| MonoIC.$(OBJ_SUFFIX): CXXFLAGS += -GL- |
| Compiler.$(OBJ_SUFFIX): CXXFLAGS += -GL- |
| # Ditto (Bug 772303) |
| RegExp.$(OBJ_SUFFIX): CXXFLAGS += -GL- |
| endif |
| # Ditto (Bug 810661) |
| ifeq ($(CPU_ARCH),x86_64) |
| CTypes.$(OBJ_SUFFIX): CXXFLAGS += -GL- |
| endif |
| endif # _MSC_VER |
| |
| 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) |
| ifdef GNU_CC |
| JS_CONFIG_MOZ_JS_LIBS=-L$(libdir) -l$(LIBRARY_NAME) |
| else |
| JS_CONFIG_MOZ_JS_LIBS=$(libdir)/$(LIBRARY_NAME).lib |
| endif |
| |
| # 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. |
| |
| # Set the various definitions that will be substituted for js-config |
| # and for the pck-config .pc file. |
| JS_CONFIG_SUBSTITUTIONS=\ |
| -Dprefix="$(prefix)" \ |
| -Dexec_prefix="$(exec_prefix)" \ |
| -Dincludedir="$(includedir)" \ |
| -Dlibdir="$(libdir)" \ |
| -DMOZILLA_VERSION="$(MOZILLA_VERSION)" \ |
| -DLIBRARY_NAME="$(LIBRARY_NAME)" \ |
| -DJS_CONFIG_LIBS="$(JS_CONFIG_LIBS)" \ |
| -DJS_CONFIG_MOZ_JS_LIBS="$(JS_CONFIG_MOZ_JS_LIBS)" \ |
| -DMOZJS_MAJOR_VERSION="$(MOZJS_MAJOR_VERSION)" \ |
| -DMOZJS_MINOR_VERSION="$(MOZJS_MINOR_VERSION)" \ |
| -DMOZJS_PATCH_VERSION="$(MOZJS_PATCH_VERSION)" \ |
| -DMOZJS_ALPHA="$(MOZJS_ALPHA)" \ |
| -DNSPR_CFLAGS="$(NSPR_CFLAGS)" \ |
| -DNSPR_PKGCONF_CHECK="$(NSPR_PKGCONF_CHECK)" \ |
| -DUSE_CXX11="$(USE_CXX11)" |
| |
| $(JS_CONFIG_NAME): js-config.in Makefile $(DEPTH)/config/autoconf.mk $(topsrcdir)/config/config.mk $(topsrcdir)/config/rules.mk |
| $(RM) $@.tmp |
| $(PYTHON) $(topsrcdir)/config/Preprocessor.py --marker % $(JS_CONFIG_SUBSTITUTIONS) $< > $@.tmp \ |
| && mv $@.tmp $@ && chmod +x $@ |
| |
| SCRIPTS = $(JS_CONFIG_NAME) |
| SDK_BINARY = $(JS_CONFIG_NAME) |
| |
| $(LIBRARY_NAME).pc: js.pc.in |
| $(PYTHON) $(topsrcdir)/config/Preprocessor.py $(JS_CONFIG_SUBSTITUTIONS) $< > $@ |
| |
| install:: $(LIBRARY_NAME).pc |
| $(SYSINSTALL) $^ $(DESTDIR)$(libdir)/pkgconfig |
| |
| ###################################################### |
| # BEGIN SpiderMonkey header installation |
| # |
| # Mozilla/Gecko/Firefox mostly doesn't concern itself with defining a sensible |
| # install target, because it's shipping primarily packaged builds. And even if |
| # it did, those builds wouldn't really have reason to include header files. So |
| # we have to install public headers ourselves, rather than using something from |
| # config/rules.mk or similar. |
| # |
| # The overall directory structure of the installed headers looks like so: |
| # |
| # $(includedir)/ |
| # $(LIBRARY_NAME)/ |
| # jsapi.h, jspubtd.h, etc. (all of EXPORTS) |
| # js/ |
| # js/public/* headers (all are public) |
| # ds/ |
| # js/src/ds/* public headers |
| # gc/ |
| # js/src/gc/* public headers |
| # mozilla/ |
| # mfbt headers |
| # |
| |
| install:: $(EXPORTS) |
| $(SYSINSTALL) $^ $(DESTDIR)$(includedir)/$(LIBRARY_NAME) |
| |
| install:: $(EXPORTS_js) |
| $(SYSINSTALL) $^ $(DESTDIR)$(includedir)/$(LIBRARY_NAME)/js |
| |
| install:: $(EXPORTS_mozilla) |
| $(SYSINSTALL) $^ $(DESTDIR)$(includedir)/$(LIBRARY_NAME)/mozilla |
| |
| # |
| # END SpiderMonkey header installation |
| ############################################# |
| |
| install:: $(SCRIPTS) |
| $(SYSINSTALL) $^ $(DESTDIR)$(bindir) |
| |
| install:: $(REAL_LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY) |
| ifneq (,$(REAL_LIBRARY)) |
| $(SYSINSTALL) $(REAL_LIBRARY) $(DESTDIR)$(libdir) |
| mv -f $(DESTDIR)$(libdir)/$(REAL_LIBRARY) $(subst $(STATIC_LIBRARY_NAME),$(LIBRARY_NAME),$(DESTDIR)$(libdir)/$(REAL_LIBRARY)) |
| endif |
| ifneq (,$(SHARED_LIBRARY)) |
| $(SYSINSTALL) $(SHARED_LIBRARY) $(DESTDIR)$(libdir) |
| endif |
| ifneq (,$(IMPORT_LIBRARY)) |
| $(SYSINSTALL) $(IMPORT_LIBRARY) $(DESTDIR)$(libdir) |
| endif |
| $(MAKE) -C shell install |
| |
| # Extra dependencies and rules for auto-generated headers |
| host_jskwgen.$(OBJ_SUFFIX): jsversion.h vm/Keywords.h |
| |
| # 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 $^ |
| |
| Probes.$(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)/devtools/javascript-trace.d |
| dtrace -h -s $(srcdir)/devtools/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),Probes jsinterp jsobj): $(CURDIR)/javascript-trace.h |
| endif |
| |
| ifdef HAVE_LINUX_PERF_EVENT_H |
| pm_linux.$(OBJ_SUFFIX): CXXFLAGS += $(LINUX_HEADERS_INCLUDES) |
| endif |
| |
| # Prepare self-hosted JS code for embedding |
| export:: selfhosting |
| selfhosting:: selfhosted.out.h |
| |
| selfhosting_srcs := \ |
| $(srcdir)/builtin/Utilities.js \ |
| $(srcdir)/builtin/Array.js \ |
| $(srcdir)/builtin/Date.js \ |
| $(srcdir)/builtin/Intl.js \ |
| $(srcdir)/builtin/IntlData.js \ |
| $(srcdir)/builtin/Number.js \ |
| $(srcdir)/builtin/ParallelArray.js \ |
| $(srcdir)/builtin/String.js \ |
| $(NULL) |
| |
| selfhosted_out_h_deps := \ |
| $(selfhosting_srcs) \ |
| $(srcdir)/js.msg \ |
| $(srcdir)/builtin/embedjs.py \ |
| $(NULL) |
| |
| SELFHOSTED_DEFINES += $(DEFINES) $(ACDEFINES) |
| ifdef MOZ_DEBUG |
| SELFHOSTED_DEFINES += $(MOZ_DEBUG_ENABLE_DEFS) |
| else |
| SELFHOSTED_DEFINES += $(MOZ_DEBUG_DISABLE_DEFS) |
| endif |
| |
| selfhosted.out.h: $(selfhosted_out_h_deps) |
| $(PYTHON) $(srcdir)/builtin/embedjs.py $(SELFHOSTED_DEFINES) \ |
| -p '$(CPP)' -m $(srcdir)/js.msg -o $@ $(selfhosting_srcs) |
| |
| ############################################### |
| # 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)) |
| CXXFLAGS += -DENABLE_JIT=1 |
| endif |
| |
| INCLUDES += -I$(srcdir)/assembler -I$(srcdir)/yarr |
| |
| # |
| # END kludges for the Nitro assembler |
| ############################################### |
| |
| ############################################### |
| # Generating source package tarballs |
| # (only possible when tar is found) |
| ifneq (,$(TAR)) |
| |
| source-package: |
| SRCDIR=$(srcdir) \ |
| DIST=$(DIST) \ |
| MAKE=$(MAKE) \ |
| MKDIR=$(MKDIR) \ |
| TAR=$(TAR) \ |
| MOZJS_MAJOR_VERSION=$(MOZJS_MAJOR_VERSION) \ |
| MOZJS_MINOR_VERSION=$(MOZJS_MINOR_VERSION) \ |
| MOZJS_PATCH_VERSION=$(MOZJS_PATCH_VERSION) \ |
| MOZJS_ALPHA=$(MOZJS_ALPHA) \ |
| $(srcdir)/make-source-package.sh |
| |
| clean:: |
| DIST=$(DIST) \ |
| MOZJS_MAJOR_VERSION=$(MOZJS_MAJOR_VERSION) \ |
| MOZJS_MINOR_VERSION=$(MOZJS_MINOR_VERSION) \ |
| MOZJS_PATCH_VERSION=$(MOZJS_PATCH_VERSION) \ |
| MOZJS_ALPHA=$(MOZJS_ALPHA) \ |
| $(srcdir)/make-source-package.sh clean |
| |
| endif |