mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-25 03:05:34 +00:00
2d6fb1ed77
Now that the VisualStudio backend will no-op if nothing has changed, it should be safe to always run this backend. On first run, backend generation takes ~3.5s on my machine. On subsequent run, it takes ~1.5s. Wall time for a no-op config.status is now ~15.7s. We could like make the Visual Studio backend faster by not writing so many project files. But this would require consolidating libraries in moz.build files. And that's out of scope for this change. We drop the check for MSVS_VERSION because it won't always be defined on MinGW/GCC builds. We simply default to "2015" if it isn't set. MozReview-Commit-ID: 5W38HMGmcuV --HG-- extra : rebase_source : 302d76277058819c115f3c2518b8cb2067971950 extra : source : 408319d87eacb28848efeab0346eb815440adade
234 lines
7.3 KiB
Python
234 lines
7.3 KiB
Python
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
|
|
# vim: set filetype=python:
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
include('build/moz.configure/init.configure')
|
|
|
|
# Note:
|
|
# - Gecko-specific options and rules should go in toolkit/moz.configure.
|
|
# - Firefox-specific options and rules should go in browser/moz.configure.
|
|
# - Fennec-specific options and rules should go in
|
|
# mobile/android/moz.configure.
|
|
# - Spidermonkey-specific options and rules should go in js/moz.configure.
|
|
# - etc.
|
|
|
|
# Multiprocess Firefox Testing UI - Nightly and Aurora
|
|
# To be removed in Bug 1003313
|
|
@depends(milestone)
|
|
def e10s_testing_only(milestone):
|
|
if not milestone.is_release:
|
|
return True
|
|
|
|
set_config('E10S_TESTING_ONLY', e10s_testing_only)
|
|
set_define('E10S_TESTING_ONLY', e10s_testing_only)
|
|
|
|
|
|
option('--enable-artifact-builds', env='MOZ_ARTIFACT_BUILDS',
|
|
help='Download and use prebuilt binary artifacts.')
|
|
|
|
@depends('--enable-artifact-builds')
|
|
def artifact_builds(value):
|
|
if value:
|
|
return True
|
|
|
|
set_config('MOZ_ARTIFACT_BUILDS', artifact_builds)
|
|
|
|
@depends('--enable-artifact-builds')
|
|
def imply_disable_compile_environment(value):
|
|
if value:
|
|
return False
|
|
|
|
imply_option('--enable-compile-environment', imply_disable_compile_environment)
|
|
|
|
option('--disable-compile-environment',
|
|
help='Disable compiler/library checks')
|
|
|
|
@depends('--disable-compile-environment')
|
|
def compile_environment(compile_env):
|
|
if compile_env:
|
|
return True
|
|
|
|
set_config('COMPILE_ENVIRONMENT', compile_environment)
|
|
add_old_configure_assignment('COMPILE_ENVIRONMENT', compile_environment)
|
|
|
|
js_option('--disable-tests',
|
|
help='Do not build test libraries & programs')
|
|
|
|
@depends('--disable-tests')
|
|
def enable_tests(value):
|
|
if value:
|
|
return True
|
|
|
|
set_config('ENABLE_TESTS', enable_tests)
|
|
set_define('ENABLE_TESTS', enable_tests)
|
|
|
|
@depends(enable_tests)
|
|
def gtest_has_rtti(value):
|
|
if value:
|
|
return '0'
|
|
|
|
set_define('GTEST_HAS_RTTI', gtest_has_rtti)
|
|
|
|
@depends(target, enable_tests)
|
|
def linux_gtest_defines(target, enable_tests):
|
|
if enable_tests and target.os == 'Android':
|
|
return namespace(os_linux_android=True,
|
|
use_own_tr1_tuple=True,
|
|
has_clone='0')
|
|
|
|
set_define('GTEST_OS_LINUX_ANDROID',
|
|
delayed_getattr(linux_gtest_defines, 'os_linux_android'))
|
|
set_define('GTEST_USE_OWN_TR1_TUPLE',
|
|
delayed_getattr(linux_gtest_defines, 'use_own_tr1_tuple'))
|
|
set_define('GTEST_HAS_CLONE',
|
|
delayed_getattr(linux_gtest_defines, 'has_clone'))
|
|
|
|
@depends('--disable-compile-environment', '--help')
|
|
def toolchain_include(compile_env, help):
|
|
if compile_env:
|
|
return 'build/moz.configure/toolchain.configure'
|
|
|
|
include(toolchain_include)
|
|
|
|
@depends('--disable-compile-environment', '--help')
|
|
def memory_include(compile_env, help):
|
|
if compile_env:
|
|
return 'build/moz.configure/memory.configure'
|
|
|
|
include(memory_include)
|
|
|
|
|
|
@depends('--help')
|
|
@imports(_from='mozbuild.backend', _import='backends')
|
|
def build_backends_choices(help):
|
|
return tuple(backends)
|
|
|
|
|
|
@deprecated_option('--enable-build-backend', nargs='+',
|
|
choices=build_backends_choices)
|
|
def build_backend(backends):
|
|
if backends:
|
|
return tuple('+%s' % b for b in backends)
|
|
|
|
imply_option('--build-backends', build_backend)
|
|
|
|
|
|
@depends('--enable-artifact-builds', '--disable-compile-environment', '--help')
|
|
@imports('sys')
|
|
def build_backend_defaults(artifact_builds, compile_environment, _):
|
|
if artifact_builds:
|
|
all_backends = ['FasterMake+RecursiveMake']
|
|
else:
|
|
all_backends = ['RecursiveMake', 'FasterMake']
|
|
# Normally, we'd use target.os == 'WINNT', but a dependency on target
|
|
# would require target to depend on --help, as well as host and shell,
|
|
# and this is not a can of worms we can open at the moment.
|
|
if sys.platform == 'win32' and compile_environment:
|
|
all_backends.append('VisualStudio')
|
|
return tuple(all_backends)
|
|
|
|
option('--build-backends', nargs='+', default=build_backend_defaults,
|
|
choices=build_backends_choices, help='Build backends to generate')
|
|
|
|
@depends('--build-backends')
|
|
def build_backends(backends):
|
|
return backends
|
|
|
|
set_config('BUILD_BACKENDS', build_backends)
|
|
|
|
|
|
# Awk detection
|
|
# ==============================================================
|
|
awk = check_prog('AWK', ('gawk', 'mawk', 'nawk', 'awk'))
|
|
|
|
# Until the AWK variable is not necessary in old-configure
|
|
@depends(awk)
|
|
def awk_for_old_configure(value):
|
|
return value
|
|
|
|
add_old_configure_assignment('AWK', awk_for_old_configure)
|
|
|
|
|
|
# Perl detection
|
|
# ==============================================================
|
|
perl = check_prog('PERL', ('perl5', 'perl'))
|
|
|
|
# Until the PERL variable is not necessary in old-configure
|
|
@depends(perl)
|
|
def perl_for_old_configure(value):
|
|
return value
|
|
|
|
add_old_configure_assignment('PERL', perl_for_old_configure)
|
|
|
|
@template
|
|
def perl_version_check(min_version):
|
|
@depends(perl)
|
|
@checking('for minimum required perl version >= %s' % min_version)
|
|
def get_perl_version(perl):
|
|
return Version(check_cmd_output(
|
|
perl, '-e', 'print $]',
|
|
onerror=lambda: die('Failed to get perl version.')
|
|
))
|
|
|
|
@depends(get_perl_version)
|
|
def check_perl_version(version):
|
|
if version < min_version:
|
|
die('Perl %s or higher is required.', min_version)
|
|
|
|
@depends(perl)
|
|
@checking('for full perl installation')
|
|
@imports('subprocess')
|
|
def has_full_perl_installation(perl):
|
|
ret = subprocess.call(
|
|
[perl, '-e', 'use Config; exit(!-d $Config{archlib})'])
|
|
return ret == 0
|
|
|
|
@depends(has_full_perl_installation)
|
|
def require_full_perl_installation(has_full_perl_installation):
|
|
if not has_full_perl_installation:
|
|
die('Cannot find Config.pm or $Config{archlib}. '
|
|
'A full perl installation is required.')
|
|
|
|
perl_version_check('5.006')
|
|
|
|
|
|
# Miscellaneous programs
|
|
# ==============================================================
|
|
check_prog('DOXYGEN', ('doxygen',), allow_missing=True)
|
|
check_prog('XARGS', ('xargs',))
|
|
|
|
@depends(target)
|
|
def extra_programs(target):
|
|
if target.kernel == 'Darwin':
|
|
return namespace(
|
|
DSYMUTIL=('dsymutil', 'llvm-dsymutil'),
|
|
GENISOIMAGE=('genisoimage',),
|
|
)
|
|
if target.os == 'GNU' and target.kernel == 'Linux':
|
|
return namespace(RPMBUILD=('rpmbuild',))
|
|
|
|
check_prog('DSYMUTIL', delayed_getattr(extra_programs, 'DSYMUTIL'),
|
|
allow_missing=True)
|
|
check_prog('GENISOIMAGE', delayed_getattr(extra_programs, 'GENISOIMAGE'),
|
|
allow_missing=True)
|
|
check_prog('RPMBUILD', delayed_getattr(extra_programs, 'RPMBUILD'),
|
|
allow_missing=True)
|
|
|
|
option('--enable-system-hunspell',
|
|
help="Use system hunspell (located with pkgconfig)")
|
|
|
|
@depends('--enable-system-hunspell', compile_environment)
|
|
def check_for_hunspell(value, compile_env):
|
|
return value and compile_env
|
|
|
|
system_hunspell = pkg_check_modules('MOZ_HUNSPELL', 'hunspell',
|
|
check_for_hunspell)
|
|
|
|
set_config('MOZ_SYSTEM_HUNSPELL', system_hunspell)
|
|
|
|
# Fallthrough to autoconf-based configure
|
|
include('build/moz.configure/old.configure')
|
|
# Please do not add anything after the include of old.configure.
|