forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			268 lines
		
	
	
	
		
			8.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			268 lines
		
	
	
	
		
			8.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- 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)
 | |
| set_define('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)
 | |
| 
 | |
| @depends(milestone, '--help')
 | |
| def enable_profiling(milestone, help):
 | |
|     return milestone.is_nightly
 | |
| 
 | |
| js_option('--enable-profiling', env='MOZ_PROFILING', default=enable_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):
 | |
|     ok_cpu    = target.cpu in ['x86', 'x86_64']
 | |
|     ok_kernel = target.kernel == 'WINNT' or \
 | |
|                 (target.kernel == 'Linux' and target.os == 'GNU')
 | |
| 
 | |
|     if value and ok_cpu and ok_kernel:
 | |
|         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'):
 | |
|     js_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)
 | |
| 
 | |
| # Enable pipeline operator
 | |
| # ===================================================
 | |
| js_option('--enable-pipeline-operator', default=False, help='Enable pipeline operator')
 | |
| 
 | |
| @depends('--enable-pipeline-operator')
 | |
| def enable_pipeline_operator(value):
 | |
|     if value:
 | |
|         return True
 | |
| 
 | |
| set_config('ENABLE_PIPELINE_OPERATOR', enable_pipeline_operator)
 | |
| set_define('ENABLE_PIPELINE_OPERATOR', enable_pipeline_operator)
 | 
