pw_protobuf_compiler: Prevent using protoc outside default toolchain
Only instantiate the proto _gen target in the default toolchain.
Change-Id: I1bc6a5bfe954e8aef701767a54cfe52fb867f7a7
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/36760
Commit-Queue: Wyatt Hepler <hepler@google.com>
Reviewed-by: Alexei Frolov <frolv@google.com>
Reviewed-by: Joe Ethier <jethier@google.com>
diff --git a/pw_protobuf_compiler/proto.gni b/pw_protobuf_compiler/proto.gni
index c877b28..08fff31 100644
--- a/pw_protobuf_compiler/proto.gni
+++ b/pw_protobuf_compiler/proto.gni
@@ -35,68 +35,75 @@
# This creates the internal GN target $target_name.$language._gen that compiles
# proto files with protoc.
template("_pw_invoke_protoc") {
- if (defined(invoker.out_dir)) {
- _out_dir = invoker.out_dir
- } else {
- _out_dir = "${invoker.base_out_dir}/${invoker.language}"
- if (defined(invoker.module_as_package) && invoker.module_as_package != "") {
- assert(invoker.language == "python")
- _out_dir = "$_out_dir/${invoker.module_as_package}"
- }
- }
-
- _includes =
- rebase_path(get_target_outputs(":${invoker.base_target}._includes"))
-
- pw_python_action("$target_name._gen") {
- script =
- "$dir_pw_protobuf_compiler/py/pw_protobuf_compiler/generate_protos.py"
-
- python_deps = [ "$dir_pw_protobuf_compiler/py" ]
- if (defined(invoker.python_deps)) {
- python_deps += invoker.python_deps
- }
-
- deps = [
- ":${invoker.base_target}._includes",
- ":${invoker.base_target}._sources",
- ]
-
- foreach(dep, invoker.deps) {
- deps += [ get_label_info(dep, "label_no_toolchain") + "._gen" ]
- }
-
- args = [
- "--language",
- invoker.language,
- "--include-file",
- _includes[0],
- "--compile-dir",
- rebase_path(invoker.compile_dir),
- "--out-dir",
- rebase_path(_out_dir),
- "--sources",
- ] + rebase_path(invoker.sources)
-
- if (defined(invoker.plugin)) {
- inputs = [ invoker.plugin ]
- args += [ "--plugin-path=" + rebase_path(invoker.plugin) ]
- }
-
- if (defined(invoker.outputs)) {
- outputs = invoker.outputs
+ if (current_toolchain == default_toolchain) {
+ if (defined(invoker.out_dir)) {
+ _out_dir = invoker.out_dir
} else {
- stamp = true
- }
-
- if (defined(invoker.metadata)) {
- metadata = invoker.metadata
- } else {
- metadata = {
- protoc_outputs = rebase_path(outputs)
- root = [ rebase_path(_out_dir) ]
+ _out_dir = "${invoker.base_out_dir}/${invoker.language}"
+ if (defined(invoker.module_as_package) &&
+ invoker.module_as_package != "") {
+ assert(invoker.language == "python")
+ _out_dir = "$_out_dir/${invoker.module_as_package}"
}
}
+
+ _includes =
+ rebase_path(get_target_outputs(":${invoker.base_target}._includes"))
+
+ pw_python_action("$target_name._gen") {
+ script =
+ "$dir_pw_protobuf_compiler/py/pw_protobuf_compiler/generate_protos.py"
+
+ python_deps = [ "$dir_pw_protobuf_compiler/py" ]
+ if (defined(invoker.python_deps)) {
+ python_deps += invoker.python_deps
+ }
+
+ deps = [
+ ":${invoker.base_target}._includes",
+ ":${invoker.base_target}._sources",
+ ]
+
+ foreach(dep, invoker.deps) {
+ deps += [ get_label_info(dep, "label_no_toolchain") + "._gen" ]
+ }
+
+ args = [
+ "--language",
+ invoker.language,
+ "--include-file",
+ _includes[0],
+ "--compile-dir",
+ rebase_path(invoker.compile_dir),
+ "--out-dir",
+ rebase_path(_out_dir),
+ "--sources",
+ ] + rebase_path(invoker.sources)
+
+ if (defined(invoker.plugin)) {
+ inputs = [ invoker.plugin ]
+ args += [ "--plugin-path=" + rebase_path(invoker.plugin) ]
+ }
+
+ if (defined(invoker.outputs)) {
+ outputs = invoker.outputs
+ } else {
+ stamp = true
+ }
+
+ if (defined(invoker.metadata)) {
+ metadata = invoker.metadata
+ } else {
+ metadata = {
+ protoc_outputs = rebase_path(outputs)
+ root = [ rebase_path(_out_dir) ]
+ }
+ }
+ }
+ } else {
+ # protoc is only ever invoked from the default toolchain.
+ not_needed([ "target_name" ])
+ not_needed(invoker, "*")
}
}