pw_presubmit: gn check system and generated files

- In presubmit, do gn check in a separate step and specify
  --check-generated and --check-system.
- Fix gn check issues in pw_fuzzer by adding a missing dependency.
- Disable include checking for generated pw_rpc headers since they
  include internal pw_rpc headers.

Change-Id: I8b9f03957ac60166eeb141bcba9dc493bfc6350c
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/44562
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
Reviewed-by: Armando Montanez <amontanez@google.com>
Commit-Queue: Wyatt Hepler <hepler@google.com>
diff --git a/pw_fuzzer/BUILD.gn b/pw_fuzzer/BUILD.gn
index e97d084..1359db4 100644
--- a/pw_fuzzer/BUILD.gn
+++ b/pw_fuzzer/BUILD.gn
@@ -19,8 +19,9 @@
 import("$dir_pw_fuzzer/fuzzer.gni")
 import("$dir_pw_fuzzer/oss_fuzz.gni")
 
-config("default_config") {
+config("public_include_path") {
   include_dirs = [ "public" ]
+  visibility = [ ":*" ]
 }
 
 # This is added automatically by the `pw_fuzzer` template.
@@ -45,7 +46,7 @@
 }
 
 pw_source_set("pw_fuzzer") {
-  public_configs = [ ":default_config" ]
+  public_configs = [ ":public_include_path" ]
   public = [
     "public/pw_fuzzer/asan_interface.h",
     "public/pw_fuzzer/fuzzed_data_provider.h",
@@ -54,7 +55,7 @@
 }
 
 pw_source_set("run_as_unit_test") {
-  configs = [ ":default_config" ]
+  configs = [ ":public_include_path" ]
   sources = [ "pw_fuzzer_disabled.cc" ]
   deps = [
     dir_pw_log,
diff --git a/pw_fuzzer/fuzzer.gni b/pw_fuzzer/fuzzer.gni
index 776fa5d..de7d6c6 100644
--- a/pw_fuzzer/fuzzer.gni
+++ b/pw_fuzzer/fuzzer.gni
@@ -46,10 +46,14 @@
     pw_executable(target_name) {
       forward_variables_from(invoker, "*", [ "visibility" ])
       forward_variables_from(invoker, [ "visibility" ])
+
+      if (!defined(deps)) {
+        deps += [ dir_pw_fuzzer ]
+      }
+
       if (!defined(configs)) {
         configs = []
       }
-      configs += [ "$dir_pw_fuzzer:default_config" ]
       if (pw_toolchain_OSS_FUZZ_ENABLED) {
         configs += [ "$dir_pw_fuzzer:oss_fuzz" ]
       } else {
diff --git a/pw_presubmit/py/pw_presubmit/build.py b/pw_presubmit/py/pw_presubmit/build.py
index 835a95e..491809a 100644
--- a/pw_presubmit/py/pw_presubmit/build.py
+++ b/pw_presubmit/py/pw_presubmit/build.py
@@ -83,12 +83,19 @@
          'gen',
          gn_output_dir,
          '--color=always',
-         *(['--check'] if gn_check else []),
          *(['--fail-on-unused-args'] if gn_fail_on_unused else []),
          *args,
          *args_option,
          cwd=gn_source_dir)
 
+    if gn_check:
+        call('gn',
+             'check',
+             gn_output_dir,
+             '--check-generated',
+             '--check-system',
+             cwd=gn_source_dir)
+
 
 def ninja(directory: Path, *args, **kwargs) -> None:
     """Runs ninja in the specified directory."""
diff --git a/pw_protobuf/encoder_fuzzer.cc b/pw_protobuf/encoder_fuzzer.cc
index 1ede047..f22eaed 100644
--- a/pw_protobuf/encoder_fuzzer.cc
+++ b/pw_protobuf/encoder_fuzzer.cc
@@ -12,15 +12,14 @@
 // License for the specific language governing permissions and limitations under
 // the License.
 
-#include <pw_fuzzer/asan_interface.h>
-#include <pw_fuzzer/fuzzed_data_provider.h>
-
 #include <cstddef>
 #include <cstdint>
 #include <cstring>
 #include <span>
 #include <vector>
 
+#include "pw_fuzzer/asan_interface.h"
+#include "pw_fuzzer/fuzzed_data_provider.h"
 #include "pw_protobuf/encoder.h"
 
 namespace {
diff --git a/pw_protobuf_compiler/proto.gni b/pw_protobuf_compiler/proto.gni
index 51d443f..33fe5d7 100644
--- a/pw_protobuf_compiler/proto.gni
+++ b/pw_protobuf_compiler/proto.gni
@@ -212,6 +212,7 @@
       public_deps = [ "$dir_pw_third_party/nanopb" ] + invoker.deps
       sources = invoker.outputs
       public = filter_include(sources, [ "*.pb.h" ])
+      check_includes = false
     }
   }
 }
@@ -244,6 +245,7 @@
                     "$dir_pw_rpc/raw:method_union",
                   ] + invoker.deps
     public = invoker.outputs
+    check_includes = false
   }
 }