ccache: Add per-package flag

BUG=b:308409836
TEST=BOARD=amd64-generic bazel build @portage//target/chromeos-base/featured --@portage//internal/packages/stage2/target/board/chromiumos/chromeos-base/featured:9999_ccache --//bazel/portage:ccache_dir=$HOME/ccache/

Change-Id: I44765ba88a881b8c027f02341619d91a77727a7f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/bazel/+/5222020
Reviewed-by: Raul Rangel <rrangel@chromium.org>
Tested-by: Li-Yu Yu <aaronyu@google.com>
Commit-Queue: Li-Yu Yu <aaronyu@google.com>
diff --git a/portage/BUILD.bazel b/portage/BUILD.bazel
index 7d16963..7c94084 100644
--- a/portage/BUILD.bazel
+++ b/portage/BUILD.bazel
@@ -133,6 +133,13 @@
 bool_flag(
     name = "ccache",
     build_setting_default = False,
+)
+
+config_setting(
+    name = "ccache_enabled_global",
+    flag_values = {
+        ":ccache": "True",
+    },
     visibility = ["//visibility:public"],
 )
 
diff --git a/portage/bin/alchemist/src/bin/alchemist/generate_repo/internal/packages/templates/package.BUILD.bazel b/portage/bin/alchemist/src/bin/alchemist/generate_repo/internal/packages/templates/package.BUILD.bazel
index 810eb4f..c86ffd6 100644
--- a/portage/bin/alchemist/src/bin/alchemist/generate_repo/internal/packages/templates/package.BUILD.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/generate_repo/internal/packages/templates/package.BUILD.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 
@@ -151,6 +152,10 @@
         "//conditions:default": None,
     }),
     {%- endif %}
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":{{ ebuild.version }}{{ suffix }}_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
 {%- endmacro -%}
 
 {%- for ebuild in ebuilds %}
@@ -336,6 +341,18 @@
     out = "{{ ebuild.version }}{{ suffix }}_incremental/MARKER",
 )
 
+bool_flag(
+    name = "{{ ebuild.version }}{{ suffix }}_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "{{ ebuild.version }}{{ suffix }}_ccache_enabled_local",
+    flag_values = {
+        ":{{ ebuild.version }}{{ suffix }}_ccache": "True",
+    },
+)
+
 ebuild(
     name = "{{ ebuild.version }}{{ suffix }}",
     {%- if suffix %}
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/dev-lang/go/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/dev-lang/go/BUILD.golden.bazel
index c402f72..199984a 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/dev-lang/go/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/dev-lang/go/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.20.5_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5",
     ebuild = "go-1.20.5.ebuild",
@@ -119,6 +132,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.20.5_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.20.5_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.20.5_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/simple/aaa/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/simple/aaa/BUILD.golden.bazel
index 34a712f..9ab0fd4 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/simple/aaa/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/simple/aaa/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "aaa-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/simple/bbb/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/simple/bbb/BUILD.golden.bazel
index a843340..d290e3b 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/simple/bbb/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/simple/bbb/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "bbb-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/binutils/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/binutils/BUILD.golden.bazel
index c89b96e..1f9f17b 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/binutils/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/binutils/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.39_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_ccache_enabled_local",
+    flag_values = {
+        ":2.39_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39",
     ebuild = "binutils-2.39.ebuild",
@@ -119,6 +132,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.39_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "2.39_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "2.39_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/crossdev/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
index d348e27..cb9f2e1 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "20211027_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_ccache_enabled_local",
+    flag_values = {
+        ":20211027_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027",
     ebuild = "crossdev-20211027.ebuild",
@@ -119,6 +132,10 @@
         ":20211027_incremental_enabled": ":20211027_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":20211027_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":20211027_incremental_enabled": ":20211027_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "20211027_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":20211027_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":20211027_hermetic_test_package_incremental_enabled": ":20211027_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":20211027_hermetic_test_package_incremental_enabled": ":20211027_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "20211027_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":20211027_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":20211027_portage_profile_test_package_incremental_enabled": ":20211027_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":20211027_portage_profile_test_package_incremental_enabled": ":20211027_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/gcc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/gcc/BUILD.golden.bazel
index 614840d..2bc01e0 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/gcc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-devel/gcc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-10.2.0.ebuild",
@@ -119,6 +132,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
index 713341a..d5fd565 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.14_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_ccache_enabled_local",
+    flag_values = {
+        ":4.14_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14",
     ebuild = "linux-headers-4.14.ebuild",
@@ -119,6 +132,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.14_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.14_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.14_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
index da0390e..3ffea73 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "17.0_pre498229-r9_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9",
     ebuild = "compiler-rt-17.0_pre498229-r9.ebuild",
@@ -119,6 +132,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":17.0_pre498229-r9_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "17.0_pre498229-r9_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "17.0_pre498229-r9_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
index fd46810..866bec3 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-libs-10.2.0.ebuild",
@@ -119,6 +132,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/glibc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/glibc/BUILD.golden.bazel
index f297d38..a98ec62 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/glibc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/glibc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.35-r25_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25",
     ebuild = "glibc-2.35-r25.ebuild",
@@ -119,6 +132,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.35-r25_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "2.35-r25_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "2.35-r25_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -637,6 +698,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/libcxx/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
index c279a82..a11af3a 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "libcxx-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
index b2078b3..5db2a5d 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "llvm-libunwind-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
index 2d087de..208e986 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "bashrcandpatches-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/distfiles/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/distfiles/BUILD.golden.bazel
index 38210bf..d75c804 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/distfiles/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/distfiles/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "distfiles-1.0.ebuild",
@@ -120,6 +133,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -207,6 +224,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -231,6 +252,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -303,6 +336,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -387,6 +424,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -411,6 +452,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -467,6 +520,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -535,6 +592,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -641,6 +702,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/failure/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/failure/BUILD.golden.bazel
index 352ba9f..f8fd00e 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/failure/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/failure/BUILD.golden.bazel
@@ -10,6 +10,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 string_flag(
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/hostonly/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/hostonly/BUILD.golden.bazel
index 49ce4d2..357bdda 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/hostonly/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/hostonly/BUILD.golden.bazel
@@ -10,6 +10,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 string_flag(
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/inherit/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/inherit/BUILD.golden.bazel
index f47a1fb..77f0075 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/inherit/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/inherit/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "inherit-1.0.ebuild",
@@ -121,6 +134,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -209,6 +226,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -233,6 +254,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -306,6 +339,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -391,6 +428,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -415,6 +456,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -472,6 +525,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -541,6 +598,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -648,6 +709,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
index 0fdb9bf..e1cc36f 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -90,6 +91,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "testonlydeps-1.0.ebuild",
@@ -161,6 +174,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -248,6 +265,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -272,6 +293,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -344,6 +377,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -428,6 +465,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -452,6 +493,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -508,6 +561,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -576,6 +633,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -682,6 +743,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
index 0a5bdd2..70db110 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1-r4_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4",
     ebuild = "target-sdk-implicit-system-1-r4.ebuild",
@@ -125,6 +138,10 @@
         ":1-r4_incremental_enabled": ":1-r4_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1-r4_portage_profile_test_package",
@@ -217,6 +234,10 @@
         ":1-r4_incremental_enabled": ":1-r4_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -241,6 +262,18 @@
     out = "1-r4_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -318,6 +351,10 @@
         ":1-r4_hermetic_test_package_incremental_enabled": ":1-r4_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -407,6 +444,10 @@
         ":1-r4_hermetic_test_package_incremental_enabled": ":1-r4_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -431,6 +472,18 @@
     out = "1-r4_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -492,6 +545,10 @@
         ":1-r4_portage_profile_test_package_incremental_enabled": ":1-r4_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -565,6 +622,10 @@
         ":1-r4_portage_profile_test_package_incremental_enabled": ":1-r4_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -692,6 +753,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
index 19031fa..74c23f1 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.4.28_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28",
     ebuild = "libxcrypt-4.4.28.ebuild",
@@ -119,6 +132,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.4.28_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.4.28_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.4.28_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/portage-stable/virtual/os-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/portage-stable/virtual/os-headers/BUILD.golden.bazel
index ddb6882..b38e2cd 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/portage-stable/virtual/os-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/board/portage-stable/virtual/os-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "0-r2_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2",
     ebuild = "os-headers-0-r2.ebuild",
@@ -119,6 +132,10 @@
         ":0-r2_incremental_enabled": ":0-r2_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":0-r2_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":0-r2_incremental_enabled": ":0-r2_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "0-r2_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":0-r2_hermetic_test_package_incremental_enabled": ":0-r2_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":0-r2_hermetic_test_package_incremental_enabled": ":0-r2_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "0-r2_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":0-r2_portage_profile_test_package_incremental_enabled": ":0-r2_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":0-r2_portage_profile_test_package_incremental_enabled": ":0-r2_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/dev-lang/go/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/dev-lang/go/BUILD.golden.bazel
index ad20a39..040e76b 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/dev-lang/go/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/dev-lang/go/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.20.5_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5",
     ebuild = "go-1.20.5.ebuild",
@@ -119,6 +132,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.20.5_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.20.5_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.20.5_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/simple/aaa/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/simple/aaa/BUILD.golden.bazel
index 5ebb592..6493f62 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/simple/aaa/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/simple/aaa/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "aaa-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/simple/bbb/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/simple/bbb/BUILD.golden.bazel
index 03f3b86..116d2d4 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/simple/bbb/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/simple/bbb/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "bbb-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel
index 511be96..2425c6f 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.39_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_ccache_enabled_local",
+    flag_values = {
+        ":2.39_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39",
     ebuild = "binutils-2.39.ebuild",
@@ -119,6 +132,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.39_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "2.39_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "2.39_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
index d818643..7e73cee 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "20211027_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_ccache_enabled_local",
+    flag_values = {
+        ":20211027_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027",
     ebuild = "crossdev-20211027.ebuild",
@@ -119,6 +132,10 @@
         ":20211027_incremental_enabled": ":20211027_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":20211027_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":20211027_incremental_enabled": ":20211027_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "20211027_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":20211027_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":20211027_hermetic_test_package_incremental_enabled": ":20211027_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":20211027_hermetic_test_package_incremental_enabled": ":20211027_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "20211027_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":20211027_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":20211027_portage_profile_test_package_incremental_enabled": ":20211027_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":20211027_portage_profile_test_package_incremental_enabled": ":20211027_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel
index ff8ceed..a89006b 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-10.2.0.ebuild",
@@ -119,6 +132,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
index 3ee4110..6e89905 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.14_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_ccache_enabled_local",
+    flag_values = {
+        ":4.14_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14",
     ebuild = "linux-headers-4.14.ebuild",
@@ -119,6 +132,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.14_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.14_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.14_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
index e3b3f8a..256e8c4 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "17.0_pre498229-r9_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9",
     ebuild = "compiler-rt-17.0_pre498229-r9.ebuild",
@@ -119,6 +132,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":17.0_pre498229-r9_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "17.0_pre498229-r9_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "17.0_pre498229-r9_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
index 5a001a2..6c92b15 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-libs-10.2.0.ebuild",
@@ -119,6 +132,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel
index c5db2b0..f03349a 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.35-r25_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25",
     ebuild = "glibc-2.35-r25.ebuild",
@@ -119,6 +132,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.35-r25_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "2.35-r25_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "2.35-r25_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -637,6 +698,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
index 1a80287..f915cda 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "libcxx-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
index d872aa0..60c857c 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "llvm-libunwind-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
index 5d7b0f8..2db880e 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "bashrcandpatches-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel
index e6dc3fe..83bf1ef 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "distfiles-1.0.ebuild",
@@ -120,6 +133,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -207,6 +224,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -231,6 +252,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -303,6 +336,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -387,6 +424,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -411,6 +452,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -467,6 +520,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -535,6 +592,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -641,6 +702,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/failure/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/failure/BUILD.golden.bazel
index 352ba9f..f8fd00e 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/failure/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/failure/BUILD.golden.bazel
@@ -10,6 +10,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 string_flag(
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel
index 4e8042d..cd2e619 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "hostonly-1.0.ebuild",
@@ -120,6 +133,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -207,6 +224,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -231,6 +252,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -303,6 +336,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -387,6 +424,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -411,6 +452,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -467,6 +520,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -535,6 +592,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -641,6 +702,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/inherit/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/inherit/BUILD.golden.bazel
index b01b826..f10f329 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/inherit/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/inherit/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "inherit-1.0.ebuild",
@@ -121,6 +134,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -209,6 +226,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -233,6 +254,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -306,6 +339,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -391,6 +428,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -415,6 +456,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -472,6 +525,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -541,6 +598,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -648,6 +709,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
index ee2e62b..a330249 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -90,6 +91,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "testonlydeps-1.0.ebuild",
@@ -161,6 +174,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -248,6 +265,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -272,6 +293,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -344,6 +377,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -428,6 +465,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -452,6 +493,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -508,6 +561,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -576,6 +633,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -682,6 +743,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
index 3f54413..57f0ea7 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1-r4_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4",
     ebuild = "target-sdk-implicit-system-1-r4.ebuild",
@@ -127,6 +140,10 @@
         ":1-r4_incremental_enabled": ":1-r4_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1-r4_portage_profile_test_package",
@@ -221,6 +238,10 @@
         ":1-r4_incremental_enabled": ":1-r4_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -245,6 +266,18 @@
     out = "1-r4_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -324,6 +357,10 @@
         ":1-r4_hermetic_test_package_incremental_enabled": ":1-r4_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -415,6 +452,10 @@
         ":1-r4_hermetic_test_package_incremental_enabled": ":1-r4_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -439,6 +480,18 @@
     out = "1-r4_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -502,6 +555,10 @@
         ":1-r4_portage_profile_test_package_incremental_enabled": ":1-r4_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -577,6 +634,10 @@
         ":1-r4_portage_profile_test_package_incremental_enabled": ":1-r4_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -717,6 +778,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
index d6301ab..fbb2d87 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.4.28_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28",
     ebuild = "libxcrypt-4.4.28.ebuild",
@@ -119,6 +132,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.4.28_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.4.28_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.4.28_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/portage-stable/virtual/os-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/portage-stable/virtual/os-headers/BUILD.golden.bazel
index 028d627..d944743 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/portage-stable/virtual/os-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/portage-stable/virtual/os-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "0-r2_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2",
     ebuild = "os-headers-0-r2.ebuild",
@@ -119,6 +132,10 @@
         ":0-r2_incremental_enabled": ":0-r2_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":0-r2_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":0-r2_incremental_enabled": ":0-r2_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "0-r2_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":0-r2_hermetic_test_package_incremental_enabled": ":0-r2_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":0-r2_hermetic_test_package_incremental_enabled": ":0-r2_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "0-r2_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":0-r2_portage_profile_test_package_incremental_enabled": ":0-r2_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":0-r2_portage_profile_test_package_incremental_enabled": ":0-r2_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel
index 5be24e8..1888e88 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.39_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_ccache_enabled_local",
+    flag_values = {
+        ":2.39_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39",
     ebuild = "binutils-2.39.ebuild",
@@ -119,6 +132,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.39_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "2.39_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "2.39_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel
index e6697a8..91589a4 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "17.0_pre498229-r9_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9",
     ebuild = "compiler-rt-17.0_pre498229-r9.ebuild",
@@ -119,6 +132,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":17.0_pre498229-r9_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "17.0_pre498229-r9_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "17.0_pre498229-r9_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel
index 8b1009a..ba42558 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-10.2.0.ebuild",
@@ -119,6 +132,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel
index b40ca9e..dd31e4b 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.35-r25_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25",
     ebuild = "glibc-2.35-r25.ebuild",
@@ -120,6 +133,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.35-r25_portage_profile_test_package",
@@ -207,6 +224,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -231,6 +252,18 @@
     out = "2.35-r25_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -303,6 +336,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -387,6 +424,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -411,6 +452,18 @@
     out = "2.35-r25_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -466,6 +519,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -533,6 +590,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -642,6 +703,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel
index 7192778..47340a3 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.20.5_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5",
     ebuild = "go-1.20.5.ebuild",
@@ -119,6 +132,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.20.5_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.20.5_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.20.5_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel
index 74f2d47..7c20943 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "libcxx-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel
index 4beca11..b922ba4 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.4.28_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28",
     ebuild = "libxcrypt-4.4.28.ebuild",
@@ -119,6 +132,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.4.28_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.4.28_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.4.28_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel
index 0da24dd..54755ad 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.14_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_ccache_enabled_local",
+    flag_values = {
+        ":4.14_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14",
     ebuild = "linux-headers-4.14.ebuild",
@@ -119,6 +132,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.14_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.14_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.14_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel
index b2fdbbd..07e66dc 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage1/target/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "llvm-libunwind-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/dev-lang/go/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/dev-lang/go/BUILD.golden.bazel
index c08bf9e..f939075 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/dev-lang/go/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/dev-lang/go/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.20.5_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5",
     ebuild = "go-1.20.5.ebuild",
@@ -116,6 +129,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.20.5_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "1.20.5_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "1.20.5_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/simple/aaa/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/simple/aaa/BUILD.golden.bazel
index 2300b44..ac9c391 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/simple/aaa/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/simple/aaa/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "aaa-1.0.ebuild",
@@ -116,6 +129,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/simple/bbb/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/simple/bbb/BUILD.golden.bazel
index 41b204b..33613f9 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/simple/bbb/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/simple/bbb/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "bbb-1.0.ebuild",
@@ -116,6 +129,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel
index ead2a2a..b844bb1 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.39_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_ccache_enabled_local",
+    flag_values = {
+        ":2.39_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39",
     ebuild = "binutils-2.39.ebuild",
@@ -116,6 +129,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.39_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "2.39_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "2.39_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
index 7d80fa3..25d362f 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "20211027_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_ccache_enabled_local",
+    flag_values = {
+        ":20211027_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027",
     ebuild = "crossdev-20211027.ebuild",
@@ -116,6 +129,10 @@
         ":20211027_incremental_enabled": ":20211027_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":20211027_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":20211027_incremental_enabled": ":20211027_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "20211027_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":20211027_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":20211027_hermetic_test_package_incremental_enabled": ":20211027_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":20211027_hermetic_test_package_incremental_enabled": ":20211027_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "20211027_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":20211027_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":20211027_portage_profile_test_package_incremental_enabled": ":20211027_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":20211027_portage_profile_test_package_incremental_enabled": ":20211027_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel
index 1d99376..5e21fb8 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-10.2.0.ebuild",
@@ -116,6 +129,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
index db9d81e..7c2afe6 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.14_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_ccache_enabled_local",
+    flag_values = {
+        ":4.14_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14",
     ebuild = "linux-headers-4.14.ebuild",
@@ -116,6 +129,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.14_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "4.14_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "4.14_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
index d110074..92e5582 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "17.0_pre498229-r9_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9",
     ebuild = "compiler-rt-17.0_pre498229-r9.ebuild",
@@ -116,6 +129,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":17.0_pre498229-r9_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "17.0_pre498229-r9_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "17.0_pre498229-r9_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
index a0a00c3..d4bd325 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 sdk_install_deps(
@@ -66,6 +67,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-libs-10.2.0.ebuild",
@@ -133,6 +146,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -216,6 +233,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -240,6 +261,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -308,6 +341,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -388,6 +425,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -412,6 +453,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -465,6 +518,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -530,6 +587,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -595,6 +656,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel
index 7e3898b..e7e1d9f 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 sdk_install_deps(
@@ -68,6 +69,18 @@
     out = "2.35-r25_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25",
     ebuild = "glibc-2.35-r25.ebuild",
@@ -135,6 +148,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.35-r25_portage_profile_test_package",
@@ -218,6 +235,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -242,6 +263,18 @@
     out = "2.35-r25_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -310,6 +343,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -390,6 +427,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -414,6 +455,18 @@
     out = "2.35-r25_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -467,6 +520,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -532,6 +589,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -597,6 +658,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
index 0775ac8..328a932 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "libcxx-16.0_pre484197.ebuild",
@@ -116,6 +129,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
index 442fbdc..76d297d 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "llvm-libunwind-16.0_pre484197.ebuild",
@@ -116,6 +129,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
index 5712d83..590aec1 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "bashrcandpatches-1.0.ebuild",
@@ -116,6 +129,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel
index 16ee05d..1df2d86 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "distfiles-1.0.ebuild",
@@ -117,6 +130,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -201,6 +218,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -225,6 +246,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -294,6 +327,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -375,6 +412,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -399,6 +440,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -453,6 +506,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -519,6 +576,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -585,6 +646,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/failure/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/failure/BUILD.golden.bazel
index 352ba9f..f8fd00e 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/failure/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/failure/BUILD.golden.bazel
@@ -10,6 +10,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 string_flag(
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel
index f0767ca..9a24353 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "hostonly-1.0.ebuild",
@@ -117,6 +130,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -201,6 +218,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -225,6 +246,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -294,6 +327,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -375,6 +412,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -399,6 +440,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -453,6 +506,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -519,6 +576,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -585,6 +646,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/inherit/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/inherit/BUILD.golden.bazel
index 5608c1f..0abc349 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/inherit/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/inherit/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "inherit-1.0.ebuild",
@@ -118,6 +131,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -203,6 +220,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -227,6 +248,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -297,6 +330,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -379,6 +416,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -403,6 +444,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -458,6 +511,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -525,6 +582,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -592,6 +653,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
index 740f4e1..17ad9ec 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 sdk_install_deps(
@@ -66,6 +67,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "testonlydeps-1.0.ebuild",
@@ -134,6 +147,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -218,6 +235,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -242,6 +263,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -311,6 +344,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -392,6 +429,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -416,6 +457,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -470,6 +523,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -536,6 +593,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -602,6 +663,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
index 22d7c2e..568dba9 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1-r4_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4",
     ebuild = "target-sdk-implicit-system-1-r4.ebuild",
@@ -125,6 +138,10 @@
         ":1-r4_incremental_enabled": ":1-r4_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1-r4_portage_profile_test_package",
@@ -223,6 +240,10 @@
         ":1-r4_incremental_enabled": ":1-r4_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -247,6 +268,18 @@
     out = "1-r4_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -324,6 +357,10 @@
         ":1-r4_hermetic_test_package_incremental_enabled": ":1-r4_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -419,6 +456,10 @@
         ":1-r4_hermetic_test_package_incremental_enabled": ":1-r4_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -443,6 +484,18 @@
     out = "1-r4_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -505,6 +558,10 @@
         ":1-r4_portage_profile_test_package_incremental_enabled": ":1-r4_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -585,6 +642,10 @@
         ":1-r4_portage_profile_test_package_incremental_enabled": ":1-r4_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -659,6 +720,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
index 5ba97b5..8d34867 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.4.28_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28",
     ebuild = "libxcrypt-4.4.28.ebuild",
@@ -116,6 +129,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.4.28_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "4.4.28_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "4.4.28_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/portage-stable/virtual/os-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/portage-stable/virtual/os-headers/BUILD.golden.bazel
index 76ff2b5..7e74b5b 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/portage-stable/virtual/os-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/portage-stable/virtual/os-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "0-r2_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2",
     ebuild = "os-headers-0-r2.ebuild",
@@ -116,6 +129,10 @@
         ":0-r2_incremental_enabled": ":0-r2_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":0-r2_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":0-r2_incremental_enabled": ":0-r2_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "0-r2_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":0-r2_hermetic_test_package_incremental_enabled": ":0-r2_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":0-r2_hermetic_test_package_incremental_enabled": ":0-r2_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "0-r2_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":0-r2_portage_profile_test_package_incremental_enabled": ":0-r2_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":0-r2_portage_profile_test_package_incremental_enabled": ":0-r2_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel
index 7b27534..669d243 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.39_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_ccache_enabled_local",
+    flag_values = {
+        ":2.39_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39",
     ebuild = "binutils-2.39.ebuild",
@@ -116,6 +129,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.39_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "2.39_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "2.39_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel
index dbb6f46..c2c24db 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "17.0_pre498229-r9_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9",
     ebuild = "compiler-rt-17.0_pre498229-r9.ebuild",
@@ -116,6 +129,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":17.0_pre498229-r9_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "17.0_pre498229-r9_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "17.0_pre498229-r9_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel
index ab4f8bb..d3061e4 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-10.2.0.ebuild",
@@ -116,6 +129,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel
index c514551..3dfd668 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.35-r25_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25",
     ebuild = "glibc-2.35-r25.ebuild",
@@ -117,6 +130,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.35-r25_portage_profile_test_package",
@@ -201,6 +218,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -225,6 +246,18 @@
     out = "2.35-r25_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -294,6 +327,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -375,6 +412,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -399,6 +440,18 @@
     out = "2.35-r25_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -452,6 +505,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -517,6 +574,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -583,6 +644,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel
index 53eb9b7..ae7ab0a 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.20.5_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5",
     ebuild = "go-1.20.5.ebuild",
@@ -116,6 +129,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.20.5_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "1.20.5_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "1.20.5_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel
index e888568..5798851 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "libcxx-16.0_pre484197.ebuild",
@@ -116,6 +129,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel
index f996f61..2bd26a7 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.4.28_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28",
     ebuild = "libxcrypt-4.4.28.ebuild",
@@ -116,6 +129,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.4.28_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "4.4.28_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "4.4.28_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel
index 4bc333a..ae05997 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.14_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_ccache_enabled_local",
+    flag_values = {
+        ":4.14_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14",
     ebuild = "linux-headers-4.14.ebuild",
@@ -116,6 +129,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.14_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "4.14_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "4.14_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel
index b4b7a6f..c3f2fb1 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "llvm-libunwind-16.0_pre484197.ebuild",
@@ -116,6 +129,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -199,6 +216,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -223,6 +244,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -291,6 +324,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -371,6 +408,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -395,6 +436,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -448,6 +501,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -513,6 +570,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_test(
@@ -578,6 +639,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/dev-lang/go/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/dev-lang/go/BUILD.golden.bazel
index f2f93b4..5084431 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/dev-lang/go/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/dev-lang/go/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.20.5_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5",
     ebuild = "go-1.20.5.ebuild",
@@ -119,6 +132,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.20.5_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.20.5_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.20.5_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/simple/aaa/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/simple/aaa/BUILD.golden.bazel
index 8e131f7..ac18c66 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/simple/aaa/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/simple/aaa/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "aaa-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/simple/bbb/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/simple/bbb/BUILD.golden.bazel
index 38f0332..e9ab217 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/simple/bbb/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/simple/bbb/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "bbb-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/binutils/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/binutils/BUILD.golden.bazel
index 09e73e5..7af1db7 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/binutils/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/binutils/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.39_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_ccache_enabled_local",
+    flag_values = {
+        ":2.39_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39",
     ebuild = "binutils-2.39.ebuild",
@@ -119,6 +132,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.39_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "2.39_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "2.39_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/crossdev/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
index 206cb8b..dc6b3b0 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "20211027_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_ccache_enabled_local",
+    flag_values = {
+        ":20211027_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027",
     ebuild = "crossdev-20211027.ebuild",
@@ -119,6 +132,10 @@
         ":20211027_incremental_enabled": ":20211027_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":20211027_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":20211027_incremental_enabled": ":20211027_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "20211027_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":20211027_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":20211027_hermetic_test_package_incremental_enabled": ":20211027_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":20211027_hermetic_test_package_incremental_enabled": ":20211027_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "20211027_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":20211027_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":20211027_portage_profile_test_package_incremental_enabled": ":20211027_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":20211027_portage_profile_test_package_incremental_enabled": ":20211027_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/gcc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/gcc/BUILD.golden.bazel
index fedc04f..d2010a1 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/gcc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-devel/gcc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-10.2.0.ebuild",
@@ -119,6 +132,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
index 44edec4..1731b83 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.14_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_ccache_enabled_local",
+    flag_values = {
+        ":4.14_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14",
     ebuild = "linux-headers-4.14.ebuild",
@@ -119,6 +132,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.14_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.14_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.14_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
index 57a973d..2788c3f 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "17.0_pre498229-r9_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9",
     ebuild = "compiler-rt-17.0_pre498229-r9.ebuild",
@@ -119,6 +132,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":17.0_pre498229-r9_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "17.0_pre498229-r9_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "17.0_pre498229-r9_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
index 254732c..2e1c149 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 sdk_install_deps(
@@ -66,6 +67,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-libs-10.2.0.ebuild",
@@ -136,6 +149,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -222,6 +239,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -246,6 +267,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -317,6 +350,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -400,6 +437,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -424,6 +465,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -479,6 +532,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -546,6 +603,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -651,6 +712,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/glibc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/glibc/BUILD.golden.bazel
index 008951a..9729a49 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/glibc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/glibc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 sdk_install_deps(
@@ -68,6 +69,18 @@
     out = "2.35-r25_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25",
     ebuild = "glibc-2.35-r25.ebuild",
@@ -138,6 +151,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.35-r25_portage_profile_test_package",
@@ -224,6 +241,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -248,6 +269,18 @@
     out = "2.35-r25_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -319,6 +352,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -402,6 +439,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -426,6 +467,18 @@
     out = "2.35-r25_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -481,6 +534,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -548,6 +605,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -656,6 +717,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/libcxx/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
index aaaa35c..6601081 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "libcxx-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
index 57bab16..3dd03c4 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "llvm-libunwind-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
index 51aa0d2..8f0def5 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "bashrcandpatches-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/distfiles/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/distfiles/BUILD.golden.bazel
index 3591c0b..29d18ad 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/distfiles/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/distfiles/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "distfiles-1.0.ebuild",
@@ -120,6 +133,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -207,6 +224,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -231,6 +252,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -303,6 +336,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -387,6 +424,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -411,6 +452,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -467,6 +520,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -535,6 +592,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -641,6 +702,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/failure/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/failure/BUILD.golden.bazel
index 352ba9f..f8fd00e 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/failure/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/failure/BUILD.golden.bazel
@@ -10,6 +10,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 string_flag(
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/hostonly/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/hostonly/BUILD.golden.bazel
index 49ce4d2..357bdda 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/hostonly/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/hostonly/BUILD.golden.bazel
@@ -10,6 +10,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 string_flag(
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/inherit/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/inherit/BUILD.golden.bazel
index 5704acd..316ec6b 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/inherit/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/inherit/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "inherit-1.0.ebuild",
@@ -121,6 +134,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -209,6 +226,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -233,6 +254,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -306,6 +339,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -391,6 +428,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -415,6 +456,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -472,6 +525,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -541,6 +598,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -648,6 +709,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
index e9c16b2..1b6c710 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -90,6 +91,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "testonlydeps-1.0.ebuild",
@@ -161,6 +174,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -248,6 +265,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -272,6 +293,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -344,6 +377,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -428,6 +465,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -452,6 +493,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -508,6 +561,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -576,6 +633,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -682,6 +743,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
index 3cf8c89..d664329 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1-r4_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4",
     ebuild = "target-sdk-implicit-system-1-r4.ebuild",
@@ -125,6 +138,10 @@
         ":1-r4_incremental_enabled": ":1-r4_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1-r4_portage_profile_test_package",
@@ -217,6 +234,10 @@
         ":1-r4_incremental_enabled": ":1-r4_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -241,6 +262,18 @@
     out = "1-r4_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -318,6 +351,10 @@
         ":1-r4_hermetic_test_package_incremental_enabled": ":1-r4_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -407,6 +444,10 @@
         ":1-r4_hermetic_test_package_incremental_enabled": ":1-r4_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -431,6 +472,18 @@
     out = "1-r4_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -492,6 +545,10 @@
         ":1-r4_portage_profile_test_package_incremental_enabled": ":1-r4_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -565,6 +622,10 @@
         ":1-r4_portage_profile_test_package_incremental_enabled": ":1-r4_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -692,6 +753,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
index 01fb5f0..92b0fe4 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.4.28_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28",
     ebuild = "libxcrypt-4.4.28.ebuild",
@@ -119,6 +132,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.4.28_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.4.28_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.4.28_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/portage-stable/virtual/os-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/portage-stable/virtual/os-headers/BUILD.golden.bazel
index 36b88ff..76eb7cc 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/portage-stable/virtual/os-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage2/target/board/portage-stable/virtual/os-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "0-r2_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2",
     ebuild = "os-headers-0-r2.ebuild",
@@ -119,6 +132,10 @@
         ":0-r2_incremental_enabled": ":0-r2_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":0-r2_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":0-r2_incremental_enabled": ":0-r2_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "0-r2_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":0-r2_hermetic_test_package_incremental_enabled": ":0-r2_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":0-r2_hermetic_test_package_incremental_enabled": ":0-r2_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "0-r2_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":0-r2_portage_profile_test_package_incremental_enabled": ":0-r2_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":0-r2_portage_profile_test_package_incremental_enabled": ":0-r2_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/dev-lang/go/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/dev-lang/go/BUILD.golden.bazel
index 5edf3d0..9dc169b 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/dev-lang/go/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/dev-lang/go/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.20.5_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5",
     ebuild = "go-1.20.5.ebuild",
@@ -119,6 +132,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.20.5_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.20.5_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.20.5_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/simple/aaa/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/simple/aaa/BUILD.golden.bazel
index 19679d0..0d0cffb 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/simple/aaa/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/simple/aaa/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "aaa-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/simple/bbb/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/simple/bbb/BUILD.golden.bazel
index 64fa09b..00410dc 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/simple/bbb/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/simple/bbb/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "bbb-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel
index e940b96..61b2664 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/binutils/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.39_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_ccache_enabled_local",
+    flag_values = {
+        ":2.39_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39",
     ebuild = "binutils-2.39.ebuild",
@@ -119,6 +132,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.39_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "2.39_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "2.39_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
index 61b8079..a366f7c 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/crossdev/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "20211027_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_ccache_enabled_local",
+    flag_values = {
+        ":20211027_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027",
     ebuild = "crossdev-20211027.ebuild",
@@ -119,6 +132,10 @@
         ":20211027_incremental_enabled": ":20211027_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":20211027_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":20211027_incremental_enabled": ":20211027_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "20211027_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":20211027_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":20211027_hermetic_test_package_incremental_enabled": ":20211027_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":20211027_hermetic_test_package_incremental_enabled": ":20211027_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "20211027_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "20211027_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "20211027_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":20211027_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "20211027_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":20211027_portage_profile_test_package_incremental_enabled": ":20211027_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":20211027_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":20211027_portage_profile_test_package_incremental_enabled": ":20211027_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":20211027_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel
index 754dd60..246525c 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-devel/gcc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-10.2.0.ebuild",
@@ -119,6 +132,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
index 02eebc4..85c538f 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-kernel/linux-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.14_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_ccache_enabled_local",
+    flag_values = {
+        ":4.14_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14",
     ebuild = "linux-headers-4.14.ebuild",
@@ -119,6 +132,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.14_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.14_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.14_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
index 0ad2f28..9d82d88 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/compiler-rt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "17.0_pre498229-r9_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9",
     ebuild = "compiler-rt-17.0_pre498229-r9.ebuild",
@@ -119,6 +132,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":17.0_pre498229-r9_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "17.0_pre498229-r9_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "17.0_pre498229-r9_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
index f40abc0..e257ce9 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/gcc-libs/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-libs-10.2.0.ebuild",
@@ -119,6 +132,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel
index f2d6d16..f3b7179 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/glibc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.35-r25_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25",
     ebuild = "glibc-2.35-r25.ebuild",
@@ -119,6 +132,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.35-r25_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "2.35-r25_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "2.35-r25_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -637,6 +698,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
index 56fa342..f54368d 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/libcxx/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "libcxx-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
index d23dda2..eb7179c 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/sys-libs/llvm-libunwind/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "llvm-libunwind-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
index 357cee6..0dada15 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/bashrcandpatches/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "bashrcandpatches-1.0.ebuild",
@@ -119,6 +132,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel
index 3583d58..091769b 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/distfiles/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "distfiles-1.0.ebuild",
@@ -120,6 +133,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -207,6 +224,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -231,6 +252,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -303,6 +336,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -387,6 +424,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -411,6 +452,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -467,6 +520,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -535,6 +592,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -641,6 +702,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/failure/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/failure/BUILD.golden.bazel
index 352ba9f..f8fd00e 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/failure/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/failure/BUILD.golden.bazel
@@ -10,6 +10,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 string_flag(
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel
index efa4df8..55027b9 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/hostonly/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "hostonly-1.0.ebuild",
@@ -120,6 +133,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -207,6 +224,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -231,6 +252,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -303,6 +336,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -387,6 +424,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -411,6 +452,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -467,6 +520,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -535,6 +592,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -641,6 +702,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/inherit/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/inherit/BUILD.golden.bazel
index 3608181..bc8adfa 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/inherit/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/inherit/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "inherit-1.0.ebuild",
@@ -121,6 +134,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -209,6 +226,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -233,6 +254,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -306,6 +339,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -391,6 +428,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -415,6 +456,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -472,6 +525,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -541,6 +598,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -648,6 +709,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
index a172199..3ad0ac2 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/test-cases/testonlydeps/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -90,6 +91,18 @@
     out = "1.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_ccache_enabled_local",
+    flag_values = {
+        ":1.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0",
     ebuild = "testonlydeps-1.0.ebuild",
@@ -161,6 +174,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.0_portage_profile_test_package",
@@ -248,6 +265,10 @@
         ":1.0_incremental_enabled": ":1.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -272,6 +293,18 @@
     out = "1.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -344,6 +377,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -428,6 +465,10 @@
         ":1.0_hermetic_test_package_incremental_enabled": ":1.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -452,6 +493,18 @@
     out = "1.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -508,6 +561,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -576,6 +633,10 @@
         ":1.0_portage_profile_test_package_incremental_enabled": ":1.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -682,6 +743,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
index 5f25bff..584327e 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/chromiumos/virtual/target-sdk-implicit-system/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1-r4_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4",
     ebuild = "target-sdk-implicit-system-1-r4.ebuild",
@@ -127,6 +140,10 @@
         ":1-r4_incremental_enabled": ":1-r4_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1-r4_portage_profile_test_package",
@@ -221,6 +238,10 @@
         ":1-r4_incremental_enabled": ":1-r4_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -245,6 +266,18 @@
     out = "1-r4_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -324,6 +357,10 @@
         ":1-r4_hermetic_test_package_incremental_enabled": ":1-r4_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -415,6 +452,10 @@
         ":1-r4_hermetic_test_package_incremental_enabled": ":1-r4_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -439,6 +480,18 @@
     out = "1-r4_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1-r4_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1-r4_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1-r4_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1-r4_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -502,6 +555,10 @@
         ":1-r4_portage_profile_test_package_incremental_enabled": ":1-r4_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1-r4_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -577,6 +634,10 @@
         ":1-r4_portage_profile_test_package_incremental_enabled": ":1-r4_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -717,6 +778,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1-r4_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
index fe5557e..e32a724 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/portage-stable/sys-libs/libxcrypt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.4.28_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28",
     ebuild = "libxcrypt-4.4.28.ebuild",
@@ -119,6 +132,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.4.28_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.4.28_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.4.28_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/portage-stable/virtual/os-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/portage-stable/virtual/os-headers/BUILD.golden.bazel
index 02fecd2..0bfb196 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/portage-stable/virtual/os-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/portage-stable/virtual/os-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "0-r2_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2",
     ebuild = "os-headers-0-r2.ebuild",
@@ -119,6 +132,10 @@
         ":0-r2_incremental_enabled": ":0-r2_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":0-r2_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":0-r2_incremental_enabled": ":0-r2_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "0-r2_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":0-r2_hermetic_test_package_incremental_enabled": ":0-r2_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":0-r2_hermetic_test_package_incremental_enabled": ":0-r2_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "0-r2_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "0-r2_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "0-r2_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":0-r2_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "0-r2_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":0-r2_portage_profile_test_package_incremental_enabled": ":0-r2_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":0-r2_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":0-r2_portage_profile_test_package_incremental_enabled": ":0-r2_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":0-r2_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel
index 9954576..1acab86 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/binutils/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.39_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_ccache_enabled_local",
+    flag_values = {
+        ":2.39_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39",
     ebuild = "binutils-2.39.ebuild",
@@ -119,6 +132,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.39_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":2.39_incremental_enabled": ":2.39_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "2.39_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":2.39_hermetic_test_package_incremental_enabled": ":2.39_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "2.39_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.39_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.39_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.39_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.39_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.39_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":2.39_portage_profile_test_package_incremental_enabled": ":2.39_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.39_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel
index b85ea8d..63f513f 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/compiler-rt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "17.0_pre498229-r9_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9",
     ebuild = "compiler-rt-17.0_pre498229-r9.ebuild",
@@ -119,6 +132,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":17.0_pre498229-r9_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":17.0_pre498229-r9_incremental_enabled": ":17.0_pre498229-r9_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "17.0_pre498229-r9_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":17.0_pre498229-r9_hermetic_test_package_incremental_enabled": ":17.0_pre498229-r9_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "17.0_pre498229-r9_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":17.0_pre498229-r9_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "17.0_pre498229-r9_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":17.0_pre498229-r9_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":17.0_pre498229-r9_portage_profile_test_package_incremental_enabled": ":17.0_pre498229-r9_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":17.0_pre498229-r9_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel
index 0c77d54..bcd1672 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/gcc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "10.2.0_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0",
     ebuild = "gcc-10.2.0.ebuild",
@@ -119,6 +132,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":10.2.0_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":10.2.0_incremental_enabled": ":10.2.0_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "10.2.0_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":10.2.0_hermetic_test_package_incremental_enabled": ":10.2.0_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "10.2.0_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "10.2.0_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "10.2.0_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":10.2.0_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "10.2.0_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":10.2.0_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":10.2.0_portage_profile_test_package_incremental_enabled": ":10.2.0_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":10.2.0_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel
index 8a9168c..75d93dc 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/glibc/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "2.35-r25_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25",
     ebuild = "glibc-2.35-r25.ebuild",
@@ -120,6 +133,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":2.35-r25_portage_profile_test_package",
@@ -207,6 +224,10 @@
         ":2.35-r25_incremental_enabled": ":2.35-r25_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -231,6 +252,18 @@
     out = "2.35-r25_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -303,6 +336,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -387,6 +424,10 @@
         ":2.35-r25_hermetic_test_package_incremental_enabled": ":2.35-r25_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -411,6 +452,18 @@
     out = "2.35-r25_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "2.35-r25_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "2.35-r25_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":2.35-r25_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "2.35-r25_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -466,6 +519,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":2.35-r25_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -533,6 +590,10 @@
         ":2.35-r25_portage_profile_test_package_incremental_enabled": ":2.35-r25_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -642,6 +703,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":2.35-r25_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel
index 99efd17..3539b97 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/go/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "1.20.5_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5",
     ebuild = "go-1.20.5.ebuild",
@@ -119,6 +132,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":1.20.5_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":1.20.5_incremental_enabled": ":1.20.5_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "1.20.5_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":1.20.5_hermetic_test_package_incremental_enabled": ":1.20.5_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "1.20.5_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "1.20.5_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "1.20.5_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":1.20.5_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "1.20.5_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":1.20.5_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":1.20.5_portage_profile_test_package_incremental_enabled": ":1.20.5_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":1.20.5_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel
index b3c4690..0f6a625 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/libcxx/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "libcxx-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel
index 3625512..2708f61 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/libxcrypt/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.4.28_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28",
     ebuild = "libxcrypt-4.4.28.ebuild",
@@ -119,6 +132,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.4.28_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.4.28_incremental_enabled": ":4.4.28_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.4.28_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.4.28_hermetic_test_package_incremental_enabled": ":4.4.28_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.4.28_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.4.28_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.4.28_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.4.28_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.4.28_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.4.28_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.4.28_portage_profile_test_package_incremental_enabled": ":4.4.28_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.4.28_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel
index d251b03..10c016c 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/linux-headers/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "4.14_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_ccache_enabled_local",
+    flag_values = {
+        ":4.14_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14",
     ebuild = "linux-headers-4.14.ebuild",
@@ -119,6 +132,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":4.14_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":4.14_incremental_enabled": ":4.14_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "4.14_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":4.14_hermetic_test_package_incremental_enabled": ":4.14_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "4.14_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "4.14_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "4.14_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":4.14_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "4.14_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":4.14_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":4.14_portage_profile_test_package_incremental_enabled": ":4.14_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":4.14_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel
index d3ec27c..1f21050 100644
--- a/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel
+++ b/portage/bin/alchemist/src/bin/alchemist/testdata/golden/internal/packages/stage3/target/host/toolchains/cross-x86_64-cros-linux-gnu/llvm-libunwind/BUILD.golden.bazel
@@ -9,6 +9,7 @@
 load("@//bazel/portage/build_defs:ebuild.bzl", "ebuild", "ebuild_debug", "ebuild_install", "ebuild_install_action", "ebuild_install_list", "ebuild_test", "ebuild_compare_package_test")
 load("@//bazel/portage/build_defs:package_set.bzl", "package_set")
 load("@//bazel/portage/build_defs:sdk.bzl", "sdk_install_deps")
+load("@bazel_skylib//lib:selects.bzl", "selects")
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "string_flag")
 load("@bazel_skylib//rules:write_file.bzl", "write_file")
 alias(
@@ -49,6 +50,18 @@
     out = "16.0_pre484197_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197",
     ebuild = "llvm-libunwind-16.0_pre484197.ebuild",
@@ -119,6 +132,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_prebuilt",
     portage_profile_test_package = select({
         "@//bazel/portage:portage_config_validator_enabled": ":16.0_pre484197_portage_profile_test_package",
@@ -205,6 +222,10 @@
         ":16.0_pre484197_incremental_enabled": ":16.0_pre484197_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -229,6 +250,18 @@
     out = "16.0_pre484197_hermetic_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_hermetic_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_hermetic_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_hermetic_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_hermetic_test_package",
     suffix = "_hermetic_test_package",
@@ -300,6 +333,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_hermetic_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -383,6 +420,10 @@
         ":16.0_pre484197_hermetic_test_package_incremental_enabled": ":16.0_pre484197_hermetic_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_hermetic_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 
@@ -407,6 +448,18 @@
     out = "16.0_pre484197_portage_profile_test_package_incremental/MARKER",
 )
 
+bool_flag(
+    name = "16.0_pre484197_portage_profile_test_package_ccache",
+    build_setting_default = False,
+)
+
+config_setting(
+    name = "16.0_pre484197_portage_profile_test_package_ccache_enabled_local",
+    flag_values = {
+        ":16.0_pre484197_portage_profile_test_package_ccache": "True",
+    },
+)
+
 ebuild(
     name = "16.0_pre484197_portage_profile_test_package",
     suffix = "_portage_profile_test_package",
@@ -462,6 +515,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     prebuilt = ":16.0_pre484197_portage_profile_test_package_prebuilt",
     visibility = ["@//bazel:internal"],
 )
@@ -529,6 +586,10 @@
         ":16.0_pre484197_portage_profile_test_package_incremental_enabled": ":16.0_pre484197_portage_profile_test_package_cache_marker",
         "//conditions:default": None,
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_portage_profile_test_package_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     visibility = ["@//bazel:internal"],
 )
 ebuild_install(
@@ -634,6 +695,10 @@
         ],
         "@//bazel/portage:compiled_profiles_disabled": [],
     }),
+    ccache = selects.with_or({
+        ("@//bazel/portage:ccache_enabled_global", ":16.0_pre484197_ccache_enabled_local"): True,
+        "//conditions:default": False,
+    }),
     # Bazel sandbox interferes with restoring permissions in durable trees.
     tags = ["no-sandbox"],
     visibility = ["@//bazel:internal"],
diff --git a/portage/build_defs/ebuild.bzl b/portage/build_defs/ebuild.bzl
index 37c498a..2185223 100644
--- a/portage/build_defs/ebuild.bzl
+++ b/portage/build_defs/ebuild.bzl
@@ -12,7 +12,6 @@
 load("//bazel/portage/build_defs:package_contents.bzl", "generate_contents")
 load("//bazel/transitions:primordial.bzl", "primordial_transition")
 
-_CCACHE_LABEL = "//bazel/portage:ccache"
 _CCACHE_DIR_LABEL = "//bazel/portage:ccache_dir"
 
 # The stage1 SDK will need to be built with ebuild_primordial.
@@ -193,9 +192,11 @@
         executable = True,
         cfg = "exec",
     ),
-    _ccache = attr.label(
-        default = Label(_CCACHE_LABEL),
-        providers = [BuildSettingInfo],
+    ccache = attr.bool(
+        doc = """
+        Enable ccache for this ebuild.
+        """,
+        mandatory = True,
     ),
     _ccache_dir = attr.label(
         default = Label(_CCACHE_DIR_LABEL),
@@ -213,11 +214,13 @@
         ccache: Whether ccache is enabled.
         ccache_dir: Directory to store the ccache.
     """
-    ccache = ctx.attr._ccache[BuildSettingInfo].value
+    ccache = ctx.attr.ccache
     ccache_dir = ctx.attr._ccache_dir[BuildSettingInfo].value
 
     if ccache and not ccache_dir:
-        fail("%s set but %s not set" % (_CCACHE_LABEL, _CCACHE_DIR_LABEL))
+        fail(
+            "ccache is enabled for %s but %s not set" % (ctx.label, _CCACHE_DIR_LABEL),
+        )
     if ccache_dir and not ccache_dir.startswith("/"):
         fail("%s=%r is not an absolute path" % (_CCACHE_DIR_LABEL, ccache_dir))