blob: c64603248fa74a201f31d266dd58455436b91f0b [file] [log] [blame]
# Copyright 2016 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
{
'includes': [
'mozjs.gypi',
],
'variables': {
'common_jit_defines': [
'ENABLE_JIT=1',
'ENABLE_YARR_JIT=1',
'JS_ION=1',
'JS_METHODJIT=1',
'JS_METHODJIT_TYPED_ARRAY=1',
],
},
'target_defaults': {
'defines': [
# This makes it so the embedded JavaScript that is generated in the
# CreateEmbeddedJS action is compressed.
'USE_ZLIB',
# Do not use the default js_xxx allocator function implementations, but
# include "jscustomallocator.h", which should implement them.
'JS_USE_CUSTOM_ALLOCATOR',
# Do not export symbols that are declare with JS_PUBLIC_[API|DATA].
'STATIC_JS_API',
],
'include_dirs': [
'cobalt_config/include',
'js/src',
'js/src/assembler',
'mfbt/double-conversion',
'<(DEPTH)/third_party/icu/public/common',
'<(generated_include_directory)',
],
'conditions': [
[ 'target_arch == "x64"', {
'defines': [
'JS_CPU_X64=1',
'JS_PUNBOX64=1',
],
}],
[ 'target_arch == "x86"', {
'defines': [
'JS_CPU_X86=1',
'JS_NUNBOX32=1',
],
}],
[ 'target_arch == "arm"', {
'defines': [
'JS_CPU_ARM=1',
'JS_NUNBOX32=1',
],
}],
[ 'cobalt_enable_jit == 1', {
'defines': [
'<@(common_jit_defines)',
],
}],
[ 'use_asan == 1', {
'defines': [
'MOZ_ASAN',
],
}],
],
},
'targets': [
{
# The SpiderMonkey library.
'target_name': 'mozjs_lib',
'type': 'static_library',
'sources': [ '<@(mozjs_sources)' ],
'defines': [
# Enable incremental garbage collection.
'JSGC_INCREMENTAL=1',
# See vm/Probes.h for different values. This was the value set by the
# configure script when building for linux-release.
'JS_DEFAULT_JITREPORT_GRANULARITY=3',
# Set this to enable the ECMAScript Internationalization API. Consider
# doing this after upgrading to a more recent version of ICU, since
# Cobalt's is older than the one SpiderMonkey needs for this.
# 'ENABLE_INTL_API=1',
],
'cflags' : [
'-Wno-invalid-offsetof',
'-Wno-uninitialized',
'-Wno-unused',
'-include',
'js-confdefs.h',
],
'conditions': [
[ 'target_arch == "x64" and cobalt_enable_jit == 1', {
'sources': [
'js/src/assembler/assembler/MacroAssemblerX86Common.cpp',
'js/src/jit/shared/Assembler-x86-shared.cpp',
'js/src/jit/shared/BaselineCompiler-x86-shared.cpp',
'js/src/jit/shared/BaselineIC-x86-shared.cpp',
'js/src/jit/shared/CodeGenerator-x86-shared.cpp',
'js/src/jit/shared/IonFrames-x86-shared.cpp',
'js/src/jit/shared/Lowering-x86-shared.cpp',
'js/src/jit/shared/MoveEmitter-x86-shared.cpp',
'js/src/jit/x64/Assembler-x64.cpp',
'js/src/jit/x64/Bailouts-x64.cpp',
'js/src/jit/x64/BaselineCompiler-x64.cpp',
'js/src/jit/x64/BaselineIC-x64.cpp',
'js/src/jit/x64/CodeGenerator-x64.cpp',
'js/src/jit/x64/Lowering-x64.cpp',
'js/src/jit/x64/MacroAssembler-x64.cpp',
'js/src/jit/x64/Trampoline-x64.cpp',
'<@(mozjs_jit_sources)',
],
}],
[ 'target_arch == "x86" and cobalt_enable_jit == 1', {
'sources': [
'js/src/assembler/assembler/MacroAssemblerX86Common.cpp',
'js/src/jit/shared/Assembler-x86-shared.cpp',
'js/src/jit/shared/BaselineCompiler-x86-shared.cpp',
'js/src/jit/shared/BaselineIC-x86-shared.cpp',
'js/src/jit/shared/CodeGenerator-x86-shared.cpp',
'js/src/jit/shared/IonFrames-x86-shared.cpp',
'js/src/jit/shared/Lowering-x86-shared.cpp',
'js/src/jit/shared/MoveEmitter-x86-shared.cpp',
'js/src/jit/x86/Assembler-x86.cpp',
'js/src/jit/x86/Bailouts-x86.cpp',
'js/src/jit/x86/BaselineCompiler-x86.cpp',
'js/src/jit/x86/BaselineIC-x86.cpp',
'js/src/jit/x86/CodeGenerator-x86.cpp',
'js/src/jit/x86/Lowering-x86.cpp',
'js/src/jit/x86/MacroAssembler-x86.cpp',
'js/src/jit/x86/Trampoline-x86.cpp',
'<@(mozjs_jit_sources)',
],
}],
[ 'target_arch == "arm" and cobalt_enable_jit == 1', {
'sources': [
'js/src/assembler/assembler/ARMAssembler.cpp',
'js/src/assembler/assembler/MacroAssemblerARM.cpp',
'js/src/jit/arm/Architecture-arm.cpp',
'js/src/jit/arm/Assembler-arm.cpp',
'js/src/jit/arm/Bailouts-arm.cpp',
'js/src/jit/arm/BaselineCompiler-arm.cpp',
'js/src/jit/arm/BaselineIC-arm.cpp',
'js/src/jit/arm/CodeGenerator-arm.cpp',
'js/src/jit/arm/IonFrames-arm.cpp',
'js/src/jit/arm/Lowering-arm.cpp',
'js/src/jit/arm/MacroAssembler-arm.cpp',
'js/src/jit/arm/MoveEmitter-arm.cpp',
'js/src/jit/arm/Trampoline-arm.cpp',
'<@(mozjs_jit_sources)',
],
}],
],
'dependencies': [
'build_include_directory',
'<(DEPTH)/third_party/icu/icu.gyp:icui18n',
'<(DEPTH)/third_party/zlib/zlib.gyp:zlib',
],
'direct_dependent_settings': {
'include_dirs': [
'cobalt_config/include',
'js/src',
'<(generated_include_directory)',
],
'defines': [
'JS_USE_CUSTOM_ALLOCATOR',
'STATIC_JS_API',
],
'cflags' : [
'-Wno-invalid-offsetof',
'-Wno-uninitialized',
'-Wno-unused',
'-include',
'js-confdefs.h',
],
},
# Mark this target as a hard dependency because targets that depend on
# this one need to wait for the build_include_directory to be generated.
# The more correct things would be to insert that target as a dependency
# in direct_dependent_settings, but it wasn't as straightforward as I'd
# hoped.
'hard_dependency': 1,
},
{
# Command line SpiderMonkey shell.
'target_name': 'mozjs_shell',
'type': '<(final_executable_type)',
'sources': [
'js/src/shell/js.cpp',
'js/src/shell/jsheaptools.cpp',
'js/src/shell/jsoptparse.cpp',
],
'dependencies': [
'mozjs_lib',
'<(DEPTH)/starboard/starboard.gyp:starboard',
'<(DEPTH)/third_party/zlib/zlib.gyp:zlib',
]
},
{
# SpiderMonkey source expects to include files from a certain directory
# structure that is made by copying (or symlinking) the real source files
# into the destination directory structure.
'target_name': 'build_include_directory',
'type': 'none',
'copies': [
{
'destination': '<(generated_include_directory)/mozilla',
'files': [
'mfbt/Assertions.h',
'mfbt/Atomics.h',
'mfbt/Attributes.h',
'mfbt/BloomFilter.h',
'mfbt/Casting.h',
'mfbt/Char16.h',
'mfbt/CheckedInt.h',
'mfbt/Compiler.h',
'mfbt/Constants.h',
'mfbt/DebugOnly.h',
'mfbt/decimal/Decimal.h',
'mfbt/Endian.h',
'mfbt/EnumSet.h',
'mfbt/FloatingPoint.h',
'mfbt/GuardObjects.h',
'mfbt/HashFunctions.h',
'mfbt/Likely.h',
'mfbt/LinkedList.h',
'mfbt/MathAlgorithms.h',
'mfbt/MemoryChecking.h',
'mfbt/MSStdInt.h',
'mfbt/NullPtr.h',
'mfbt/PodOperations.h',
'mfbt/Poison.h',
'mfbt/Range.h',
'mfbt/RangedPtr.h',
'mfbt/RefPtr.h',
'mfbt/Scoped.h',
'mfbt/SHA1.h',
'mfbt/SplayTree.h',
'mfbt/StandardInteger.h',
'mfbt/ThreadLocal.h',
'mfbt/TypedEnum.h',
'mfbt/Types.h',
'mfbt/TypeTraits.h',
'mfbt/Util.h',
'mfbt/WeakPtr.h',
],
},
{
'destination': '<(generated_include_directory)/js',
'files': [
'js/public/Anchor.h',
'js/public/CallArgs.h',
'js/public/CharacterEncoding.h',
'js/public/Date.h',
'js/public/GCAPI.h',
'js/public/HashTable.h',
'js/public/HeapAPI.h',
'js/public/LegacyIntTypes.h',
'js/public/MemoryMetrics.h',
'js/public/PropertyKey.h',
'js/public/RequiredDefines.h',
'js/public/RootingAPI.h',
'js/public/TemplateLib.h',
'js/public/Utility.h',
'js/public/Value.h',
'js/public/Vector.h',
],
},
{
'destination': '<(generated_include_directory)',
'files': [
'js/src/perf/jsperf.h',
],
},
],
'dependencies': [
'generated_headers',
],
'hard_dependency': 1,
},
{
'target_name': 'generated_headers',
'type': 'none',
'actions': [
{
# Embed JavaScript source into a header file.
'action_name': 'CreateEmbeddedJS',
'inputs': [ '<@(embedded_js_sources)', 'js/src/js.msg'],
'outputs': [
'<(embedded_js_file)',
'<(embedded_js_header)',
],
'action': [
'python',
'js/src/builtin/embedjs.py',
'-DUSE_ZLIB',
'-p',
'<(CC) -E',
'-m',
'js/src/js.msg',
'-o',
'<(embedded_js_header)',
'-s',
'<(embedded_js_file)',
'<@(embedded_js_sources)'
],
},
{
'action_name': 'CreateKeywordHeader',
'inputs': [],
'outputs': [ '<(generated_keyword_header)' ],
'action': [
'<(PRODUCT_DIR)/mozjs_keyword_header_gen',
'<(generated_keyword_header)',
],
},
{
'action_name': 'CreateOpcodeLengthHeader',
'inputs': [],
'outputs': [ '<(generated_opcode_length_header)' ],
'action': [
'<(PRODUCT_DIR)/mozjs_opcode_length_header_gen',
'<(generated_opcode_length_header)',
],
},
],
'dependencies': [
'mozjs_keyword_header_gen#host',
'mozjs_opcode_length_header_gen#host'
],
'hard_dependency': 1,
},
{
# Host tool used to generate a header file that defines a huge switch
# statement for JavaScript keywords.
'target_name': 'mozjs_keyword_header_gen',
'type': '<(final_executable_type)',
'toolsets': ['host'],
'sources': [
'js/src/jskwgen.cpp',
],
'hard_dependency': 1,
},
{
# Host tool used to generate a header file that defines opcode lengths.
'target_name': 'mozjs_opcode_length_header_gen',
'type': '<(final_executable_type)',
'toolsets': ['host'],
'sources': [
'js/src/jsoplengen.cpp',
],
'hard_dependency': 1,
},
]
}