Bug 1494162 - Part 6: Lazy load the modules in the ElementContainer. r=pbro
[gecko.git] / client.mk
blobf8b0986ca55ce60415454e3149b22b01c454f7a3
1 # -*- makefile -*-
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.
12 # Options:
13 # MOZ_OBJDIR - Destination object directory
14 # MOZ_MAKE_FLAGS - Flags to pass to $(MAKE)
16 #######################################################################
17 # Defines
19 ifdef MACH
20 ifndef NO_BUILDSTATUS_MESSAGES
21 define BUILDSTATUS
22 @echo 'BUILDSTATUS $1'
24 endef
25 endif
26 endif
29 CWD := $(CURDIR)
31 ifeq "$(CWD)" "/"
32 CWD := /.
33 endif
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)
45 endif
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)
51 endif
53 ifdef MOZ_AUTOMATION
54 ifeq (4.0,$(firstword $(sort 4.0 $(MAKE_VERSION))))
55 MOZ_MAKE_FLAGS += --output-sync=line
56 endif
57 endif
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 #######################################################################
66 # Rules
68 # The default rule is build
69 build::
71 ifndef MACH
72 $(error client.mk must be used via `mach`. Try running \
73 `./mach $(firstword $(MAKECMDGOALS) $(.DEFAULT_GOAL))`)
74 endif
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
79 build::
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 mkdir -p $(UPLOAD_PATH)
86 $(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)env RUST_LOG=sccache=debug SCCACHE_ERROR_LOG=$(UPLOAD_PATH)/sccache.log $(MOZBUILD_MANAGE_SCCACHE_DAEMON) --start-server
87 endif
89 ####################################
90 # Configure
92 MAKEFILE = $(wildcard $(OBJDIR)/Makefile)
93 CONFIG_STATUS = $(wildcard $(OBJDIR)/config.status)
95 # Include deps for configure written by configure itself.
96 CONFIG_STATUS_DEPS := $(if $(wildcard $(OBJDIR)/config_status_deps.in),$(shell cat $(OBJDIR)/config_status_deps.in),)
98 $(CONFIGURES): %: %.in
99 @echo Generating $@
100 cp -f $< $@
101 chmod +x $@
103 CONFIGURE_ENV_ARGS += \
104 MAKE='$(MAKE)' \
105 $(NULL)
107 # configure uses the program name to determine @srcdir@. Calling it without
108 # $(TOPSRCDIR) will set @srcdir@ to "."; otherwise, it is set to the full
109 # path of $(TOPSRCDIR).
110 ifeq ($(TOPSRCDIR),$(OBJDIR))
111 CONFIGURE = ./configure
112 else
113 CONFIGURE = $(TOPSRCDIR)/configure
114 endif
116 configure-files: $(CONFIGURES)
118 configure-preqs = \
119 configure-files \
120 $(OBJDIR)/.mozconfig.json \
121 $(NULL)
123 configure:: $(configure-preqs)
124 $(call BUILDSTATUS,TIERS configure)
125 $(call BUILDSTATUS,TIER_START configure)
126 @echo cd $(OBJDIR);
127 @echo $(CONFIGURE) $(CONFIGURE_ARGS)
128 @cd $(OBJDIR) && $(CONFIGURE_ENV_ARGS) $(CONFIGURE) $(CONFIGURE_ARGS) \
129 || ( echo '*** Fix above errors and then restart with\
130 "$(MAKE) -f client.mk build"' && exit 1 )
131 @touch $(OBJDIR)/Makefile
132 $(call BUILDSTATUS,TIER_FINISH configure)
134 ifneq (,$(MAKEFILE))
135 $(OBJDIR)/Makefile: $(OBJDIR)/config.status
141 $(OBJDIR)/config.status: $(CONFIG_STATUS_DEPS)
142 else
143 $(OBJDIR)/Makefile: $(CONFIG_STATUS_DEPS)
144 endif
145 @$(MAKE) -f $(TOPSRCDIR)/client.mk configure
147 ####################################
148 # Build it
150 build:: $(OBJDIR)/Makefile $(OBJDIR)/config.status
151 +$(MOZ_MAKE)
153 ifdef MOZ_AUTOMATION
154 build::
155 +$(MOZ_MAKE) automation/build
156 endif
158 ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
159 build::
160 # Terminate sccache server. This prints sccache stats.
161 -$(MOZBUILD_MANAGE_SCCACHE_DAEMON) --stop-server
162 endif
164 # This makefile doesn't support parallel execution. It does pass
165 # MOZ_MAKE_FLAGS to sub-make processes, so they will correctly execute
166 # in parallel.
167 .NOTPARALLEL:
169 .PHONY: \
170 build \
171 configure