|
Packit |
f0b94e |
# -*- makefile -*-
|
|
Packit |
f0b94e |
# vim:set ts=8 sw=8 sts=8 noet:
|
|
Packit |
f0b94e |
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
Packit |
f0b94e |
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
Packit |
f0b94e |
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
# Defines main targets for driving the Firefox build system.
|
|
Packit |
f0b94e |
#
|
|
Packit |
f0b94e |
# This make file should not be invoked directly. Instead, use
|
|
Packit |
f0b94e |
# `mach` (likely `mach build`) for invoking the build system.
|
|
Packit |
f0b94e |
#
|
|
Packit |
f0b94e |
# Options:
|
|
Packit |
f0b94e |
# MOZ_OBJDIR - Destination object directory
|
|
Packit |
f0b94e |
# MOZ_MAKE_FLAGS - Flags to pass to $(MAKE)
|
|
Packit |
f0b94e |
#
|
|
Packit |
f0b94e |
#######################################################################
|
|
Packit |
f0b94e |
# Defines
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ifdef MACH
|
|
Packit |
f0b94e |
ifndef NO_BUILDSTATUS_MESSAGES
|
|
Packit |
f0b94e |
define BUILDSTATUS
|
|
Packit |
f0b94e |
@echo 'BUILDSTATUS $1'
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
endef
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
CWD := $(CURDIR)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ifeq "$(CWD)" "/"
|
|
Packit |
f0b94e |
CWD := /.
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
PYTHON ?= $(shell which python2.7 > /dev/null 2>&1 && echo python2.7 || echo python)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
####################################
|
|
Packit |
f0b94e |
# Load mozconfig Options
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
include $(OBJDIR)/.mozconfig-client-mk
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ifdef MOZ_PARALLEL_BUILD
|
|
Packit |
f0b94e |
MOZ_MAKE_FLAGS := $(filter-out -j%,$(MOZ_MAKE_FLAGS))
|
|
Packit |
f0b94e |
MOZ_MAKE_FLAGS += -j$(MOZ_PARALLEL_BUILD)
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
# Automatically add -jN to make flags if not defined. N defaults to number of cores.
|
|
Packit |
f0b94e |
ifeq (,$(findstring -j,$(MOZ_MAKE_FLAGS)))
|
|
Packit |
f0b94e |
cores=$(shell $(PYTHON) -c 'import multiprocessing; print(multiprocessing.cpu_count())')
|
|
Packit |
f0b94e |
MOZ_MAKE_FLAGS += -j$(cores)
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ifdef MOZ_AUTOMATION
|
|
Packit |
f0b94e |
ifeq (4.0,$(firstword $(sort 4.0 $(MAKE_VERSION))))
|
|
Packit |
f0b94e |
MOZ_MAKE_FLAGS += --output-sync=line
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
MOZ_MAKE = $(MAKE) $(MOZ_MAKE_FLAGS) -C $(OBJDIR)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
# 'configure' scripts generated by autoconf.
|
|
Packit |
f0b94e |
CONFIGURES := $(TOPSRCDIR)/configure
|
|
Packit |
f0b94e |
CONFIGURES += $(TOPSRCDIR)/js/src/configure
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#######################################################################
|
|
Packit |
f0b94e |
# Rules
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
# The default rule is build
|
|
Packit |
f0b94e |
build::
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ifndef MACH
|
|
Packit |
f0b94e |
$(error client.mk must be used via `mach`. Try running \
|
|
Packit |
f0b94e |
`./mach $(firstword $(MAKECMDGOALS) $(.DEFAULT_GOAL))`)
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
# In automation, manage an sccache daemon. The starting of the server
|
|
Packit |
f0b94e |
# needs to be in a make file so sccache inherits the jobserver.
|
|
Packit |
f0b94e |
ifdef MOZBUILD_MANAGE_SCCACHE_DAEMON
|
|
Packit |
f0b94e |
build::
|
|
Packit |
f0b94e |
# Terminate any sccache server that might still be around.
|
|
Packit |
f0b94e |
-$(MOZBUILD_MANAGE_SCCACHE_DAEMON) --stop-server > /dev/null 2>&1
|
|
Packit |
f0b94e |
# Start a new server, ensuring it gets the jobserver file descriptors
|
|
Packit |
f0b94e |
# from make (but don't use the + prefix when make -n is used, so that
|
|
Packit |
f0b94e |
# the command doesn't run in that case)
|
|
Packit |
f0b94e |
mkdir -p $(UPLOAD_PATH)
|
|
Packit |
f0b94e |
$(if $(findstring n,$(filter-out --%, $(MAKEFLAGS))),,+)env RUST_LOG=sccache=debug SCCACHE_ERROR_LOG=$(UPLOAD_PATH)/sccache.log $(MOZBUILD_MANAGE_SCCACHE_DAEMON) --start-server
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
####################################
|
|
Packit |
f0b94e |
# Configure
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
MAKEFILE = $(wildcard $(OBJDIR)/Makefile)
|
|
Packit |
f0b94e |
CONFIG_STATUS = $(wildcard $(OBJDIR)/config.status)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
EXTRA_CONFIG_DEPS := \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/aclocal.m4 \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/old-configure.in \
|
|
Packit |
f0b94e |
$(wildcard $(TOPSRCDIR)/build/autoconf/*.m4) \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/js/src/aclocal.m4 \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/js/src/old-configure.in \
|
|
Packit |
f0b94e |
$(NULL)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
$(CONFIGURES): %: %.in $(EXTRA_CONFIG_DEPS)
|
|
Packit |
f0b94e |
@echo Generating $@
|
|
Packit |
f0b94e |
cp -f $< $@
|
|
Packit |
f0b94e |
chmod +x $@
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
CONFIG_STATUS_DEPS := \
|
|
Packit |
f0b94e |
$(wildcard $(TOPSRCDIR)/*/confvars.sh) \
|
|
Packit |
f0b94e |
$(CONFIGURES) \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/nsprpub/configure \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/config/milestone.txt \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/browser/config/version.txt \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/browser/config/version_display.txt \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/build/virtualenv_packages.txt \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/python/mozbuild/mozbuild/virtualenv.py \
|
|
Packit |
f0b94e |
$(TOPSRCDIR)/testing/mozbase/packages.txt \
|
|
Packit |
f0b94e |
$(OBJDIR)/.mozconfig.json \
|
|
Packit |
f0b94e |
$(NULL)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
# Include a dep file emitted by configure to track Python files that
|
|
Packit |
f0b94e |
# may influence the result of configure.
|
|
Packit |
f0b94e |
-include $(OBJDIR)/configure.d
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
CONFIGURE_ENV_ARGS += \
|
|
Packit |
f0b94e |
MAKE='$(MAKE)' \
|
|
Packit |
f0b94e |
$(NULL)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
# configure uses the program name to determine @srcdir@. Calling it without
|
|
Packit |
f0b94e |
# $(TOPSRCDIR) will set @srcdir@ to "."; otherwise, it is set to the full
|
|
Packit |
f0b94e |
# path of $(TOPSRCDIR).
|
|
Packit |
f0b94e |
ifeq ($(TOPSRCDIR),$(OBJDIR))
|
|
Packit |
f0b94e |
CONFIGURE = ./configure
|
|
Packit |
f0b94e |
else
|
|
Packit |
f0b94e |
CONFIGURE = $(TOPSRCDIR)/configure
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
configure-files: $(CONFIGURES)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
configure-preqs = \
|
|
Packit |
f0b94e |
configure-files \
|
|
Packit |
f0b94e |
$(OBJDIR)/.mozconfig.json \
|
|
Packit |
f0b94e |
$(NULL)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
configure:: $(configure-preqs)
|
|
Packit |
f0b94e |
$(call BUILDSTATUS,TIERS configure)
|
|
Packit |
f0b94e |
$(call BUILDSTATUS,TIER_START configure)
|
|
Packit |
f0b94e |
@echo cd $(OBJDIR);
|
|
Packit |
f0b94e |
@echo $(CONFIGURE) $(CONFIGURE_ARGS)
|
|
Packit |
f0b94e |
@cd $(OBJDIR) && $(CONFIGURE_ENV_ARGS) $(CONFIGURE) $(CONFIGURE_ARGS) \
|
|
Packit |
f0b94e |
|| ( echo '*** Fix above errors and then restart with\
|
|
Packit |
f0b94e |
"$(MAKE) -f client.mk build"' && exit 1 )
|
|
Packit |
f0b94e |
@touch $(OBJDIR)/Makefile
|
|
Packit |
f0b94e |
$(call BUILDSTATUS,TIER_FINISH configure)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ifneq (,$(MAKEFILE))
|
|
Packit |
f0b94e |
$(OBJDIR)/Makefile: $(OBJDIR)/config.status
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
$(OBJDIR)/config.status: $(CONFIG_STATUS_DEPS)
|
|
Packit |
f0b94e |
else
|
|
Packit |
f0b94e |
$(OBJDIR)/Makefile: $(CONFIG_STATUS_DEPS)
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
@$(MAKE) -f $(TOPSRCDIR)/client.mk configure
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
####################################
|
|
Packit |
f0b94e |
# Build it
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
build:: $(OBJDIR)/Makefile $(OBJDIR)/config.status
|
|
Packit |
f0b94e |
+$(MOZ_MAKE)
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ifdef MOZ_AUTOMATION
|
|
Packit |
f0b94e |
build::
|
|
Packit |
f0b94e |
+$(MOZ_MAKE) automation/build
|
|
Packit |
f0b94e |
endif
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
# This makefile doesn't support parallel execution. It does pass
|
|
Packit |
f0b94e |
# MOZ_MAKE_FLAGS to sub-make processes, so they will correctly execute
|
|
Packit |
f0b94e |
# in parallel.
|
|
Packit |
f0b94e |
.NOTPARALLEL:
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
.PHONY: \
|
|
Packit |
f0b94e |
build \
|
|
Packit |
f0b94e |
configure
|