Chromium Code Reviews| Index: third_party/closure_compiler/compile_js.gni |
| diff --git a/third_party/closure_compiler/compile_js.gni b/third_party/closure_compiler/compile_js.gni |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..97c8081904bc0921b8e4e9096ffbaf65ec2ab752 |
| --- /dev/null |
| +++ b/third_party/closure_compiler/compile_js.gni |
| @@ -0,0 +1,167 @@ |
| +# Copyright 2017 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/closure_compiler/closure_args.gni") |
| + |
| +script_path = "//third_party/closure_compiler" |
| +compiler_path = "$script_path/compiler/compiler.jar" |
| + |
| +# Defines a target that creates an ordering for .js files to be used by |
| +# js_binary to compile. |
| +# |
| +# Variables: |
| +# sources: |
| +# List of Javascript files to include in the library |
| +# |
| +# deps: |
| +# List of js_library targets to depend on |
| +# |
| +# Example: |
| +# js_library("apple_tree") { |
| +# sources = ["tree_main.js"] |
| +# deps = [ |
| +# ":branch", |
| +# ":trunk", |
| +# ":root", |
| +# ] |
| +# } |
| + |
| +template("js_library") { |
| + assert(defined(invoker.sources) || defined(invoker.deps), |
| + "Need sources or deps in $target_name for js_library") |
| + action(target_name) { |
| + script = "$script_path/js_library.py" |
| + forward_variables_from(invoker, |
| + [ |
| + "sources", |
| + "deps", |
| + ]) |
| + output_file = "$target_gen_dir/$target_name.js_library" |
| + outputs = [ |
| + output_file, |
| + ] |
| + args = [ "--output" ] + [ rebase_path(output_file, root_build_dir) ] |
| + if (defined(sources)) { |
| + args += [ "--sources" ] + rebase_path(sources, root_build_dir) |
| + } |
| + if (defined(deps)) { |
| + args += [ "--deps" ] |
| + foreach(dep, deps) { |
| + # Get the output path for each dep |
| + dep_gen_dir = get_label_info(dep, "target_gen_dir") |
| + dep_name = get_label_info(dep, "name") |
| + dep_output_path = "$dep_gen_dir/$dep_name.js_library" |
| + args += [ rebase_path(dep_output_path, root_build_dir) ] |
| + } |
| + } |
| + } |
| +} |
| + |
| +# Defines a target that compiles javascript files using the Closure compiler. |
| +# This will produce a minified and optimized javascript output file, and will |
| +# perform error, syntax, and type checking. Additional checks and options |
| +# can be configured using the closure_flags attribute. |
| +# |
| +# Variables: |
| +# sources: |
| +# List of .js files to compile |
| +# |
| +# deps: |
| +# List of js_library rules to depend on |
| +# |
| +# outputs: |
| +# A file to write the compiled .js to. |
| +# Only takes in a single file, but must be placed in a list |
| +# |
| +# bootstrap_file: |
| +# A .js files to include before all others |
| +# |
| +# config_files: |
| +# A list of .js files to include after the bootstrap_file but before all |
| +# others |
| +# |
| +# closure_flags: |
| +# A list of custom flags to pass to the Closure compiler. Do not include |
| +# the leading dashes |
| +# |
| +# externs_list: |
| +# A list of .js files to pass to the compiler as externs |
| +# |
| +# Example: |
| +# js_binary("tree") { |
| +# sources = ["tree_main.js"] |
| +# deps = [":apple_tree"] |
| +# outputs = [ "$target_gen_dir/tree.js" ] |
| +# bootstrap_file = "bootstrap.js" |
| +# config_files = [ |
| +# "config1.js", |
| +# "config2.js", |
| +# ] |
| +# closure_flags = ["jscomp_error=undefinedVars"] |
| +# externs_list = [ "externs.js" ] |
| +# } |
| + |
| +template("js_binary") { |
| + assert(defined(invoker.sources) || defined(invoker.deps), |
| + "Need sources or deps in $target_name for js_binary") |
| + assert(defined(invoker.outputs), "Need outputs in $target_name for js_binary") |
| + |
| + action(target_name) { |
| + script = "$script_path/js_binary.py" |
| + forward_variables_from(invoker, |
| + [ |
| + "sources", |
| + "deps", |
| + "outputs", |
| + "bootstrap_file", |
| + "config_files", |
| + "closure_flags", |
| + "externs_list", |
| + ]) |
| + args = [ |
| + "--compiler", |
| + rebase_path(compiler_path, root_build_dir), |
| + ] |
| + args += [ "--output" ] + rebase_path(outputs, root_build_dir) |
| + if (defined(sources)) { |
| + args += [ "--sources" ] + rebase_path(sources, root_build_dir) |
| + } else { |
| + sources = [] |
| + } |
| + if (defined(deps)) { |
| + args += [ "--deps" ] |
| + foreach(dep, deps) { |
| + # Get the output path for each dep |
| + dep_gen_dir = get_label_info(dep, "target_gen_dir") |
| + dep_name = get_label_info(dep, "name") |
| + dep_output_path = "$dep_gen_dir/$dep_name.js_library" |
| + args += [ rebase_path(dep_output_path, root_build_dir) ] |
| + } |
| + } |
| + if (defined(bootstrap_file)) { |
| + args += [ |
| + "--bootstrap", |
| + rebase_path(bootstrap_file, root_build_dir), |
| + ] |
| + sources += [ bootstrap_file ] |
| + } |
| + if (defined(config_files)) { |
| + args += [ "--config" ] + rebase_path(config_files, root_build_dir) |
| + sources += config_files |
| + } |
| + |
| + # |default_closure_args| from //third_party/closure_compiler/closure_args.gni |
| + args += [ "--flags" ] + default_closure_args - [ "checks_only" ] |
|
Dan Beam
2017/04/21 00:33:40
you should be using minifying_closure_args instead
|
| + if (defined(closure_flags)) { |
| + args += closure_flags |
| + } |
| + args += |
| + [ "--externs" ] + |
| + [ rebase_path("$script_path/externs/polymer-1.0.js", root_build_dir) ] |
| + if (defined(externs_list)) { |
| + args += rebase_path(externs_list, root_build_dir) |
| + sources += externs_list |
| + } |
| + } |
| +} |