blob: 12f18adde7b92e58a25fb9298e43a452f033a338 [file] [log] [blame]
# 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/blink_variables.gni")
import("//cobalt/script/v8c/v8c_variables.gni")
# The allowlist of what extended attributes we support. If an attribute
# not in this list is encountered, it will cause an error in the
# pipeline.
_extended_attributes_file = "//cobalt/bindings/IDLExtendedAttributes.txt"
# Additional files used by the idl compilation scripts.
_bindings_extra_inputs = [
"//cobalt/bindings/code_generator_cobalt.py",
"//cobalt/bindings/expression_generator.py",
"//cobalt/bindings/contexts.py",
"//cobalt/bindings/idl_compiler_cobalt.py",
"//cobalt/bindings/generate_conversion_header.py",
"//cobalt/bindings/name_conversion.py",
"//cobalt/bindings/overload_context.py",
]
_bindings_extra_inputs += engine_bindings_scripts
_bindings_extra_inputs += idl_lexer_parser_files
_bindings_extra_inputs += idl_compiler_files
# Template definitions.
template("idl_compile") {
action_foreach(target_name) {
script = "//starboard/build/run_bash.py"
py_script = engine_idl_compiler
sources = invoker.sources
forward_variables_from(invoker,
[
"testonly",
"deps",
"public_deps",
"public_configs",
])
inputs = [
_extended_attributes_file,
invoker.component_info,
invoker.interfaces_info,
py_script,
]
inputs += _bindings_extra_inputs
generated_file_path =
invoker.output_directory + "/{{source_root_relative_dir}}"
if (defined(invoker.header_prefix)) {
header_prefix = invoker.header_prefix + "_"
} else {
header_prefix = ""
}
outputs = [
"$generated_file_path/${header_prefix}{{source_name_part}}.h",
"$generated_file_path/${generated_bindings_prefix}_{{source_name_part}}.cc",
]
args = [
"python2",
rebase_path(py_script, root_build_dir),
"--cache-directory",
rebase_path(invoker.cache_directory),
"--output-directory",
rebase_path(invoker.output_directory),
"--interfaces-info",
rebase_path(invoker.interfaces_info),
"--component-info",
rebase_path(invoker.component_info),
"--extended-attributes",
rebase_path(_extended_attributes_file),
"{{source}}",
]
}
}
template("generate_type_conversion") {
action(target_name) {
script = "//starboard/build/run_bash.py"
py_script = engine_conversion_header_generator_script
deps = invoker.deps
public_deps = engine_dependencies
inputs = [
py_script,
_extended_attributes_file,
invoker.global_names_idl_file,
"//cobalt/bindings/shared/idl_conditional_macros.h",
]
inputs += _bindings_extra_inputs
inputs += invoker.inputs
# Generated header file that contains forward declarations for converting
# to/from JS value and generated types.
outputs = [ "${invoker.output_dir}/${generated_bindings_prefix}_gen_type_conversion.h" ]
args = [
"python2",
rebase_path(py_script, root_build_dir),
"--cache-directory",
rebase_path(invoker.cache_directory, root_build_dir),
"--output-dir",
rebase_path(invoker.output_dir, root_build_dir),
"--interfaces-info",
rebase_path(invoker.interfaces_info, root_build_dir),
"--component-info",
rebase_path(invoker.component_info, root_build_dir),
]
}
}
template("compute_global_objects") {
action(target_name) {
script = "//starboard/build/run_bash.py"
py_script = "$bindings_scripts_dir/compute_global_objects.py"
inputs = [
py_script,
"$bindings_scripts_dir/utilities.py",
]
inputs += invoker.idl_files
outputs = [ invoker.global_objects_file ]
idl_files_list = "$target_gen_dir/${target_name}_idl_files_list.tmp"
write_file(idl_files_list, rebase_path(invoker.idl_files, root_build_dir))
args = [
"python2",
rebase_path(py_script, root_build_dir),
"--idl-files-list",
rebase_path(idl_files_list, root_build_dir),
"--",
rebase_path(invoker.global_objects_file, root_build_dir),
]
}
}
template("compute_global_constructors_idls") {
action(target_name) {
script = "//starboard/build/run_bash.py"
py_script = "$bindings_scripts_dir/generate_global_constructors.py"
deps = invoker.deps
inputs = [
py_script,
"$bindings_scripts_dir/utilities.py",
invoker.global_objects_file,
]
inputs += invoker.idl_files
outputs = [
invoker.global_names_idl_file,
invoker.global_constructors_generated_header_file,
]
# Write the file list to a unique temp file to avoid blowing out the
# command line length limit.
idl_files_list = "$target_gen_dir/${target_name}_static_idl_files_list.tmp"
write_file(idl_files_list, rebase_path(invoker.idl_files, root_build_dir))
args = [
"python2",
rebase_path(py_script, root_build_dir),
"--idl-files-list",
rebase_path(idl_files_list, root_build_dir),
"--global-objects-file",
rebase_path(invoker.global_objects_file, root_build_dir),
"--",
"Window",
rebase_path(invoker.global_names_idl_file, root_build_dir),
]
}
}
template("compute_interfaces_info_individual") {
action(target_name) {
script = "//starboard/build/run_bash.py"
py_script = "$bindings_scripts_dir/compute_interfaces_info_individual.py"
deps = invoker.deps
inputs = [
py_script,
"$bindings_scripts_dir/utilities.py",
_extended_attributes_file,
invoker.generated_idl_files,
]
inputs += invoker.idl_files
outputs = [
invoker.interfaces_info_file,
invoker.component_info_file,
]
# Write the file list to a unique temp file to avoid blowing out the
# command line length limit.
idl_files_list = "$target_gen_dir/${target_name}_static_idl_files_list.tmp"
write_file(idl_files_list, rebase_path(invoker.idl_files, root_build_dir))
dependency_idl_files_paths =
rebase_path(invoker.dependency_idl_files, root_build_dir)
dependency_idl_files_list = string_join(" ", dependency_idl_files_paths)
args = [
"python2",
rebase_path(py_script, root_build_dir),
"--cache-directory",
rebase_path(invoker.cache_directory, root_build_dir),
"--root-directory",
rebase_path("//", root_build_dir),
"--idl-files-list",
rebase_path(idl_files_list, root_build_dir),
"--interfaces-info-file",
rebase_path(invoker.interfaces_info_file, root_build_dir),
"--component-info-file",
rebase_path(invoker.component_info_file, root_build_dir),
"--extended-attributes",
rebase_path(_extended_attributes_file, root_build_dir),
"--dependency-idl-files",
dependency_idl_files_list,
"--",
# Generated files must be passed at command line
rebase_path(invoker.generated_idl_files, root_build_dir),
]
}
}
template("generate_interfaces_info_overall") {
action(target_name) {
script = "//starboard/build/run_bash.py"
py_script = "$bindings_scripts_dir/compute_interfaces_info_overall.py"
deps = invoker.deps
inputs = [
py_script,
invoker.individual_interfaces_file,
]
outputs = [ invoker.combined_interfaces_file ]
args = [
"python2",
rebase_path(py_script, root_build_dir),
"--",
rebase_path(invoker.individual_interfaces_file, root_build_dir),
rebase_path(invoker.combined_interfaces_file, root_build_dir),
]
}
}
template("cache_lex_tables") {
action(target_name) {
script = "//starboard/build/run_bash.py"
py_script = "$bindings_scripts_dir/blink_idl_parser.py"
inputs = [ py_script ]
inputs += idl_lexer_parser_files
outputs = [
"${invoker.output_dir}/lextab.py",
"${invoker.output_dir}/parsetab.pickle",
]
args = [
"python2",
rebase_path(py_script, root_build_dir),
rebase_path(invoker.output_dir, root_build_dir),
]
}
}
template("cache_templates") {
action(target_name) {
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
]
# Cobalt's Jinja templates.
inputs += engine_template_files
# Templates that are shared by the code generation for multiple engines.
inputs += [
"//cobalt/bindings/templates/dictionary.h.template",
"//cobalt/bindings/templates/interface-base.cc.template",
"//cobalt/bindings/templates/interface-base.h.template",
"//cobalt/bindings/templates/callback-interface-base.cc.template",
"//cobalt/bindings/templates/callback-interface-base.h.template",
]
# The filenames are hashes of the template file path.
outputs = [
"${invoker.output_dir}/__jinja2_0458bc0cdbf0dcc5ede1938c55c599dc57dcae71.cache",
"${invoker.output_dir}/__jinja2_303dad9caff7b8c046562177d5460bb9f7b159df.cache",
"${invoker.output_dir}/__jinja2_4038c00836c6764d385cf4c46462430f9aaf17be.cache",
"${invoker.output_dir}/__jinja2_435670c71610a56f1cef61f2d38133c78acac78f.cache",
"${invoker.output_dir}/__jinja2_4a2a64213caba2133a0b71aada741965e14fc1bb.cache",
"${invoker.output_dir}/__jinja2_4c7f97150281049711d4ce10a328cc061253b390.cache",
"${invoker.output_dir}/__jinja2_5d45ad6b9cacef6d9d179dc9099ec37cf6ee1724.cache",
"${invoker.output_dir}/__jinja2_65e7aef6627bae7400833440f6e4ae091c710908.cache",
"${invoker.output_dir}/__jinja2_74db451681d577fcb9c39eae42a296cbbcf752c7.cache",
"${invoker.output_dir}/__jinja2_8e238dc5f6ff498c4406817387ddb7ece64b45bd.cache",
"${invoker.output_dir}/__jinja2_b0197cf1f0bbd6fc7944725aec13712883090f68.cache",
"${invoker.output_dir}/__jinja2_d049954a9d5a3dc383d37b7673da54b661ec34b0.cache",
"${invoker.output_dir}/__jinja2_d09b22d687fad0727f239c3feb23cadd73ac6bc0.cache",
"${invoker.output_dir}/__jinja2_df2da080300d5d4b19c5c7b8b87f6a5521d00c89.cache",
]
args = [
"python2",
rebase_path(py_script, root_build_dir),
rebase_path("${invoker.output_dir}", root_build_dir),
rebase_path("$engine_templates_dir", root_build_dir),
rebase_path("${invoker.output_dir}/cached_jinja_templates.stamp",
root_build_dir),
]
}
}