| # Copyright 2021 The Cobalt Authors. 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. |
| |
| import("//cobalt/bindings/bindings_templates.gni") |
| import("//cobalt/browser/browser_bindings_variables.gni") |
| import("//cobalt/browser/idl_files.gni") |
| |
| config("bindings_includes") { |
| include_dirs = [ generated_source_output_dir ] |
| } |
| |
| # TODO: h5vcc and webdriver depend on targets in this file. |
| # group("bindings") { |
| # deps = [ |
| # "//cobalt/h5vcc", |
| # "//cobalt/webdriver", |
| # ":generated_bindings", |
| # ] |
| # all_dependent_configs = [ ":bindings_includes" ] |
| # } |
| |
| idl_compile("generated_bindings") { |
| sources = source_idl_files |
| |
| cache_directory = bindings_scripts_output_dir |
| component_info = component_info_pickle |
| extended_attributes = extended_attributes_file |
| interfaces_info = interfaces_info_combined_pickle |
| output_directory = generated_source_output_dir |
| |
| deps = [ |
| ":cached_jinja_templates", |
| ":cached_lex_yacc_tables", |
| ":generated_type_conversion", |
| ":generated_types", |
| ":global_constructors_idls", |
| ":interfaces_info_individual", |
| ":interfaces_info_overall", |
| "//cobalt/script:engine", |
| ] |
| public_deps = engine_dependencies |
| |
| public_configs = [ ":bindings_includes" ] |
| |
| generated_file_path = |
| "$generated_source_output_dir/{{source_root_relative_dir}}" |
| generated_file_name = "${generated_bindings_prefix}_{{source_name_part}}" |
| outputs = [ |
| "$generated_file_path/$generated_file_name.h", |
| "$generated_file_path/$generated_file_name.cc", |
| ] |
| } |
| |
| idl_compile("generated_types") { |
| sources = generated_header_idl_files |
| |
| cache_directory = bindings_scripts_output_dir |
| component_info = component_info_pickle |
| extended_attributes = extended_attributes_file |
| interfaces_info = interfaces_info_combined_pickle |
| output_directory = generated_source_output_dir |
| |
| deps = [ |
| ":cached_jinja_templates", |
| ":cached_lex_yacc_tables", |
| ":global_constructors_idls", |
| ":interfaces_info_individual", |
| ":interfaces_info_overall", |
| ] |
| |
| public_configs = [ ":bindings_includes" ] |
| |
| generated_file_path = |
| "$generated_source_output_dir/{{source_root_relative_dir}}" |
| outputs = [ |
| "$generated_file_path/${generated_bindings_prefix}_{{source_name_part}}.h", |
| "$generated_file_path/{{source_name_part}}.cc", |
| ] |
| } |
| |
| action("generated_type_conversion") { |
| script = "//starboard/build/run_bash.py" |
| py_script = engine_conversion_header_generator_script |
| |
| deps = [ |
| ":cached_jinja_templates", |
| ":cached_lex_yacc_tables", |
| ":global_constructors_idls", |
| ":interfaces_info_overall", |
| ] |
| |
| public_deps = engine_dependencies |
| |
| sources = source_idl_files + generated_header_idl_files |
| |
| # Generated IDL file that will define all the constructors that should be |
| # on the Window object. |
| global_names_idl_file = |
| "$generated_idls_output_dir/dom/window_constructors.idl" |
| inputs = [ |
| py_script, |
| interfaces_info_combined_pickle, |
| extended_attributes_file, |
| global_names_idl_file, |
| "//cobalt/bindings/shared/idl_conditional_macros.h", |
| ] |
| inputs += bindings_extra_inputs |
| |
| outputs = [ generated_type_conversion_header_file ] |
| |
| args = [ |
| "python2", |
| rebase_path(py_script, root_build_dir), |
| "--cache-directory", |
| rebase_path(bindings_scripts_output_dir, root_build_dir), |
| "--output-dir", |
| rebase_path(generated_source_output_dir, root_build_dir), |
| "--interfaces-info", |
| rebase_path(interfaces_info_combined_pickle, root_build_dir), |
| "--component-info", |
| rebase_path(component_info_pickle, root_build_dir), |
| ] |
| } |
| |
| compute_global_objects("global_objects") { |
| idl_files = source_idl_files + generated_header_idl_files |
| |
| global_objects_file = global_objects_pickle |
| } |
| |
| compute_global_constructors_idls("global_constructors_idls") { |
| idl_files = source_idl_files |
| |
| global_objects_file = global_objects_pickle |
| |
| # Generated IDL file that will define all the constructors that should be |
| # on the Window object. |
| global_names_idl_file = |
| "$generated_idls_output_dir/dom/window_constructors.idl" |
| |
| # Dummy header file which is generated because the idl compiler assumes |
| # there is a header for each IDL. |
| global_constructors_generated_header_file = |
| "$generated_idls_output_dir/dom/window_constructors.h" |
| |
| deps = [ ":global_objects" ] |
| } |
| |
| compute_interfaces_info_individual("interfaces_info_individual") { |
| idl_files = |
| source_idl_files + generated_header_idl_files + dependency_idl_files |
| |
| # Generated IDL file that will define all the constructors that should be |
| # on the Window object. |
| generated_idl_files = "$generated_idls_output_dir/dom/window_constructors.idl" |
| component_info_file = component_info_pickle |
| interfaces_info_file = interfaces_info_individual_pickle |
| cache_directory = bindings_scripts_output_dir |
| extended_attributes = extended_attributes_file |
| |
| deps = [ |
| ":cached_lex_yacc_tables", |
| ":global_constructors_idls", |
| ] |
| } |
| |
| action("interfaces_info_overall") { |
| script = "//starboard/build/run_bash.py" |
| py_script = "$bindings_scripts_dir/compute_interfaces_info_overall.py" |
| |
| deps = [ ":interfaces_info_individual" ] |
| |
| inputs = [ |
| py_script, |
| interfaces_info_individual_pickle, |
| ] |
| |
| outputs = [ interfaces_info_combined_pickle ] |
| |
| args = [ |
| "python2", |
| rebase_path(py_script, root_build_dir), |
| "--", |
| rebase_path(interfaces_info_individual_pickle, root_build_dir), |
| rebase_path(interfaces_info_combined_pickle, root_build_dir), |
| ] |
| } |
| |
| action("cached_lex_yacc_tables") { |
| script = "//starboard/build/run_bash.py" |
| py_script = "$bindings_scripts_dir/blink_idl_parser.py" |
| |
| inputs = [ py_script ] |
| inputs += idl_lexer_parser_files |
| |
| outputs = [ |
| "$bindings_scripts_output_dir/lextab.py", |
| "$bindings_scripts_output_dir/parsetab.pickle", |
| ] |
| |
| args = [ |
| "python2", |
| rebase_path(py_script, root_build_dir), |
| rebase_path(bindings_scripts_output_dir, root_build_dir), |
| ] |
| } |
| |
| action("cached_jinja_templates") { |
| script = "//starboard/build/run_bash.py" |
| py_script = "//cobalt/bindings/code_generator_cobalt.py" |
| |
| inputs = [ |
| py_script, |
| "//cobalt/bindings/path_generator.py", |
| "//third_party/jinja2/__init__.py", |
| "//third_party/markupsafe/__init__.py", # jinja2 dep |
| ] |
| inputs += code_generator_template_files |
| |
| # TODO: Figure out a way to list the actual outputs instead |
| # Dummy to track dependency |
| outputs = [ "$bindings_scripts_output_dir/cached_jinja_templates.stamp" ] |
| |
| args = [ |
| "python2", |
| rebase_path(py_script, root_build_dir), |
| rebase_path("$bindings_scripts_output_dir", root_build_dir), |
| rebase_path("$engine_templates_dir", root_build_dir), |
| rebase_path("$bindings_scripts_output_dir/cached_jinja_templates.stamp", |
| root_build_dir), |
| ] |
| } |