blob: 9d34684ab0fe2dcb2eed436ade3eb52908d31a65 [file] [log] [blame]
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Generate IDL bindings for modules, plus aggregate bindings files.
#
# Design doc: http://www.chromium.org/developers/design-documents/idl-build
{
'includes': [
# ../../.. == Source
'../../../bindings/bindings.gypi',
'../../../bindings/modules/idl.gypi',
'../../../bindings/modules/modules.gypi',
'../../../bindings/scripts/scripts.gypi',
# Need to know core idl files list to generate parital interfaces
# defined in modules.
'../../../core/core.gypi',
'../../../modules/modules.gypi',
'generated.gypi',
],
'targets': [
################################################################################
{
'target_name': 'bindings_modules_v8_generated_individual',
'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': [
'../../core/generated.gyp:core_global_constructors_idls',
'../generated.gyp:modules_global_constructors_idls',
'../generated.gyp:interfaces_info',
'<(bindings_scripts_dir)/scripts.gyp:cached_jinja_templates',
'<(bindings_scripts_dir)/scripts.gyp:cached_lex_yacc_tables',
],
'sources': [
'<@(modules_interface_idl_files)',
],
'rules': [{
'rule_name': 'binding',
'extension': 'idl',
'msvs_external_rule': 1,
'inputs': [
'<@(idl_lexer_parser_files)', # to be explicit (covered by parsetab)
'<@(idl_cache_files)',
'<@(idl_compiler_files)',
'<(bindings_dir)/IDLExtendedAttributes.txt',
# If the dependency structure or public interface info (e.g.,
# [ImplementedAs]) changes, we rebuild all files, since we're not
# computing dependencies file-by-file in the build.
# This data is generally stable.
'<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
# Further, if any dependency (partial interface or implemented
# interface) changes, rebuild everything, since every IDL potentially
# depends on them, because we're not computing dependencies
# file-by-file.
# FIXME: This is too conservative, and causes excess rebuilds:
# compute this file-by-file. http://crbug.com/341748
'<@(all_dependency_idl_files)',
],
'outputs': [
'<(bindings_modules_v8_output_dir)/V8<(RULE_INPUT_ROOT).cpp',
'<(bindings_modules_v8_output_dir)/V8<(RULE_INPUT_ROOT).h',
],
# sanitize-win-build-log.sed uses a regex which matches this command
# line (Python script + .idl file being processed).
# Update that regex if command line changes (other than changing flags)
'action': [
'python',
'<(bindings_scripts_dir)/idl_compiler.py',
'--cache-dir',
'<(bindings_scripts_output_dir)',
'--output-dir',
'<(bindings_modules_v8_output_dir)',
'--interfaces-info',
'<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
'--write-file-only-if-changed',
'<(write_file_only_if_changed)',
'<(RULE_INPUT_PATH)',
],
'message': 'Generating binding from <(RULE_INPUT_PATH)',
}],
},
################################################################################
{
'target_name': 'bindings_modules_v8_generated_aggregate',
'type': 'none',
'actions': [{
'action_name': 'generate_aggregate_bindings_modules_v8',
'inputs': [
'<(bindings_scripts_dir)/aggregate_generated_bindings.py',
'<(modules_idl_files_list)',
],
'outputs': [
'<@(bindings_modules_v8_generated_aggregate_files)',
],
'action': [
'python',
'<(bindings_scripts_dir)/aggregate_generated_bindings.py',
'modules',
'<(modules_idl_files_list)',
'--',
'<@(bindings_modules_v8_generated_aggregate_files)',
],
'message': 'Generating aggregate generated modules V8 bindings files',
}],
},
################################################################################
{
# GN version: //third_party/WebKit/Source/bindings/modules/v8:bindings_modules_impl_generated
# http://crbug.com/358074; See comments on
# 'bindings_core_v8_generated_individual' target
'target_name': 'bindings_modules_impl_generated',
'type': 'none',
'hard_dependency': 1,
'dependencies': [
'<(bindings_scripts_dir)/scripts.gyp:cached_jinja_templates',
'<(bindings_scripts_dir)/scripts.gyp:cached_lex_yacc_tables',
'../../modules/generated.gyp:interfaces_info',
'../../modules/generated.gyp:interfaces_info_individual_modules',
],
'sources': [
'<@(modules_dictionary_idl_files)',
],
'actions': [{
'action_name': 'idl_dictionary',
# See comment on bindings_core_impl_generated
'explicit_idl_action': 1,
'msvs_cygwin_shell': 0,
'inputs': [
'<@(modules_dictionary_idl_files)',
'<@(idl_lexer_parser_files)',
'<@(idl_cache_files)',
'<@(idl_compiler_files)',
'<(bindings_dir)/IDLExtendedAttributes.txt',
'<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
'<(bindings_modules_output_dir)/ComponentInfoModules.pickle',
],
'outputs': [
'<@(bindings_modules_v8_generated_union_type_files)',
'<@(generated_modules_dictionary_files)',
],
'action': [
'python',
'<(bindings_scripts_dir)/idl_compiler.py',
'--cache-dir',
'<(bindings_scripts_output_dir)',
'--output-dir',
'<(bindings_modules_v8_output_dir)',
'--impl-output-dir',
'<(SHARED_INTERMEDIATE_DIR)/blink/',
'--interfaces-info',
'<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
'--component-info',
'<(bindings_modules_output_dir)/ComponentInfoModules.pickle',
'--target-component',
'modules',
'--write-file-only-if-changed',
'<(write_file_only_if_changed)',
'--generate-impl',
'<(modules_dictionary_idl_files_list)',
],
'message': 'Generating modules IDL dictionary impl classes',
}],
},
################################################################################
{
'target_name': 'bindings_modules_v8_generated_partial_individual',
'type': 'none',
# The 'partial_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': [
'../../core/generated.gyp:core_global_constructors_idls',
'../generated.gyp:modules_global_constructors_idls',
'../generated.gyp:interfaces_info',
'<(bindings_scripts_dir)/scripts.gyp:cached_jinja_templates',
'<(bindings_scripts_dir)/scripts.gyp:cached_lex_yacc_tables',
],
# We need to generate partial interface code for normal modules and also for testing.
# i.e. parital interface Internals.
'sources': [
'<@(core_idl_with_modules_dependency_files)',
'<@(webcore_testing_idl_with_modules_dependency_files)',
],
'rules': [{
'rule_name': 'partial_binding',
'extension': 'idl',
'msvs_external_rule': 1,
'inputs': [
'<@(idl_lexer_parser_files)', # to be explicit (covered by parsetab)
'<@(idl_compiler_files)',
'<(bindings_scripts_output_dir)/lextab.py',
'<(bindings_scripts_output_dir)/parsetab.pickle',
'<(bindings_scripts_output_dir)/cached_jinja_templates.stamp',
'<(bindings_dir)/IDLExtendedAttributes.txt',
# If the dependency structure or public interface info (e.g.,
# [ImplementedAs]) changes, we rebuild all files, since we're not
# computing dependencies file-by-file in the build.
# This data is generally stable.
'<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
# Further, if any dependency (partial interface or implemented
# interface) changes, rebuild everything, since every IDL potentially
# depends on them, because we're not computing dependencies
# file-by-file.
# FIXME: This is too conservative, and causes excess rebuilds:
# compute this file-by-file. http://crbug.com/341748
'<@(all_dependency_idl_files)',
'<@(webcore_testing_idl_files)',
],
'outputs': [
'<(bindings_modules_v8_output_dir)/V8<(RULE_INPUT_ROOT)Partial.cpp',
'<(bindings_modules_v8_output_dir)/V8<(RULE_INPUT_ROOT)Partial.h',
],
# sanitize-win-build-log.sed uses a regex which matches this command
# line (Python script + .idl file being processed).
# Update that regex if command line changes (other than changing flags)
'action': [
'python',
'<(bindings_scripts_dir)/idl_compiler.py',
'--cache-dir',
'<(bindings_scripts_output_dir)',
'--output-dir',
'<(bindings_modules_v8_output_dir)',
'--interfaces-info',
'<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
'--write-file-only-if-changed',
'<(write_file_only_if_changed)',
'--target-component',
'modules',
'<(RULE_INPUT_PATH)',
],
'message': 'Generating partial binding from <(RULE_INPUT_PATH)',
}],
},
################################################################################
{
'target_name': 'bindings_modules_v8_generated_partial_aggregate',
'type': 'none',
'actions': [{
'action_name': 'generate_aggregate_bindings_modules_v8_partial',
'inputs': [
'<(bindings_scripts_dir)/aggregate_generated_bindings.py',
'<(core_idl_with_modules_dependency_files_list)',
],
'outputs': [
'<@(bindings_modules_v8_generated_partial_aggregate_files)',
],
'action': [
'python',
'<(bindings_scripts_dir)/aggregate_generated_bindings.py',
'modules',
'<(core_idl_with_modules_dependency_files_list)',
'--',
'<@(bindings_modules_v8_generated_partial_aggregate_files)',
],
'message': 'Generating aggregate generated modules V8 partial bindings files',
}],
},
################################################################################
{
'target_name': 'bindings_modules_v8_generated_init_partial',
'type': 'none',
'actions': [{
'action_name': 'generate_bindings_modules_v8_init_partial',
'inputs': [
'<(bindings_scripts_dir)/generate_init_partial_interfaces.py',
'<(core_idl_with_modules_dependency_files_list)',
'<(bindings_modules_output_dir)/InterfacesInfoOverall.pickle',
],
'outputs': [
'<(bindings_modules_v8_output_dir)/initPartialInterfacesInModules.cpp',
],
'action': [
'python',
'<(bindings_scripts_dir)/generate_init_partial_interfaces.py',
'--idl-files-list',
'<(core_idl_with_modules_dependency_files_list)',
'--output',
'<(bindings_modules_v8_output_dir)/initPartialInterfacesInModules.cpp',
'--write-file-only-if-changed',
'<(write_file_only_if_changed)',
],
}],
},
################################################################################
{
'target_name': 'bindings_modules_v8_generated',
'type': 'none',
'dependencies': [
'bindings_modules_impl_generated',
'bindings_modules_v8_generated_aggregate',
'bindings_modules_v8_generated_individual',
'bindings_modules_v8_generated_init_partial',
'bindings_modules_v8_generated_partial_aggregate',
'bindings_modules_v8_generated_partial_individual',
],
},
################################################################################
], # targets
}