mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 07:13:20 +00:00
Bug 1239217 - Add the FasterMake+RecursiveMake hybrid backend. r=gps
This commit is contained in:
parent
e50a6cfd7b
commit
6098e02a36
24
Makefile.in
24
Makefile.in
@ -123,9 +123,16 @@ default:: $(BUILD_BACKEND_FILES)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
install_manifests := \
|
install_manifests := \
|
||||||
$(addprefix dist/,bin branding idl include public private sdk xpi-stage) \
|
$(addprefix dist/,branding idl include public private sdk xpi-stage) \
|
||||||
_tests \
|
_tests \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
# Skip the dist/bin install manifest when using the hybrid
|
||||||
|
# FasterMake/RecursiveMake backend. This is a hack until bug 1241744 moves
|
||||||
|
# xpidl handling to FasterMake in that case, mechanically making the dist/bin
|
||||||
|
# install manifest non-existent (non-existent manifests being skipped)
|
||||||
|
ifeq (,$(filter FasterMake+RecursiveMake,$(BUILD_BACKENDS)))
|
||||||
|
install_manifests += dist/bin
|
||||||
|
endif
|
||||||
install_manifest_depends = \
|
install_manifest_depends = \
|
||||||
CLOBBER \
|
CLOBBER \
|
||||||
$(configure_dir)/configure \
|
$(configure_dir)/configure \
|
||||||
@ -145,6 +152,15 @@ endif
|
|||||||
.PHONY: install-manifests
|
.PHONY: install-manifests
|
||||||
install-manifests: $(addprefix install-,$(install_manifests))
|
install-manifests: $(addprefix install-,$(install_manifests))
|
||||||
|
|
||||||
|
# If we're using the hybrid FasterMake/RecursiveMake backend, we want
|
||||||
|
# to recurse in the faster/ directory in parallel of install manifests.
|
||||||
|
ifneq (,$(filter FasterMake+RecursiveMake,$(BUILD_BACKENDS)))
|
||||||
|
install-manifests: faster
|
||||||
|
.PHONY: faster
|
||||||
|
faster:
|
||||||
|
$(MAKE) -C faster FASTER_RECURSIVE_MAKE=1
|
||||||
|
endif
|
||||||
|
|
||||||
# process_install_manifest needs to be invoked with --no-remove when building
|
# process_install_manifest needs to be invoked with --no-remove when building
|
||||||
# js as standalone because automated builds are building nspr separately and
|
# js as standalone because automated builds are building nspr separately and
|
||||||
# that would remove the resulting files.
|
# that would remove the resulting files.
|
||||||
@ -156,6 +172,12 @@ endif
|
|||||||
|
|
||||||
.PHONY: $(addprefix install-,$(subst /,_,$(install_manifests)))
|
.PHONY: $(addprefix install-,$(subst /,_,$(install_manifests)))
|
||||||
$(addprefix install-,$(install_manifests)): install-%: $(install_manifest_depends)
|
$(addprefix install-,$(install_manifests)): install-%: $(install_manifest_depends)
|
||||||
|
ifneq (,$(filter FasterMake+RecursiveMake,$(BUILD_BACKENDS)))
|
||||||
|
@# If we're using the hybrid FasterMake/RecursiveMake backend, we want
|
||||||
|
@# to ensure the FasterMake end doesn't have install manifests for the
|
||||||
|
@# same directory, because that would blow up
|
||||||
|
$(if $(wildcard _build_manifests/install/$(subst /,_,$*)),$(if $(wildcard faster/install_$(subst /,_,$*)*),$(error FasterMake and RecursiveMake ends of the hybrid build system want to handle $*)))
|
||||||
|
endif
|
||||||
$(addprefix $(call py_action,process_install_manifest,$(if $(NO_REMOVE),--no-remove )$*) ,$(wildcard _build_manifests/install/$(subst /,_,$*)))
|
$(addprefix $(call py_action,process_install_manifest,$(if $(NO_REMOVE),--no-remove )$*) ,$(wildcard _build_manifests/install/$(subst /,_,$*)))
|
||||||
|
|
||||||
# Dummy wrapper rule to allow the faster backend to piggy back
|
# Dummy wrapper rule to allow the faster backend to piggy back
|
||||||
|
@ -47,14 +47,19 @@ ifndef NO_XPIDL
|
|||||||
default: $(TOPOBJDIR)/config/makefiles/xpidl/xpidl
|
default: $(TOPOBJDIR)/config/makefiles/xpidl/xpidl
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
|
|
||||||
# Mac builds require to copy things in dist/bin/*.app
|
# Mac builds require to copy things in dist/bin/*.app
|
||||||
# TODO: remove the MOZ_WIDGET_TOOLKIT and MOZ_BUILD_APP variables from
|
# TODO: remove the MOZ_WIDGET_TOOLKIT and MOZ_BUILD_APP variables from
|
||||||
# faster/Makefile and python/mozbuild/mozbuild/test/backend/test_build.py
|
# faster/Makefile and python/mozbuild/mozbuild/test/backend/test_build.py
|
||||||
# when this is not required anymore.
|
# when this is not required anymore.
|
||||||
|
# We however don't need to do this when using the hybrid
|
||||||
|
# FasterMake/RecursiveMake backend (FASTER_RECURSIVE_MAKE is set when
|
||||||
|
# recursing from the RecursiveMake backend)
|
||||||
|
ifndef FASTER_RECURSIVE_MAKE
|
||||||
|
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
|
||||||
default:
|
default:
|
||||||
$(MAKE) -C $(TOPOBJDIR)/$(MOZ_BUILD_APP)/app repackage
|
$(MAKE) -C $(TOPOBJDIR)/$(MOZ_BUILD_APP)/app repackage
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
.PHONY: FORCE
|
.PHONY: FORCE
|
||||||
|
|
||||||
|
@ -8,12 +8,18 @@ backends = {
|
|||||||
'CompileDB': 'mozbuild.compilation.database',
|
'CompileDB': 'mozbuild.compilation.database',
|
||||||
'CppEclipse': 'mozbuild.backend.cpp_eclipse',
|
'CppEclipse': 'mozbuild.backend.cpp_eclipse',
|
||||||
'FasterMake': 'mozbuild.backend.fastermake',
|
'FasterMake': 'mozbuild.backend.fastermake',
|
||||||
|
'FasterMake+RecursiveMake': None,
|
||||||
'RecursiveMake': 'mozbuild.backend.recursivemake',
|
'RecursiveMake': 'mozbuild.backend.recursivemake',
|
||||||
'VisualStudio': 'mozbuild.backend.visualstudio',
|
'VisualStudio': 'mozbuild.backend.visualstudio',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def get_backend_class(name):
|
def get_backend_class(name):
|
||||||
|
if '+' in name:
|
||||||
|
from mozbuild.backend.base import HybridBackend
|
||||||
|
return HybridBackend(*(get_backend_class(name)
|
||||||
|
for name in name.split('+')))
|
||||||
|
|
||||||
class_name = '%sBackend' % name
|
class_name = '%sBackend' % name
|
||||||
module = __import__(backends[name], globals(), locals(), [class_name])
|
module = __import__(backends[name], globals(), locals(), [class_name])
|
||||||
return getattr(module, class_name)
|
return getattr(module, class_name)
|
||||||
|
@ -126,7 +126,9 @@ class FasterMakeBackend(CommonBackend, PartialBackend):
|
|||||||
'MOZ_BUILD_APP',
|
'MOZ_BUILD_APP',
|
||||||
'MOZ_WIDGET_TOOLKIT',
|
'MOZ_WIDGET_TOOLKIT',
|
||||||
):
|
):
|
||||||
mk.add_statement('%s = %s' % (var, self.environment.substs[var]))
|
value = self.environment.substs.get(var)
|
||||||
|
if value is not None:
|
||||||
|
mk.add_statement('%s = %s' % (var, value))
|
||||||
|
|
||||||
install_manifests_bases = self._install_manifests.keys()
|
install_manifests_bases = self._install_manifests.keys()
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ import unittest
|
|||||||
import mozpack.path as mozpath
|
import mozpack.path as mozpath
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from mozunit import main
|
from mozunit import main
|
||||||
|
from mozbuild.backend import get_backend_class
|
||||||
from mozbuild.backend.configenvironment import ConfigEnvironment
|
from mozbuild.backend.configenvironment import ConfigEnvironment
|
||||||
from mozbuild.backend.recursivemake import RecursiveMakeBackend
|
from mozbuild.backend.recursivemake import RecursiveMakeBackend
|
||||||
from mozbuild.backend.fastermake import FasterMakeBackend
|
from mozbuild.backend.fastermake import FasterMakeBackend
|
||||||
@ -92,6 +93,30 @@ class TestBuild(unittest.TestCase):
|
|||||||
|
|
||||||
self.validate(config)
|
self.validate(config)
|
||||||
|
|
||||||
|
def test_faster_recursive_make(self):
|
||||||
|
substs = list(BASE_SUBSTS) + [
|
||||||
|
('BUILD_BACKENDS', 'FasterMake+RecursiveMake'),
|
||||||
|
]
|
||||||
|
with self.do_test_backend(get_backend_class(
|
||||||
|
'FasterMake+RecursiveMake'), substs=substs) as config:
|
||||||
|
buildid = mozpath.join(config.topobjdir, 'config', 'buildid')
|
||||||
|
ensureParentDir(buildid)
|
||||||
|
with open(buildid, 'w') as fh:
|
||||||
|
fh.write('20100101012345\n')
|
||||||
|
|
||||||
|
build = MozbuildObject(config.topsrcdir, None, None,
|
||||||
|
config.topobjdir)
|
||||||
|
overrides = [
|
||||||
|
'install_manifest_depends=',
|
||||||
|
'MOZ_CHROME_FILE_FORMAT=flat',
|
||||||
|
'TEST_MOZBUILD=1',
|
||||||
|
]
|
||||||
|
with self.line_handler() as handle_make_line:
|
||||||
|
build._run_make(directory=config.topobjdir, target=overrides,
|
||||||
|
silent=False, line_handler=handle_make_line)
|
||||||
|
|
||||||
|
self.validate(config)
|
||||||
|
|
||||||
def test_faster_make(self):
|
def test_faster_make(self):
|
||||||
substs = list(BASE_SUBSTS) + [
|
substs = list(BASE_SUBSTS) + [
|
||||||
('MOZ_BUILD_APP', 'dummy_app'),
|
('MOZ_BUILD_APP', 'dummy_app'),
|
||||||
|
Loading…
Reference in New Issue
Block a user