123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
- # 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)
- # 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)
- # Support various fuzzing options
- # ==============================================================
- with only_when('--enable-compile-environment'):
- option('--enable-fuzzing', help='Enable fuzzing support')
- @depends('--enable-fuzzing')
- def enable_fuzzing(value):
- if value:
- return True
- @depends(enable_fuzzing,
- try_compile(body='__AFL_COMPILER;',
- check_msg='for AFL compiler',
- when='--enable-fuzzing'))
- def enable_libfuzzer(fuzzing, afl):
- if fuzzing and not afl:
- return True
- set_config('FUZZING', enable_fuzzing)
- set_define('FUZZING', enable_fuzzing)
- set_config('LIBFUZZER', enable_libfuzzer)
- set_define('LIBFUZZER', enable_libfuzzer)
- # Initial support for new regexp engine
- # ==================================================
- js_option('--enable-new-regexp', default=False, help='Enable new regexp engine')
- @depends('--enable-new-regexp')
- def enable_new_regexp(value):
- if value:
- return True
- set_config('JS_NEW_REGEXP', enable_new_regexp)
- set_define('JS_NEW_REGEXP', enable_new_regexp)
|