client.mk (2508B)
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/. 6 7 # Defines main targets for driving the Firefox build system. 8 # 9 # This make file should not be invoked directly. Instead, use 10 # `mach` (likely `mach build`) for invoking the build system. 11 # 12 # Options: 13 # MOZ_OBJDIR - Destination object directory 14 # MOZ_MAKE_FLAGS - Flags to pass to $(MAKE) 15 # 16 ####################################################################### 17 18 ifndef MACH 19 $(error client.mk must be used via `mach`. Try running \ 20 `./mach $(firstword $(MAKECMDGOALS) $(.DEFAULT_GOAL))`) 21 endif 22 23 ### Load mozconfig options 24 include $(OBJDIR)/.mozconfig-client-mk 25 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 32 33 MOZ_MAKE = $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR) 34 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 39 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 47 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 SCCACHE_LOG_MILLIS=true $(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 68 69 .PHONY: \ 70 build