mirror of
https://github.com/openai/codex.git
synced 2026-10-27 18:48:37 +00:00
Move the V8 Bazel build graph into Codex (#57164)
## What changed - Replace the upstream V8 module and dependency bridge with a source repository rule and `third_party/v8/engine.BUILD.bazel`, wiring dependencies and Python generator inputs directly from Codex. - Import source filegroups from the pinned upstream BUILD, rejecting missing boundaries, malformed sections, and unexpected compiled targets. - Define fixed source feature selections in the engine BUILD while retaining release ABI, runtime, and CPU settings. Reuse upstream platform configuration and limit the build integration patch to `bazel/defs.bzl`. - Document source inventory review and canary validation for V8 upgrades. GitOrigin-RevId: 1b42672b77fb8f0f34c41ae3345c0e302a892d44
This commit is contained in:
+18
-20
@@ -807,25 +807,36 @@ inject_repo(crate, "alsa_lib")
|
||||
]
|
||||
]
|
||||
|
||||
bazel_dep(name = "v8", version = "15.2.124.1")
|
||||
bazel_dep(name = "rules_license", version = "1.0.0")
|
||||
|
||||
archive_override(
|
||||
module_name = "v8",
|
||||
engine_repository = use_repo_rule("//third_party/v8:engine_repository.bzl", "engine_repository")
|
||||
|
||||
engine_repository(
|
||||
name = "v8",
|
||||
integrity = "sha256-aNN5G427qQbP/5o+NXONgXR8ZvS6mjf6mfAI6jtxyzI=",
|
||||
patch_strip = 3,
|
||||
patches = [
|
||||
"//patches:v8_module_deps.patch",
|
||||
"//patches:v8_bazel_rules.patch",
|
||||
"//patches:v8_source_portability.patch",
|
||||
"//patches:v8_array_sort_elements_kind.patch",
|
||||
"//third_party/v8:v8_defs.patch",
|
||||
],
|
||||
strip_prefix = "v8-15.2.124.1",
|
||||
urls = ["https://github.com/v8/v8/archive/refs/tags/15.2.124.1.tar.gz"],
|
||||
)
|
||||
|
||||
# The dependency repos and their BUILD files belong to Codex. V8 only needs
|
||||
# its original apparent repo names to resolve to these same imports.
|
||||
# All V8 inputs are owned here, including the pinned Python generator inputs.
|
||||
pip.parse(
|
||||
extra_pip_args = ["--require-hashes"],
|
||||
hub_name = "v8_python_deps",
|
||||
python_version = "3.11",
|
||||
requirements_lock = "@v8//:bazel/requirements.txt",
|
||||
simpleapi_skip = [
|
||||
"jinja2",
|
||||
"markupsafe",
|
||||
],
|
||||
)
|
||||
use_repo(pip, "v8_python_deps")
|
||||
|
||||
v8_dependencies = use_extension("//third_party/v8:dependencies.bzl", "dependencies")
|
||||
use_repo(
|
||||
v8_dependencies,
|
||||
@@ -838,19 +849,6 @@ use_repo(
|
||||
"v8_simdutf",
|
||||
)
|
||||
|
||||
v8_dependency_bridge = use_extension("@v8//:bazel/codex_deps.bzl", "codex_deps")
|
||||
|
||||
inject_repo(
|
||||
v8_dependency_bridge,
|
||||
dragonbox = "v8_dragonbox",
|
||||
fast_float = "v8_fast_float",
|
||||
fp16 = "v8_fp16",
|
||||
highway = "v8_highway",
|
||||
icu = "v8_icu",
|
||||
simdutf = "v8_simdutf",
|
||||
v8_abseil = "v8_abseil",
|
||||
)
|
||||
|
||||
http_archive(
|
||||
name = "v8_crate_152_2_0",
|
||||
build_file = "//third_party/v8:v8_crate.BUILD.bazel",
|
||||
|
||||
@@ -25,8 +25,6 @@ exports_files([
|
||||
"tikv-jemalloc-sys_make_env.patch",
|
||||
"tikv-jemalloc-sys_dependency_flags.patch",
|
||||
"v8_array_sort_elements_kind.patch",
|
||||
"v8_bazel_rules.patch",
|
||||
"v8_module_deps.patch",
|
||||
"v8_source_portability.patch",
|
||||
"webrtc-sys_hermetic_darwin_sysroot.patch",
|
||||
"windows-link.patch",
|
||||
|
||||
@@ -1,456 +0,0 @@
|
||||
# What: adapt upstream V8 Bazel rules to this workspace's hermetic toolchains
|
||||
# and externally provided dependencies.
|
||||
# Scope: Bazel BUILD/defs integration only, including dependency
|
||||
# wiring, generated sources, and visibility; no standalone V8 source patching.
|
||||
|
||||
diff --git a/orig/v8-15.2.124.1/bazel/defs.bzl b/mod/v8-15.2.124.1/bazel/defs.bzl
|
||||
--- a/orig/v8-15.2.124.1/bazel/defs.bzl
|
||||
+++ b/mod/v8-15.2.124.1/bazel/defs.bzl
|
||||
@@ -42,12 +42,30 @@
|
||||
)
|
||||
|
||||
def v8_flag(name, default = False):
|
||||
- _create_option_flag(name = name, build_setting_default = default, scope = "universal")
|
||||
- native.config_setting(name = "is_" + name, flag_values = {name: "True"})
|
||||
- native.config_setting(name = "is_not_" + name, flag_values = {name: "False"})
|
||||
-
|
||||
-def v8_string(name, default = ""):
|
||||
- _create_option_string(name = name, build_setting_default = default, scope = "universal")
|
||||
+ _create_option_flag(
|
||||
+ name = name,
|
||||
+ build_setting_default = default,
|
||||
+ scope = "universal",
|
||||
+ visibility = ["//visibility:public"],
|
||||
+ )
|
||||
+ native.config_setting(
|
||||
+ name = "is_" + name,
|
||||
+ flag_values = {name: "True"},
|
||||
+ visibility = ["//visibility:public"],
|
||||
+ )
|
||||
+ native.config_setting(
|
||||
+ name = "is_not_" + name,
|
||||
+ flag_values = {name: "False"},
|
||||
+ visibility = ["//visibility:public"],
|
||||
+ )
|
||||
+
|
||||
+def v8_string(name, default = "", visibility = None):
|
||||
+ _create_option_string(
|
||||
+ name = name,
|
||||
+ build_setting_default = default,
|
||||
+ scope = "universal",
|
||||
+ visibility = visibility,
|
||||
+ )
|
||||
|
||||
def v8_int(name, default = 0):
|
||||
_create_option_int(name = name, build_setting_default = default, scope = "universal")
|
||||
@@ -106,7 +124,13 @@
|
||||
|
||||
def _default_args():
|
||||
return struct(
|
||||
- deps = [":define_flags", "@libcxx//:libc++"],
|
||||
+ deps = [":define_flags"] + select({
|
||||
+ "@v8//:is_v8_use_rusty_v8_custom_libcxx": [
|
||||
+ "@@//third_party/v8:rusty_v8_custom_libcxx_headers",
|
||||
+ "@@//third_party/v8:rusty_v8_custom_libcxx_runtime",
|
||||
+ ],
|
||||
+ "//conditions:default": [],
|
||||
+ }),
|
||||
defines = select({
|
||||
"@v8//bazel/config:is_windows": [
|
||||
"UNICODE",
|
||||
@@ -136,12 +160,15 @@
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
- "@v8//bazel/config:is_clang": [
|
||||
- "-Wno-invalid-offsetof",
|
||||
- "-Wno-deprecated-this-capture",
|
||||
- "-Wno-deprecated-declarations",
|
||||
- "-std=c++20",
|
||||
- ],
|
||||
+ "@v8//:is_v8_use_rusty_v8_custom_libcxx": [
|
||||
+ "-nostdinc++",
|
||||
+ "-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS",
|
||||
+ "-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE",
|
||||
+ "-D_LIBCPP_INSTRUMENTED_WITH_ASAN=0",
|
||||
+ "-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS",
|
||||
+ ],
|
||||
+ "//conditions:default": [],
|
||||
+ }) + select({
|
||||
"@v8//bazel/config:is_gcc": [
|
||||
"-Wno-extra",
|
||||
"-Wno-array-bounds",
|
||||
@@ -161,9 +188,17 @@
|
||||
"-std=gnu++2a",
|
||||
],
|
||||
"@v8//bazel/config:is_windows": [
|
||||
- "/std:c++20",
|
||||
- ],
|
||||
- "//conditions:default": [],
|
||||
+ "-Wno-invalid-offsetof",
|
||||
+ "-Wno-deprecated-this-capture",
|
||||
+ "-Wno-deprecated-declarations",
|
||||
+ "-std=c++20",
|
||||
+ ],
|
||||
+ "//conditions:default": [
|
||||
+ "-Wno-invalid-offsetof",
|
||||
+ "-Wno-deprecated-this-capture",
|
||||
+ "-Wno-deprecated-declarations",
|
||||
+ "-std=c++20",
|
||||
+ ],
|
||||
}) + select({
|
||||
"@v8//bazel/config:is_gcc_fastbuild": [
|
||||
# Non-debug builds without optimizations fail because
|
||||
@@ -187,12 +222,12 @@
|
||||
includes = ["include"],
|
||||
linkopts = select({
|
||||
"@v8//bazel/config:is_windows": [
|
||||
- "Winmm.lib",
|
||||
- "DbgHelp.lib",
|
||||
- "Advapi32.lib",
|
||||
+ "-lwinmm",
|
||||
+ "-ldbghelp",
|
||||
+ "-ladvapi32",
|
||||
],
|
||||
"@v8//bazel/config:is_macos": ["-pthread"],
|
||||
- "//conditions:default": ["-Wl,--no-as-needed -ldl -latomic -pthread"],
|
||||
+ "//conditions:default": ["-Wl,--no-as-needed -ldl -pthread"],
|
||||
}) + select({
|
||||
":should_add_rdynamic": ["-rdynamic"],
|
||||
"//conditions:default": [],
|
||||
@@ -466,6 +501,11 @@
|
||||
def _mksnapshot(ctx):
|
||||
prefix = ctx.attr.prefix
|
||||
suffix = ctx.attr.suffix
|
||||
+ # Windows cross-builds use Linux for the exec configuration, but the
|
||||
+ # snapshot generator must match the target ABI and run on the Windows
|
||||
+ # runner. Action strategies only choose where an action runs; they cannot
|
||||
+ # change this executable from the exec to the target configuration.
|
||||
+ tool = ctx.executable.target_tool if ctx.attr.target_os == "win" else ctx.executable.tool
|
||||
outs = [
|
||||
ctx.actions.declare_file(prefix + "/snapshot" + suffix + ".cc"),
|
||||
ctx.actions.declare_file(prefix + "/embedded" + suffix + ".S"),
|
||||
@@ -483,7 +523,7 @@
|
||||
"--embedded_src",
|
||||
outs[1].path,
|
||||
] + ctx.attr.args,
|
||||
- executable = ctx.executable.tool,
|
||||
+ executable = tool,
|
||||
progress_message = "Running mksnapshot",
|
||||
)
|
||||
return [DefaultInfo(files = depset(outs))]
|
||||
@@ -498,6 +538,12 @@
|
||||
executable = True,
|
||||
cfg = "exec",
|
||||
),
|
||||
+ "target_tool": attr.label(
|
||||
+ mandatory = True,
|
||||
+ allow_files = True,
|
||||
+ executable = True,
|
||||
+ cfg = "target",
|
||||
+ ),
|
||||
"target_os": attr.string(mandatory = True),
|
||||
"prefix": attr.string(mandatory = True),
|
||||
"suffix": attr.string(mandatory = True),
|
||||
@@ -511,6 +557,7 @@
|
||||
args = args,
|
||||
prefix = "noicu",
|
||||
tool = ":noicu/mksnapshot" + suffix,
|
||||
+ target_tool = ":noicu/mksnapshot" + suffix,
|
||||
suffix = suffix,
|
||||
target_os = select({
|
||||
"@v8//bazel/config:is_macos": "mac",
|
||||
@@ -523,6 +570,7 @@
|
||||
args = args,
|
||||
prefix = "icu",
|
||||
tool = ":icu/mksnapshot" + suffix,
|
||||
+ target_tool = ":icu/mksnapshot" + suffix,
|
||||
suffix = suffix,
|
||||
target_os = select({
|
||||
"@v8//bazel/config:is_macos": "mac",
|
||||
diff --git a/orig/v8-15.2.124.1/BUILD.bazel b/mod/v8-15.2.124.1/BUILD.bazel
|
||||
--- a/orig/v8-15.2.124.1/BUILD.bazel
|
||||
+++ b/mod/v8-15.2.124.1/BUILD.bazel
|
||||
@@ -154,6 +154,10 @@
|
||||
|
||||
v8_flag(name = "v8_enable_v8_checks")
|
||||
|
||||
+v8_flag(name = "v8_enable_sandbox")
|
||||
+
|
||||
+v8_flag(name = "v8_use_rusty_v8_custom_libcxx")
|
||||
+
|
||||
v8_flag(name = "v8_enable_verify_csa")
|
||||
|
||||
v8_flag(name = "v8_enable_verify_heap")
|
||||
@@ -319,7 +323,8 @@
|
||||
# If no explicit value for v8_enable_pointer_compression, we set it to 'none'.
|
||||
v8_string(
|
||||
name = "v8_enable_pointer_compression",
|
||||
- default = "none",
|
||||
+ default = "False",
|
||||
+ visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
# Default setting for v8_enable_pointer_compression.
|
||||
@@ -520,6 +525,7 @@
|
||||
"v8_enable_slow_dchecks": "ENABLE_SLOW_DCHECKS",
|
||||
"v8_enable_runtime_call_stats": "V8_RUNTIME_CALL_STATS",
|
||||
"v8_enable_snapshot_native_code_counters": "V8_SNAPSHOT_NATIVE_CODE_COUNTERS",
|
||||
+ "v8_enable_sandbox": "V8_ENABLE_SANDBOX",
|
||||
"v8_enable_trace_maps": "V8_TRACE_MAPS",
|
||||
"v8_enable_turbofan": "V8_ENABLE_TURBOFAN",
|
||||
"v8_enable_v8_checks": "V8_ENABLE_CHECKS",
|
||||
@@ -4170,28 +4176,14 @@
|
||||
}),
|
||||
)
|
||||
|
||||
-v8_library(
|
||||
- name = "lib_dragonbox",
|
||||
- srcs = ["third_party/dragonbox/src/include/dragonbox/dragonbox.h"],
|
||||
- hdrs = [
|
||||
- "third_party/dragonbox/src/include/dragonbox/dragonbox.h",
|
||||
- ],
|
||||
- includes = [
|
||||
- "third_party/dragonbox/src/include",
|
||||
- ],
|
||||
-)
|
||||
-
|
||||
-v8_library(
|
||||
- name = "lib_fp16",
|
||||
- srcs = ["third_party/fp16/src/include/fp16.h"],
|
||||
- hdrs = [
|
||||
- "third_party/fp16/src/include/fp16/fp16.h",
|
||||
- "third_party/fp16/src/include/fp16/bitcasts.h",
|
||||
- "third_party/fp16/src/include/fp16/macros.h",
|
||||
- ],
|
||||
- includes = [
|
||||
- "third_party/fp16/src/include",
|
||||
- ],
|
||||
+alias(
|
||||
+ name = "lib_dragonbox",
|
||||
+ actual = "@dragonbox//:dragonbox",
|
||||
+)
|
||||
+
|
||||
+alias(
|
||||
+ name = "lib_fp16",
|
||||
+ actual = "@fp16//:fp16",
|
||||
)
|
||||
|
||||
filegroup(
|
||||
@@ -4486,6 +4478,20 @@
|
||||
srcs = [
|
||||
"include/js_protocol.pdl",
|
||||
"src/inspector/inspector_protocol_config.json",
|
||||
+ "third_party/inspector_protocol/code_generator.py",
|
||||
+ "third_party/inspector_protocol/pdl.py",
|
||||
+ "third_party/inspector_protocol/lib/Forward_h.template",
|
||||
+ "third_party/inspector_protocol/lib/Object_cpp.template",
|
||||
+ "third_party/inspector_protocol/lib/Object_h.template",
|
||||
+ "third_party/inspector_protocol/lib/Protocol_cpp.template",
|
||||
+ "third_party/inspector_protocol/lib/ValueConversions_cpp.template",
|
||||
+ "third_party/inspector_protocol/lib/ValueConversions_h.template",
|
||||
+ "third_party/inspector_protocol/lib/Values_cpp.template",
|
||||
+ "third_party/inspector_protocol/lib/Values_h.template",
|
||||
+ "third_party/inspector_protocol/templates/Exported_h.template",
|
||||
+ "third_party/inspector_protocol/templates/Imported_h.template",
|
||||
+ "third_party/inspector_protocol/templates/TypeBuilder_cpp.template",
|
||||
+ "third_party/inspector_protocol/templates/TypeBuilder_h.template",
|
||||
],
|
||||
outs = [
|
||||
"include/inspector/Debugger.h",
|
||||
@@ -4507,15 +4513,19 @@
|
||||
"src/inspector/protocol/Schema.cpp",
|
||||
"src/inspector/protocol/Schema.h",
|
||||
],
|
||||
- cmd = "$(location :code_generator) --jinja_dir . \
|
||||
- --inspector_protocol_dir third_party/inspector_protocol \
|
||||
+ cmd = "INSPECTOR_PROTOCOL_DIR=$$(dirname $(execpath third_party/inspector_protocol/code_generator.py)); \
|
||||
+ PYTHONPATH=$$INSPECTOR_PROTOCOL_DIR:external/rules_python++pip+v8_python_deps_311_jinja2/site-packages:external/rules_python++pip+v8_python_deps_311_markupsafe/site-packages:$${PYTHONPATH-} \
|
||||
+ $(execpath @rules_python//python/bin:python) $(execpath third_party/inspector_protocol/code_generator.py) --jinja_dir . \
|
||||
+ --inspector_protocol_dir $$INSPECTOR_PROTOCOL_DIR \
|
||||
--config $(location :src/inspector/inspector_protocol_config.json) \
|
||||
--config_value protocol.path=$(location :include/js_protocol.pdl) \
|
||||
+ --config_value crdtp.dir=third_party/inspector_protocol/crdtp \
|
||||
--output_base $(@D)/src/inspector",
|
||||
- local = 1,
|
||||
message = "Generating inspector files",
|
||||
tools = [
|
||||
- ":code_generator",
|
||||
+ "@rules_python//python/bin:python",
|
||||
+ requirement("jinja2"),
|
||||
+ requirement("markupsafe"),
|
||||
],
|
||||
)
|
||||
|
||||
@@ -4527,6 +4537,35 @@
|
||||
":v8_libsampler_files",
|
||||
":v8_shared_internal_headers",
|
||||
],
|
||||
+)
|
||||
+
|
||||
+cc_library(
|
||||
+ name = "rusty_v8_internal_headers",
|
||||
+ hdrs = [
|
||||
+ "src/libplatform/default-platform.h",
|
||||
+ ],
|
||||
+ strip_include_prefix = "",
|
||||
+ visibility = ["//visibility:public"],
|
||||
+)
|
||||
+
|
||||
+cc_library(
|
||||
+ name = "rusty_v8_crdtp_headers",
|
||||
+ hdrs = [
|
||||
+ "third_party/inspector_protocol/crdtp/cbor.h",
|
||||
+ "third_party/inspector_protocol/crdtp/dispatch.h",
|
||||
+ "third_party/inspector_protocol/crdtp/error_support.h",
|
||||
+ "third_party/inspector_protocol/crdtp/export.h",
|
||||
+ "third_party/inspector_protocol/crdtp/find_by_first.h",
|
||||
+ "third_party/inspector_protocol/crdtp/frontend_channel.h",
|
||||
+ "third_party/inspector_protocol/crdtp/json.h",
|
||||
+ "third_party/inspector_protocol/crdtp/parser_handler.h",
|
||||
+ "third_party/inspector_protocol/crdtp/protocol_core.h",
|
||||
+ "third_party/inspector_protocol/crdtp/serializable.h",
|
||||
+ "third_party/inspector_protocol/crdtp/span.h",
|
||||
+ "third_party/inspector_protocol/crdtp/status.h",
|
||||
+ ],
|
||||
+ strip_include_prefix = "",
|
||||
+ visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
@@ -4609,11 +4648,9 @@
|
||||
strip_include_prefix = "noicu",
|
||||
)
|
||||
|
||||
-cc_library(
|
||||
+alias(
|
||||
name = "llvm_libc_headers",
|
||||
- hdrs = glob(["third_party/llvm-libc/src/shared/**/*.h"]),
|
||||
- includes = ["third_party/llvm-libc/src"],
|
||||
- defines = ["LIBC_NAMESPACE=__llvm_libc_cr"],
|
||||
+ actual = "@@//third_party/v8:rusty_v8_llvm_libc_headers",
|
||||
)
|
||||
|
||||
v8_library(
|
||||
@@ -4625,9 +4662,9 @@
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
deps = [
|
||||
":llvm_libc_headers",
|
||||
- "@abseil-cpp//absl/synchronization",
|
||||
- "@abseil-cpp//absl/time",
|
||||
- "@abseil-cpp//absl/functional:overload",
|
||||
+ "@v8_abseil//:synchronization",
|
||||
+ "@v8_abseil//:time",
|
||||
+ "@v8_abseil//:overload",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -4655,21 +4692,14 @@
|
||||
deps = [
|
||||
":torque_base_headers",
|
||||
":v8_libbase",
|
||||
- "@abseil-cpp//absl/container:node_hash_map",
|
||||
- "@abseil-cpp//absl/container:node_hash_set",
|
||||
- ],
|
||||
-)
|
||||
-
|
||||
-cc_library(
|
||||
- name = "simdutf",
|
||||
- srcs = ["third_party/simdutf/simdutf.cpp"],
|
||||
- hdrs = ["third_party/simdutf/simdutf.h"],
|
||||
- copts = select({
|
||||
- "@v8//bazel/config:is_clang": ["-std=c++20"],
|
||||
- "@v8//bazel/config:is_gcc": ["-std=gnu++2a"],
|
||||
- "@v8//bazel/config:is_windows": ["/std:c++20"],
|
||||
- "//conditions:default": [],
|
||||
- }),
|
||||
+ "@v8_abseil//:node_hash_map",
|
||||
+ "@v8_abseil//:node_hash_set",
|
||||
+ ],
|
||||
+)
|
||||
+
|
||||
+alias(
|
||||
+ name = "simdutf",
|
||||
+ actual = "@simdutf//:simdutf",
|
||||
)
|
||||
|
||||
v8_library(
|
||||
@@ -4686,7 +4716,7 @@
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
icu_deps = [
|
||||
":icu/generated_torque_definitions_headers",
|
||||
- "//external:icu",
|
||||
+ "@icu//:icu",
|
||||
],
|
||||
icu_srcs = [
|
||||
":generated_regexp_special_case",
|
||||
@@ -4701,14 +4731,14 @@
|
||||
],
|
||||
deps = [
|
||||
":lib_dragonbox",
|
||||
- "//third_party/fast_float/src:fast_float",
|
||||
+ "@fast_float//:fast_float",
|
||||
":lib_fp16",
|
||||
":simdutf",
|
||||
":v8_libbase",
|
||||
- "@abseil-cpp//absl/container:btree",
|
||||
- "@abseil-cpp//absl/container:flat_hash_map",
|
||||
- "@abseil-cpp//absl/container:flat_hash_set",
|
||||
- "@abseil-cpp//absl/functional:overload",
|
||||
+ "@v8_abseil//:btree",
|
||||
+ "@v8_abseil//:flat_hash_map",
|
||||
+ "@v8_abseil//:flat_hash_set",
|
||||
+ "@v8_abseil//:overload",
|
||||
"@highway//:hwy",
|
||||
],
|
||||
)
|
||||
@@ -4757,6 +4787,7 @@
|
||||
alias(
|
||||
name = "core_lib_icu",
|
||||
actual = "icu/v8",
|
||||
+ visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
v8_library(
|
||||
@@ -4808,7 +4839,7 @@
|
||||
],
|
||||
deps = [
|
||||
":v8_libbase",
|
||||
- "//external:icu",
|
||||
+ "@icu//:icu",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -4830,8 +4861,8 @@
|
||||
}),
|
||||
deps = [
|
||||
"v8_libbase",
|
||||
- "@abseil-cpp//absl/container:node_hash_map",
|
||||
- "@abseil-cpp//absl/container:node_hash_set",
|
||||
+ "@v8_abseil//:node_hash_map",
|
||||
+ "@v8_abseil//:node_hash_set",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -4852,9 +4883,20 @@
|
||||
":icu/generated_torque_initializers",
|
||||
":icu/v8_initializers_files",
|
||||
],
|
||||
+ # Match GN's mksnapshot `disable_icf` config. If the linker folds distinct
|
||||
+ # external-reference helpers together while producing the snapshot, the
|
||||
+ # final embedder binary may not fold the same pair and startup
|
||||
+ # deserialization will reject the snapshot.
|
||||
+ # GN also increases the x64 Windows stack reserve because constructing the
|
||||
+ # snapshot overflows the linker's 1 MiB default.
|
||||
linkopts = select({
|
||||
"@v8//bazel/config:is_android": ["-llog"],
|
||||
- "//conditions:default": [],
|
||||
+ "@v8//bazel/config:is_macos": ["-Wl,-no_deduplicate"],
|
||||
+ "@v8//bazel/config:is_windows": [
|
||||
+ "-Wl,/OPT:NOICF",
|
||||
+ "-Wl,/STACK:2097152",
|
||||
+ ],
|
||||
+ "//conditions:default": ["-Wl,--icf=none"],
|
||||
}),
|
||||
noicu_deps = [":v8_libshared_noicu"],
|
||||
noicu_srcs = [
|
||||
@@ -1,231 +0,0 @@
|
||||
# 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)
|
||||
Vendored
+4
@@ -10,11 +10,15 @@ exports_files([
|
||||
"dependencies.bzl",
|
||||
"dependency_config.bzl",
|
||||
"dragonbox.BUILD.bazel",
|
||||
"engine.BUILD.bazel",
|
||||
"engine_repository.bzl",
|
||||
"engine_rules.bzl",
|
||||
"fast_float.BUILD.bazel",
|
||||
"fp16.BUILD.bazel",
|
||||
"highway.BUILD.bazel",
|
||||
"icu.BUILD.bazel",
|
||||
"simdutf.BUILD.bazel",
|
||||
"v8_defs.patch",
|
||||
])
|
||||
|
||||
config_setting(
|
||||
|
||||
Vendored
+23
-6
@@ -35,6 +35,10 @@ Use this as the maintainer flow for a version bump:
|
||||
2. Update the Bazel versioned inputs in `MODULE.bazel` and the source pins
|
||||
in `third_party/v8/dependencies.bzl` and `abseil_repository.bzl` using
|
||||
[the source dependency update procedure](#updating-source-dependencies).
|
||||
Verify the imported source groups by querying the source archive and generating Torque
|
||||
and snapshots for each supported platform. If V8 changes its BUILD section
|
||||
layout, the importer fails instead of silently using an old inventory;
|
||||
update that boundary and review its fixed feature and CPU selections.
|
||||
Then refresh the matching checksum manifest and generated checksums below.
|
||||
3. Publish a release-candidate PR and validate that `v8-canary` passes.
|
||||
4. If the canary is green, publish the release tag and release build.
|
||||
@@ -147,10 +151,20 @@ here declare the targets V8 uses. Abseil, Highway and simdutf apply their C++ ru
|
||||
settings through `dependency_config.bzl`; ICU defines its settings in its own
|
||||
overlay.
|
||||
|
||||
V8's module has a small dependency ingress. The root `MODULE.bazel` injects
|
||||
the seven Codex repositories there, so V8's `@highway`, `@icu`, etc. resolve to
|
||||
the same repositories Codex declares. The bridge has no fallback downloads.
|
||||
V8's BUILD patch still wires these targets into its generator and library graph.
|
||||
`engine_repository.bzl` fetches the V8 source pin and installs Codex's engine
|
||||
BUILD into `@v8`. Source filegroups are read from the pinned upstream BUILD
|
||||
each fetch, including added, removed or reordered groups. The importer rejects
|
||||
missing boundaries, malformed or empty sections, and new compiled targets. Only
|
||||
the two known Dragonbox and FP16 declarations are skipped, since the dependency
|
||||
overlays already supply them. `v8_binary` is valid V8 syntax, but compiled targets
|
||||
must be reviewed against the owned engine BUILD on an upgrade. The
|
||||
upstream `bazel/config` platform and CPU package is reused unchanged.
|
||||
`v8_defs.patch` records just the Codex differences to upstream's
|
||||
`bazel/defs.bzl`: release flag visibility, libc++ headers/runtime, Windows
|
||||
compiler and linker settings, and snapshot generation. All engine rules,
|
||||
including Torque and V8's test configuration helpers, load from that file.
|
||||
The engine BUILD owns feature policy and dependency targets; the remaining V8
|
||||
ABI, runtime and CPU settings still support the existing release commands.
|
||||
|
||||
V8's private Abseil is built from the pinned 20250814.1 sources and uses
|
||||
`codex_v8_lts_20250814` for its supported inline-namespace option. Protobuf
|
||||
@@ -165,9 +179,12 @@ autoupdater: the prebuilt checksum commands above and their CI check validate
|
||||
published archive/binding pairs, not these source revisions. Bazel verifies
|
||||
the declared download hashes and Git revisions; it does not choose them for us.
|
||||
|
||||
Use the V8 tag in the root `MODULE.bazel` `archive_override(module_name = "v8")`
|
||||
Use the V8 tag in the root `MODULE.bazel` `engine_repository(name = "v8")`
|
||||
(currently `15.2.124.1`) as the input. Read that tag's **unpatched** `DEPS`
|
||||
and `MODULE.bazel`; the fetched `@v8` MODULE has Codex's bridge applied.
|
||||
and `MODULE.bazel`; `@v8` deliberately does not include upstream's MODULE.
|
||||
On an upgrade, also review `v8_defs.patch` against the new `bazel/defs.bzl`
|
||||
and run the V8 source canary. A cleanly applying patch does not by itself
|
||||
verify new upstream defaults or code-generation behavior.
|
||||
|
||||
```bash
|
||||
v8_tag=15.2.124.1 # Replace with the V8 source tag selected for this upgrade.
|
||||
|
||||
Vendored
+933
@@ -0,0 +1,933 @@
|
||||
# Copyright 2021 the V8 project authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
load("@@//third_party/v8:engine_rules.bzl", "v8_fixed_source_features")
|
||||
load("@bazel_skylib//lib:selects.bzl", "selects")
|
||||
load("@rules_cc//cc:cc_library.bzl", "cc_library")
|
||||
load("@rules_python//python:defs.bzl", "py_binary", "py_test")
|
||||
load(
|
||||
"@v8//:bazel/defs.bzl",
|
||||
"v8_binary",
|
||||
"v8_build_config",
|
||||
"v8_config",
|
||||
"v8_flag",
|
||||
"v8_library",
|
||||
"v8_mksnapshot",
|
||||
"v8_string",
|
||||
"v8_torque_files",
|
||||
)
|
||||
load("@v8//:bazel/v8-non-pointer-compression.bzl", "v8_binary_non_pointer_compression")
|
||||
load("@v8_python_deps//:requirements.bzl", "requirement")
|
||||
|
||||
# Used by the Codex-owned pip hub; pin changes travel with the V8 source.
|
||||
exports_files(["bazel/requirements.txt"])
|
||||
|
||||
# Codex V8 source policy. Only ABI, runtime and target CPU vary; these still
|
||||
# accept the existing release inputs. CPU selection lives in bazel/config.
|
||||
# Upstream experiments, profiling and debug flags use their pinned 15.2 defaults.
|
||||
# ICU and no-ICU remain separate targets for the engine and its generators.
|
||||
v8_flag(name = "v8_enable_sandbox")
|
||||
|
||||
v8_flag(name = "v8_use_rusty_v8_custom_libcxx")
|
||||
|
||||
# Maglev is supported on the two architectures shipped by Codex. Keep the
|
||||
# architecture tests separate from feature policy for host-tool transitions.
|
||||
selects.config_setting_group(
|
||||
name = "enable_maglev",
|
||||
match_any = [
|
||||
"@v8//bazel/config:v8_target_x64",
|
||||
"@v8//bazel/config:v8_target_arm64",
|
||||
],
|
||||
)
|
||||
|
||||
selects.config_setting_group(
|
||||
name = "enable_maglev_x64",
|
||||
match_all = [
|
||||
":enable_maglev",
|
||||
"@v8//bazel/config:v8_target_x64",
|
||||
],
|
||||
)
|
||||
|
||||
selects.config_setting_group(
|
||||
name = "enable_maglev_arm64",
|
||||
match_all = [
|
||||
":enable_maglev",
|
||||
"@v8//bazel/config:v8_target_arm64",
|
||||
],
|
||||
)
|
||||
|
||||
# WebAssembly remains enabled; its source implementation still depends on OS.
|
||||
selects.config_setting_group(
|
||||
name = "webassembly_on_posix",
|
||||
match_any = ["@v8//bazel/config:is_posix"],
|
||||
)
|
||||
|
||||
selects.config_setting_group(
|
||||
name = "webassembly_on_windows",
|
||||
match_any = ["@v8//bazel/config:is_windows"],
|
||||
)
|
||||
|
||||
# Artifact transitions set True or False, never the upstream "none" auto mode.
|
||||
# The 32-bit Torque helper can also force this off.
|
||||
v8_string(
|
||||
name = "v8_enable_pointer_compression",
|
||||
default = "False",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "is_v8_enable_pointer_compression",
|
||||
flag_values = {":v8_enable_pointer_compression": "True"},
|
||||
)
|
||||
|
||||
# V8's pinned default short-call policy differs on x64 and arm64. In particular
|
||||
# the legacy arm64 non-pointer-compressed profile still uses short calls.
|
||||
selects.config_setting_group(
|
||||
name = "v8_target_x64_default_short_builtin_calls",
|
||||
match_all = [
|
||||
"@v8//bazel/config:v8_target_x64",
|
||||
":is_v8_enable_pointer_compression",
|
||||
],
|
||||
)
|
||||
|
||||
selects.config_setting_group(
|
||||
name = "v8_target_arm64_default_short_builtin_calls",
|
||||
match_all = [
|
||||
"@v8//bazel/config:v8_target_arm64",
|
||||
"@v8//bazel/config:is_not_android",
|
||||
],
|
||||
)
|
||||
|
||||
selects.config_setting_group(
|
||||
name = "is_v8_enable_short_builtin_calls",
|
||||
match_any = [
|
||||
":v8_target_x64_default_short_builtin_calls",
|
||||
":v8_target_arm64_default_short_builtin_calls",
|
||||
],
|
||||
)
|
||||
|
||||
# Fixed V8 15.2 Codex feature contract: TurboFan and WebAssembly enabled;
|
||||
# experiments, VTune and profiling disabled. Do not hard-code ABI-sensitive
|
||||
# values such as sandbox, pointer compression or target CPU into this baseline.
|
||||
v8_config(
|
||||
name = "define_flags",
|
||||
conditional_defines = {"v8_enable_sandbox": "V8_ENABLE_SANDBOX"},
|
||||
defines = [
|
||||
"V8_DEPRECATION_WARNINGS",
|
||||
"V8_IMMINENT_DEPRECATION_WARNINGS",
|
||||
"V8_ENABLE_LAZY_SOURCE_POSITIONS",
|
||||
"V8_ENABLE_TURBOFAN",
|
||||
"V8_ENABLE_WEBASSEMBLY",
|
||||
"V8_ENABLE_UNDEFINED_DOUBLE",
|
||||
"V8_USE_HOST_CPU_ARM_FEATURES",
|
||||
"V8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=64",
|
||||
] + [
|
||||
"GOOGLE3",
|
||||
"V8_ADVANCED_BIGINT_ALGORITHMS",
|
||||
"V8_CONCURRENT_MARKING",
|
||||
"V8_ENABLE_SPARKPLUG",
|
||||
"V8_ENABLE_EXTENSIBLE_RO_SNAPSHOT",
|
||||
"V8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA",
|
||||
"V8_TLS_USED_IN_LIBRARY",
|
||||
] + select({
|
||||
"@v8//bazel/config:is_debug": [
|
||||
"DEBUG",
|
||||
"V8_ENABLE_CHECKS",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
"@v8//bazel/config:asan_enabled": ["V8_USE_ADDRESS_SANITIZER"],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
"@v8//bazel/config:hwasan_enabled": ["V8_USE_HWADDRESS_SANITIZER"],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
"@v8//bazel/config:msan_enabled": ["V8_USE_MEMORY_SANITIZER"],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
"@v8//bazel/config:ubsan_enabled": ["V8_USE_UNDEFINED_BEHAVIOR_SANITIZER"],
|
||||
"//conditions:default": [],
|
||||
}) + select(
|
||||
{
|
||||
"@v8//bazel/config:v8_target_ia32": ["V8_TARGET_ARCH_IA32"],
|
||||
"@v8//bazel/config:v8_target_x64": [
|
||||
"V8_TARGET_ARCH_X64",
|
||||
"V8_ENABLE_SPARKPLUG_PLUS",
|
||||
],
|
||||
"@v8//bazel/config:v8_target_arm": [
|
||||
"V8_TARGET_ARCH_ARM",
|
||||
"CAN_USE_ARMV7_INSTRUCTIONS",
|
||||
"CAN_USE_VFP3_INSTRUCTIONS",
|
||||
],
|
||||
"@v8//bazel/config:v8_target_arm64": [
|
||||
"V8_TARGET_ARCH_ARM64",
|
||||
"V8_ENABLE_SPARKPLUG_PLUS",
|
||||
],
|
||||
"@v8//bazel/config:v8_target_s390x": [
|
||||
"V8_TARGET_ARCH_S390X",
|
||||
],
|
||||
"@v8//bazel/config:v8_target_riscv64": [
|
||||
# NOTE: Bazel rules for riscv64 weren't tested on a real system.
|
||||
"V8_TARGET_ARCH_RISCV64",
|
||||
"CAN_USE_FPU_INSTRUCTIONS",
|
||||
],
|
||||
"@v8//bazel/config:v8_target_ppc64le": [
|
||||
# NOTE: Bazel rules for ppc64le weren't tested on a real system.
|
||||
"V8_TARGET_ARCH_PPC64",
|
||||
],
|
||||
},
|
||||
no_match_error = "Please specify a target cpu supported by v8",
|
||||
) + select({
|
||||
"@v8//bazel/config:is_android": [
|
||||
"V8_HAVE_TARGET_OS",
|
||||
"V8_TARGET_OS_ANDROID",
|
||||
],
|
||||
"@v8//bazel/config:is_linux": [
|
||||
"V8_HAVE_TARGET_OS",
|
||||
"V8_TARGET_OS_LINUX",
|
||||
],
|
||||
"@v8//bazel/config:is_macos": [
|
||||
"V8_HAVE_TARGET_OS",
|
||||
"V8_TARGET_OS_MACOS",
|
||||
],
|
||||
"@v8//bazel/config:is_windows": [
|
||||
"V8_HAVE_TARGET_OS",
|
||||
"V8_TARGET_OS_WIN",
|
||||
"UNICODE",
|
||||
"_UNICODE",
|
||||
"_CRT_RAND_S",
|
||||
"_WIN32_WINNT=0x0A00",
|
||||
],
|
||||
}) + select({
|
||||
":is_v8_enable_pointer_compression": [
|
||||
"V8_COMPRESS_POINTERS",
|
||||
"V8_31BIT_SMIS_ON_64BIT_ARCH",
|
||||
"V8_CONTIGUOUS_COMPRESSED_RO_SPACE",
|
||||
"V8_CONTIGUOUS_COMPRESSED_RO_SPACE_SIZE_MB=8",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
":is_v8_enable_pointer_compression": [
|
||||
"V8_COMPRESS_POINTERS_IN_SHARED_CAGE",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
":is_v8_enable_short_builtin_calls": [
|
||||
"V8_SHORT_BUILTIN_CALLS",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
":is_v8_enable_pointer_compression": [
|
||||
"V8_EXTERNAL_CODE_SPACE",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
":is_v8_enable_pointer_compression": [
|
||||
"V8_STATIC_ROOTS",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
":enable_maglev": [
|
||||
"V8_ENABLE_MAGLEV",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + [] + [],
|
||||
deps = [],
|
||||
)
|
||||
|
||||
# Source inventory and dependency aliases.
|
||||
|
||||
# The imported groups retain upstream select names. They express our pinned
|
||||
# feature contract here; only CPU, ABI and the C++ runtime actually vary.
|
||||
v8_fixed_source_features(
|
||||
name = "pinned_source_features",
|
||||
build_setting_default = True,
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "is_v8_enable_webassembly",
|
||||
flag_values = {":pinned_source_features": "True"},
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "disabled_pinned_source_feature",
|
||||
flag_values = {":pinned_source_features": "False"},
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "enable_drumbrake_arm64",
|
||||
actual = ":disabled_pinned_source_feature",
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "enable_drumbrake_x64",
|
||||
actual = ":disabled_pinned_source_feature",
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "enable_maglev_arm",
|
||||
actual = ":disabled_pinned_source_feature",
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "enable_maglev_riscv",
|
||||
actual = ":disabled_pinned_source_feature",
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "is_v8_enable_drumbrake",
|
||||
actual = ":disabled_pinned_source_feature",
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "is_v8_enable_experimental_tq_to_tsa",
|
||||
actual = ":disabled_pinned_source_feature",
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "is_v8_wasm_random_fuzzers",
|
||||
actual = ":disabled_pinned_source_feature",
|
||||
)
|
||||
|
||||
# @CODEX_V8_UPSTREAM_FILEGROUPS@
|
||||
|
||||
alias(
|
||||
name = "lib_dragonbox",
|
||||
actual = "@v8_dragonbox//:dragonbox",
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "lib_fp16",
|
||||
actual = "@v8_fp16//:fp16",
|
||||
)
|
||||
|
||||
# Generated files
|
||||
|
||||
# Define file groups for torque definitions and initializers. Both are
|
||||
# generated together, but we can use output_group to split them.
|
||||
filegroup(
|
||||
name = "icu/generated_torque_definitions",
|
||||
srcs = [":icu/generated_torque_files"],
|
||||
output_group = "definitions",
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "noicu/generated_torque_definitions",
|
||||
srcs = [":noicu/generated_torque_files"],
|
||||
output_group = "definitions",
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "icu/generated_torque_initializers",
|
||||
srcs = [":icu/generated_torque_files"],
|
||||
output_group = "initializers",
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "noicu/generated_torque_initializers",
|
||||
srcs = [":noicu/generated_torque_files"],
|
||||
output_group = "initializers",
|
||||
)
|
||||
|
||||
# TODO(victorgomes): Add support to tools/debug_helper,
|
||||
# which needs class-debug-readers and debug-macros.
|
||||
v8_torque_files(
|
||||
name = "generated_torque_files",
|
||||
args = [] + select({
|
||||
"@v8//bazel/config:v8_target_is_32_bits": ["-m32"],
|
||||
"//conditions:default": [],
|
||||
}),
|
||||
definition_extras = [
|
||||
"bit-field-asserts.cc",
|
||||
"builtin-definitions.h",
|
||||
# "class-debug-readers.cc",
|
||||
# "class-debug-readers.h",
|
||||
"class-forward-declarations.h",
|
||||
# "debug-macros.cc",
|
||||
# "debug-macros.h",
|
||||
"instance-types.h",
|
||||
"interface-descriptors.inc",
|
||||
],
|
||||
icu_srcs = [":icu/torque_files"],
|
||||
initializer_extras = [
|
||||
"csa-types.h",
|
||||
"enum-verifiers.cc",
|
||||
"exported-macros-assembler.cc",
|
||||
"exported-macros-assembler.h",
|
||||
],
|
||||
noicu_srcs = [":noicu/torque_files"],
|
||||
)
|
||||
|
||||
py_binary(
|
||||
name = "code_generator",
|
||||
srcs = [
|
||||
"third_party/inspector_protocol/code_generator.py",
|
||||
"third_party/inspector_protocol/pdl.py",
|
||||
],
|
||||
data = [
|
||||
"third_party/inspector_protocol/lib/Forward_h.template",
|
||||
"third_party/inspector_protocol/lib/Object_cpp.template",
|
||||
"third_party/inspector_protocol/lib/Object_h.template",
|
||||
"third_party/inspector_protocol/lib/Protocol_cpp.template",
|
||||
"third_party/inspector_protocol/lib/ValueConversions_cpp.template",
|
||||
"third_party/inspector_protocol/lib/ValueConversions_h.template",
|
||||
"third_party/inspector_protocol/lib/Values_cpp.template",
|
||||
"third_party/inspector_protocol/lib/Values_h.template",
|
||||
"third_party/inspector_protocol/templates/Exported_h.template",
|
||||
"third_party/inspector_protocol/templates/Imported_h.template",
|
||||
"third_party/inspector_protocol/templates/TypeBuilder_cpp.template",
|
||||
"third_party/inspector_protocol/templates/TypeBuilder_h.template",
|
||||
],
|
||||
imports = ["third_party/inspector_protocol/"],
|
||||
deps = [
|
||||
requirement("jinja2"),
|
||||
],
|
||||
)
|
||||
|
||||
genrule(
|
||||
name = "generated_inspector_files",
|
||||
srcs = [
|
||||
"include/js_protocol.pdl",
|
||||
"src/inspector/inspector_protocol_config.json",
|
||||
"third_party/inspector_protocol/code_generator.py",
|
||||
"third_party/inspector_protocol/pdl.py",
|
||||
"third_party/inspector_protocol/lib/Forward_h.template",
|
||||
"third_party/inspector_protocol/lib/Object_cpp.template",
|
||||
"third_party/inspector_protocol/lib/Object_h.template",
|
||||
"third_party/inspector_protocol/lib/Protocol_cpp.template",
|
||||
"third_party/inspector_protocol/lib/ValueConversions_cpp.template",
|
||||
"third_party/inspector_protocol/lib/ValueConversions_h.template",
|
||||
"third_party/inspector_protocol/lib/Values_cpp.template",
|
||||
"third_party/inspector_protocol/lib/Values_h.template",
|
||||
"third_party/inspector_protocol/templates/Exported_h.template",
|
||||
"third_party/inspector_protocol/templates/Imported_h.template",
|
||||
"third_party/inspector_protocol/templates/TypeBuilder_cpp.template",
|
||||
"third_party/inspector_protocol/templates/TypeBuilder_h.template",
|
||||
],
|
||||
outs = [
|
||||
"include/inspector/Debugger.h",
|
||||
"include/inspector/Runtime.h",
|
||||
"include/inspector/Schema.h",
|
||||
"src/inspector/protocol/Forward.h",
|
||||
"src/inspector/protocol/Protocol.cpp",
|
||||
"src/inspector/protocol/Protocol.h",
|
||||
"src/inspector/protocol/Console.cpp",
|
||||
"src/inspector/protocol/Console.h",
|
||||
"src/inspector/protocol/Debugger.cpp",
|
||||
"src/inspector/protocol/Debugger.h",
|
||||
"src/inspector/protocol/HeapProfiler.cpp",
|
||||
"src/inspector/protocol/HeapProfiler.h",
|
||||
"src/inspector/protocol/Profiler.cpp",
|
||||
"src/inspector/protocol/Profiler.h",
|
||||
"src/inspector/protocol/Runtime.cpp",
|
||||
"src/inspector/protocol/Runtime.h",
|
||||
"src/inspector/protocol/Schema.cpp",
|
||||
"src/inspector/protocol/Schema.h",
|
||||
],
|
||||
cmd = "INSPECTOR_PROTOCOL_DIR=$$(dirname $(execpath third_party/inspector_protocol/code_generator.py)); \
|
||||
PYTHONPATH=$$INSPECTOR_PROTOCOL_DIR:external/rules_python++pip+v8_python_deps_311_jinja2/site-packages:external/rules_python++pip+v8_python_deps_311_markupsafe/site-packages:$${PYTHONPATH-} \
|
||||
$(execpath @rules_python//python/bin:python) $(execpath third_party/inspector_protocol/code_generator.py) --jinja_dir . \
|
||||
--inspector_protocol_dir $$INSPECTOR_PROTOCOL_DIR \
|
||||
--config $(location :src/inspector/inspector_protocol_config.json) \
|
||||
--config_value protocol.path=$(location :include/js_protocol.pdl) \
|
||||
--config_value crdtp.dir=third_party/inspector_protocol/crdtp \
|
||||
--output_base $(@D)/src/inspector",
|
||||
message = "Generating inspector files",
|
||||
tools = [
|
||||
"@rules_python//python/bin:python",
|
||||
requirement("jinja2"),
|
||||
requirement("markupsafe"),
|
||||
],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "v8_common_libshared_files",
|
||||
srcs = [
|
||||
":torque_runtime_support_files",
|
||||
":v8_libplatform_files",
|
||||
":v8_libsampler_files",
|
||||
":v8_shared_internal_headers",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "rusty_v8_internal_headers",
|
||||
hdrs = [
|
||||
"src/libplatform/default-platform.h",
|
||||
],
|
||||
strip_include_prefix = "",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "rusty_v8_crdtp_headers",
|
||||
hdrs = [
|
||||
"third_party/inspector_protocol/crdtp/cbor.h",
|
||||
"third_party/inspector_protocol/crdtp/dispatch.h",
|
||||
"third_party/inspector_protocol/crdtp/error_support.h",
|
||||
"third_party/inspector_protocol/crdtp/export.h",
|
||||
"third_party/inspector_protocol/crdtp/find_by_first.h",
|
||||
"third_party/inspector_protocol/crdtp/frontend_channel.h",
|
||||
"third_party/inspector_protocol/crdtp/json.h",
|
||||
"third_party/inspector_protocol/crdtp/parser_handler.h",
|
||||
"third_party/inspector_protocol/crdtp/protocol_core.h",
|
||||
"third_party/inspector_protocol/crdtp/serializable.h",
|
||||
"third_party/inspector_protocol/crdtp/span.h",
|
||||
"third_party/inspector_protocol/crdtp/status.h",
|
||||
],
|
||||
strip_include_prefix = "",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
filegroup(
|
||||
name = "d8_files",
|
||||
srcs = [
|
||||
"src/d8/async-hooks-wrapper.cc",
|
||||
"src/d8/async-hooks-wrapper.h",
|
||||
"src/d8/d8.cc",
|
||||
"src/d8/d8.h",
|
||||
"src/d8/d8-console.cc",
|
||||
"src/d8/d8-console.h",
|
||||
"src/d8/d8-js.cc",
|
||||
"src/d8/d8-platforms.cc",
|
||||
"src/d8/d8-platforms.h",
|
||||
"src/d8/d8-posix.cc",
|
||||
"src/d8/d8-test.cc",
|
||||
"src/d8/hardware-watchpoints.cc",
|
||||
"src/d8/hardware-watchpoints.h",
|
||||
"src/d8/memory-access-information.cc",
|
||||
"src/d8/memory-access-information.h",
|
||||
],
|
||||
)
|
||||
|
||||
genrule(
|
||||
name = "generated_bytecode_builtins_list",
|
||||
srcs = [],
|
||||
outs = ["builtins-generated/bytecodes-builtins-list.h"],
|
||||
cmd = "$(location :bytecode_builtins_list_generator) $@",
|
||||
cmd_bat = "$(location :bytecode_builtins_list_generator) $@",
|
||||
tools = [":bytecode_builtins_list_generator"],
|
||||
)
|
||||
|
||||
genrule(
|
||||
name = "generated_regexp_special_case",
|
||||
srcs = [],
|
||||
outs = ["src/regexp/special-case.cc"],
|
||||
cmd = "$(location :regexp_special_case_generator) $@",
|
||||
cmd_bat = "$(location :regexp_special_case_generator) $@",
|
||||
tools = [":regexp_special_case_generator"],
|
||||
)
|
||||
|
||||
v8_mksnapshot(
|
||||
name = "generated_snapshot_files",
|
||||
args = [] + [] + [] + ["--no-native-code-counters"],
|
||||
)
|
||||
|
||||
# =================================================
|
||||
# Libraries rules
|
||||
# =================================================
|
||||
|
||||
# NOTE: This allow headers to be accessed without the icu/noicu prefixes.
|
||||
cc_library(
|
||||
name = "icu/generated_torque_definitions_headers",
|
||||
hdrs = [":icu/generated_torque_definitions"],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
strip_include_prefix = "icu",
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "noicu/generated_torque_definitions_headers",
|
||||
hdrs = [":noicu/generated_torque_definitions"],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
strip_include_prefix = "noicu",
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "llvm_libc_headers",
|
||||
actual = "@@//third_party/v8:rusty_v8_llvm_libc_headers",
|
||||
)
|
||||
|
||||
v8_library(
|
||||
name = "v8_libbase",
|
||||
srcs = [
|
||||
":v8_libbase_files",
|
||||
":v8_shared_internal_headers",
|
||||
],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
deps = [
|
||||
":llvm_libc_headers",
|
||||
"@v8_abseil//:overload",
|
||||
"@v8_abseil//:synchronization",
|
||||
"@v8_abseil//:time",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "torque_base_headers",
|
||||
hdrs = [
|
||||
"src/torque/kythe-data.h",
|
||||
"src/torque/torque-compiler.h",
|
||||
],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
include_prefix = "third_party/v8",
|
||||
includes = ["."],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "kythe_torque_base",
|
||||
srcs = [
|
||||
":torque_base_files",
|
||||
],
|
||||
copts = ["-Wno-implicit-fallthrough"] + select({
|
||||
"@v8//bazel/config:is_posix": ["-fexceptions"],
|
||||
"//conditions:default": [],
|
||||
}),
|
||||
features = ["-use_header_modules"],
|
||||
deps = [
|
||||
":torque_base_headers",
|
||||
":v8_libbase",
|
||||
"@v8_abseil//:node_hash_map",
|
||||
"@v8_abseil//:node_hash_set",
|
||||
],
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "simdutf",
|
||||
actual = "@v8_simdutf//:simdutf",
|
||||
)
|
||||
|
||||
v8_library(
|
||||
name = "v8_libshared",
|
||||
srcs = [
|
||||
":v8_base_without_compiler_files",
|
||||
":v8_common_libshared_files",
|
||||
] + [
|
||||
":v8_compiler_files",
|
||||
],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
icu_deps = [
|
||||
":icu/generated_torque_definitions_headers",
|
||||
"@v8_icu//:icu",
|
||||
],
|
||||
icu_srcs = [
|
||||
":generated_regexp_special_case",
|
||||
":icu/generated_torque_definitions",
|
||||
":icu/v8_base_without_compiler_files",
|
||||
],
|
||||
noicu_deps = [
|
||||
":noicu/generated_torque_definitions_headers",
|
||||
],
|
||||
noicu_srcs = [
|
||||
":noicu/generated_torque_definitions",
|
||||
],
|
||||
deps = [
|
||||
# keep
|
||||
":lib_dragonbox",
|
||||
"@v8_fast_float//:fast_float",
|
||||
":lib_fp16",
|
||||
":simdutf",
|
||||
":v8_libbase",
|
||||
"@v8_abseil//:btree",
|
||||
"@v8_abseil//:flat_hash_map",
|
||||
"@v8_abseil//:flat_hash_set",
|
||||
"@v8_abseil//:overload",
|
||||
"@v8_highway//:hwy",
|
||||
],
|
||||
)
|
||||
|
||||
v8_library(
|
||||
name = "v8",
|
||||
srcs = [
|
||||
":v8_inspector_files",
|
||||
] + [],
|
||||
hdrs = [":public_header_files"],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
icu_deps = [":icu/v8_libshared"],
|
||||
icu_srcs = [":icu/snapshot_files"],
|
||||
noicu_deps = [":noicu/v8_libshared"],
|
||||
noicu_srcs = [":noicu/snapshot_files"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
v8_library(
|
||||
name = "wee8",
|
||||
srcs = [":wee8_files"],
|
||||
hdrs = [":public_wasm_c_api_header_files"],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
strip_include_prefix = "third_party",
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [":noicu/v8"] + [],
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "core_lib_noicu",
|
||||
actual = "noicu/v8",
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "core_lib_icu",
|
||||
actual = "icu/v8",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
v8_library(
|
||||
name = "v8_vtune",
|
||||
srcs = [
|
||||
"third_party/vtune/v8-vtune.h",
|
||||
"third_party/vtune/vtune-jit.cc",
|
||||
"third_party/vtune/vtune-jit.h",
|
||||
],
|
||||
copts = ["-I"],
|
||||
deps = [
|
||||
":core_lib_noicu",
|
||||
"@intel_ittapi//:lib_ittapi",
|
||||
],
|
||||
)
|
||||
|
||||
# =================================================
|
||||
# Binary rules
|
||||
# =================================================
|
||||
|
||||
v8_binary(
|
||||
name = "bytecode_builtins_list_generator",
|
||||
srcs = [
|
||||
"src/builtins/generate-bytecodes-builtins-list.cc",
|
||||
"src/interpreter/bytecode-operands.cc",
|
||||
"src/interpreter/bytecode-operands.h",
|
||||
"src/interpreter/bytecode-traits.h",
|
||||
"src/interpreter/bytecodes.cc",
|
||||
"src/interpreter/bytecodes.h",
|
||||
],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
deps = ["v8_libbase"],
|
||||
)
|
||||
|
||||
v8_binary(
|
||||
name = "regexp_special_case_generator",
|
||||
srcs = [
|
||||
"src/regexp/gen-regexp-special-case.cc",
|
||||
"src/regexp/special-case.h",
|
||||
":v8_shared_internal_headers",
|
||||
],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
defines = [
|
||||
"V8_INTL_SUPPORT",
|
||||
"ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC",
|
||||
# src/regexp/regexp-compiler-tonode.cc uses an unsafe ICU method and
|
||||
# access a character implicitly.
|
||||
"UNISTR_FROM_CHAR_EXPLICIT=",
|
||||
],
|
||||
deps = [
|
||||
":v8_libbase",
|
||||
"@v8_icu//:icu",
|
||||
],
|
||||
)
|
||||
|
||||
v8_binary(
|
||||
name = "torque",
|
||||
srcs = [
|
||||
"src/torque/torque.cc",
|
||||
":torque_base_files",
|
||||
],
|
||||
copts = ["-Wno-implicit-fallthrough"] + select({
|
||||
"@v8//bazel/config:is_posix": ["-fexceptions"],
|
||||
"//conditions:default": [],
|
||||
}),
|
||||
features = ["-use_header_modules"],
|
||||
icu_defines = ["V8_INTL_SUPPORT"],
|
||||
linkopts = select({
|
||||
"@v8//bazel/config:is_android": ["-llog"],
|
||||
"//conditions:default": [],
|
||||
}),
|
||||
deps = [
|
||||
"v8_libbase",
|
||||
"@v8_abseil//:node_hash_map",
|
||||
"@v8_abseil//:node_hash_set",
|
||||
],
|
||||
)
|
||||
|
||||
v8_binary(
|
||||
name = "mksnapshot",
|
||||
srcs = [
|
||||
":mksnapshot_files",
|
||||
] + [],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
icu_deps = [":icu/v8_libshared"],
|
||||
icu_srcs = [
|
||||
":icu/generated_torque_initializers",
|
||||
":icu/v8_initializers_files",
|
||||
],
|
||||
# Match GN's mksnapshot `disable_icf` config. If the linker folds distinct
|
||||
# external-reference helpers together while producing the snapshot, the
|
||||
# final embedder binary may not fold the same pair and startup
|
||||
# deserialization will reject the snapshot.
|
||||
# GN also increases the x64 Windows stack reserve because constructing the
|
||||
# snapshot overflows the linker's 1 MiB default.
|
||||
linkopts = select({
|
||||
"@v8//bazel/config:is_android": ["-llog"],
|
||||
"@v8//bazel/config:is_macos": ["-Wl,-no_deduplicate"],
|
||||
"@v8//bazel/config:is_windows": [
|
||||
"-Wl,/OPT:NOICF",
|
||||
"-Wl,/STACK:2097152",
|
||||
],
|
||||
"//conditions:default": ["-Wl,--icf=none"],
|
||||
}),
|
||||
noicu_deps = [":v8_libshared_noicu"],
|
||||
noicu_srcs = [
|
||||
":noicu/generated_torque_initializers",
|
||||
":noicu/v8_initializers_files",
|
||||
],
|
||||
)
|
||||
|
||||
v8_binary(
|
||||
name = "d8",
|
||||
srcs = [":d8_files"],
|
||||
copts = ["-Wno-implicit-fallthrough"],
|
||||
icu_deps = [":icu/v8"],
|
||||
noicu_deps = [":noicu/v8"],
|
||||
)
|
||||
|
||||
# This target forces torque to be compiled without pointer compression.
|
||||
v8_binary_non_pointer_compression(
|
||||
name = "noicu/torque_non_pointer_compression",
|
||||
binary = "noicu/torque",
|
||||
)
|
||||
|
||||
v8_binary_non_pointer_compression(
|
||||
name = "icu/torque_non_pointer_compression",
|
||||
binary = "icu/torque",
|
||||
)
|
||||
|
||||
alias(
|
||||
name = "v8ci",
|
||||
actual = "noicu/v8",
|
||||
)
|
||||
|
||||
# =================================================
|
||||
# Tests
|
||||
# =================================================
|
||||
|
||||
v8_build_config(
|
||||
name = "v8_build_config",
|
||||
arch = select({
|
||||
"@v8//bazel/config:v8_target_arm64": "arm64",
|
||||
"@v8//bazel/config:v8_target_x64": "x64",
|
||||
"//conditions:default": "x64",
|
||||
}),
|
||||
)
|
||||
|
||||
# Runs mjsunit with d8.
|
||||
py_test(
|
||||
name = "noicu/mjsunit",
|
||||
size = "medium",
|
||||
srcs = [
|
||||
"test/mjsunit/testcfg.py",
|
||||
"tools/predictable_wrapper.py",
|
||||
"tools/run-tests.py",
|
||||
] + glob(["tools/testrunner/**/*.py"]),
|
||||
args = [
|
||||
"--no-sorting",
|
||||
"--nopresubmit",
|
||||
"--variant=google3",
|
||||
"--outdir noicu",
|
||||
"--verbose",
|
||||
] + select({
|
||||
"@v8//bazel/config:v8_target_arm64": [
|
||||
"--arch=arm64",
|
||||
],
|
||||
"@v8//bazel/config:v8_target_x64": [
|
||||
"--arch=x64",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + [
|
||||
"mjsunit",
|
||||
],
|
||||
data = [
|
||||
"test",
|
||||
":noicu/d8",
|
||||
":noicu/v8_build_config",
|
||||
"//testing/pybase",
|
||||
] + glob(["test/**"]) + glob(["tools/**/*.js"]) + glob(["tools/**/*.mjs"]),
|
||||
main = "tools/run-tests.py",
|
||||
tags = [
|
||||
# Disable sanitizers, as they don't work in general in V8.
|
||||
"nosan",
|
||||
],
|
||||
)
|
||||
|
||||
py_test(
|
||||
name = "icu/mjsunit",
|
||||
size = "medium",
|
||||
srcs = [
|
||||
"test/mjsunit/testcfg.py",
|
||||
"tools/predictable_wrapper.py",
|
||||
"tools/run-tests.py",
|
||||
] + glob(["tools/testrunner/**/*.py"]),
|
||||
args = [
|
||||
"--no-sorting",
|
||||
"--nopresubmit",
|
||||
"--variant=google3",
|
||||
"--outdir icu",
|
||||
"--verbose",
|
||||
] + select({
|
||||
"@v8//bazel/config:v8_target_arm64": [
|
||||
"--arch=arm64",
|
||||
],
|
||||
"@v8//bazel/config:v8_target_x64": [
|
||||
"--arch=x64",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + [
|
||||
"mjsunit",
|
||||
],
|
||||
data = [
|
||||
"test",
|
||||
":icu/d8",
|
||||
":icu/v8_build_config",
|
||||
"//testing/pybase",
|
||||
] + glob(["test/**"]) + glob(["tools/**/*.js"]) + glob(["tools/**/*.mjs"]),
|
||||
main = "tools/run-tests.py",
|
||||
tags = [
|
||||
# Disable sanitizers, as they don't work in general in V8.
|
||||
"nosan",
|
||||
],
|
||||
)
|
||||
|
||||
py_test(
|
||||
name = "icu/intl",
|
||||
size = "medium",
|
||||
srcs = [
|
||||
"test/intl/testcfg.py",
|
||||
"tools/predictable_wrapper.py",
|
||||
"tools/run-tests.py",
|
||||
] + glob(["tools/testrunner/**/*.py"]),
|
||||
args = [
|
||||
"--no-sorting",
|
||||
"--nopresubmit",
|
||||
"--variant=google3",
|
||||
"--outdir icu",
|
||||
"--verbose",
|
||||
] + select({
|
||||
"@v8//bazel/config:v8_target_arm64": [
|
||||
"--arch=arm64",
|
||||
],
|
||||
"@v8//bazel/config:v8_target_x64": [
|
||||
"--arch=x64",
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + [
|
||||
"intl",
|
||||
],
|
||||
data = [
|
||||
"test",
|
||||
":icu/d8",
|
||||
":icu/v8_build_config",
|
||||
"//testing/pybase",
|
||||
] + glob(["test/**"]) + glob(["tools/**/*.js"]) + glob(["tools/**/*.mjs"]),
|
||||
main = "tools/run-tests.py",
|
||||
tags = [
|
||||
# Disable sanitizers, as they don't work in general in V8.
|
||||
"nosan",
|
||||
],
|
||||
)
|
||||
Vendored
+93
@@ -0,0 +1,93 @@
|
||||
"""V8 source import with Codex-owned Bazel entry points.
|
||||
|
||||
The root package is placed inside the fetched source tree so relative source
|
||||
labels and globs have their normal Bazel semantics. Reuse upstream's platform
|
||||
and CPU configuration in place, with Codex's narrow patch to bazel/defs.bzl.
|
||||
V8's MODULE and toolchain BUILD files are never part of Codex's dependency or
|
||||
toolchain graph.
|
||||
"""
|
||||
|
||||
# Upstream keeps its source groups in BUILD.bazel, which cannot be loaded as
|
||||
# a Starlark library. Reuse filegroups, so labels/globs retain their semantics
|
||||
# inside @v8. Compiled targets (including valid V8 v8_library/v8_binary calls)
|
||||
# belong in engine.BUILD.bazel, where we wire Codex's dependencies and runtime.
|
||||
_INVENTORY_SLOT = "# @CODEX_V8_UPSTREAM_FILEGROUPS@"
|
||||
_FILE_GROUPS = "# File group rules"
|
||||
_GENERATED_FILES = "# Generated files"
|
||||
|
||||
def _upstream_filegroups(upstream):
|
||||
before_and_groups = upstream.split(_FILE_GROUPS)
|
||||
if len(before_and_groups) != 2:
|
||||
fail("V8 source import: expected one File group rules section; review the new pin's BUILD.bazel")
|
||||
groups_and_after = before_and_groups[1].split(_GENERATED_FILES)
|
||||
if len(groups_and_after) != 2:
|
||||
fail("V8 source import: expected one Generated files boundary; review the new pin's BUILD.bazel")
|
||||
|
||||
groups = []
|
||||
statement = []
|
||||
for line in groups_and_after[0].split("\n"):
|
||||
if statement:
|
||||
statement.append(line)
|
||||
if line == ")":
|
||||
source = "\n".join(statement)
|
||||
if statement[0] == "filegroup(":
|
||||
groups.append(source)
|
||||
elif 'name = "lib_dragonbox",' not in source and 'name = "lib_fp16",' not in source:
|
||||
fail("V8 filegroup import: unexpected library; review and wire it in third_party/v8/engine.BUILD.bazel: " + source)
|
||||
statement = []
|
||||
elif line in ["filegroup(", "v8_library("]:
|
||||
# The pinned section happens to contain two libraries. Both are
|
||||
# already provided by our dependency overlays; skip only those names.
|
||||
statement = [line]
|
||||
elif line.strip() and not line.startswith("#"):
|
||||
fail("V8 filegroup import: only filegroups can be reused here; review compiled targets (including v8_binary) in third_party/v8/engine.BUILD.bazel. Unexpected statement: " + line)
|
||||
|
||||
# Group count and library order can change without changing the owned graph.
|
||||
# Fail only when the source section is empty, malformed, or unsafe to reuse.
|
||||
if statement:
|
||||
fail("V8 filegroup import: unterminated statement; review the pinned BUILD.bazel: " + "\n".join(statement))
|
||||
if not groups:
|
||||
fail("V8 filegroup import: no filegroups found; review the pinned BUILD.bazel")
|
||||
return "\n\n".join(groups)
|
||||
|
||||
def _engine_repository_impl(ctx):
|
||||
ctx.download_and_extract(
|
||||
url = ctx.attr.urls,
|
||||
integrity = ctx.attr.integrity,
|
||||
stripPrefix = ctx.attr.strip_prefix,
|
||||
)
|
||||
inventory = _upstream_filegroups(ctx.read("BUILD.bazel"))
|
||||
template = ctx.read(ctx.attr._engine_build)
|
||||
if template.count(_INVENTORY_SLOT) != 1:
|
||||
fail("Codex V8 BUILD template must contain exactly one upstream filegroup slot")
|
||||
|
||||
for patch in ctx.attr.patches:
|
||||
ctx.patch(patch, strip = ctx.attr.patch_strip)
|
||||
|
||||
# Preserve V8's source layout and the two third-party package boundaries
|
||||
# (disarm and fadec); neither is in the Codex V8 closure. Keep upstream's
|
||||
# platform/CPU package and prevent upstream toolchain discovery.
|
||||
for path in [
|
||||
"MODULE.bazel",
|
||||
"BUILD.bazel",
|
||||
"bazel/toolchain/BUILD.bazel",
|
||||
"bazel/patches/BUILD.bazel",
|
||||
]:
|
||||
ctx.delete(path)
|
||||
ctx.file("BUILD.bazel", template.replace(_INVENTORY_SLOT, inventory))
|
||||
|
||||
engine_repository = repository_rule(
|
||||
implementation = _engine_repository_impl,
|
||||
attrs = {
|
||||
"urls": attr.string_list(mandatory = True),
|
||||
"integrity": attr.string(mandatory = True),
|
||||
"strip_prefix": attr.string(mandatory = True),
|
||||
"patches": attr.label_list(allow_files = True),
|
||||
"patch_strip": attr.int(default = 3),
|
||||
"_engine_build": attr.label(
|
||||
default = Label("//third_party/v8:engine.BUILD.bazel"),
|
||||
allow_single_file = True,
|
||||
),
|
||||
},
|
||||
doc = "Fetch the pinned V8 source tree and install Codex's engine graph.",
|
||||
)
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
"""Codex's fixed selection for branches of the imported V8 source inventory."""
|
||||
|
||||
load("@v8//:bazel/defs.bzl", "FlagInfo")
|
||||
|
||||
def _options_impl(ctx):
|
||||
return FlagInfo(value = ctx.build_setting_value)
|
||||
|
||||
# Source-only features keep upstream select names without adding CLI options.
|
||||
# ABI/runtime settings are still V8 release inputs until artifact profiles take over.
|
||||
v8_fixed_source_features = rule(
|
||||
implementation = _options_impl,
|
||||
build_setting = config.bool(flag = False),
|
||||
)
|
||||
Vendored
+176
@@ -0,0 +1,176 @@
|
||||
# What: adapt the pinned V8 rule helpers to Codex's engine configuration.
|
||||
# Scope: bazel/defs.bzl only; the engine graph and dependency choices live in
|
||||
# third_party/v8/engine.BUILD.bazel. The platform/CPU config is unmodified V8.
|
||||
# Preserve the existing release flags, Chromium libc++ headers/runtime, Clang
|
||||
# Windows driver flags, and Windows target-ABI snapshot tool. The optional
|
||||
# Linux backtrace link flag is omitted because that feature is fixed off.
|
||||
# On a V8 pin change, review these hunks and build the native canary matrix.
|
||||
|
||||
--- a/orig/v8-15.2.124.1/bazel/defs.bzl
|
||||
+++ b/mod/v8-15.2.124.1/bazel/defs.bzl
|
||||
@@ -42,12 +42,30 @@
|
||||
)
|
||||
|
||||
def v8_flag(name, default = False):
|
||||
- _create_option_flag(name = name, build_setting_default = default, scope = "universal")
|
||||
- native.config_setting(name = "is_" + name, flag_values = {name: "True"})
|
||||
- native.config_setting(name = "is_not_" + name, flag_values = {name: "False"})
|
||||
-
|
||||
-def v8_string(name, default = ""):
|
||||
- _create_option_string(name = name, build_setting_default = default, scope = "universal")
|
||||
+ _create_option_flag(
|
||||
+ name = name,
|
||||
+ build_setting_default = default,
|
||||
+ scope = "universal",
|
||||
+ visibility = ["//visibility:public"],
|
||||
+ )
|
||||
+ native.config_setting(
|
||||
+ name = "is_" + name,
|
||||
+ flag_values = {name: "True"},
|
||||
+ visibility = ["//visibility:public"],
|
||||
+ )
|
||||
+ native.config_setting(
|
||||
+ name = "is_not_" + name,
|
||||
+ flag_values = {name: "False"},
|
||||
+ visibility = ["//visibility:public"],
|
||||
+ )
|
||||
+
|
||||
+def v8_string(name, default = "", visibility = None):
|
||||
+ _create_option_string(
|
||||
+ name = name,
|
||||
+ build_setting_default = default,
|
||||
+ scope = "universal",
|
||||
+ visibility = visibility,
|
||||
+ )
|
||||
|
||||
def v8_int(name, default = 0):
|
||||
_create_option_int(name = name, build_setting_default = default, scope = "universal")
|
||||
@@ -106,7 +124,13 @@
|
||||
|
||||
def _default_args():
|
||||
return struct(
|
||||
- deps = [":define_flags", "@libcxx//:libc++"],
|
||||
+ deps = [":define_flags"] + select({
|
||||
+ "@v8//:is_v8_use_rusty_v8_custom_libcxx": [
|
||||
+ "@@//third_party/v8:rusty_v8_custom_libcxx_headers",
|
||||
+ "@@//third_party/v8:rusty_v8_custom_libcxx_runtime",
|
||||
+ ],
|
||||
+ "//conditions:default": [],
|
||||
+ }),
|
||||
defines = select({
|
||||
"@v8//bazel/config:is_windows": [
|
||||
"UNICODE",
|
||||
@@ -136,12 +160,15 @@
|
||||
],
|
||||
"//conditions:default": [],
|
||||
}) + select({
|
||||
- "@v8//bazel/config:is_clang": [
|
||||
- "-Wno-invalid-offsetof",
|
||||
- "-Wno-deprecated-this-capture",
|
||||
- "-Wno-deprecated-declarations",
|
||||
- "-std=c++20",
|
||||
- ],
|
||||
+ "@v8//:is_v8_use_rusty_v8_custom_libcxx": [
|
||||
+ "-nostdinc++",
|
||||
+ "-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS",
|
||||
+ "-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE",
|
||||
+ "-D_LIBCPP_INSTRUMENTED_WITH_ASAN=0",
|
||||
+ "-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS",
|
||||
+ ],
|
||||
+ "//conditions:default": [],
|
||||
+ }) + select({
|
||||
"@v8//bazel/config:is_gcc": [
|
||||
"-Wno-extra",
|
||||
"-Wno-array-bounds",
|
||||
@@ -161,9 +188,17 @@
|
||||
"-std=gnu++2a",
|
||||
],
|
||||
"@v8//bazel/config:is_windows": [
|
||||
- "/std:c++20",
|
||||
- ],
|
||||
- "//conditions:default": [],
|
||||
+ "-Wno-invalid-offsetof",
|
||||
+ "-Wno-deprecated-this-capture",
|
||||
+ "-Wno-deprecated-declarations",
|
||||
+ "-std=c++20",
|
||||
+ ],
|
||||
+ "//conditions:default": [
|
||||
+ "-Wno-invalid-offsetof",
|
||||
+ "-Wno-deprecated-this-capture",
|
||||
+ "-Wno-deprecated-declarations",
|
||||
+ "-std=c++20",
|
||||
+ ],
|
||||
}) + select({
|
||||
"@v8//bazel/config:is_gcc_fastbuild": [
|
||||
# Non-debug builds without optimizations fail because
|
||||
@@ -187,15 +222,12 @@
|
||||
includes = ["include"],
|
||||
linkopts = select({
|
||||
"@v8//bazel/config:is_windows": [
|
||||
- "Winmm.lib",
|
||||
- "DbgHelp.lib",
|
||||
- "Advapi32.lib",
|
||||
+ "-lwinmm",
|
||||
+ "-ldbghelp",
|
||||
+ "-ladvapi32",
|
||||
],
|
||||
"@v8//bazel/config:is_macos": ["-pthread"],
|
||||
- "//conditions:default": ["-Wl,--no-as-needed -ldl -latomic -pthread"],
|
||||
- }) + select({
|
||||
- ":should_add_rdynamic": ["-rdynamic"],
|
||||
- "//conditions:default": [],
|
||||
+ "//conditions:default": ["-Wl,--no-as-needed -ldl -pthread"],
|
||||
}),
|
||||
)
|
||||
|
||||
@@ -466,6 +498,12 @@
|
||||
def _mksnapshot(ctx):
|
||||
prefix = ctx.attr.prefix
|
||||
suffix = ctx.attr.suffix
|
||||
+
|
||||
+ # Windows cross-builds use Linux for the exec configuration, but the
|
||||
+ # snapshot generator must match the target ABI and run on the Windows
|
||||
+ # runner. Action strategies only choose where an action runs; they cannot
|
||||
+ # change this executable from the exec to the target configuration.
|
||||
+ tool = ctx.executable.target_tool if ctx.attr.target_os == "win" else ctx.executable.tool
|
||||
outs = [
|
||||
ctx.actions.declare_file(prefix + "/snapshot" + suffix + ".cc"),
|
||||
ctx.actions.declare_file(prefix + "/embedded" + suffix + ".S"),
|
||||
@@ -483,7 +521,7 @@
|
||||
"--embedded_src",
|
||||
outs[1].path,
|
||||
] + ctx.attr.args,
|
||||
- executable = ctx.executable.tool,
|
||||
+ executable = tool,
|
||||
progress_message = "Running mksnapshot",
|
||||
)
|
||||
return [DefaultInfo(files = depset(outs))]
|
||||
@@ -498,6 +536,12 @@
|
||||
executable = True,
|
||||
cfg = "exec",
|
||||
),
|
||||
+ "target_tool": attr.label(
|
||||
+ mandatory = True,
|
||||
+ allow_files = True,
|
||||
+ executable = True,
|
||||
+ cfg = "target",
|
||||
+ ),
|
||||
"target_os": attr.string(mandatory = True),
|
||||
"prefix": attr.string(mandatory = True),
|
||||
"suffix": attr.string(mandatory = True),
|
||||
@@ -511,6 +555,7 @@
|
||||
args = args,
|
||||
prefix = "noicu",
|
||||
tool = ":noicu/mksnapshot" + suffix,
|
||||
+ target_tool = ":noicu/mksnapshot" + suffix,
|
||||
suffix = suffix,
|
||||
target_os = select({
|
||||
"@v8//bazel/config:is_macos": "mac",
|
||||
@@ -523,6 +568,7 @@
|
||||
args = args,
|
||||
prefix = "icu",
|
||||
tool = ":icu/mksnapshot" + suffix,
|
||||
+ target_tool = ":icu/mksnapshot" + suffix,
|
||||
suffix = suffix,
|
||||
target_os = select({
|
||||
"@v8//bazel/config:is_macos": "mac",
|
||||
Reference in New Issue
Block a user