| # |
| # 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', |
| ], |
| |
| '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', |
| '--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', |
| '../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', |
| 'scripts/IDLAttributes.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. |
| '<!@pymod_do_main(list_idl_files_with_partial_interface <@(main_idl_files) <@(support_idl_files))', |
| # Generated IDLs are all partial interfaces, hence everything |
| # potentially depends on them. |
| '<@(generated_global_constructors_idl_files)', |
| ], |
| 'outputs': [ |
| '<(bindings_output_dir)/V8<(RULE_INPUT_ROOT).cpp', |
| '<(bindings_output_dir)/V8<(RULE_INPUT_ROOT).h', |
| ], |
| 'variables': { |
| # IDL include paths. The generator will search recursively for IDL |
| # files under these locations. |
| 'generator_include_dirs': [ |
| '--include', '../core', |
| '--include', '../modules', |
| '--include', '<(SHARED_INTERMEDIATE_DIR)/blink', |
| ], |
| # Hook for embedders to specify extra directories to find IDL files. |
| 'extra_blink_generator_include_dirs%': [], |
| }, |
| 'msvs_cygwin_shell': 0, |
| # sanitize-win-build-log.sed uses a regex which matches this command |
| # line (Perl script + .idl file being processed). |
| # Update that regex if command line changes (other than changing flags) |
| 'action': [ |
| '<(perl_exe)', |
| '-w', |
| '-Iscripts', |
| '-I../build/scripts', |
| '-I<(DEPTH)/third_party/JSON/out/lib/perl5', |
| 'scripts/generate_bindings.pl', |
| '--outputDir', |
| '<(bindings_output_dir)', |
| '--idlAttributesFile', |
| 'scripts/IDLAttributes.txt', |
| '<@(generator_include_dirs)', |
| '<@(extra_blink_generator_include_dirs)', |
| '--interfaceDependenciesFile', |
| '<(SHARED_INTERMEDIATE_DIR)/blink/InterfaceDependencies.txt', |
| '--additionalIdlFiles', |
| # Generated IDL files aren't listed in InterfaceDependencies.txt, |
| # b/c they aren't available at GYP run time, so we need to sort them |
| # manually, depending on whether they are (main) interface files, |
| # for which we generate bindings, or dependencies, for which we don't. |
| # generated_support_idl_files are main interfaces, so generate |
| # bindings, but generated_global_constructors_idl_files are all |
| # partial interfaces, so don't (b/c generated by dependents). |
| '<(generated_support_idl_files)', |
| '<@(preprocessor)', |
| '<@(write_file_only_if_changed)', |
| '<(RULE_INPUT_PATH)', |
| ], |
| 'message': 'Generating binding from <(RULE_INPUT_PATH)', |
| }], |
| }, |
| { |
| 'target_name': 'bindings_derived_sources', |
| 'type': 'none', |
| 'dependencies': [ |
| 'interface_dependencies', |
| 'bindings_sources', |
| ], |
| 'actions': [{ |
| 'action_name': 'derived_sources_all_in_one', |
| 'inputs': [ |
| '../build/scripts/action_derivedsourcesallinone.py', |
| '<(SHARED_INTERMEDIATE_DIR)/blink/BindingsDerivedSources.txt', |
| ], |
| 'outputs': [ |
| '<@(derived_sources_aggregate_files)', |
| ], |
| 'action': [ |
| 'python', |
| '../build/scripts/action_derivedsourcesallinone.py', |
| '<(SHARED_INTERMEDIATE_DIR)/blink/BindingsDerivedSources.txt', |
| '--', |
| '<@(derived_sources_aggregate_files)', |
| ], |
| 'message': 'Generating bindings derived sources', |
| }], |
| }, |
| ], |
| } |