summaryrefslogtreecommitdiffstats
path: root/client.mk
blob: 04fe5161ed87e0cc4ed313252ed47c59dcfd09f8 (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
# -*- makefile -*-
# vim:set ts=8 sw=8 sts=8 noet:
# 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/.

# Defines main targets for driving the Firefox build system.
#
# This make file should not be invoked directly. Instead, use
# `mach` (likely `mach build`) for invoking the build system.
#
# Options:
#   MOZ_OBJDIR           - Destination object directory
#   MOZ_MAKE_FLAGS       - Flags to pass to $(MAKE)
#
#######################################################################

ifndef MACH
$(error client.mk must be used via `mach`. Try running \
`./mach $(firstword $(MAKECMDGOALS) $(.DEFAULT_GOAL))`)
endif

### Load mozconfig options
include $(OBJDIR)/.mozconfig-client-mk

### Set up make flags
ifdef MOZ_AUTOMATION
ifeq (4.0,$(firstword $(sort 4.0 $(MAKE_VERSION))))
MOZ_MAKE_FLAGS += --output-sync=line
endif
endif

MOZ_MAKE = $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR)

ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
# In automation, manage an sccache daemon. The starting of the server
# needs to be in a make file so sccache inherits the jobserver.
SCCACHE_STOP = $(MOZBUILD_MANAGE_SCCACHE_DAEMON) --stop-server

# When a command fails, make is going to abort, but we need to terminate the
# sccache server, otherwise it will prevent make itself from terminating
# because it would still be running and holding a jobserver token.
# However, we also need to preserve the command's exit code, thus the
# gymnastics.
SCCACHE_STOP_ON_FAILURE = || (x=$$?; $(SCCACHE_STOP) || true; exit $$x)
endif

# The default rule is build
build:
ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
	# Terminate any sccache server that might still be around.
	-$(SCCACHE_STOP) > /dev/null 2>&1
	# Start a new server, ensuring it gets the jobserver file descriptors
	# from make (but don't use the + prefix when make -n is used, so that
	# the command doesn't run in that case)
	mkdir -p $(UPLOAD_PATH)
	$(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)env SCCACHE_LOG=sccache=debug SCCACHE_ERROR_LOG=$(UPLOAD_PATH)/sccache.log $(MOZBUILD_MANAGE_SCCACHE_DAEMON) --start-server
endif
	### Build it
	+$(MOZ_MAKE) $(SCCACHE_STOP_ON_FAILURE)
ifdef MOZ_AUTOMATION
	+$(MOZ_MAKE) automation/build $(SCCACHE_STOP_ON_FAILURE)
endif
ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
	# Terminate sccache server. This prints sccache stats.
	-$(SCCACHE_STOP)
endif

.PHONY: \
    build