blob: 6c9590af12af909a3d4445127d863b366ef1febe [file] [log] [blame]
# 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",
# ],
# },
}
}
}