summaryrefslogtreecommitdiff
path: root/chromium/third_party/protobuf/proto_library.gni
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/protobuf/proto_library.gni')
-rw-r--r--chromium/third_party/protobuf/proto_library.gni54
1 files changed, 52 insertions, 2 deletions
diff --git a/chromium/third_party/protobuf/proto_library.gni b/chromium/third_party/protobuf/proto_library.gni
index 44c7fefa25d..71b264c11b0 100644
--- a/chromium/third_party/protobuf/proto_library.gni
+++ b/chromium/third_party/protobuf/proto_library.gni
@@ -25,6 +25,9 @@
# generate_cc (optional, default true)
# Generate C++ protobuf stubs.
#
+# generate_javascript (optional, default false)
+# Generate Javascript protobuf stubs.
+#
# cc_generator_options (optional)
# List of extra flags passed to the protocol compiler. If you need to
# add an EXPORT macro to a protobuf's C++ header, set the
@@ -117,6 +120,7 @@
import("//build/config/sanitizers/sanitizers.gni")
import("//build/toolchain/kythe.gni")
+import("//third_party/closure_compiler/compile_js.gni")
if (host_os == "win") {
_host_executable_suffix = ".exe"
@@ -150,6 +154,12 @@ template("proto_library") {
generate_python = true
}
+ if (defined(invoker.generate_javascript)) {
+ generate_javascript = invoker.generate_javascript
+ } else {
+ generate_javascript = false
+ }
+
if (defined(invoker.generator_plugin_label)) {
# Straightforward way to get the name of executable doesn't work because
# |root_out_dir| and |root_build_dir| may differ in cross-compilation and
@@ -221,10 +231,15 @@ template("proto_library") {
py_out_dir = "$root_out_dir/pyproto/" + proto_out_dir
rel_py_out_dir = rebase_path(py_out_dir, root_build_dir)
}
+ if (generate_javascript) {
+ js_out_dir = "$root_out_dir/jsproto/" + proto_out_dir
+ rel_js_out_dir = rebase_path(js_out_dir, root_build_dir)
+ }
protos = rebase_path(invoker.sources, proto_in_dir)
protogens = []
protogens_cc = []
+ protogens_js = []
# List output files.
foreach(proto, protos) {
@@ -246,17 +261,24 @@ template("proto_library") {
protogens_cc += [ "$cc_out_dir/${proto_path}${suffix}" ]
}
}
+ if (generate_javascript) {
+ protogens_js += [ "$js_out_dir/${proto_path}.js" ]
+ }
}
action_name = "${target_name}_gen"
source_set_name = target_name
+ javascript_name = "${target_name}_js"
# Generate protobuf stubs.
action(action_name) {
- visibility = [ ":$source_set_name" ]
+ visibility = [
+ ":$source_set_name",
+ ":$javascript_name",
+ ]
script = "//tools/protoc_wrapper/protoc_wrapper.py"
sources = proto_sources
- outputs = get_path_info(protogens + protogens_cc, "abspath")
+ outputs = get_path_info(protogens + protogens_cc + protogens_js, "abspath")
args = protos
if (defined(invoker.testonly)) {
@@ -302,6 +324,13 @@ template("proto_library") {
]
}
+ if (generate_javascript) {
+ args += [
+ "--js-out-dir",
+ rel_js_out_dir,
+ ]
+ }
+
if (generate_with_plugin) {
args += [
"--plugin",
@@ -373,6 +402,23 @@ template("proto_library") {
}
}
+ # Build generated javascript stubs.
+ if (generate_javascript) {
+ js_library(javascript_name) {
+ forward_variables_from(invoker,
+ [
+ "testonly",
+ "visibility",
+ ])
+
+ sources = protogens_js
+
+ deps = [ "//third_party/protobuf:js_proto" ]
+
+ extra_deps = [ ":$action_name" ]
+ }
+ }
+
# Build generated protobuf stubs as libary or source set.
target(link_target_type, target_name) {
forward_variables_from(invoker,
@@ -509,6 +555,10 @@ template("protoc_convert") {
deps += invoker.deps
}
+ if (defined(invoker.testonly)) {
+ testonly = invoker.testonly
+ }
+
outputs = [ invoker.output_pattern ]
args = [