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, "*")
   }
 }