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

Unified Diff: third_party/protobuf/proto_library.gni

Issue 2082693002: Plugin support for protobuf compiler (protoc) targets. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 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 | « build/protoc.gypi ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/protobuf/proto_library.gni
diff --git a/third_party/protobuf/proto_library.gni b/third_party/protobuf/proto_library.gni
index 921ec8d54f40b103e19c4906445b001281dbab9c..a3b0b762332bd62fccd4494354ded74f91ab009c 100644
--- a/third_party/protobuf/proto_library.gni
+++ b/third_party/protobuf/proto_library.gni
@@ -16,6 +16,12 @@
# If undefined, this defaults to matching the input directory for each
# .proto file (you should almost always use the default mode).
#
+# generate_python (optional, default true)
+# Generate Python protobuf stubs.
+#
+# generate_cc (optional, default true)
+# Generate C++ 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
@@ -26,6 +32,16 @@
# macro to work (see cc_include) and set
# component_build_force_source_set = true.
#
+# generator_plugin (optional)
+# Name of plugin executable which generates custom cc stubs.
+# Plugin itself should be dependency of the invoker.
+#
+# generator_plugin_suffix (required if generator_plugin set)
+# Suffix (before extension) for generated .cc and .h files.
+#
+# generator_plugin_options (optional)
+# Extra flags passed to the plugin. See cc_generator_options.
+#
# cc_include (optional)
# String listing an extra include that should be passed.
# Example: cc_include = "foo/bar.h"
@@ -79,38 +95,26 @@ template("proto_library") {
# declaring "outputs") and relative to the build dir (for passing to the
# script).
if (defined(invoker.proto_out_dir)) {
- # Put the results in the specified dir in the gen tree.
- out_dir = "$root_gen_dir/" + invoker.proto_out_dir
- rel_out_dir = rebase_path(out_dir, root_build_dir)
- py_out_dir = "$root_out_dir/pyproto/" + invoker.proto_out_dir
+ proto_out_dir = invoker.proto_out_dir
} else {
- # Use the gen directory corresponding to the source file for C++ sources.
- # This expansion will be done differently in the outputs and the args, so
- # we don't need to worry about rebasing as above. Always put Python
- # sources in "pyproto".
- out_dir = "{{source_gen_dir}}"
- rel_out_dir = "{{source_gen_dir}}"
- py_out_dir = "$root_out_dir/pyproto/{{source_root_relative_dir}}"
+ proto_out_dir = "{{source_root_relative_dir}}"
}
- rel_py_out_dir = rebase_path(py_out_dir, root_build_dir)
+ out_dir = "$root_gen_dir/" + proto_out_dir
+ rel_out_dir = rebase_path(out_dir, root_build_dir)
- outputs = [
- "$py_out_dir/{{source_name_part}}_pb2.py",
- "$out_dir/{{source_name_part}}.pb.cc",
- "$out_dir/{{source_name_part}}.pb.h",
- ]
+ outputs = []
args = []
if (defined(invoker.cc_include)) {
args += [
"--include",
invoker.cc_include,
+ "--protobuf",
+ "$rel_out_dir/{{source_name_part}}.pb.h",
]
}
args += [
- "--protobuf",
- "$rel_out_dir/{{source_name_part}}.pb.h",
"--proto-in-dir",
"{{source_dir}}",
"--proto-in-file",
@@ -132,27 +136,61 @@ template("proto_library") {
root_build_dir),
]
- # If passed cc_generator_options should end in a colon, which will separate
- # it from the directory when we concatenate them. The proto compiler
- # understands this syntax.
- if (defined(invoker.cc_generator_options)) {
- cc_generator_options = invoker.cc_generator_options
- } else {
- cc_generator_options = ""
+ if (!defined(invoker.generate_python) || invoker.generate_python) {
+ py_out_dir = "$root_out_dir/pyproto/" + proto_out_dir
+ rel_py_out_dir = rebase_path(py_out_dir, root_build_dir)
+
+ outputs += [ "$py_out_dir/{{source_name_part}}_pb2.py" ]
+ args += [
+ "--python_out",
+ rel_py_out_dir,
+ ]
+ }
+
+ if (!defined(invoker.generate_cc) || invoker.generate_cc) {
+ # If passed cc_generator_options should end in a colon, which will
+ # separate it from the directory when we concatenate them. The proto
+ # compiler understands this syntax.
+ if (defined(invoker.cc_generator_options)) {
+ cc_generator_options = invoker.cc_generator_options
+ } else {
+ cc_generator_options = ""
+ }
+ outputs += [
+ "$out_dir/{{source_name_part}}.pb.cc",
+ "$out_dir/{{source_name_part}}.pb.h",
+ ]
+ args += [
+ "--cpp_out",
+ "$cc_generator_options$rel_out_dir", # Separated by colon.
+ ]
+ }
+
+ if (defined(invoker.generator_plugin)) {
+ generator_plugin = invoker.generator_plugin
+ generator_plugin_suffix = invoker.generator_plugin_suffix
+ if (defined(invoker.generator_plugin_options)) {
+ generator_plugin_options = invoker.generator_plugin_options
+ } else {
+ generator_plugin_options = ""
+ }
+ outputs += [
+ "$out_dir/{{source_name_part}}$generator_plugin_suffix.cc",
+ "$out_dir/{{source_name_part}}$generator_plugin_suffix.h",
+ ]
+ args += [
+ "--plugin",
+ "protoc-gen-plugin=./$generator_plugin",
+ "--plugin_out",
+ "$generator_plugin_options$rel_out_dir", # Separated by colon.
+ ]
}
- args += [
- # cc_generator_options is supposed to end in a colon if it's nonempty.
- "--cpp_out",
- "$cc_generator_options$rel_out_dir",
- "--python_out",
- rel_py_out_dir,
- ]
deps = [
protoc_label,
]
- # The deps may have steps that have to run before runnign protobuf.
+ # The deps may have steps that have to run before running protobuf.
if (defined(invoker.deps)) {
deps += invoker.deps
}
@@ -180,11 +218,14 @@ template("proto_library") {
public_configs = [ "//third_party/protobuf:using_proto" ]
- public_deps = [
- # The generated headers reference headers within protobuf_lite, so
- # dependencies must be able to find those headers too.
- "//third_party/protobuf:protobuf_lite",
- ]
+ # If using built-in cc generator the resulting headers reference headers
+ # within protobuf_lite, hence dependencies require those headers too.
+ # In case of generator plugin such issues should be resolved by invoker.
+ if (!defined(invoker.generate_cc) || invoker.generate_cc) {
+ public_deps = [
+ "//third_party/protobuf:protobuf_lite",
+ ]
+ }
deps = [
":$action_name",
]
« no previous file with comments | « build/protoc.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698