2 # This Source Code Form is subject to the terms of the Mozilla Public
3 # License, v. 2.0. If a copy of the MPL was not distributed with this
4 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 ifeq (,$(MAKE_VERSION
))
7 $(error GNU Make is required
)
10 ifneq ($(make_min_ver
),$(firstword $(sort $(make_min_ver
) $(MAKE_VERSION
))))
11 $(error GNU Make
$(make_min_ver
) or higher is required
)
14 export TOPLEVEL_BUILD
:= 1
19 include $(topsrcdir
)/$(MOZ_BUILD_APP
)/build.mk
22 include $(topsrcdir
)/config
/config.mk
24 GARBAGE_DIRS
+= dist _javagen _profile staticlib
25 DIST_GARBAGE
= config.cache config.log config.status
* config-defs.h \
28 netwerk
/necko-config.h xpcom
/xpcom-config.h xpcom
/xpcom-private.h \
32 configure_dir
= $(topsrcdir
)/js
/src
34 configure_dir
= $(topsrcdir
)
37 ifndef MOZ_PROFILE_USE
38 # We need to explicitly put backend.RecursiveMakeBackend here
39 # otherwise the rule in rules.mk doesn't run early enough.
40 $(TIERS
) binaries
:: CLOBBER
$(configure_dir
)/configure config.status backend.RecursiveMakeBackend
43 $(TIERS
) binaries
:: $(topsrcdir
)/js
/src
/configure js
/src
/config.status
52 CLOBBER
: $(topsrcdir
)/CLOBBER
53 @echo
'STOP! The CLOBBER file has changed.'
54 @echo
'Please run the build through a sanctioned build wrapper, such as'
55 @echo
'"mach build" or client.mk.'
59 $(topsrcdir
)/configure
: $(topsrcdir
)/configure.in
60 $(topsrcdir
)/js
/src
/configure
: $(topsrcdir
)/js
/src
/configure.in
61 $(topsrcdir
)/configure
$(topsrcdir
)/js
/src
/configure
:
62 @echo
'STOP! $^ has changed, and your configure is out of date.'
63 @echo
'Please rerun autoconf and re-configure your build directory.'
64 @echo
'To ignore this message, touch "$@",'
65 @echo
'but your build might not succeed.'
68 config.status
: $(configure_dir
)/configure
69 js
/src
/config.status
: $(topsrcdir
)/js
/src
/configure
70 config.status js
/src
/config.status
:
71 @echo
'STOP! $^ has changed and needs to be run again.'
72 @echo
'Please rerun it.'
73 @echo
'To ignore this message, touch "$(CURDIR)/$@",'
74 @echo
'but your build might not succeed.'
77 # Regenerate the build backend if it is out of date. We only have this rule in
78 # this main make file because having it in rules.mk and applied to partial tree
79 # builds resulted in a world of hurt. Gory details are in bug 877308.
81 # The mach build driver will ensure the backend is up to date for partial tree
82 # builds. This cleanly avoids most of the pain.
84 backend.RecursiveMakeBackend
:
85 @echo
'Build configuration changed. Regenerating backend.'
86 $(PYTHON
) config.status
88 Makefile
: backend.RecursiveMakeBackend
91 include backend.RecursiveMakeBackend.pp
93 default
:: backend.RecursiveMakeBackend
95 install_manifests
:= \
96 $(addprefix dist/,bin idl
include public private sdk xpi-stage
) \
99 install_manifest_depends
= \
101 $(configure_dir
)/configure \
103 backend.RecursiveMakeBackend \
108 install_manifest_depends
+= \
109 $(topsrcdir
)/js
/src
/configure \
110 js
/src
/config.status \
115 .PHONY
: install-manifests
116 install-manifests
: $(addprefix install-
,$(install_manifests
))
118 # process_install_manifest needs to be invoked with --no-remove when building
119 # js as standalone because automated builds are building nspr separately and
120 # that would remove the resulting files.
121 # Eventually, a standalone js build would just be able to build nspr itself,
122 # removing the need for the former.
127 .PHONY
: $(addprefix install-
,$(install_manifests
))
128 $(addprefix install-
,$(filter dist/%,$(install_manifests
))): install-dist
/%: $(install_manifest_depends
)
129 $(call py_action
,process_install_manifest
,$(if
$(NO_REMOVE
),--no-remove
)$(DIST
)/$* _build_manifests
/install/dist_
$*)
131 install-_tests
: $(install_manifest_depends
)
132 $(call py_action
,process_install_manifest
,$(if
$(NO_REMOVE
),--no-remove
)_tests _build_manifests
/install/tests
)
135 .PHONY
: install-tests
136 install-tests
: install-_tests
138 include $(topsrcdir
)/build
/moz-automation.mk
140 # _tests should be purged during cleaning. However, we don't want it purged
141 # during PGO builds because it contains some auto-generated files.
142 ifneq ($(filter-out maybe_clobber_profiledbuild
,$(MAKECMDGOALS
)),)
143 GARBAGE_DIRS
+= _tests
146 # Windows PGO builds don't perform a clean before the 2nd pass. So, we want
147 # to preserve content for the 2nd pass on Windows. Everywhere else, we always
148 # process the install manifests as part of export.
149 # For the binaries rule, not all the install manifests matter, so force only
150 # the interesting ones to be done.
151 ifdef MOZ_PROFILE_USE
152 ifndef NO_PROFILE_GUIDED_OPTIMIZE
153 ifneq ($(OS_ARCH
)_
$(GNU_CC
), WINNT_
)
154 export:: install-manifests
156 @
$(MAKE
) install-manifests NO_REMOVE
=1 install_manifests
=dist/include
159 else # !MOZ_PROFILE_USE (normal build)
160 export:: install-manifests
162 @
$(MAKE
) install-manifests NO_REMOVE
=1 install_manifests
=dist/include
165 # For historical reasons that are unknown, $(DIST)/sdk is always blown away
166 # with no regard for PGO passes. This decision could probably be revisited.
167 export:: install-dist
/sdk
171 # Additional makefile targets to call automated test suites
172 include $(topsrcdir
)/testing
/testsuite-targets.mk
177 $(call BUILDSTATUS
,TIERS
$(TIERS
) $(if
$(MOZ_AUTOMATION
),$(MOZ_AUTOMATION_TIERS
)))
179 include $(topsrcdir
)/config
/rules.mk
182 $(RM
) $(DIST_GARBAGE
)
184 ifeq ($(OS_ARCH
),WINNT
)
185 # we want to copy PDB files on Windows
186 MAKE_SYM_STORE_ARGS
:= -c
--vcs-info
188 MAKE_SYM_STORE_ARGS
+= -i
190 DUMP_SYMS_BIN ?
= $(topsrcdir
)/toolkit
/crashreporter
/tools
/win32
/dump_syms_vc
$(_MSC_VER
).exe
191 # PDB files don't get moved to dist, so we need to scan the whole objdir
192 MAKE_SYM_STORE_PATH
:= .
194 ifeq ($(OS_ARCH
),Darwin
)
195 # need to pass arch flags for universal builds
196 ifdef UNIVERSAL_BINARY
197 MAKE_SYM_STORE_ARGS
:= -c
-a
'i386 x86_64' --vcs-info
198 MAKE_SYM_STORE_PATH
:= $(DIST
)/universal
200 MAKE_SYM_STORE_ARGS
:= -c
-a
$(OS_TEST
) --vcs-info
201 MAKE_SYM_STORE_PATH
:= $(DIST
)/bin
203 DUMP_SYMS_BIN ?
= $(DIST
)/host
/bin
/dump_syms
205 ifeq (,$(filter-out Linux SunOS
,$(OS_ARCH
)))
206 MAKE_SYM_STORE_ARGS
:= -c
--vcs-info
207 DUMP_SYMS_BIN ?
= $(DIST
)/host
/bin
/dump_syms
208 MAKE_SYM_STORE_PATH
:= $(DIST
)/bin
210 MAKE_SYM_STORE_ARGS
+= --install-manifest
=$(DEPTH
)/_build_manifests
/install/dist_include
,$(DIST
)/include
212 SYM_STORE_SOURCE_DIRS
:= $(topsrcdir
)
215 include $(topsrcdir
)/toolkit
/mozapps
/installer
/package-name.mk
217 ifdef MOZ_SYMBOLS_EXTRA_BUILDID
218 EXTRA_BUILDID
:= -$(MOZ_SYMBOLS_EXTRA_BUILDID
)
221 SYMBOL_INDEX_NAME
= \
222 $(MOZ_APP_NAME
)-$(MOZ_APP_VERSION
)-$(OS_TARGET
)-$(BUILDID
)-$(CPU_ARCH
)$(EXTRA_BUILDID
)-symbols.txt
225 ifdef MOZ_CRASHREPORTER
226 echo building symbol store
227 $(RM
) -r
$(DIST
)/crashreporter-symbols
228 $(RM
) '$(DIST)/$(SYMBOL_ARCHIVE_BASENAME).zip'
229 $(RM
) '$(DIST)/$(SYMBOL_FULL_ARCHIVE_BASENAME).zip'
230 $(NSINSTALL
) -D
$(DIST
)/crashreporter-symbols
231 OBJCOPY
='$(OBJCOPY)' \
232 $(PYTHON
) $(topsrcdir
)/toolkit
/crashreporter
/tools
/symbolstore.py \
233 $(MAKE_SYM_STORE_ARGS
) \
234 $(foreach dir,$(SYM_STORE_SOURCE_DIRS
),-s
$(dir)) \
236 $(DIST
)/crashreporter-symbols \
237 $(MAKE_SYM_STORE_PATH
) | grep
-iv
test > \
238 $(DIST
)/crashreporter-symbols
/$(SYMBOL_INDEX_NAME
)
240 $(NSINSTALL
) -D
$(DIST
)/$(PKG_PATH
)
241 cd
$(DIST
)/crashreporter-symbols
&& \
242 zip
-r9D
'../$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip' .
-x
'*test*' -x
'*Test*'
243 cd
$(DIST
)/crashreporter-symbols
&& \
244 grep
'sym' $(SYMBOL_INDEX_NAME
) > $(SYMBOL_INDEX_NAME
).tmp
&& \
245 mv
$(SYMBOL_INDEX_NAME
).tmp
$(SYMBOL_INDEX_NAME
)
246 cd
$(DIST
)/crashreporter-symbols
&& \
247 zip
-r9D
'../$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip' .
-i
'*.sym' -i
'*.txt' -x
'*test*' -x
'*Test*'
248 endif # MOZ_CRASHREPORTER
251 ifdef MOZ_CRASHREPORTER
252 $(SHELL
) $(topsrcdir
)/toolkit
/crashreporter
/tools
/upload_symbols.sh
$(SYMBOL_INDEX_NAME
) '$(DIST)/$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip'
255 # MOZ_SOURCE_STAMP is defined in package-name.mk with a deferred assignment.
256 # exporting it makes make run its $(shell) command for each invoked submake,
257 # so transform it to an immediate assignment.
258 MOZ_SOURCE_STAMP
:= $(MOZ_SOURCE_STAMP
)
259 export MOZ_SOURCE_STAMP
262 .PHONY
: update-packaging
264 $(MAKE
) -C tools
/update-packaging
266 .PHONY
: pretty-package
268 unset MOZ_SIGN_CMD
&& $(MAKE
) package MOZ_PKG_PRETTYNAMES
=1
270 .PHONY
: pretty-package-tests
271 pretty-package-tests
:
272 unset MOZ_SIGN_CMD
&& $(MAKE
) package-tests MOZ_PKG_PRETTYNAMES
=1
274 .PHONY
: pretty-l10n-check
276 unset MOZ_SIGN_CMD
&& $(MAKE
) l10n-check MOZ_PKG_PRETTYNAMES
=1
278 .PHONY
: pretty-update-packaging
279 pretty-update-packaging
:
280 unset MOZ_SIGN_CMD
&& $(MAKE
) -C tools
/update-packaging MOZ_PKG_PRETTYNAMES
=1
282 .PHONY
: pretty-installer
284 unset MOZ_SIGN_CMD
&& $(MAKE
) installer MOZ_PKG_PRETTYNAMES
=1
286 #XXX: this is a hack, since we don't want to clobber for MSVC
287 # PGO support, but we can't do this test in client.mk
288 ifneq ($(OS_ARCH
)_
$(GNU_CC
), WINNT_
)
289 # No point in clobbering if PGO has been explicitly disabled.
290 ifndef NO_PROFILE_GUIDED_OPTIMIZE
291 maybe_clobber_profiledbuild
: clean
293 maybe_clobber_profiledbuild
:
296 maybe_clobber_profiledbuild
:
297 $(RM
) $(DIST
)/bin
/*.pgc
298 find
$(DIST
)/$(MOZ_APP_NAME
) -name
'*.pgc' -exec mv
{} $(DIST
)/bin \
;
301 .PHONY
: maybe_clobber_profiledbuild
303 # Look for R_386_PC32 relocations in shared libs, these
304 # break x86_64 builds and SELinux users.
305 ifeq ($(OS_TARGET
)_
$(TARGET_XPCOM_ABI
),Linux_x86-gcc3
)
307 @relcount
=`find $(DIST)/bin -name '*.so' | xargs objdump -R | grep R_386_PC32 | wc -l` && if
test $$relcount -gt
0; then echo
'FAILED: R_386_PC32 relocations detected in a shared library. Did you use a system header without adding it to config/system-headers?'; exit
1; else echo
'PASSED'; fi
311 # Delegate js-specific rules to js
315 source-package
install:
318 # Every export rule depends on config/export, but the rule for config/export
319 # doesn't exist when building js non-standalone.
320 .PHONY
: config
/export
325 # There used to be build interdependencies here. They are now in config/recurse.mk