diff options
Diffstat (limited to 'js/moz.configure')
-rw-r--r-- | js/moz.configure | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/js/moz.configure b/js/moz.configure new file mode 100644 index 000000000..0eeb2fc52 --- /dev/null +++ b/js/moz.configure @@ -0,0 +1,238 @@ +# -*- Mode: python; 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/. + +# /!\ Use js_option() instead of option() in this file. /!\ +# ========================================================= + +@depends(build_project, '--help') +def building_js(build_project, help): + return build_project == 'js' + +# Exception to the rule above: JS_STANDALONE is a special option that doesn't +# want the js_option treatment. When we're done merging js/src/configure and +# top-level configure, it can go away, although the JS_STANDALONE config +# will still need to be set depending on building_js above. +option(env='JS_STANDALONE', default=building_js, + help='Reserved for internal use') + +@depends('JS_STANDALONE') +def js_standalone(value): + if value: + return True + +set_config('JS_STANDALONE', js_standalone) +add_old_configure_assignment('JS_STANDALONE', js_standalone) + +js_option('--disable-js-shell', default=building_js, + help='Do not build the JS shell') + +@depends('--disable-js-shell') +def js_disable_shell(value): + if not value: + return True + +set_config('JS_DISABLE_SHELL', js_disable_shell) + + +# Use SpiderMonkey Promise implementation if it's enabled +# ======================================================= +js_option('--enable-sm-promise', default=True, + help='Enable SpiderMonkey promises') + +@depends('--enable-sm-promise') +def sm_promise(value): + if value: + return True + +set_config('SPIDERMONKEY_PROMISE', sm_promise) +set_define('SPIDERMONKEY_PROMISE', sm_promise) + +# SpiderMonkey as a shared library, and how its symbols are exported +# ================================================================== +js_option('--disable-shared-js', default=building_js, + help='Do not create a shared library') + +js_option('--disable-export-js', default=building_js, + help='Do not mark JS symbols as DLL exported/visible') + +@depends('--disable-shared-js', '--disable-export-js') +def shared_js(shared_js, export_js): + if shared_js: + if not export_js: + die('Must export JS symbols when building a shared library.') + return True + +set_config('JS_SHARED_LIBRARY', shared_js) +add_old_configure_assignment('JS_SHARED_LIBRARY', shared_js) + +@depends('--disable-shared-js', '--disable-export-js') +def exportable_js_api(shared_js, export_js): + if not shared_js and export_js: + return True + +set_define('STATIC_EXPORTABLE_JS_API', exportable_js_api) + +@depends('--disable-shared-js', '--disable-export-js') +def static_js_api(shared_js, export_js): + if not shared_js and not export_js: + return True + +set_define('STATIC_JS_API', static_js_api) + +@depends('--disable-shared-js') +def static_js(value): + if not value: + return True + +set_define('MOZ_STATIC_JS', static_js) + +@deprecated_option(env='DISABLE_SHARED_JS', nargs='?') +def disable_shared_js(value): + # DISABLE_SHARED_JS=1 gets us an empty PositiveOptionValue + if value and not len(value): + suggestion = '--disable-shared-js' + else: + suggestion = '--enable-shared-js' + + die('Setting %s is deprecated, use %s instead.', + value.format('DISABLE_SHARED_JS'), suggestion) + +@deprecated_option(env='DISABLE_EXPORT_JS', nargs='?') +def disable_export_js(value): + # DISABLE_EXPORT_JS=1 gets us an empty PositiveOptionValue + if value and not len(value): + suggestion = '--disable-export-js' + else: + suggestion = '--enable-export-js' + + die('Setting %s is deprecated, use %s instead.', + value.format('DISABLE_EXPORT_JS'), suggestion) + + +# Profiling +# ======================================================= +js_option('--enable-instruments', env='MOZ_INSTRUMENTS', + help='Enable instruments remote profiling') + +@depends('--enable-instruments', target) +def instruments(value, target): + if value and target.os != 'OSX': + die('--enable-instruments cannot be used when targeting %s', + target.os) + if value: + return True + +set_config('MOZ_INSTRUMENTS', instruments) +set_define('MOZ_INSTRUMENTS', instruments) +add_old_configure_assignment('MOZ_INSTRUMENTS', instruments) +imply_option('--enable-profiling', instruments, reason='--enable-instruments') + +js_option('--enable-callgrind', env='MOZ_CALLGRIND', + help='Enable callgrind profiling') + +@depends('--enable-callgrind') +def callgrind(value): + if value: + return True + +set_define('MOZ_CALLGRIND', callgrind) +imply_option('--enable-profiling', callgrind) + +js_option('--enable-profiling', env='MOZ_PROFILING', + help='Set compile flags necessary for using sampling profilers ' + '(e.g. shark, perf)') + +@depends('--enable-profiling') +def profiling(value): + if value: + return True + +add_old_configure_assignment('MOZ_PROFILING', profiling) + +@depends(profiling, target) +def imply_vtune(value, target): + if value and (target.kernel == 'WINNT' or (target.kernel == 'Linux' and + target.os == 'GNU')): + return True + +set_config('MOZ_PROFILING', profiling) +set_define('MOZ_PROFILING', profiling) +imply_option('--enable-vtune', imply_vtune, reason='--enable-profiling') + + +js_option('--enable-vtune', env='MOZ_VTUNE', help='Enable vtune profiling') + +@depends('--enable-vtune') +def vtune(value): + if value: + return True + +set_config('MOZ_VTUNE', vtune) +set_define('MOZ_VTUNE', vtune) + + +js_option('--enable-gc-trace', env='JS_GC_TRACE', + help='Enable tracing of allocation and finalization') + +@depends('--enable-gc-trace') +def gc_trace(value): + if value: + return True + +set_define('JS_GC_TRACE', gc_trace) + + +js_option('--enable-perf', env='JS_ION_PERF', + help='Enable Linux perf integration') + +@depends('--enable-perf') +def ion_perf(value): + if value: + return True + +set_define('JS_ION_PERF', ion_perf) + + +js_option('--enable-more-deterministic', env='JS_MORE_DETERMINISTIC', + help='Enable changes that make the shell more deterministic') + +@depends('--enable-more-deterministic') +def more_deterministic(value): + if value: + return True + +set_define('JS_MORE_DETERMINISTIC', more_deterministic) + + +# CTypes +# ======================================================= +@depends(building_js, '--help') +def ctypes_default(building_js, _): + return not building_js + +js_option('--enable-ctypes', help='Enable js-ctypes', + default=ctypes_default) + +build_ctypes = depends_if('--enable-ctypes')(lambda _: True) + +set_config('BUILD_CTYPES', build_ctypes) +set_define('BUILD_CTYPES', build_ctypes) +add_old_configure_assignment('BUILD_CTYPES', build_ctypes) + +@depends(build_ctypes, building_js) +def js_has_ctypes(ctypes, js): + if ctypes and js: + return True + +set_config('JS_HAS_CTYPES', js_has_ctypes) +set_define('JS_HAS_CTYPES', js_has_ctypes) +add_old_configure_assignment('JS_HAS_CTYPES', js_has_ctypes) + +@depends('--enable-ctypes', '--enable-compile-environment', '--help') +def ctypes_and_compile_environment(ctypes, compile_environment, _): + return ctypes and compile_environment + +include('ffi.configure', when=ctypes_and_compile_environment) |