summaryrefslogtreecommitdiffstats
path: root/js/moz.configure
diff options
context:
space:
mode:
Diffstat (limited to 'js/moz.configure')
-rw-r--r--js/moz.configure238
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)