Index: ios/web/js_compile.gni |
diff --git a/ios/web/js_compile.gni b/ios/web/js_compile.gni |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6c9590af12af909a3d4445127d863b366ef1febe |
--- /dev/null |
+++ b/ios/web/js_compile.gni |
@@ -0,0 +1,171 @@ |
+# Copyright 2015 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("//build/util/java_action.gni") |
+ |
+declare_args() { |
+ # Control whether the JavaScript files shipped with Chrome on iOS are |
+ # compiled with closure_compiler or not. Useful for debugging. |
+ compile_javascript = true |
+} |
+ |
+closure_compiler_path = "//third_party/closure_compiler/compiler/compiler.jar" |
+ |
+# Defines a target that create a JavaScript bundle using the closure compiler. |
+# |
+# Variables |
+# sources: |
+# List of JavaScript files to compile into the bundle. |
+# |
+# closure_entry_point: |
+# Name of the entry point closure module. |
+# |
+# deps (optional) |
+# List of targets required by this target. |
+# |
+# visibility (optional) |
+# Visibility restrictions. |
+# |
+# Generates a single JavaScript bundle file that can be put in the application |
+# bundle. |
+# |
+# TODO(eugenebut): this should uses the same error flags as js_compile_checked. |
+template("js_compile_bundle") { |
+ assert(defined(invoker.sources), |
+ "Need sources in $target_name listing the js files.") |
+ |
+ assert(defined(invoker.closure_entry_point), |
+ "Need closure_entry_point in $target_name for generated js file.") |
+ |
+ java_action(target_name) { |
+ forward_variables_from(invoker, |
+ [ |
+ "deps", |
+ "visibility", |
+ ]) |
+ |
+ script = closure_compiler_path |
+ sources = invoker.sources |
+ outputs = [ |
+ "$target_gen_dir/$target_name.js", |
+ ] |
+ |
+ args = [ |
+ "--compilation_level", |
+ "SIMPLE_OPTIMIZATIONS", |
+ "--js_output_file", |
+ rebase_path("$target_gen_dir/$target_name.js", root_build_dir), |
+ "--only_closure_dependencies", |
+ "--closure_entry_point", |
+ invoker.closure_entry_point, |
+ "--js", |
+ ] + rebase_path(sources, root_build_dir) |
+ |
+ # TODO(crbug.com/546283): add the generated bundle to the list of files to |
+ # move in the application bundle, equivalent to the following gyp code: |
+ # |
+ # "link_settings": { |
+ # "mac_bundle_resources": [ |
+ # "<(SHARED_INTERMEDIATE_DIR)/<(RULE_INPUT_NAME).js", |
+ # ], |
+ # }, |
+ } |
+} |
+ |
+# Defines a target that compile JavaScript files with error checking using the |
+# closure compiler. |
+# |
+# Variables |
+# sources: |
+# List of JavaScript files to compile. |
+# |
+# deps (optional) |
+# List of targets required by this target. |
+# |
+# visibility (optional) |
+# Visibility restrictions. |
+# |
+# TODO(eugenebut): use flags from third_party/closure_compiler/closure_args.gni |
+# once they are the same. |
+template("js_compile_checked") { |
+ assert(defined(invoker.sources), |
+ "Need sources in $target_name listing the js files.") |
+ |
+ if (compile_javascript) { |
+ java_action_foreach(target_name) { |
+ forward_variables_from(invoker, |
+ [ |
+ "deps", |
+ "visibility", |
+ ]) |
+ |
+ script = closure_compiler_path |
+ sources = invoker.sources |
+ outputs = [ |
+ "$target_gen_dir/{{source_file_part}}", |
+ ] |
+ |
+ # TODO(eugenebut): need to enable the following compilation checks once |
+ # the corresponding errors have been fixed: |
+ # --jscomp_error=checkTypes |
+ # --jscomp_error=checkVars |
+ # --jscomp_error=missingProperties |
+ # --jscomp_error=missingReturn |
+ # --jscomp_error=undefinedVars |
+ |
+ args = [ |
+ "--compilation_level", |
+ "SIMPLE_OPTIMIZATIONS", |
+ "--jscomp_error=accessControls", |
+ "--jscomp_error=ambiguousFunctionDecl", |
+ "--jscomp_error=constantProperty", |
+ "--jscomp_error=deprecated", |
+ "--jscomp_error=externsValidation", |
+ "--jscomp_error=globalThis", |
+ "--jscomp_error=invalidCasts", |
+ "--jscomp_error=nonStandardJsDocs", |
+ "--jscomp_error=suspiciousCode", |
+ "--jscomp_error=undefinedNames", |
+ "--jscomp_error=unknownDefines", |
+ "--jscomp_error=uselessCode", |
+ "--jscomp_error=visibility", |
+ "--js", |
+ "{{source}}", |
+ "--js_output_file", |
+ rebase_path("$target_gen_dir/{{source_file_part}}", root_build_dir), |
+ ] |
+ |
+ # TODO(crbug.com/546283): add the generated bundle to the list of files |
+ # to move in the application bundle, equivalent to the following gyp code: |
+ # |
+ # "link_settings": { |
+ # "mac_bundle_resources": [ |
+ # "<(SHARED_INTERMEDIATE_DIR)/<(RULE_INPUT_NAME).js", |
+ # ], |
+ # }, |
+ } |
+ } else { |
+ copy(target_name) { |
+ forward_variables_from(invoker, |
+ [ |
+ "deps", |
+ "visibility", |
+ ]) |
+ |
+ sources = invoker.sources |
+ outputs = [ |
+ "$target_gen_dir/{{source_file_part}}", |
+ ] |
+ |
+ # TODO(crbug.com/546283): add the generated bundle to the list of files |
+ # to move in the application bundle, equivalent to the following gyp code: |
+ # |
+ # "link_settings": { |
+ # "mac_bundle_resources": [ |
+ # "<(SHARED_INTERMEDIATE_DIR)/<(RULE_INPUT_NAME).js", |
+ # ], |
+ # }, |
+ } |
+ } |
+} |