Update to Bazel 8.0.0

Updates to Bazel 8.0.0 and tidies up the MODULE.bazel and .bazelrc
files.

Bug: b/372510795
Change-Id: I118e8548eb062e068905b387cd3bfcf5e4020733
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/maize/+/259372
Pigweed-Auto-Submit: Armando Montanez <amontanez@google.com>
Reviewed-by: Travis Geiselbrecht <travisg@google.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Erik Gilling <konkers@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed-service-accounts.iam.gserviceaccount.com>
diff --git a/.bazelrc b/.bazelrc
index c3dc1ee..84f3961 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -12,13 +12,70 @@
 # License for the specific language governing permissions and limitations under
 # the License.
 
+# Standard Pigweed flags
+# ======================
+# All Pigweed projects are expected to set these flags. They mostly pre-adopt
+# future Bazel settings, and most are critical to working around known issues.
+#
+# The source of truth for these flags is @pigweed//pw_build:pigweed.bazelrc in
+# the main Pigweed repo.
+
+# Don't automatically create __init__.py files.
+#
+# This prevents spurious package name collisions at import time, and should be
+# the default (https://github.com/bazelbuild/bazel/issues/7386). It's
+# particularly helpful for Pigweed, because we have many potential package name
+# collisions due to a profusion of stuttering paths like
+# pw_transfer/py/pw_transfer.
+common --incompatible_default_to_explicit_init_py
+
+# Do not attempt to configure an autodetected (local) toolchain. We vendor all
+# our toolchains, and CI VMs may not have any local toolchain to detect.
+common --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1
+
+# Don't propagate flags or defines to the exec config. This will become the
+# default one day (https://github.com/bazelbuild/bazel/issues/22457) and will
+# improve cache hit rates between builds targeting different platforms. This is
+# especially impactful for large host tools like protoc, which will have its
+# cache invalidated when your host C++ config changes, causing many rebuilds
+# of protoc (https://pwbug.dev/315871648).
+common --experimental_exclude_defines_from_exec_config
+common --experimental_exclude_starlark_flags_from_exec_config
+
+# Enforces consistent action environment variables. This is important to
+# address Protobuf's rebuild sensitivity on changes to the environment
+# variables. It also improves cache hit rates. Should be true by default one
+# day (https://github.com/bazelbuild/bazel/issues/7026).
+build --incompatible_strict_action_env
+
+# Expose exec toolchains for Python. We use these toolchains in some rule
+# implementations (git grep for
+# "@rules_python//python:exec_tools_toolchain_type").
+build --@rules_python//python/config_settings:exec_tools_toolchain=enabled
+
+# TODO: https://github.com/bazelbuild/rules_python/issues/2515 - This flag was
+# enabled with Bazel 8.0.0, but it breaks py_proto_library imports when using
+# the latest release of rules_python (1.0.0). Flipping this flag is a temporary
+# workaround.
+common --legacy_external_runfiles=True
+
+# General Bazel configuration
+# ===========================
+common --verbose_failures
+test --test_output=errors
+
+# Rust configuration
+# ==================
+# TODO: https://pwbug.dev/389149411 - Always enabling clippy/rustfmt aspects
+# causes toolchain resolution problems for the device builds.
+
 # Enable clippy lints
-build --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect
-build --output_groups=+clippy_checks
+build:lint --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect
+build:lint --output_groups=+clippy_checks
 
 # Enforce rustfmt formatting
-build --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
-build --output_groups=+rustfmt_checks
+build:lint --aspects=@rules_rust//rust:defs.bzl%rustfmt_aspect
+build:lint --output_groups=+rustfmt_checks
 
 # TODO - konkers: fix upstream stable toolchains
 common --@@rules_rust+//rust/toolchain/channel=nightly
@@ -27,6 +84,7 @@
 
 # Clippy broken with embedded tests
 build:qemu-microbit --output_groups=-clippy_checks
+build:qemu-microbit --output_groups=-rustfmt_checks
 build:qemu-microbit --platforms=//target/qemu:microbit --output_groups=-clippy_checks
 run:qemu-microbit --run_under="@qemu//:qemu-system-arm \
 -cpu cortex-m0 \
@@ -39,6 +97,7 @@
 
 # Clippy broken with embedded tests
 build:qemu-lm3s6965evb --output_groups=-clippy_checks
+build:qemu-lm3s6965evb --output_groups=-rustfmt_checks
 build:qemu-lm3s6965evb --platforms=//target/qemu:lm3s6965evb
 run:qemu-lm3s6965evb --run_under="@qemu//:qemu-system-arm \
 -cpu cortex-m3 \
@@ -72,6 +131,10 @@
 common:remote_cache --remote_cache=grpcs://remotebuildexecution.googleapis.com
 common:remote_cache --remote_instance_name=projects/pigweed-rbe-open/instances/default-instance
 common:remote_cache --remote_upload_local_results=false
+# TODO: https://github.com/bazelbuild/bazel/issues/24867 - This flag breaks
+# runfiles handling with remote caching, and causes a bunch of
+# java.io.FileNotFoundException when creating runfiles trees.
+common:remote_cache --experimental_inprocess_symlink_creation=false
 
 # cache-silo-key: this is essentially a "salt" added to the remote cache key.
 # Change it to a new value when we want to create a new cache from scratch
diff --git a/.bazelversion b/.bazelversion
index 3447823..ae9a76b 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-46341b1a59c7a1cc8ca0dc604ad53b6de7fee653
+8.0.0
diff --git a/BUILD.bazel b/BUILD.bazel
index b93ab02..ad49d99 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -15,4 +15,8 @@
 alias(
     name = "gen_rust_project",
     actual = "@rules_rust//tools/rust_analyzer:gen_rust_project",
+    target_compatible_with = select({
+        "@platforms//os:none": ["@platforms//:incompatible"],
+        "//conditions:default": [],
+    })
 )
diff --git a/MODULE.bazel b/MODULE.bazel
index 0b6370f..d743020 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -20,14 +20,14 @@
 bazel_dep(name = "rules_rust", version = "0.54.1")
 bazel_dep(name = "pigweed")
 bazel_dep(name = "platforms", version = "0.0.10")
-bazel_dep(name = "pw_toolchain")
+bazel_dep(name = "rules_python", version = "0.40.0")
 
 # Module overrides
 # ================
 
 git_override(
     module_name = "pigweed",
-    commit = "0638a779a74de192d554411c09895fee9ad98e59",
+    commit = "3173ab38ddaa0617685501aba30c3b367bacc03d",
     remote = "https://pigweed.googlesource.com/pigweed/pigweed",
     patch_strip = 1,
     patches = [
@@ -35,13 +35,6 @@
     ],
 )
 
-git_override(
-    module_name = "pw_toolchain",
-    commit = "0638a779a74de192d554411c09895fee9ad98e59",
-    remote = "https://pigweed.googlesource.com/pigweed/pigweed",
-    strip_prefix = "pw_toolchain_bazel",
-)
-
 single_version_override(
     module_name = "rules_rust",
     patch_strip = 1,
@@ -66,7 +59,7 @@
 )
 
 # Disable rules_rust toolchains
-rust = use_extension("//rust:extensions.bzl", "rust")
+rust = use_extension("@rules_rust//rust:extensions.bzl", "rust")
 rust.toolchain(versions = [])
 use_repo(rust, "rust_toolchains")
 
diff --git a/pigweed.json b/pigweed.json
index c563a8b..93922fb 100644
--- a/pigweed.json
+++ b/pigweed.json
@@ -10,6 +10,11 @@
                         "//..."
                     ],
                     [
+                        "build",
+                        "--config=lint",
+                        "//..."
+                    ],
+                    [
                         "test",
                         "//..."
                     ],