# # Copyright (C) 2013 Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following disclaimer # in the documentation and/or other materials provided with the # distribution. # * Neither the name of Google Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # { 'includes': [ '../build/scripts/scripts.gypi', '../build/win/precompile.gypi', '../build/scripts/scripts.gypi', '../core/core.gypi', '../modules/modules.gypi', 'bindings.gypi', ], 'variables': { 'main_idl_files': [ '<@(core_idl_files)', '<@(modules_idl_files)', '<@(svg_idl_files)', ], 'support_idl_files': [ '<@(webcore_testing_support_idl_files)', '<@(modules_testing_support_idl_files)', ], 'generated_support_idl_files': [ '<@(generated_webcore_testing_support_idl_files)', ], 'compiler_module_files': [ 'scripts/idl_compiler.py', '<(DEPTH)/third_party/ply/lex.py', '<(DEPTH)/third_party/ply/yacc.py', # jinja2/__init__.py contains version string, so sufficient for package '<(DEPTH)/third_party/jinja2/__init__.py', '<(DEPTH)/third_party/markupsafe/__init__.py', # jinja2 dep '<(DEPTH)/tools/idl_parser/idl_lexer.py', '<(DEPTH)/tools/idl_parser/idl_node.py', '<(DEPTH)/tools/idl_parser/idl_parser.py', 'scripts/blink_idl_lexer.py', 'scripts/blink_idl_parser.py', 'scripts/code_generator_v8.py', 'scripts/idl_definitions.py', 'scripts/idl_definitions_builder.py', 'scripts/idl_reader.py', 'scripts/idl_validator.py', 'scripts/interface_dependency_resolver.py', 'scripts/v8_attributes.py', 'scripts/v8_callback_interface.py', 'scripts/v8_interface.py', 'scripts/v8_types.py', 'scripts/v8_utilities.py', ], 'code_generator_template_files': [ 'templates/attributes.cpp', 'templates/callback_interface.cpp', 'templates/callback_interface.h', 'templates/interface_base.cpp', 'templates/interface.cpp', 'templates/interface.h', ], 'bindings_output_dir': '<(SHARED_INTERMEDIATE_DIR)/blink/bindings', 'generated_global_constructors_idl_files': [ '<(SHARED_INTERMEDIATE_DIR)/blink/WindowConstructors.idl', '<(SHARED_INTERMEDIATE_DIR)/blink/WorkerGlobalScopeConstructors.idl', '<(SHARED_INTERMEDIATE_DIR)/blink/SharedWorkerGlobalScopeConstructors.idl', '<(SHARED_INTERMEDIATE_DIR)/blink/DedicatedWorkerGlobalScopeConstructors.idl', '<(SHARED_INTERMEDIATE_DIR)/ServiceWorkerGlobalScopeConstructors.idl', ], 'conditions': [ ['OS=="win" and buildtype=="Official"', { # On windows official release builds, we try to preserve symbol space. 'derived_sources_aggregate_files': [ '<(bindings_output_dir)/V8DerivedSourcesAll.cpp', ], },{ 'derived_sources_aggregate_files': [ '<(bindings_output_dir)/V8DerivedSources01.cpp', '<(bindings_output_dir)/V8DerivedSources02.cpp', '<(bindings_output_dir)/V8DerivedSources03.cpp', '<(bindings_output_dir)/V8DerivedSources04.cpp', '<(bindings_output_dir)/V8DerivedSources05.cpp', '<(bindings_output_dir)/V8DerivedSources06.cpp', '<(bindings_output_dir)/V8DerivedSources07.cpp', '<(bindings_output_dir)/V8DerivedSources08.cpp', '<(bindings_output_dir)/V8DerivedSources09.cpp', '<(bindings_output_dir)/V8DerivedSources10.cpp', '<(bindings_output_dir)/V8DerivedSources11.cpp', '<(bindings_output_dir)/V8DerivedSources12.cpp', '<(bindings_output_dir)/V8DerivedSources13.cpp', '<(bindings_output_dir)/V8DerivedSources14.cpp', '<(bindings_output_dir)/V8DerivedSources15.cpp', '<(bindings_output_dir)/V8DerivedSources16.cpp', '<(bindings_output_dir)/V8DerivedSources17.cpp', '<(bindings_output_dir)/V8DerivedSources18.cpp', '<(bindings_output_dir)/V8DerivedSources19.cpp', ], }], # The bindings generator can not write generated files if they are identical # to the already existing file – that way they don't need to be recompiled. # However, a reverse dependency having a newer timestamp than a # generated binding can confuse some build systems, so only use this on # ninja which explicitly supports this use case (gyp turns all actions into # ninja restat rules). ['"<(GENERATOR)"=="ninja"', { 'write_file_only_if_changed': '--write-file-only-if-changed 1', },{ 'write_file_only_if_changed': '--write-file-only-if-changed 0', }], ], }, 'target_defaults': { 'variables': { 'optimize': 'max', }, }, 'targets': [{ 'target_name': 'interface_dependencies', 'type': 'none', 'actions': [{ 'action_name': 'compute_interface_dependencies', 'variables': { # Write sources into a file, so that the action command line won't # exceed OS limits. 'main_idl_files_list': '<|(main_idl_files_list.tmp <@(main_idl_files))', 'support_idl_files_list': '<|(support_idl_files_list.tmp <@(support_idl_files))', }, 'inputs': [ 'scripts/compute_dependencies.py', '<(main_idl_files_list)', '<@(main_idl_files)', '<(support_idl_files_list)', '<@(support_idl_files)', ], 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/blink/InterfaceDependencies.txt', '<(SHARED_INTERMEDIATE_DIR)/blink/BindingsDerivedSources.txt', '<@(generated_global_constructors_idl_files)', '<(SHARED_INTERMEDIATE_DIR)/blink/EventInterfaces.in', ], 'msvs_cygwin_shell': 0, 'action': [ 'python', 'scripts/compute_dependencies.py', '--main-idl-files-list', '<(main_idl_files_list)', '--support-idl-files-list', '<(support_idl_files_list)', '--interface-dependencies-file', '<(SHARED_INTERMEDIATE_DIR)/blink/InterfaceDependencies.txt', '--bindings-derived-sources-file', '<(SHARED_INTERMEDIATE_DIR)/blink/BindingsDerivedSources.txt', '--window-constructors-file', '<(SHARED_INTERMEDIATE_DIR)/blink/WindowConstructors.idl', '--workerglobalscope-constructors-file', '<(SHARED_INTERMEDIATE_DIR)/blink/WorkerGlobalScopeConstructors.idl', '--sharedworkerglobalscope-constructors-file', '<(SHARED_INTERMEDIATE_DIR)/blink/SharedWorkerGlobalScopeConstructors.idl', '--dedicatedworkerglobalscope-constructors-file', '<(SHARED_INTERMEDIATE_DIR)/blink/DedicatedWorkerGlobalScopeConstructors.idl', '--serviceworkerglobalscope-constructors-file', '<(SHARED_INTERMEDIATE_DIR)/ServiceWorkerGlobalScopeConstructors.idl', '--event-names-file', '<(SHARED_INTERMEDIATE_DIR)/blink/EventInterfaces.in', '<@(write_file_only_if_changed)', ], 'message': 'Resolving partial interfaces dependencies in all IDL files', }] }, { 'target_name': 'bindings_sources', 'type': 'none', # The 'binding' rule generates .h files, so mark as hard_dependency, per: # https://code.google.com/p/gyp/wiki/InputFormatReference#Linking_Dependencies 'hard_dependency': 1, 'dependencies': [ 'interface_dependencies', '../config.gyp:config', '../core/core_derived_sources.gyp:generate_test_support_idls', ], 'sources': [ '<@(main_idl_files)', '<@(support_idl_files)', '<@(generated_support_idl_files)', ], 'rules': [{ 'rule_name': 'binding', 'extension': 'idl', 'msvs_external_rule': 1, 'inputs': [ 'scripts/generate_bindings.pl', 'scripts/code_generator_v8.pm', 'scripts/idl_parser.pm', 'scripts/idl_serializer.pm', '../build/scripts/preprocessor.pm', 'IDLExtendedAttributes.txt', # FIXME: If the dependency structure changes, we rebuild all files, # since we're not computing dependencies file-by-file in the build. '<(SHARED_INTERMEDIATE_DIR)/blink/InterfaceDependencies.txt', # FIXME: Similarly, if any partial interface changes, rebuild # everything, since every IDL potentially depends on them, because # we're not computing dependencies file-by-file. # # If a new partial interface is added, need to regyp to update these # dependencies, as these are computed statically at gyp runtime. '