1# -*- Mode: makefile -*-
2#
3# This Source Code Form is subject to the terms of the Mozilla Public
4# License, v. 2.0. If a copy of the MPL was not distributed with this
5# file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7ifeq (,$(MAKE_VERSION))
8$(error GNU Make is required)
9endif
10make_min_ver := 3.81
11ifneq ($(make_min_ver),$(firstword $(sort $(make_min_ver) $(MAKE_VERSION))))
12$(error GNU Make $(make_min_ver) or higher is required)
13endif
14
15DASH_R		= -r
16
17# Define keyword generator before rules.mk, see bug 323979 comment 50
18
19USE_HOST_CXX = 1
20
21include $(topsrcdir)/config/rules.mk
22
23ifdef MOZ_VALGRIND
24ifndef MOZ_ASAN
25JITTEST_VALGRIND_FLAG = --valgrind
26endif
27endif
28
29ifneq ($(LLVM_SYMBOLIZER),)
30# Use the LLVM symbolizer when running jit-tests under ASan and TSan, if available
31ifdef MOZ_ASAN
32JITTEST_SANITIZER_ENV=ASAN_SYMBOLIZER_PATH='$(LLVM_SYMBOLIZER)'
33endif
34ifdef MOZ_TSAN
35JITTEST_SANITIZER_ENV=TSAN_OPTIONS="external_symbolizer_path=$(LLVM_SYMBOLIZER) handle_segv=0 $$TSAN_OPTIONS"
36endif
37ifdef MOZ_MSAN
38JITTEST_SANITIZER_ENV=MSAN_SYMBOLIZER_PATH='$(LLVM_SYMBOLIZER)'
39endif
40endif
41
42check-js-msg::
43	(cd $(topsrcdir) && $(PYTHON3) $(topsrcdir)/config/check_js_msg_encoding.py);
44
45check-jit-test::
46	$(JITTEST_SANITIZER_ENV) $(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON3) -u $(srcdir)/jit-test/jit_test.py \
47	        --no-slow --no-progress --format=automation --jitflags=all \
48			$(JITTEST_VALGRIND_FLAG) \
49			$(JITTEST_EXTRA_ARGS) \
50	        $(DIST)/bin/$(JS_SHELL_NAME)$(BIN_SUFFIX) $(JITTEST_TEST_ARGS)
51
52check:: check-js-msg
53
54check-jstests:
55	$(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON3) -u $(srcdir)/tests/jstests.py \
56		--no-progress --format=automation --timeout 300 \
57		$(JSTESTS_EXTRA_ARGS) \
58		$(DIST)/bin/$(JS_SHELL_NAME)$(BIN_SUFFIX)
59
60# FIXME:
61# We want to run check-jstests as part of |make check| on all platforms, on
62# tinderbox. However, some configurations don't work quite right just yet.
63# Rather than risking regressions in major configurations while fixing these
64# secondary configuration, we work around them and fix the bugs later.
65#
66#   Bug 652154: On Windows, SM(!m !t) don't work because of path problems with
67#				their unusual directory layout
68#
69#   Bug 652155: On Mac, SM(d) doesn't work for unknown reasons
70
71ifneq ($(OS_ARCH),WINNT)
72ifndef HAVE_DTRACE
73#check:: check-jstests
74endif
75endif
76
77GARBAGE_DIRS += config.statusd
78DIST_GARBAGE = config.cache config.log config.status \
79   config/autoconf.mk config/emptyvars.mk \
80   js-config.h js-confdefs.h \
81   backend.mk config/backend.mk devtools/backend.mk editline/backend.mk \
82   gdb/backend.mk jsapi-tests/backend.mk shell/backend.mk tests/backend.mk \
83   backend.RecursiveMakeBackend backend.RecursiveMakeBackend.pp \
84   devtools/rootAnalysis/Makefile
85
86distclean::
87	$(RM) $(DIST_GARBAGE)
88
89CFLAGS += $(MOZ_ZLIB_CFLAGS)
90
91# Silence warnings on AIX/HP-UX from non-GNU compilers
92ifndef GNU_CC
93ifeq ($(OS_ARCH),AIX)
94# Suppress warnings from xlC
95# 1540-1281: offsetof() on null non-POD types
96# 1540-1608: anonymous unions using static data members
97CFLAGS		+= -qsuppress=1540-1281 -qsuppress=1540-1608
98CXXFLAGS	+= -qsuppress=1540-1281 -qsuppress=1540-1608
99endif
100ifeq ($(OS_ARCH),HP-UX)
101# Suppress warnings from aCC
102# 3055: anonymous unions declaring types
103# 4189: offsetof() on non-POD types
104CFLAGS		+= +W3055,4189
105CXXFLAGS	+= +W3055,4189
106endif
107endif
108ifeq ($(OS_ARCH),SunOS)
109ifeq ($(TARGET_CPU),sparc)
110
111ifdef GNU_CC
112CFLAGS   += -mcpu=v9
113CXXFLAGS += -mcpu=v9
114endif # GNU_CC
115
116endif
117endif
118
119install::
120	$(MAKE) -C build install
121	$(MAKE) -C shell install
122
123ifdef HAVE_DTRACE
124javascript-trace.h: $(srcdir)/devtools/javascript-trace.d
125	dtrace -x nolibs -h -s $(srcdir)/devtools/javascript-trace.d -o javascript-trace.h.in
126	sed -e 's/if _DTRACE_VERSION/ifdef INCLUDE_MOZILLA_DTRACE/' \
127	    -e '/const/!s/char \*/const char */g' \
128	    javascript-trace.h.in > javascript-trace.h
129
130# We can't automatically generate dependencies on auto-generated headers;
131# we have to list them explicitly.
132$(addsuffix .$(OBJ_SUFFIX),Probes jsinterp jsobj): $(CURDIR)/javascript-trace.h
133
134ifneq ($(OS_ARCH),Darwin)
135DTRACE_PROBE_OBJ = js-dtrace.$(OBJ_SUFFIX)
136$(LIBRARY): $(DTRACE_PROBE_OBJ)
137$(DTRACE_PROBE_OBJ): $(srcdir)/devtools/javascript-trace.d $(OBJS)
138	dtrace -x nolibs -G -C -s $< -o $@ $(filter-out $<, $^)
139
140OBJS += $(DTRACE_PROBE_OBJ) # for "make clean"
141endif # OS_ARCH != Darwin
142endif # HAVE_DTRACE
143
144###############################################
145# Generating source package tarballs
146# (only possible when tar is found)
147ifneq (,$(TAR))
148
149source-package:
150	SRCDIR=$(srcdir) \
151	DIST=$(DIST) \
152	MKDIR=$(MKDIR) \
153	TAR=$(TAR) \
154	AUTOCONF=$(AUTOCONF) \
155	MOZJS_MAJOR_VERSION=$(MOZJS_MAJOR_VERSION) \
156	MOZJS_MINOR_VERSION=$(MOZJS_MINOR_VERSION) \
157	MOZJS_PATCH_VERSION=$(MOZJS_PATCH_VERSION) \
158	MOZJS_ALPHA=$(MOZJS_ALPHA) \
159	$(srcdir)/make-source-package.sh
160
161clean::
162	DIST=$(DIST) \
163	MOZJS_MAJOR_VERSION=$(MOZJS_MAJOR_VERSION) \
164	MOZJS_MINOR_VERSION=$(MOZJS_MINOR_VERSION) \
165	MOZJS_PATCH_VERSION=$(MOZJS_PATCH_VERSION) \
166	MOZJS_ALPHA=$(MOZJS_ALPHA) \
167	$(srcdir)/make-source-package.sh clean
168
169endif
170