1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 # /!\ Please make sure to update the following comment when you touch this
8 # The traditional Mozilla build system relied on going through the entire
9 # build tree a number of times with different targets, and many of the
10 # things happening at each step required other things happening in previous
11 # steps without any documentation of those dependencies.
13 # This new build system tries to start afresh by establishing what files or
14 # operations are needed for the build, and applying the necessary rules to
15 # have those in place, relying on make dependencies to get them going.
17 # As of writing, only building non-compiled parts of Firefox is supported
18 # here (a few other things are also left out). This is a starting point, with
19 # the intent to grow this build system to make it more complete.
21 # This file contains rules and dependencies to get things working. The intent
22 # is for a Makefile to define some dependencies and variables, and include
23 # this file. What needs to be defined there, and ends up being generated by
24 # python/mozbuild/mozbuild/backend/fastermake.py is the following:
25 # - TOPSRCDIR/TOPOBJDIR, respectively the top source directory and the top
27 # - PYTHON, the path to the python executable
28 # - ACDEFINES, which contains a set of -Dvar=name to be used during
30 # - INSTALL_MANIFESTS, which defines the list of base directories handled
31 # by install manifests, see further below
33 # A convention used between this file and the Makefile including it is that
34 # global Make variables names are uppercase, while "local" Make variables
35 # applied to specific targets are lowercase.
37 # Targets to be triggered for a default build
38 default
: $(addprefix install-
,$(INSTALL_MANIFESTS
))
41 # Targets from the recursive make backend to be built for a default build
42 default
: $(TOPOBJDIR
)/config
/makefiles
/xpidl
/xpidl
45 # Mac builds require to copy things in dist/bin/*.app
46 # TODO: remove the MOZ_WIDGET_TOOLKIT and MOZ_BUILD_APP variables from
47 # faster/Makefile and python/mozbuild/mozbuild/test/backend/test_build.py
48 # when this is not required anymore.
49 # We however don't need to do this when using the hybrid
50 # FasterMake/RecursiveMake backend (FASTER_RECURSIVE_MAKE is set when
51 # recursing from the RecursiveMake backend)
52 ifndef FASTER_RECURSIVE_MAKE
53 ifeq (cocoa
,$(MOZ_WIDGET_TOOLKIT
))
55 $(MAKE
) -C
$(TOPOBJDIR
)/$(MOZ_BUILD_APP
)/app repackage
61 # Files under the faster/ sub-directory, however, are not meant to use the
63 $(TOPOBJDIR
)/faster
/%: ;
65 # Generic rule to fall back to the recursive make backend.
66 # This needs to stay after other $(TOPOBJDIR)/* rules because GNU Make
67 # <3.82 apply pattern rules in definition order, not stem length like
70 $(MAKE
) -C
$(dir $@
) $(notdir $@
)
72 # Install files using install manifests
74 # The list of base directories is given in INSTALL_MANIFESTS. The
75 # corresponding install manifests are named correspondingly, with forward
76 # slashes replaced with underscores, and prefixed with `install_`. That is,
77 # the install manifest for `dist/bin` would be `install_dist_bin`.
78 $(addprefix install-
,$(INSTALL_MANIFESTS
)): install-
%: $(addprefix $(TOPOBJDIR
)/,buildid.h source-repo.h
)
79 @
# For now, force preprocessed files to be reprocessed every time.
80 @
# The overhead is not that big, and this avoids waiting for proper
81 @
# support for defines tracking in process_install_manifest.
82 @touch install_
$(subst /,_
,$*)
83 $(PYTHON3
) -m mozbuild.action.process_install_manifest \
84 $(if
$(filter copy
,$(NSDISTMODE
)),--no-symlinks
) \
85 --track install_
$(subst /,_
,$*).track \
89 install_
$(subst /,_
,$*)
91 # ============================================================================
92 # Below is a set of additional dependencies and variables used to build things
93 # that are not supported by data in moz.build.
95 $(TOPOBJDIR
)/build
/.deps
/application.ini.stub
: $(TOPOBJDIR
)/buildid.h
$(TOPOBJDIR
)/source-repo.h