Fix and test Bazel 9 support (#282)

diff --git a/.bazelversion b/.bazelversion
index 2b0aa21..e7fdef7 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-8.2.1
+8.4.2
diff --git a/.bcr/presubmit.yml b/.bcr/presubmit.yml
index 0b703dc..2b91d1c 100644
--- a/.bcr/presubmit.yml
+++ b/.bcr/presubmit.yml
@@ -3,7 +3,7 @@
   matrix:
     # java_fuzz_test fails on macos_arm64 due to code signing violation
     platform: ["ubuntu2204", "macos"]
-    bazel: ["7.*", "8.*"]
+    bazel: ["7.*", "8.*", "9.*"]
   tasks:
     run_tests:
       name: "Run test module"
diff --git a/.github/workflows/bazel_test.yml b/.github/workflows/bazel_test.yml
index 0cd931e..f879312 100644
--- a/.github/workflows/bazel_test.yml
+++ b/.github/workflows/bazel_test.yml
@@ -174,20 +174,24 @@
   bzlmod_examples_libfuzzer:
     name: Bzlmod examples (libFuzzer)
     runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        bazel: ["7.*", "8.*", "9.*"]
     steps:
       - name: Checkout repository
         uses: actions/checkout@v2
-      - name: Run regression tests on macOS
-        run: |
-          cd examples/bzlmod
-          bazel test --verbose_failures --test_output=all --@my_rules_fuzzing//fuzzing:cc_engine=@my_rules_fuzzing//fuzzing/engines:libfuzzer //...
+      - name: Run Bzlmod tests with libFuzzer
+        working-directory: examples/bzlmod
+        run: USE_BAZEL_VERSION=${{ matrix.bazel }} bazel test --verbose_failures --test_output=all --@my_rules_fuzzing//fuzzing:cc_engine=@my_rules_fuzzing//fuzzing/engines:libfuzzer //...
   bzlmod_examples_replay:
     name: Bzlmod examples (replay)
     runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        bazel: ["7.*", "8.*", "9.*"]
     steps:
       - name: Checkout repository
         uses: actions/checkout@v2
-      - name: Run regression tests on macOS
-        run: |
-          cd examples/bzlmod
-          bazel test --verbose_failures --test_output=all --@my_rules_fuzzing//fuzzing:cc_engine=@my_rules_fuzzing//fuzzing/engines:replay //...
+      - name: Run Bzlmod tests with replay
+        working-directory: examples/bzlmod
+        run: USE_BAZEL_VERSION=${{ matrix.bazel }} bazel test --verbose_failures --test_output=all --@my_rules_fuzzing//fuzzing:cc_engine=@my_rules_fuzzing//fuzzing/engines:replay //...
diff --git a/MODULE.bazel b/MODULE.bazel
index 351664a..3e95629 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -23,12 +23,12 @@
 bazel_dep(name = "bazel_skylib", version = "1.5.0")
 bazel_dep(name = "platforms", version = "0.0.8")
 bazel_dep(name = "rules_python", version = "0.28.0")
-bazel_dep(name = "rules_cc", version = "0.0.17")
+bazel_dep(name = "rules_cc", version = "0.2.1")
 bazel_dep(name = "rules_java", version = "6.5.2")
 bazel_dep(name = "rules_shell", version = "0.3.0")
 
 bazel_dep(name = "stardoc", version = "0.6.2", dev_dependency = True, repo_name = "io_bazel_stardoc")
-bazel_dep(name = "googletest", version = "1.14.0.bcr.1", dev_dependency = True, repo_name = "com_google_googletest")
+bazel_dep(name = "googletest", version = "1.17.0.bcr.2", dev_dependency = True, repo_name = "com_google_googletest")
 bazel_dep(name = "re2", version = "2023-11-01", dev_dependency = True)
 
 non_module_dependencies = use_extension("//fuzzing/private:extensions.bzl", "non_module_dependencies")
diff --git a/docs/BUILD b/docs/BUILD
index 355adf3..21c4957 100644
--- a/docs/BUILD
+++ b/docs/BUILD
@@ -45,7 +45,7 @@
         "//fuzzing/private:regression.bzl",
         "//fuzzing/private:util.bzl",
         "//fuzzing/private/oss_fuzz:package.bzl",
-        "@rules_cc//cc:bzl_srcs",
+        "@rules_cc//cc:core_rules",
         "@rules_fuzzing_oss_fuzz//:instrum.bzl",
         "@rules_java//java:rules",
     ],
diff --git a/fuzzing/private/oss_fuzz/BUILD.tpl b/fuzzing/private/oss_fuzz/BUILD.tpl
index 790821f..d82ec5c 100644
--- a/fuzzing/private/oss_fuzz/BUILD.tpl
+++ b/fuzzing/private/oss_fuzz/BUILD.tpl
@@ -12,6 +12,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+load("@rules_cc//cc:cc_library.bzl", "cc_library")
+load("@rules_java//java:java_library.bzl", "java_library")
+load("@rules_java//java:java_import.bzl", "java_import")
 load("@rules_fuzzing//fuzzing:cc_defs.bzl", "cc_fuzzing_engine")
 load("@rules_fuzzing//fuzzing:java_defs.bzl", "java_fuzzing_engine")
 
@@ -40,6 +43,8 @@
 java_import(
     name = "oss_fuzz_java_stub",
     jars = [%{jazzer_jars}],
+) if [%{jazzer_jars}] else java_library(
+    name = "oss_fuzz_java_stub",
 )
 
 
diff --git a/honggfuzz.BUILD b/honggfuzz.BUILD
index 29d9fca..583e3f5 100644
--- a/honggfuzz.BUILD
+++ b/honggfuzz.BUILD
@@ -19,6 +19,9 @@
 #   * libunwind-dev
 #   * libblocksruntime-dev
 
+load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
+load("@rules_cc//cc:cc_library.bzl", "cc_library")
+
 # Disable the layering check for including the external headers.
 package(features = ["-layering_check"])