[metagen] Make Bazel driver mode a V8 build setting

Bug: 531344950
Change-Id: I662738dcb1ef89107428c0792d0f70fe28717c1a
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/8493555
Auto-Submit: Jakob Linke <jgruber@chromium.org>
Commit-Queue: Andreas Haas <ahaas@chromium.org>
Reviewed-by: Andreas Haas <ahaas@chromium.org>
Cr-Commit-Position: refs/heads/main@{#110217}
This commit is contained in:
Jakob Linke authored and v8-scoped@luci-project-accounts.iam.gserviceaccount.com committed 2026-10-01 01:29:27 -07:00
1 parent fb2fbf17f6
commit d02a6c77d0
3 files changed
+21 -18

No files matched your search

+9
View File
@@ -186,6 +186,10 @@ v8_flag(
default = True,
)
# Empty selects the default for the target OS. Set to "gcc" or "cl" when
# the C++ toolchain uses a different driver mode.
v8_string(name = "v8_metagen_driver_mode")
# Mirrors the GN arg of the same name: selects the object-layout source Torque
# compiles from, either the metagen layout JSON or the .tq field blocks.
v8_flag(
@@ -4637,6 +4641,11 @@ py_binary(
run_metagen(
name = "run_metagen",
driver = ":metagen_driver",
default_driver_mode = select({
"@v8//bazel/config:is_windows": "cl",
"//conditions:default": "gcc",
}),
driver_mode_flag = ":v8_metagen_driver_mode",
clang_builtin_headers = [":metagen_clang_builtin_headers"],
libclang_files = [":metagen_libclang_files"],
python_srcs = [":metagen_python_sources"],
-1
View File
@@ -45,7 +45,6 @@ def _impl(ctx):
]
features = [
feature(name = "metagen_driver_mode_gcc", enabled = True),
feature(
name = "default_compile_flags",
enabled = True,
+12 -17
View File
@@ -686,18 +686,10 @@ def _run_metagen_impl(ctx):
requested_features = ctx.features,
unsupported_features = ctx.disabled_features + ["module_maps"],
)
driver_modes = [
mode
for mode in ("gcc", "cl")
if cc_common.is_enabled(
feature_configuration = feature_configuration,
feature_name = "metagen_driver_mode_" + mode,
)
]
if len(driver_modes) != 1:
fail("The C++ toolchain must enable exactly one of " +
"metagen_driver_mode_gcc or metagen_driver_mode_cl.")
driver_mode = driver_modes[0]
driver_mode = (ctx.attr.driver_mode_flag[FlagInfo].value or
ctx.attr.default_driver_mode)
if driver_mode not in _METAGEN_USER_COPTS:
fail("v8_metagen_driver_mode must be 'gcc' or 'cl', got %r" % driver_mode)
# -I dirs for the generated headers (torque, bytecode_builtins).
# None of these live in a cc_library CcInfo so they're added directly.
@@ -864,6 +856,8 @@ _run_metagen = rule(
implementation = _run_metagen_impl,
attrs = {
"prefix": attr.string(mandatory = True),
"default_driver_mode": attr.string(mandatory = True),
"driver_mode_flag": attr.label(providers = [FlagInfo], mandatory = True),
# The checked-in C++ driver, passed straight through as --driver. Its
# direct includes are staged by extra_sandbox_files, not by this attr.
"driver": attr.label(allow_single_file = True, mandatory = True),
@@ -919,7 +913,7 @@ _run_metagen = rule(
toolchains = use_cc_toolchain(),
)
def run_metagen(name, driver,
def run_metagen(name, driver, default_driver_mode, driver_mode_flag,
python_srcs, tool,
cc_compilation_context_from,
clang_builtin_headers,
@@ -941,10 +935,9 @@ def run_metagen(name, driver,
`libclang_from_python_env = True` (bindings supplied through `tool`'s
Python deps) -- exactly one, enforced by the rule.
The target C++ toolchain must enable exactly one feature:
`metagen_driver_mode_gcc` for GNU-style flags (including MinGW), or
`metagen_driver_mode_cl` for clang-cl/MSVC flags. Compiler wrappers do
not affect this choice.
`default_driver_mode` follows the target OS. The `driver_mode_flag`
overrides it for toolchains that use a different flag syntax, such as
MinGW or clang-cl cross builds.
"""
for prefix in ("noicu", "icu"):
is_icu = prefix == "icu"
@@ -952,6 +945,8 @@ def run_metagen(name, driver,
name = prefix + "/" + name,
prefix = prefix,
driver = driver,
default_driver_mode = default_driver_mode,
driver_mode_flag = driver_mode_flag,
libclang_files = libclang_files,
libclang_from_python_env = libclang_from_python_env,
clang_builtin_headers = clang_builtin_headers,