2 # vim:set ts=8 sw=8 sts=8 noet:
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/.
7 # Defines main targets for driving the Firefox build system.
9 # This make file should not be invoked directly. Instead, use
10 # `mach` (likely `mach build`) for invoking the build system.
13 # MOZ_OBJDIR - Destination object directory
14 # MOZ_MAKE_FLAGS - Flags to pass to $(MAKE)
16 #######################################################################
20 ifndef NO_BUILDSTATUS_MESSAGES
22 @echo
'BUILDSTATUS $1'
35 PYTHON ?
= $(shell which python2.7
> /dev
/null
2>&1 && echo python2.7 || echo python
)
37 ####################################
38 # Load mozconfig Options
40 include $(OBJDIR
)/.mozconfig-client-mk
42 ifdef MOZ_PARALLEL_BUILD
43 MOZ_MAKE_FLAGS
:= $(filter-out -j
%,$(MOZ_MAKE_FLAGS
))
44 MOZ_MAKE_FLAGS
+= -j
$(MOZ_PARALLEL_BUILD
)
47 # Automatically add -jN to make flags if not defined. N defaults to number of cores.
48 ifeq (,$(findstring -j
,$(MOZ_MAKE_FLAGS
)))
49 cores
=$(shell $(PYTHON
) -c
'import multiprocessing; print(multiprocessing.cpu_count())')
50 MOZ_MAKE_FLAGS
+= -j
$(cores
)
54 ifeq (4.0,$(firstword $(sort 4.0 $(MAKE_VERSION
))))
55 MOZ_MAKE_FLAGS
+= --output-sync
=line
59 MOZ_MAKE
= $(MAKE
) $(MOZ_MAKE_FLAGS
) -C
$(OBJDIR
)
61 # 'configure' scripts generated by autoconf.
62 CONFIGURES
:= $(TOPSRCDIR
)/configure
63 CONFIGURES
+= $(TOPSRCDIR
)/js
/src
/configure
65 #######################################################################
68 # The default rule is build
72 $(error client.mk must be used via
`mach`. Try running \
73 `./mach $(firstword $(MAKECMDGOALS) $(.DEFAULT_GOAL))`)
76 # In automation, manage an sccache daemon. The starting of the server
77 # needs to be in a make file so sccache inherits the jobserver.
78 ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
80 # Terminate any sccache server that might still be around.
81 -$(MOZBUILD_MANAGE_SCCACHE_DAEMON
) --stop-server
> /dev
/null
2>&1
82 # Start a new server, ensuring it gets the jobserver file descriptors
83 # from make (but don't use the + prefix when make -n is used, so that
84 # the command doesn't run in that case)
85 $(if
$(findstring n
,$(filter-out --%, $(MAKEFLAGS
))),,+)env RUST_LOG
=sccache
::compiler
=debug SCCACHE_ERROR_LOG
=$(OBJDIR
)/dist/sccache.log
$(MOZBUILD_MANAGE_SCCACHE_DAEMON
) --start-server
88 ####################################
91 MAKEFILE
= $(wildcard $(OBJDIR
)/Makefile
)
92 CONFIG_STATUS
= $(wildcard $(OBJDIR
)/config.status
)
94 EXTRA_CONFIG_DEPS
:= \
95 $(TOPSRCDIR
)/aclocal.m4 \
96 $(TOPSRCDIR
)/old-configure.in \
97 $(wildcard $(TOPSRCDIR
)/build
/autoconf
/*.m4
) \
98 $(TOPSRCDIR
)/js
/src
/aclocal.m4 \
99 $(TOPSRCDIR
)/js
/src
/old-configure.in \
102 $(CONFIGURES
): %: %.in
$(EXTRA_CONFIG_DEPS
)
107 CONFIG_STATUS_DEPS
:= \
108 $(wildcard $(TOPSRCDIR
)/*/confvars.sh
) \
110 $(TOPSRCDIR
)/nsprpub
/configure \
111 $(TOPSRCDIR
)/config
/milestone.txt \
112 $(TOPSRCDIR
)/browser
/config
/version.txt \
113 $(TOPSRCDIR
)/browser
/config
/version_display.txt \
114 $(TOPSRCDIR
)/build
/virtualenv_packages.txt \
115 $(TOPSRCDIR
)/python
/mozbuild
/mozbuild
/virtualenv.py \
116 $(TOPSRCDIR
)/testing
/mozbase
/packages.txt \
117 $(OBJDIR
)/.mozconfig.json \
120 # Include a dep file emitted by configure to track Python files that
121 # may influence the result of configure.
122 -include $(OBJDIR
)/configure.d
124 CONFIGURE_ENV_ARGS
+= \
128 # configure uses the program name to determine @srcdir@. Calling it without
129 # $(TOPSRCDIR) will set @srcdir@ to "."; otherwise, it is set to the full
130 # path of $(TOPSRCDIR).
131 ifeq ($(TOPSRCDIR
),$(OBJDIR
))
132 CONFIGURE
= .
/configure
134 CONFIGURE
= $(TOPSRCDIR
)/configure
137 configure-files
: $(CONFIGURES
)
141 $(OBJDIR
)/.mozconfig.json \
144 configure
:: $(configure-preqs
)
145 $(call BUILDSTATUS
,TIERS configure
)
146 $(call BUILDSTATUS
,TIER_START configure
)
148 @echo
$(CONFIGURE
) $(CONFIGURE_ARGS
)
149 @cd
$(OBJDIR
) && $(CONFIGURE_ENV_ARGS
) $(CONFIGURE
) $(CONFIGURE_ARGS
) \
150 ||
( echo
'*** Fix above errors and then restart with\
151 "$(MAKE) -f client.mk build"' && exit
1 )
152 @touch
$(OBJDIR
)/Makefile
153 $(call BUILDSTATUS
,TIER_FINISH configure
)
156 $(OBJDIR
)/Makefile
: $(OBJDIR
)/config.status
158 $(OBJDIR
)/config.status
: $(CONFIG_STATUS_DEPS
)
160 $(OBJDIR
)/Makefile
: $(CONFIG_STATUS_DEPS
)
162 @
$(MAKE
) -f
$(TOPSRCDIR
)/client.mk configure
164 ####################################
167 build
:: $(OBJDIR
)/Makefile
$(OBJDIR
)/config.status
172 +$(MOZ_MAKE
) automation
/build
175 ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
177 # Terminate sccache server. This prints sccache stats.
178 -$(MOZBUILD_MANAGE_SCCACHE_DAEMON
) --stop-server
181 # This makefile doesn't support parallel execution. It does pass
182 # MOZ_MAKE_FLAGS to sub-make processes, so they will correctly execute