mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 05:11:16 +00:00
d42db71402
It can be a frustrating experience to push something to e.g. try, get build errors, fix them, and realize on a subsequent push that there were other build errors, but since the build failed as soon as it reached the first error, the logs didn't show them. While stopping at the first error locally is more helpful locally (although it still stop immediately and errors are often buried in the logs), it is actually desirable to avoid stopping on automation. Differential Revision: https://phabricator.services.mozilla.com/D154327
76 lines
2.4 KiB
Makefile
76 lines
2.4 KiB
Makefile
# -*- 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)
|
|
|
|
### Rules
|
|
# The default rule is build
|
|
build::
|
|
|
|
# In automation, manage an sccache daemon. The starting of the server
|
|
# needs to be in a make file so sccache inherits the jobserver.
|
|
ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
|
|
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)
|
|
|
|
build::
|
|
# 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
|
|
build::
|
|
+$(MOZ_MAKE) $(SCCACHE_STOP_ON_FAILURE)
|
|
ifdef MOZ_AUTOMATION
|
|
+$(MOZ_MAKE) automation/build $(SCCACHE_STOP_ON_FAILURE)
|
|
endif
|
|
|
|
ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
|
|
build::
|
|
# Terminate sccache server. This prints sccache stats.
|
|
-$(SCCACHE_STOP)
|
|
endif
|
|
|
|
.PHONY: \
|
|
build
|