*** /dev/null Sat Nov 23 05:37:17 2024
--- - Sat Nov 23 05:37:29 2024
***************
*** 0 ****
--- 1,410 ----
+ # -*- 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@
+ VPATH = @srcdir@
+
+ include $(DEPTH)/config/autoconf.mk
+
+ MODULE = js
+ LIBRARY_NAME = mozjs
+ LIB_IS_C_ONLY = 1
+ GRE_MODULE = 1
+
+ ifeq (,$(filter-out WINNT WINCE,$(OS_ARCH)))
+ LIBRARY_NAME = js$(MOZ_BITS)$(VERSION_NUMBER)
+ RESFILE = js$(MOZ_BITS)40.res
+ endif
+
+ PACKAGE_FILE = js.pkg
+
+ # 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.
+ FORCE_SHARED_LIB = 1
+
+ CSRCS = \
+ jsapi.c \
+ jsarena.c \
+ jsarray.c \
+ jsatom.c \
+ jsbool.c \
+ jscntxt.c \
+ jsdate.c \
+ jsdbgapi.c \
+ jsdhash.c \
+ jsdtoa.c \
+ jsemit.c \
+ jsexn.c \
+ jsfun.c \
+ jsgc.c \
+ jshash.c \
+ jsinterp.c \
+ jslock.c \
+ jslog2.c \
+ jslong.c \
+ jsmath.c \
+ jsnum.c \
+ jsobj.c \
+ jsopcode.c \
+ jsparse.c \
+ jsprf.c \
+ jsregexp.c \
+ jsscan.c \
+ jsscope.c \
+ jsscript.c \
+ jsstr.c \
+ jsutil.c \
+ jsxdrapi.c \
+ jsxml.c \
+ prmjtime.c \
+ $(NULL)
+
+ EXPORTS = \
+ jsautocfg.h \
+ js.msg \
+ jsapi.h \
+ jsarray.h \
+ jsarena.h \
+ jsatom.h \
+ jsbit.h \
+ jsbool.h \
+ jsclist.h \
+ jscntxt.h \
+ jscompat.h \
+ jsconfig.h \
+ jsdate.h \
+ jsdbgapi.h \
+ jsdhash.h \
+ jsemit.h \
+ jsfun.h \
+ jsgc.h \
+ jshash.h \
+ jsinterp.h \
+ jslock.h \
+ jslong.h \
+ jsmath.h \
+ jsnum.h \
+ jsobj.h \
+ jsopcode.tbl \
+ jsopcode.h \
+ jsosdep.h \
+ jsotypes.h \
+ jsparse.h \
+ jsprf.h \
+ jsprvtd.h \
+ jspubtd.h \
+ jsregexp.h \
+ jsscan.h \
+ jsscope.h \
+ jsscript.h \
+ jsstddef.h \
+ jsstr.h \
+ jstypes.h \
+ jsutil.h \
+ jsxdrapi.h \
+ jsxml.h \
+ $(NULL)
+
+ ifeq (,$(filter-out WINNT WINCE,$(OS_ARCH)))
+ EXPORTS += jscpucfg.h
+ endif
+
+ FDLIBM_LIBRARY = fdlibm/$(LIB_PREFIX)fdm.$(LIB_SUFFIX)
+ JSMATH_PRELINK = jsmathtemp.o
+ JS_SAFE_ARENA = 1
+
+ DASH_R = -r
+
+ include $(topsrcdir)/config/config.mk
+
+ EXTRA_DSO_LDOPTS += $(NSPR_LIBS)
+
+ ifeq (,$(filter-out OS2 WINNT WINCE,$(OS_ARCH)))
+ SHARED_LIBRARY_LIBS += $(FDLIBM_LIBRARY)
+ endif
+
+ # When using gcc the assembly is inlined in the C-file (see jslock.c)
+ ifeq ($(OS_ARCH),SunOS)
+ ifneq ($(OS_TEST),i86pc)
+ ifndef GNU_CC
+ ASFILES = lock_$(OS_ARCH).s
+ endif
+ endif
+ endif
+
+ ifndef BUILD_OPT
+ MOCHAFILE = 1
+ endif
+
+ ifndef NSBUILDROOT
+ JSJAVA_STUBHEADERS = \
+ -I$(topsrcdir)/sun-java/include/_gen \
+ -I$(topsrcdir)/sun-java/netscape/javascript/_jri \
+ -I$(topsrcdir)/sun-java/netscape/security/_jri
+ else
+ JSJAVA_STUBHEADERS = -I$(JRI_GEN_DIR) -I$(JDK_GEN_DIR)
+ endif
+
+ JSJAVA_CFLAGS = \
+ -I$(topsrcdir)/sun-java/md-include \
+ -I$(topsrcdir)/sun-java/include \
+ $(JSJAVA_STUBHEADERS)
+
+ include $(topsrcdir)/config/rules.mk
+
+ DEFINES += -DEXPORT_JS_API
+
+ INCLUDES += -I$(srcdir)
+
+ # MSVC '-Gy' cc flag and '/OPT:REF' linker flag cause JS_GetArgument and
+ # JS_GetLocalVariable to be folded to the same address by the linker,
+ # leading to a crash on startup. See bug 151066. So, in optimized builds,
+ # add the /OPT:NOICF flag, which turns off 'identical COMDAT folding'.
+ #
+ # N.B.: 'identical COMDAT folding' that folds functions whose addresses
+ # are taken violates the ISO C and C++ standards.
+ ifndef MOZ_DEBUG
+ ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
+ LDFLAGS += -OPT:NOICF
+ endif
+ endif
+
+ GARBAGE += $(JSMATH_PRELINK) jscpucfg.o jsautocfg.h jsautocfg.tmp jscpucfg
+
+ ifneq (,$(CROSS_COMPILE)$(filter-out WINNT,$(OS_ARCH)))
+ TARGETS += jscpucfg$(HOST_BIN_SUFFIX)
+ endif
+
+ ifdef JS_SAFE_ARENA
+ DEFINES += -DJS_USE_SAFE_ARENA
+ endif
+
+ ifdef JS_THREADSAFE
+ DEFINES += -DJS_THREADSAFE
+ endif
+
+ ifdef JS_NO_THIN_LOCKS
+ DEFINES += -DJS_USE_ONLY_NSPR_LOCKS
+ endif
+
+ ifdef JS_VERSION
+ DEFINES += -DJS_VERSION=$(JS_VERSION)
+ endif
+
+ ifneq ($(findstring -L,$(NSPR_LIBS)),)
+ NSPR_STATIC_PATH = $(subst -L,,$(findstring -L,$(NSPR_LIBS)))
+ else
+ NSPR_STATIC_PATH = $(DIST)/lib
+ endif
+
+ LDFLAGS += $(pathsubst -l%,$(NSPR_STATIC_PATH)/%.a,$(NSPR_LIBS))
+
+ # BeOS and HP-UX do not require the extra linking of "-lm"
+ ifeq (,$(filter BeOS HP-UX WINNT WINCE OpenVMS,$(OS_ARCH)))
+ LDFLAGS += -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)
+ LDFLAGS += -pthread
+ endif
+ ifeq ($(OS_ARCH),IRIX)
+ ifdef USE_N32
+ DASH_R += -n32
+ endif
+ endif
+ ifeq ($(OS_ARCH),Linux)
+ LDFLAGS += -ldl
+ endif
+ ifeq ($(OS_ARCH),OSF1)
+ LDFLAGS += -lc_r
+ endif
+ ifeq ($(OS_ARCH),SunOS)
+ ifeq ($(TARGET_CPU),sparc)
+
+ ifdef JS_ULTRASPARC_OPTS
+ DEFINES += -DULTRA_SPARC
+ ifdef GNU_CC
+ CFLAGS += -Wa,-xarch=v8plus,-DULTRA_SPARC,-P,-L,-D_ASM,-D__STDC__=0
+ CXXFLAGS += -Wa,-xarch=v8plus,-DULTRA_SPARC,-P,-L,-D_ASM,-D__STDC__=0,-K,PIC
+ else
+ ASFLAGS += -xarch=v8plus -DULTRA_SPARC -P -L -D_ASM -D__STDC__=0 -K PIC
+ endif # GNU_CC
+ endif # JS_ULTRASPARC_OPTS
+
+ endif
+ ifeq ($(OS_RELEASE),4.1)
+ LDFLAGS += -ldl -lnsl
+ else
+ LDFLAGS += -lposix4 -ldl -lnsl -lsocket
+ endif
+ endif
+
+ ifeq ($(OS_ARCH),QNX)
+ ifneq ($(OS_TARGET),NTO)
+ # Don't use wildcard here, because we only want this resolved at link time.
+ OBJS += fdlibm/*.o
+ endif
+ endif
+
+ ifeq ($(OS_ARCH),IRIX)
+ ifndef GNU_CC
+ _COMPILE_CFLAGS = $(patsubst -O%,-O1,$(COMPILE_CFLAGS))
+ jsapi.o jsarena.o jsarray.o jsatom.o jsemit.o jsfun.o jsinterp.o jsregexp.o jsparse.o jsopcode.o jsscript.o: %.o: %.c Makefile.in
+ $(REPORT_BUILD)
+ @$(MAKE_DEPS_AUTO)
+ $(CC) -o $@ -c $(_COMPILE_CFLAGS) $<
+ endif
+ endif
+
+ # On OS/2 & win32 we are already linking against fdlibm, so don't bother
+ # creating jsmathtemp
+ ifeq (,$(filter OS2 WINNT OpenVMS,$(OS_ARCH)))
+ # special rule for jsmath.o since we want to incrementally link
+ # against fdlibm to pull in only what is needed
+ # Do this in a single step to avoid dependency problems
+ jsmath.o: jsmath.c $(FDLIBM_LIBRARY) Makefile.in
+ $(REPORT_BUILD)
+ @$(MAKE_DEPS_AUTO)
+ $(ELOG) $(CC) $(OUTOPTION)$(JSMATH_PRELINK) -c $(COMPILE_CFLAGS) $<
+ ifeq ($(OS_ARCH),QNX)
+ ifneq ($(OS_TARGET),NTO)
+ @cp $(JSMATH_PRELINK) $@
+ else
+ $(LD) $(DASH_R) -o $@ $(JSMATH_PRELINK) $(FDLIBM_LIBRARY)
+ endif
+ else
+ $(LD) $(DASH_R) -o $@ $(JSMATH_PRELINK) $(FDLIBM_LIBRARY)
+ endif
+ @$(RM) -f $(JSMATH_PRELINK)
+ else
+ # Create dependency so we build fdlibm
+ jsmath.o: $(FDLIBM_LIBRARY) Makefile.in
+ 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.c Makefile.in
+ $(REPORT_BUILD)
+ @$(MAKE_DEPS_AUTO)
+ $(CC) -o $@ -c $(filter-out $(MOZ_OPTIMIZE_FLAGS), $(COMPILE_CFLAGS)) $<
+ jsdtoa.o: jsdtoa.c Makefile.in
+ $(REPORT_BUILD)
+ @$(MAKE_DEPS_AUTO)
+ $(CC) -o $@ -c $(filter-out $(MOZ_OPTIMIZE_FLAGS), $(COMPILE_CFLAGS)) $<
+ endif
+
+ $(FDLIBM_LIBRARY):
+ $(MAKE) -C $(@D) $(@F)
+
+ jsopcode.h jsopcode.c: jsopcode.tbl
+
+ ifeq (,$(CROSS_COMPILE)$(filter-out WINNT,$(OS_ARCH)))
+ jsautocfg.h:
+ touch $@
+ else
+ ifeq ($(OS_ARCH),WINCE)
+ jsautocfg.h:
+ touch $@
+ else
+ jsautocfg.h: jscpucfg$(HOST_BIN_SUFFIX)
+ @rm -f $@ jsautocfg.tmp
+ ./jscpucfg > jsautocfg.tmp
+ mv jsautocfg.tmp $@
+ endif
+ endif
+
+ # jscpucfg is a strange target
+ # Needs to be built with the host compiler but needs to include
+ # the mdcpucfg for the target so it needs the appropriate target defines
+ ifdef HOST_NSPR_MDCPUCFG
+ HOST_CC := $(HOST_CC) -DMDCPUCFG=$(TARGET_NSPR_MDCPUCFG)
+ HOST_CFLAGS := $(patsubst -DXP_%,,$(HOST_CFLAGS))
+ endif
+
+ ifdef CROSS_COMPILE
+ # jscpucfg needs to know when it's supposed to produce a config for the target
+ JSCPUCFG_DEFINES = $(ACDEFINES)
+
+ # This is incredibly hacky. Darwin NSPR uses the same MDCPUCFG for multiple
+ # processors, and determines which processor to configure for based on
+ # #ifdef i386. This macro is among the NSPR defines, but is also automatically
+ # defined by the compiler when building for i386. It therefore needs to be
+ # defined here if targeting i386, and explicitly undefined otherwise.
+ ifeq ($(OS_ARCH),Darwin)
+ ifeq ($(TARGET_CPU),powerpc)
+ JSCPUCFG_DEFINES += -Ui386
+ else
+ JSCPUCFG_DEFINES += -Di386=1
+ endif
+ endif
+ endif
+
+ ifeq ($(OS_ARCH),QNX)
+ ifneq ($(OS_TARGET),NTO)
+ # QNX's compiler apparently can't build a binary directly from a source file.
+ jscpucfg.o: jscpucfg.c Makefile.in
+ $(HOST_CC) $(HOST_CFLAGS) -c $(JSCPUCFG_DEFINES) $(DEFINES) $(NSPR_CFLAGS) -o $@ $<
+
+ jscpucfg: jscpucfg.o
+ $(HOST_CC) $(HOST_CFLAGS) $(JSCPUCFG_DEFINES) $(DEFINES) -o $@ $<
+ endif
+ else
+ ifeq ($(OS_ARCH),WINCE)
+ jscpucfg$(HOST_BIN_SUFFIX):
+ echo no need to build jscpucfg $<
+ else
+ jscpucfg$(HOST_BIN_SUFFIX): jscpucfg.c Makefile.in
+ $(HOST_CC) $(HOST_CFLAGS) $(JSCPUCFG_DEFINES) $(DEFINES) $(NSPR_CFLAGS) $(OUTOPTION)$@ $<
+ endif
+ endif
+
|