Blame Makefile.in

Packit f0b94e
#
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
ifeq (,$(MAKE_VERSION))
Packit f0b94e
$(error GNU Make is required)
Packit f0b94e
endif
Packit f0b94e
make_min_ver := 3.81
Packit f0b94e
ifneq ($(make_min_ver),$(firstword $(sort $(make_min_ver) $(MAKE_VERSION))))
Packit f0b94e
$(error GNU Make $(make_min_ver) or higher is required)
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
export TOPLEVEL_BUILD := 1
Packit f0b94e
Packit f0b94e
default::
Packit f0b94e
Packit f0b94e
ifndef TEST_MOZBUILD
Packit f0b94e
ifdef MOZ_BUILD_APP
Packit f0b94e
include $(wildcard $(topsrcdir)/$(MOZ_BUILD_APP)/build.mk)
Packit f0b94e
endif
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
include $(topsrcdir)/config/config.mk
Packit f0b94e
Packit f0b94e
GARBAGE_DIRS += _javagen _profile staticlib
Packit f0b94e
DIST_GARBAGE = config.cache config.log config.status* config-defs.h \
Packit f0b94e
   config/autoconf.mk \
Packit f0b94e
   mozilla-config.h \
Packit f0b94e
   netwerk/necko-config.h xpcom/xpcom-config.h xpcom/xpcom-private.h \
Packit f0b94e
   .mozconfig.mk
Packit f0b94e
Packit f0b94e
ifndef MOZ_PROFILE_USE
Packit f0b94e
buildid.h source-repo.h: FORCE
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
ifdef JS_STANDALONE
Packit f0b94e
configure_dir = $(topsrcdir)/js/src
Packit f0b94e
else
Packit f0b94e
configure_dir = $(topsrcdir)
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
BUILD_BACKEND_FILES := $(addprefix backend.,$(addsuffix Backend,$(BUILD_BACKENDS)))
Packit f0b94e
Packit f0b94e
ifndef TEST_MOZBUILD
Packit f0b94e
ifndef MOZ_PROFILE_USE
Packit f0b94e
# We need to explicitly put BUILD_BACKEND_FILES here otherwise the rule in
Packit f0b94e
# rules.mk doesn't run early enough.
Packit f0b94e
$(TIERS) binaries:: CLOBBER $(configure_dir)/configure config.status $(BUILD_BACKEND_FILES)
Packit f0b94e
ifdef MOZ_WIDGET_TOOLKIT
Packit f0b94e
ifdef COMPILE_ENVIRONMENT
Packit f0b94e
$(TIERS) binaries:: $(topsrcdir)/js/src/configure js/src/config.status
Packit f0b94e
endif
Packit f0b94e
endif
Packit f0b94e
endif
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
ifdef JS_STANDALONE
Packit f0b94e
.PHONY: CLOBBER
Packit f0b94e
CLOBBER:
Packit f0b94e
else
Packit f0b94e
CLOBBER: $(topsrcdir)/CLOBBER
Packit f0b94e
	@echo 'STOP!  The CLOBBER file has changed.'
Packit f0b94e
	@echo 'Please run the build through "mach build".'
Packit f0b94e
	@exit 1
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
$(topsrcdir)/configure: $(topsrcdir)/configure.in $(topsrcdir)/old-configure.in
Packit f0b94e
$(topsrcdir)/js/src/configure: $(topsrcdir)/js/src/configure.in $(topsrcdir)/js/src/old-configure.in
Packit f0b94e
$(topsrcdir)/configure $(topsrcdir)/js/src/configure:
Packit f0b94e
	@echo 'STOP!  $? has changed, and your configure is out of date.'
Packit f0b94e
	@echo 'Please rerun autoconf and re-configure your build directory.'
Packit f0b94e
	@echo 'To ignore this message, touch "$@",'
Packit f0b94e
	@echo 'but your build might not succeed.'
Packit f0b94e
	@exit 1
Packit f0b94e
Packit f0b94e
config.status: $(configure_dir)/configure $(configure_dir)/old-configure
Packit f0b94e
js/src/config.status: $(topsrcdir)/js/src/configure $(topsrcdir)/js/src/old-configure
Packit f0b94e
config.status js/src/config.status:
Packit f0b94e
	@echo 'STOP!  $? has changed and needs to be run again.'
Packit f0b94e
	@echo 'Please rerun it.'
Packit f0b94e
	@echo 'To ignore this message, touch "$(CURDIR)/$@",'
Packit f0b94e
	@echo 'but your build might not succeed.'
Packit f0b94e
	@exit 1
Packit f0b94e
Packit f0b94e
# Regenerate the build backend if it is out of date. We only have this rule in
Packit f0b94e
# this main make file because having it in rules.mk and applied to partial tree
Packit f0b94e
# builds resulted in a world of hurt. Gory details are in bug 877308.
Packit f0b94e
#
Packit f0b94e
# The mach build driver will ensure the backend is up to date for partial tree
Packit f0b94e
# builds. This cleanly avoids most of the pain.
Packit f0b94e
Packit f0b94e
ifndef TEST_MOZBUILD
Packit f0b94e
Packit f0b94e
.PHONY: backend
Packit f0b94e
backend: $(BUILD_BACKEND_FILES)
Packit f0b94e
Packit f0b94e
include $(topsrcdir)/build/rebuild-backend.mk
Packit f0b94e
Packit f0b94e
Makefile: $(BUILD_BACKEND_FILES)
Packit f0b94e
	@$(TOUCH) $@
Packit f0b94e
Packit f0b94e
default:: $(BUILD_BACKEND_FILES)
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
install_manifests := \
Packit f0b94e
  $(addprefix dist/,branding idl include public private xpi-stage) \
Packit f0b94e
  _tests \
Packit f0b94e
  $(NULL)
Packit f0b94e
# Skip the dist/bin install manifest when using the hybrid
Packit f0b94e
# FasterMake/RecursiveMake backend. This is a hack until bug 1241744 moves
Packit f0b94e
# xpidl handling to FasterMake in that case, mechanically making the dist/bin
Packit f0b94e
# install manifest non-existent (non-existent manifests being skipped)
Packit f0b94e
ifeq (,$(filter FasterMake+RecursiveMake,$(BUILD_BACKENDS)))
Packit f0b94e
install_manifests += dist/bin
Packit f0b94e
endif
Packit f0b94e
install_manifest_depends = \
Packit f0b94e
  CLOBBER \
Packit f0b94e
  $(configure_dir)/configure \
Packit f0b94e
  config.status \
Packit f0b94e
  $(BUILD_BACKEND_FILES) \
Packit f0b94e
  $(NULL)
Packit f0b94e
Packit f0b94e
ifdef MOZ_WIDGET_TOOLKIT
Packit f0b94e
ifdef COMPILE_ENVIRONMENT
Packit f0b94e
install_manifest_depends += \
Packit f0b94e
  $(topsrcdir)/js/src/configure \
Packit f0b94e
  js/src/config.status \
Packit f0b94e
  $(NULL)
Packit f0b94e
endif
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
.PHONY: install-manifests
Packit f0b94e
install-manifests: $(addprefix install-,$(install_manifests))
Packit f0b94e
Packit f0b94e
# If we're using the hybrid FasterMake/RecursiveMake backend, we want
Packit f0b94e
# to recurse in the faster/ directory in parallel of install manifests.
Packit f0b94e
# But dist/idl needs to happen before (cf. dependencies in
Packit f0b94e
# config/faster/rules.mk)
Packit f0b94e
ifneq (,$(filter FasterMake+RecursiveMake,$(BUILD_BACKENDS)))
Packit f0b94e
install-manifests: faster
Packit f0b94e
.PHONY: faster
Packit f0b94e
faster: install-dist/idl
Packit f0b94e
	$(MAKE) -C faster FASTER_RECURSIVE_MAKE=1
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
.PHONY: tup
Packit f0b94e
tup:
Packit f0b94e
	$(call BUILDSTATUS,TIERS $(if $(MOZ_ARTIFACT_BUILDS),artifact )make tup)
Packit f0b94e
ifdef MOZ_ARTIFACT_BUILDS
Packit f0b94e
	$(call BUILDSTATUS,TIER_START artifact)
Packit f0b94e
	$(MAKE) recurse_artifact
Packit f0b94e
	$(call BUILDSTATUS,TIER_FINISH artifact)
Packit f0b94e
endif
Packit f0b94e
	$(call BUILDSTATUS,TIER_START make)
Packit f0b94e
	$(MAKE) buildid.h source-repo.h
Packit f0b94e
	$(call BUILDSTATUS,TIER_FINISH make)
Packit f0b94e
	$(call BUILDSTATUS,TIER_START tup)
Packit f0b94e
	@$(TUP) $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),,--verbose)
Packit f0b94e
	$(call BUILDSTATUS,TIER_FINISH tup)
Packit f0b94e
Packit f0b94e
.PHONY: $(addprefix install-,$(install_manifests))
Packit f0b94e
$(addprefix install-,$(install_manifests)): install-%: $(install_manifest_depends)
Packit f0b94e
ifneq (,$(filter FasterMake+RecursiveMake,$(BUILD_BACKENDS)))
Packit f0b94e
	@# If we're using the hybrid FasterMake/RecursiveMake backend, we want
Packit f0b94e
	@# to ensure the FasterMake end doesn't have install manifests for the
Packit f0b94e
	@# same directory, because that would blow up
Packit f0b94e
	$(if $(wildcard _build_manifests/install/$(subst /,_,$*)),$(if $(wildcard faster/install_$(subst /,_,$*)*),$(error FasterMake and RecursiveMake ends of the hybrid build system want to handle $*)))
Packit f0b94e
endif
Packit f0b94e
	$(addprefix $(call py_action,process_install_manifest,--track install_$(subst /,_,$*).track $*) ,$(wildcard _build_manifests/install/$(subst /,_,$*)))
Packit f0b94e
Packit f0b94e
# Dummy wrapper rule to allow the faster backend to piggy back
Packit f0b94e
$(addprefix install-,$(subst /,_,$(filter dist/%,$(install_manifests)))): install-dist_%: install-dist/% ;
Packit f0b94e
Packit f0b94e
.PHONY: install-tests
Packit f0b94e
install-tests: install-test-files
Packit f0b94e
Packit f0b94e
.PHONY: install-test-files
Packit f0b94e
install-test-files:
Packit f0b94e
	$(call py_action,process_install_manifest,--track install__test_files.track _tests _build_manifests/install/_test_files)
Packit f0b94e
Packit f0b94e
include $(topsrcdir)/build/moz-automation.mk
Packit f0b94e
Packit f0b94e
# dist and _tests should be purged during cleaning. However, we don't want them
Packit f0b94e
# purged during PGO builds because they contain some auto-generated files.
Packit f0b94e
ifneq ($(filter-out maybe_clobber_profiledbuild,$(MAKECMDGOALS)),)
Packit f0b94e
GARBAGE_DIRS += dist _tests
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
# Dummy rule for the cases below where we don't depend on dist/include
Packit f0b94e
recurse_pre-export::
Packit f0b94e
Packit f0b94e
# Windows PGO builds don't perform a clean before the 2nd pass. So, we want
Packit f0b94e
# to preserve content for the 2nd pass on Windows. Everywhere else, we always
Packit f0b94e
# process the install manifests as part of export.
Packit f0b94e
# For the binaries rule, not all the install manifests matter, so force only
Packit f0b94e
# the interesting ones to be done.
Packit f0b94e
ifdef MOZ_PROFILE_USE
Packit f0b94e
ifndef NO_PROFILE_GUIDED_OPTIMIZE
Packit f0b94e
ifneq ($(OS_ARCH)_$(GNU_CC), WINNT_)
Packit f0b94e
recurse_pre-export:: install-manifests
Packit f0b94e
binaries::
Packit f0b94e
	@$(MAKE) install-manifests install_manifests=dist/include
Packit f0b94e
endif
Packit f0b94e
endif
Packit f0b94e
else # !MOZ_PROFILE_USE (normal build)
Packit f0b94e
recurse_pre-export:: install-manifests
Packit f0b94e
binaries::
Packit f0b94e
	@$(MAKE) install-manifests install_manifests=dist/include
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
recurse_artifact:
Packit f0b94e
	$(topsrcdir)/mach --log-no-times artifact install
Packit f0b94e
Packit f0b94e
ifdef MOZ_WIDGET_TOOLKIT
Packit f0b94e
ifdef ENABLE_TESTS
Packit f0b94e
# Additional makefile targets to call automated test suites
Packit f0b94e
include $(topsrcdir)/testing/testsuite-targets.mk
Packit f0b94e
endif
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
default all::
Packit f0b94e
	$(call BUILDSTATUS,TIERS $(TIERS) $(if $(MOZ_AUTOMATION),$(MOZ_AUTOMATION_TIERS)))
Packit f0b94e
Packit f0b94e
# PGO build target.
Packit f0b94e
profiledbuild::
Packit f0b94e
	$(call BUILDSTATUS,TIERS pgo_profile_generate pgo_package pgo_profile pgo_clobber pgo_profile_use)
Packit f0b94e
	$(call BUILDSTATUS,TIER_START pgo_profile_generate)
Packit f0b94e
	$(MAKE) default MOZ_PROFILE_GENERATE=1 MOZ_PGO_INSTRUMENTED=1
Packit f0b94e
	$(call BUILDSTATUS,TIER_FINISH pgo_profile_generate)
Packit f0b94e
	$(call BUILDSTATUS,TIER_START pgo_package)
Packit f0b94e
	$(MAKE) package MOZ_PGO_INSTRUMENTED=1 MOZ_INTERNAL_SIGNING_FORMAT= MOZ_EXTERNAL_SIGNING_FORMAT=
Packit f0b94e
	rm -f jarlog/en-US.log
Packit f0b94e
	$(call BUILDSTATUS,TIER_FINISH pgo_package)
Packit f0b94e
	$(call BUILDSTATUS,TIER_START pgo_profile)
Packit f0b94e
	MOZ_PGO_INSTRUMENTED=1 JARLOG_FILE=jarlog/en-US.log $(PYTHON) $(topsrcdir)/build/pgo/profileserver.py 10
Packit f0b94e
	$(call BUILDSTATUS,TIER_FINISH pgo_profile)
Packit f0b94e
	$(call BUILDSTATUS,TIER_START pgo_clobber)
Packit f0b94e
	$(MAKE) maybe_clobber_profiledbuild
Packit f0b94e
	$(call BUILDSTATUS,TIER_FINISH pgo_clobber)
Packit f0b94e
	$(call BUILDSTATUS,TIER_START pgo_profile_use)
Packit f0b94e
	$(MAKE) default MOZ_PROFILE_USE=1
Packit f0b94e
	$(call BUILDSTATUS,TIER_FINISH pgo_profile_use)
Packit f0b94e
Packit f0b94e
# Change default target to PGO build if PGO is enabled.
Packit f0b94e
ifdef MOZ_PGO
Packit f0b94e
OVERRIDE_DEFAULT_GOAL := profiledbuild
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
include $(topsrcdir)/config/rules.mk
Packit f0b94e
Packit f0b94e
ifdef SCCACHE_VERBOSE_STATS
Packit f0b94e
default::
Packit f0b94e
	-$(CCACHE) --show-stats --stats-format=json > sccache-stats.json
Packit f0b94e
	@echo "===SCCACHE STATS==="
Packit f0b94e
	-$(CCACHE) --show-stats
Packit f0b94e
	@echo "==================="
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
distclean::
Packit f0b94e
	$(RM) $(DIST_GARBAGE)
Packit f0b94e
Packit f0b94e
ifdef MOZ_CRASHREPORTER
Packit f0b94e
include $(topsrcdir)/toolkit/mozapps/installer/package-name.mk
Packit f0b94e
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
.PHONY: prepsymbolsarchive
Packit f0b94e
prepsymbolsarchive:
Packit f0b94e
	echo packing symbols
Packit f0b94e
	$(NSINSTALL) -D $(DIST)/$(PKG_PATH)
Packit f0b94e
Packit f0b94e
ifndef MOZ_AUTOMATION
Packit f0b94e
prepsymbolsarchive: recurse_syms
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
.PHONY: symbolsfullarchive
Packit f0b94e
symbolsfullarchive: prepsymbolsarchive
Packit f0b94e
	$(RM) '$(DIST)/$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip'
Packit f0b94e
	$(call py_action,symbols_archive,'$(DIST)/$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip' \
Packit f0b94e
                                     $(abspath $(DIST)/crashreporter-symbols) \
Packit f0b94e
                                     --exclude '*test*' \
Packit f0b94e
                                     --exclude '*Test*' \
Packit f0b94e
                                     --compress '**/*.sym')
Packit f0b94e
Packit f0b94e
.PHONY: symbolsarchive
Packit f0b94e
symbolsarchive: prepsymbolsarchive
Packit f0b94e
	$(RM) '$(DIST)/$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip'
Packit f0b94e
	$(call py_action,symbols_archive,'$(DIST)/$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip' \
Packit f0b94e
                                     $(abspath $(DIST)/crashreporter-symbols) \
Packit f0b94e
                                     --include '**/*.sym')
Packit f0b94e
Packit f0b94e
ifdef MOZ_CRASHREPORTER
Packit f0b94e
# Set MOZ_DISABLE_FULL_SYMBOLS to disable generation and upload of the full
Packit f0b94e
# crashreporter symbols archives
Packit f0b94e
ifdef MOZ_DISABLE_FULL_SYMBOLS
Packit f0b94e
buildsymbols: symbolsarchive
Packit f0b94e
else
Packit f0b94e
buildsymbols: symbolsfullarchive symbolsarchive
Packit f0b94e
endif # MOZ_DISABLE_FULL_SYMBOLS
Packit f0b94e
else
Packit f0b94e
buildsymbols:
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
uploadsymbols:
Packit f0b94e
ifdef MOZ_CRASHREPORTER
Packit f0b94e
	$(PYTHON) -u $(topsrcdir)/toolkit/crashreporter/tools/upload_symbols.py '$(DIST)/$(PKG_PATH)$(SYMBOL_FULL_ARCHIVE_BASENAME).zip'
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
.PHONY: update-packaging
Packit f0b94e
update-packaging:
Packit f0b94e
	$(MAKE) -C tools/update-packaging
Packit f0b94e
Packit f0b94e
.PHONY: package-generated-sources
Packit f0b94e
package-generated-sources:
Packit f0b94e
	$(call py_action,package_generated_sources,'$(DIST)/$(PKG_PATH)$(GENERATED_SOURCE_FILE_PACKAGE)')
Packit f0b94e
Packit f0b94e
#XXX: this is a hack, since we don't want to clobber for MSVC
Packit f0b94e
# PGO support, but we can't do this test in client.mk
Packit f0b94e
ifneq ($(OS_ARCH)_$(GNU_CC), WINNT_)
Packit f0b94e
# No point in clobbering if PGO has been explicitly disabled.
Packit f0b94e
ifndef NO_PROFILE_GUIDED_OPTIMIZE
Packit f0b94e
maybe_clobber_profiledbuild: clean
Packit f0b94e
else
Packit f0b94e
maybe_clobber_profiledbuild:
Packit f0b94e
endif
Packit f0b94e
else
Packit f0b94e
maybe_clobber_profiledbuild:
Packit f0b94e
	$(RM) $(DIST)/bin/*.pgc
Packit f0b94e
	find $(DIST)/$(MOZ_APP_NAME) -name '*.pgc' -exec mv {} $(DIST)/bin \;
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
.PHONY: maybe_clobber_profiledbuild
Packit f0b94e
Packit f0b94e
# Look for R_386_PC32 relocations in shared libs, these
Packit f0b94e
# break x86_64 builds and SELinux users.
Packit f0b94e
ifeq ($(OS_TARGET)_$(TARGET_XPCOM_ABI),Linux_x86-gcc3)
Packit f0b94e
check::
Packit f0b94e
	@relcount=`find $(DIST)/bin -name '*.so' | xargs objdump -R | grep R_386_PC32 | wc -l` && if test $$relcount -gt 0; then echo 'FAILED: R_386_PC32 relocations detected in a shared library.  Did you use a system header without adding it to config/system-headers?'; exit 1; else echo 'PASSED'; fi
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
ifdef JS_STANDALONE
Packit f0b94e
# Delegate js-specific rules to js
Packit f0b94e
check-%:
Packit f0b94e
	$(MAKE) -C js/src $@
Packit f0b94e
Packit f0b94e
source-package install:
Packit f0b94e
	$(MAKE) -C js/src $@
Packit f0b94e
Packit f0b94e
# Every export rule depends on config/export, but the rule for config/export
Packit f0b94e
# doesn't exist when building js non-standalone.
Packit f0b94e
.PHONY: config/export
Packit f0b94e
config/export:
Packit f0b94e
Packit f0b94e
endif
Packit f0b94e
Packit f0b94e
# There used to be build interdependencies here. They are now in config/recurse.mk