summaryrefslogtreecommitdiffstats
path: root/js/src/Makefile.in
blob: 7f49a371814e8bfc76c57b8b329e8150e868055d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
# -*- 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/.

ifeq (,$(MAKE_VERSION))
$(error GNU Make is required)
endif
make_min_ver := 3.81
ifneq ($(make_min_ver),$(firstword $(sort $(make_min_ver) $(MAKE_VERSION))))
$(error GNU Make $(make_min_ver) or higher is required)
endif

DASH_R		= -r

# Define keyword generator before rules.mk, see bug 323979 comment 50

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

# Ensure symbol versions of shared library on Linux do not conflict
# with those in libxul.
ifeq (Linux,$(OS_TARGET))
OS_LDFLAGS += -Wl,-version-script,symverscript

symverscript: symverscript.in
	$(call py_action,preprocessor, \
		-DVERSION='$(subst -,_,$(LIBRARY_NAME))' $< -o $@)

EXTRA_DEPS += symverscript
endif

include $(topsrcdir)/config/rules.mk

# check_vanilla_allocations.py is tailored to Linux, so only run it there.
# That should be enough to catch any problems.
check-vanilla-allocations:
	$(PYTHON) $(topsrcdir)/config/check_vanilla_allocations.py $(REAL_LIBRARY)

# The "aggressive" variant will likely fail on some compiler/platform
# combinations, but is worth running by hand every once in a while.
check-vanilla-allocations-aggressive:
	$(PYTHON) $(topsrcdir)/config/check_vanilla_allocations.py --aggressive $(REAL_LIBRARY)

ifeq ($(OS_ARCH),Linux)
ifeq (,$(filter -flto,$(CFLAGS) $(CXXFLAGS) $(LDFLAGS)))
check:: check-vanilla-allocations
endif
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 $(topsrcdir)/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

ifneq ($(LLVM_SYMBOLIZER),)
# Use the LLVM symbolizer when running jit-tests under ASan and TSan, if available
ifdef MOZ_ASAN
JITTEST_SANITIZER_ENV=ASAN_SYMBOLIZER_PATH='$(LLVM_SYMBOLIZER)'
endif
ifdef MOZ_TSAN
JITTEST_SANITIZER_ENV=TSAN_OPTIONS="external_symbolizer_path=$(LLVM_SYMBOLIZER) $$TSAN_OPTIONS"
endif
ifdef MOZ_MSAN
JITTEST_SANITIZER_ENV=MSAN_SYMBOLIZER_PATH='$(LLVM_SYMBOLIZER)'
endif
endif

check-style::
	(cd $(srcdir) && $(PYTHON) $(topsrcdir)/config/check_spidermonkey_style.py);

check-masm::
	(cd $(srcdir) && $(PYTHON) $(topsrcdir)/config/check_macroassembler_style.py);

check-js-msg::
	(cd $(topsrcdir) && $(PYTHON) $(topsrcdir)/config/check_js_msg_encoding.py);

check-jit-test::
	$(JITTEST_SANITIZER_ENV) $(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON) -u $(srcdir)/jit-test/jit_test.py \
	        --no-slow --no-progress --format=automation --jitflags=all \
			$(JITTEST_VALGRIND_FLAG) \
			$(JITTEST_EXTRA_ARGS) \
	        $(DIST)/bin/$(JS_SHELL_NAME)$(BIN_SUFFIX) $(JITTEST_TEST_ARGS)

check:: check-style check-masm check-js-msg

check-jstests:
	$(wildcard $(RUN_TEST_PROGRAM)) $(PYTHON) -u $(srcdir)/tests/jstests.py \
		--no-progress --format=automation --timeout 300 \
		$(JSTESTS_EXTRA_ARGS) \
		$(DIST)/bin/$(JS_SHELL_NAME)$(BIN_SUFFIX)

# 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

ifneq ($(OS_ARCH),WINNT)
ifndef HAVE_DTRACE
#check:: check-jstests
endif
endif

DIST_GARBAGE = config.cache config.log config.status* \
   config/autoconf.mk config/emptyvars.mk \
   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 backend.RecursiveMakeBackend.pp \
   devtools/rootAnalysis/Makefile

distclean::
	$(RM) $(DIST_GARBAGE)

CFLAGS += $(MOZ_ZLIB_CFLAGS)

# 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
endif

$(LIBRARY_NAME).pc: js.pc
	cp $^ $@

# Install versioned file, for parallel installability in Linux distributions
install:: $(LIBRARY_NAME).pc
	cp $^ $(JS_LIBRARY_NAME).pc
	$(SYSINSTALL) $(JS_LIBRARY_NAME).pc $(DESTDIR)$(libdir)/pkgconfig

install:: js-config.h
	$(SYSINSTALL) $^ $(DESTDIR)$(includedir)

######################################################
# 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::
	$(call py_action,process_install_manifest,--no-remove --no-symlinks $(DESTDIR)$(includedir) $(DEPTH)/_build_manifests/install/dist_include)

#
# END SpiderMonkey header installation
#############################################

# Install versioned script, for parallel installability in Linux distributions
install:: js-config
	cp $^ js$(MOZJS_MAJOR_VERSION)-config
	$(SYSINSTALL) js$(MOZJS_MAJOR_VERSION)-config $(DESTDIR)$(bindir)

# Use install_name_tool to set the install_name properly for standalone
# installed libraries on macOS
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)
ifeq ($(OS_ARCH),Darwin)
	install_name_tool -id $(abspath $(libdir)/$(SHARED_LIBRARY)) $(DESTDIR)$(libdir)/$(SHARED_LIBRARY)
endif
endif
ifneq (,$(IMPORT_LIBRARY))
ifneq ($(IMPORT_LIBRARY),$(SHARED_LIBRARY))
	$(SYSINSTALL) $(IMPORT_LIBRARY) $(DESTDIR)$(libdir)
endif
endif
	$(MAKE) -C shell install

ifdef HAVE_DTRACE
javascript-trace.h: $(srcdir)/devtools/javascript-trace.d
	dtrace -x nolibs -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

###############################################
# Generating source package tarballs
# (only possible when tar is found)
ifneq (,$(TAR))

source-package:
	SRCDIR=$(srcdir) \
	DIST=$(DIST) \
	MKDIR=$(MKDIR) \
	TAR=$(TAR) \
	AUTOCONF=$(AUTOCONF) \
	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