Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(124)

Unified Diff: Source/bindings/scripts/scripts.gni

Issue 319983003: Work on blink GN bindings (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fix lots of dirs, comment out some tests that don't link Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/bindings/scripts/BUILD.gn ('k') | Source/bindings/scripts/scripts.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/scripts/scripts.gni
diff --git a/Source/bindings/scripts/scripts.gni b/Source/bindings/scripts/scripts.gni
new file mode 100644
index 0000000000000000000000000000000000000000..4eb0947ef88d95400c739651a006ae8dca22ddd8
--- /dev/null
+++ b/Source/bindings/scripts/scripts.gni
@@ -0,0 +1,199 @@
+# 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.
+
+import("//third_party/WebKit/Source/bindings/core/v8/generated.gni")
+import("//third_party/WebKit/Source/bindings/modules/idl.gni")
+import("//third_party/WebKit/Source/bindings/modules/modules.gni")
+
+bindings_scripts_dir = get_path_info(".", "abspath")
+bindings_scripts_output_dir = "$root_gen_dir/blink/bindings/scripts"
+
+# Replacing <(DEPTH) with "/" makes paths like "<(DEPTH)/foo" absolute.
+_gypi = exec_script(
+ "//build/gypi_to_gn.py",
+ [ rebase_path("scripts.gypi"),
+ "--replace=<(DEPTH)=/" ],
+ "scope",
+ [ "scripts.gypi" ])
+
+jinja_module_files = get_path_info(_gypi.jinja_module_files, "abspath")
+idl_lexer_parser_files = get_path_info(_gypi.idl_lexer_parser_files, "abspath")
+idl_compiler_files = get_path_info(_gypi.idl_compiler_files, "abspath")
+
+# Calls the compute_interfaces_info_individual script.
+#
+# Parameters:
+# sources_static = list of IDL files to pass as inputs
+# sources_generated = list of generated IDL files to pass as inputs
+# component_dir = name if subdirectory (one word, no slashes) of component.
+# output_file = pickle file to write
+#
+# FIXME: Note the static/generated split is for consistency with GYP. This
+# split is not necessary in the GN build and could be combined into a single
+# "sources".
+template("compute_interfaces_info_individual") {
+ action(target_name) {
+ script = "$bindings_scripts_dir/compute_interfaces_info_individual.py"
+
+ # Save static list to temp file to avoid blowing out command-line length
+ # limit.
+ file_list = "$target_gen_dir/${target_name}_file_list.txt"
+ write_file(file_list, rebase_path(invoker.sources_static, root_build_dir))
+
+ source_prereqs = [
+ "$bindings_scripts_dir/utilities.py",
+ file_list,
+ ] + invoker.sources_static + invoker.sources_generated
+
+ outputs = [
+ invoker.output_file
+ ]
+
+ args = [
+ "--component-dir", invoker.component_dir,
+ "--idl-files-list", rebase_path(file_list, root_build_dir),
+ "--interfaces-info-file",
+ rebase_path(invoker.output_file, root_build_dir),
+ "--write-file-only-if-changed=1",
+ "--",
+ ] + rebase_path(invoker.sources_generated, root_build_dir)
+
+ deps = [
+ # FIXME: should be {modules|core}_generated_idls
+ # http://crbug.com/358074
+ "//third_party/WebKit/Source/bindings:generated_idls",
+ ]
+ }
+}
+
+# Calls generate_event_interfaces
+#
+# Parameters:
+# sources = A list of IDL files to process.
+# output_file = The .in file to write, relative to the blink_gen_dir.
+# suffix = (Optional) String to be passed to script via --suffix
+template("generate_event_interfaces") {
+ action(target_name) {
+ # 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}_file_list.tmp"
+ write_file(idl_files_list,
+ rebase_path(invoker.sources, root_build_dir))
+
+ source_prereqs = [
+ "//third_party/WebKit/Source/bindings/scripts/utilities.py",
+ idl_files_list,
+ ] + invoker.sources
+
+ output_file = "$root_gen_dir/blink/" + invoker.output_file
+ outputs = [ output_file ]
+
+ script = "//third_party/WebKit/Source/bindings/scripts/generate_event_interfaces.py"
+ args = [
+ "--event-idl-files-list",
+ rebase_path(idl_files_list, root_build_dir),
+ "--event-interfaces-file",
+ rebase_path(output_file, root_build_dir),
+ "--write-file-only-if-changed=1", # Always true for Ninja.
+ ]
+
+ if (defined(invoker.suffix)) {
+ args += [ "--suffix", invoker.suffix ]
+ }
+ }
+}
+
+# Runs the idl_compiler script over a list of sources.
+#
+# Parameters:
+# sources = list of IDL files to compile
+# output_dir = string containing the directory to put the output files.
+template("idl_compiler") {
+ output_dir = invoker.output_dir
+
+ action_foreach(target_name) {
+ # TODO(brettw) GYP adds a "-S before the script name to skip "import site" to
+ # speed up startup. Figure out if we need this and do something similar (not
+ # really expressible in GN now).
+ script = "//third_party/WebKit/Source/bindings/scripts/idl_compiler.py"
+
+ source_prereqs =
+ idl_lexer_parser_files + # to be explicit (covered by parsetab)
+ idl_compiler_files
+ source_prereqs += [
+ "$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/InterfacesInfoModules.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
+ # This should theoretically just be the IDL files passed in.
+ source_prereqs += all_dependency_idl_files
+
+ sources = invoker.sources
+ outputs = [
+ "$output_dir/V8{{source_name_part}}.cpp",
+ "$output_dir/V8{{source_name_part}}.h",
+ ]
+
+ args = [
+ "--cache-dir",
+ rebase_path(bindings_scripts_output_dir, root_build_dir),
+ "--output-dir",
+ rebase_path(output_dir, root_build_dir),
+ "--interfaces-info",
+ rebase_path("$bindings_modules_output_dir/InterfacesInfoModules.pickle",
+ root_build_dir),
+ "--write-file-only-if-changed=1", # Always true for Ninja.
+ "{{source}}",
+ ]
+
+ deps = [
+ # FIXME: should be interfaces_info_core (w/o modules)
+ # http://crbug.com/358074
+ "//third_party/WebKit/Source/bindings/modules:interfaces_info",
+
+ "//third_party/WebKit/Source/bindings/scripts:cached_lex_yacc_tables",
+ "//third_party/WebKit/Source/bindings/scripts:cached_jinja_templates",
+ "//third_party/WebKit/Source/core:generated_testing_idls",
+ ]
+ }
+}
+
+# Calls the aggregate_generated_bindings script.
+#
+# Parameters:
+# sources = a list of source IDL files.
+# component_dir = Name of directory for these files (one word, no slashes).
+# outputs = a list of files to write to.
+template("aggregate_generated_bindings") {
+ action(target_name) {
+ script = "//third_party/WebKit/Source/bindings/scripts/aggregate_generated_bindings.py"
+
+ # Write lists of main IDL files to a file, so that the command lines don't
+ # exceed OS length limits.
+ idl_files_list = "$target_gen_dir/${target_name}_file_list.tmp"
+ write_file(idl_files_list, rebase_path(invoker.sources, root_build_dir))
+
+ source_prereqs = [ idl_files_list ] + invoker.sources
+ outputs = invoker.outputs
+
+ args = [
+ invoker.component_dir,
+ rebase_path(idl_files_list, root_build_dir),
+ "--",
+ ]
+ args += rebase_path(invoker.outputs, root_build_dir)
+ }
+}
« no previous file with comments | « Source/bindings/scripts/BUILD.gn ('k') | Source/bindings/scripts/scripts.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698