Files
codex/patches/v8_module_deps.patch
T
Sean Huang 85de07048c Isolate V8 source dependencies and their C++ runtime settings (#56261)
## Why

V8's Abseil and protobuf's shared Abseil can be built for different C++ runtimes. Give V8's copy a distinct inline namespace so both can link into one binary without interposing incompatible functions.

## What changed

- Move pinned V8 dependency imports and BUILD overlays into `third_party/v8`, and inject those repositories into V8 through a module-extension bridge with no fallback downloads.
- Build V8's Abseil with a V8-specific inline namespace while preserving protobuf's shared Abseil namespace.
- Apply V8's C++ runtime settings in the Abseil, Highway, and simdutf overlays, and remove the shared `rules_cc` patch.
- Document source dependency ownership and the version, checksum, and overlay review procedure for V8 upgrades.

GitOrigin-RevId: 2b8e3deed285559f8dd3324647cb4b81089f2f56
2026-10-22 20:49:13 +00:00

232 lines
8.2 KiB
Diff

# What: remove Chromium's checkout-only toolchain bootstrapping and expose one
# module-extension bridge for dependency imports owned by Codex.
# Scope: V8 MODULE and the small ingress extension only. Versions, BUILD files,
# and dependency build policy live in //third_party/v8.
diff --git a/orig/v8-15.2.124.1/MODULE.bazel b/mod/v8-15.2.124.1/MODULE.bazel
--- a/orig/v8-15.2.124.1/MODULE.bazel
+++ b/mod/v8-15.2.124.1/MODULE.bazel
@@ -7,13 +7,13 @@
bazel_dep(name = "rules_cc", version = "0.2.17")
bazel_dep(name = "rules_python", version = "1.7.0")
bazel_dep(name = "platforms", version = "1.0.0")
-bazel_dep(name = "abseil-cpp", version = "20250814.1")
-bazel_dep(name = "highway", version = "1.2.0")
pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
pip.parse(
hub_name = "v8_python_deps",
python_version = "3.11",
+ # Use the pip resolver to preserve V8's hashes and repository names.
+ simpleapi_skip = ["jinja2", "markupsafe"],
requirements_lock = "//:bazel/requirements.txt",
extra_pip_args = [
"--require-hashes",
@@ -22,179 +22,15 @@
)
use_repo(pip, "v8_python_deps")
-# Define the local LLVM toolchain repository
-llvm_toolchain_repository = use_repo_rule("//bazel/toolchain:llvm_repository.bzl", "llvm_toolchain_repository")
-
-llvm_toolchain_repository(
- name = "llvm_toolchain",
- path = "third_party/llvm-build/Release+Asserts",
- config_file_content = """
-load("@rules_cc//cc:defs.bzl", "CcToolchainConfigInfo", "cc_common")
-load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", "feature", "flag_group", "flag_set", "tool_path")
-
-def _impl(ctx):
- tool_paths = [
- tool_path(name = "gcc", path = "bin/clang"),
- tool_path(name = "ld", path = "bin/lld"),
- tool_path(name = "ar", path = "bin/llvm-ar"),
- tool_path(name = "cpp", path = "bin/clang++"),
- tool_path(name = "gcov", path = "/bin/false"),
- tool_path(name = "nm", path = "bin/llvm-nm"),
- tool_path(name = "objdump", path = "bin/llvm-objdump"),
- tool_path(name = "strip", path = "bin/llvm-strip"),
- ]
-
- features = [
- feature(
- name = "default_compile_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- "c-compile",
- "c++-compile",
- "c++-header-parsing",
- "c++-module-compile",
- "c++-module-codegen",
- "linkstamp-compile",
- "assemble",
- "preprocess-assemble",
- ],
- flag_groups = [
- flag_group(
- flags = [
- "--sysroot={WORKSPACE_ROOT}/build/linux/debian_bullseye_amd64-sysroot",
- "-nostdinc++",
- "-isystem",
- "{WORKSPACE_ROOT}/buildtools/third_party/libc++",
- "-isystem",
- "{WORKSPACE_ROOT}/third_party/libc++/src/include",
- "-isystem",
- "{WORKSPACE_ROOT}/third_party/libc++abi/src/include",
- "-isystem",
- "{WORKSPACE_ROOT}/third_party/libc++/src/src",
- "-isystem",
- "{WORKSPACE_ROOT}/third_party/llvm-libc/src",
- "-D_LIBCPP_HARDENING_MODE_DEFAULT=_LIBCPP_HARDENING_MODE_NONE",
- "-DLIBC_NAMESPACE=__llvm_libc_cr",
- ],
- ),
- ],
- ),
- ],
- ),
- feature(
- name = "default_linker_flags",
- enabled = True,
- flag_sets = [
- flag_set(
- actions = [
- "c++-link-executable",
- "c++-link-dynamic-library",
- "c++-link-nodeps-dynamic-library",
- ],
- flag_groups = [
- flag_group(
- flags = [
- "--sysroot={WORKSPACE_ROOT}/build/linux/debian_bullseye_amd64-sysroot",
- "-fuse-ld=lld",
- "-lm",
- "-lpthread",
- ],
- ),
- ],
- ),
- ],
- ),
- ]
-
- return cc_common.create_cc_toolchain_config_info(
- ctx = ctx,
- toolchain_identifier = "local_clang",
- features = features,
- cxx_builtin_include_directories = [
- "{WORKSPACE_ROOT}/buildtools/third_party/libc++",
- "{WORKSPACE_ROOT}/third_party/libc++/src/include",
- "{WORKSPACE_ROOT}/third_party/libc++abi/src/include",
- "{WORKSPACE_ROOT}/third_party/libc++/src/src",
- "{WORKSPACE_ROOT}/third_party/llvm-libc/src",
- "{WORKSPACE_ROOT}/third_party/llvm-build/Release+Asserts/lib/clang/22/include",
- "{WORKSPACE_ROOT}/third_party/llvm-build/Release+Asserts/lib/clang/23/include",
- "{WORKSPACE_ROOT}/build/linux/debian_bullseye_amd64-sysroot/usr/include",
- "{WORKSPACE_ROOT}/build/linux/debian_bullseye_amd64-sysroot/usr/local/include",
- ],
- host_system_name = "local",
- target_system_name = "local",
- target_cpu = "k8",
- target_libc = "unknown",
- compiler = "clang",
- abi_version = "unknown",
- abi_libc_version = "unknown",
- tool_paths = tool_paths,
- )
-
-cc_toolchain_config = rule(
- implementation = _impl,
- attrs = {},
- provides = [CcToolchainConfigInfo],
+# Codex supplies the dependency repositories used by its V8 builds.
+codex_deps = use_extension("//:bazel/codex_deps.bzl", "codex_deps")
+use_repo(
+ codex_deps,
+ "v8_abseil",
+ "dragonbox",
+ "fast_float",
+ "fp16",
+ "highway",
+ "icu",
+ "simdutf",
)
-""",
- build_file_content = """
-load("@rules_cc//cc:defs.bzl", "cc_toolchain")
-load(":cc_toolchain_config.bzl", "cc_toolchain_config")
-
-package(default_visibility = ["//visibility:public"])
-
-filegroup(
- name = "all_files",
- srcs = glob(["**/*"]),
-)
-
-filegroup(name = "empty")
-
-cc_toolchain_config(name = "k8_toolchain_config")
-
-cc_toolchain(
- name = "k8_toolchain",
- all_files = ":all_files",
- ar_files = ":all_files",
- compiler_files = ":all_files",
- dwp_files = ":empty",
- linker_files = ":all_files",
- objcopy_files = ":all_files",
- strip_files = ":all_files",
- supports_param_files = 0,
- toolchain_config = ":k8_toolchain_config",
- toolchain_identifier = "local_clang",
-)
-
-toolchain(
- name = "cc_toolchain_k8",
- exec_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:linux",
- ],
- target_compatible_with = [
- "@platforms//cpu:x86_64",
- "@platforms//os:linux",
- ],
- toolchain = ":k8_toolchain",
- toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
-)
-""",
-)
-
-register_toolchains("@llvm_toolchain//:cc_toolchain_k8")
-
-# Define local repository for libc++ from third_party sources
-libcxx_repository = use_repo_rule("//bazel/toolchain:libcxx_repository.bzl", "libcxx_repository")
-
-libcxx_repository(
- name = "libcxx",
-)
-
-single_version_override(
- module_name = "highway",
- patches = ["//bazel/patches:highway_rules_cc.patch"],
- patch_strip = 1,
-)
diff --git a/orig/v8-15.2.124.1/bazel/codex_deps.bzl b/mod/v8-15.2.124.1/bazel/codex_deps.bzl
new file mode 100644
--- /dev/null
+++ b/mod/v8-15.2.124.1/bazel/codex_deps.bzl
@@ -0,0 +1,10 @@
+"""Dependency ingress for V8 when built by Codex.
+
+The root module injects the repositories; this extension declares no defaults
+that could silently select a different dependency from the one Codex builds.
+"""
+
+def _codex_deps_impl(module_ctx):
+ return module_ctx.extension_metadata(reproducible = True)
+
+codex_deps = module_extension(implementation = _codex_deps_impl)