Merge mozilla-central to autoland. a=merge CLOSED TREE
[gecko.git] / client.mk
blob04fe5161ed87e0cc4ed313252ed47c59dcfd09f8
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 #######################################################################
18 ifndef MACH
19 $(error client.mk must be used via `mach`. Try running \
20 `./mach $(firstword $(MAKECMDGOALS) $(.DEFAULT_GOAL))`)
21 endif
23 ### Load mozconfig options
24 include $(OBJDIR)/.mozconfig-client-mk
26 ### Set up make flags
27 ifdef MOZ_AUTOMATION
28 ifeq (4.0,$(firstword $(sort 4.0 $(MAKE_VERSION))))
29 MOZ_MAKE_FLAGS += --output-sync=line
30 endif
31 endif
33 MOZ_MAKE = $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR)
35 ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
36 # In automation, manage an sccache daemon. The starting of the server
37 # needs to be in a make file so sccache inherits the jobserver.
38 SCCACHE_STOP = $(MOZBUILD_MANAGE_SCCACHE_DAEMON) --stop-server
40 # When a command fails, make is going to abort, but we need to terminate the
41 # sccache server, otherwise it will prevent make itself from terminating
42 # because it would still be running and holding a jobserver token.
43 # However, we also need to preserve the command's exit code, thus the
44 # gymnastics.
45 SCCACHE_STOP_ON_FAILURE = || (x=$$?; $(SCCACHE_STOP) || true; exit $$x)
46 endif
48 # The default rule is build
49 build:
50 ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
51 # Terminate any sccache server that might still be around.
52 -$(SCCACHE_STOP) > /dev/null 2>&1
53 # Start a new server, ensuring it gets the jobserver file descriptors
54 # from make (but don't use the + prefix when make -n is used, so that
55 # the command doesn't run in that case)
56 mkdir -p $(UPLOAD_PATH)
57 $(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)env SCCACHE_LOG=sccache=debug SCCACHE_ERROR_LOG=$(UPLOAD_PATH)/sccache.log $(MOZBUILD_MANAGE_SCCACHE_DAEMON) --start-server
58 endif
59 ### Build it
60 +$(MOZ_MAKE) $(SCCACHE_STOP_ON_FAILURE)
61 ifdef MOZ_AUTOMATION
62 +$(MOZ_MAKE) automation/build $(SCCACHE_STOP_ON_FAILURE)
63 endif
64 ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
65 # Terminate sccache server. This prints sccache stats.
66 -$(SCCACHE_STOP)
67 endif
69 .PHONY: \
70 build