SERVER-107805 Add option to not download c++ toolchain for faster python builds (#39355)

GitOrigin-RevId: a2d449d33df132abb0d6086bcd7f600f5708bb58
This commit is contained in:
Andrew Bradshaw 2025-07-30 13:54:02 -07:00 committed by MongoDB Bot
parent d4be755922
commit d42a85233c
4 changed files with 20 additions and 3 deletions

View File

@ -2,9 +2,17 @@ load("//bazel:utils.bzl", "generate_noop_toolchain", "get_toolchain_subs", "retr
load("//bazel/toolchains/cc/mongo_linux:mongo_toolchain_version.bzl", "TOOLCHAIN_MAP")
load("//bazel/toolchains/cc/mongo_linux:mongo_mold.bzl", "MOLD_MAP")
SKIP_TOOLCHAIN_ENVIRONMENT_VARIABLE = "no_c++_toolchain"
def _toolchain_download(ctx):
distro, arch, substitutions = get_toolchain_subs(ctx)
skip_toolchain = ctx.os.environ.get(SKIP_TOOLCHAIN_ENVIRONMENT_VARIABLE, None)
if skip_toolchain:
generate_noop_toolchain(ctx, substitutions)
print("Skipping c++ toolchain download and defining noop toolchain due to " + SKIP_TOOLCHAIN_ENVIRONMENT_VARIABLE + " being defined.")
return None
toolchain_key = "{distro}_{arch}".format(distro = distro, arch = arch)
if toolchain_key in TOOLCHAIN_MAP[ctx.attr.version]:
@ -50,6 +58,7 @@ def _toolchain_download(ctx):
toolchain_download = repository_rule(
implementation = _toolchain_download,
environ = [SKIP_TOOLCHAIN_ENVIRONMENT_VARIABLE],
attrs = {
"os": attr.string(
values = ["macos", "linux", "windows"],

View File

@ -88,8 +88,12 @@ def search_for_modules(deps, deps_installed, lockfile_changed=False):
wrapper_debug(f"deps_not_found: {deps_not_found}")
return deps_not_found
def skip_cplusplus_toolchain(args):
if any("no_c++_toolchain" in arg for arg in args):
return True
return False
def install_modules(bazel):
def install_modules(bazel, args):
need_to_install = False
pwd_hash = hashlib.md5(str(REPO_ROOT).encode()).hexdigest()
lockfile_hash_file = pathlib.Path(tempfile.gettempdir()) / f"{pwd_hash}_lockfile_hash"
@ -123,6 +127,10 @@ def install_modules(bazel):
bazel,
"build",
] + ["@poetry//:library_" + dep.replace("-", "_") for dep in deps_needed]
if skip_cplusplus_toolchain(args):
cmd += ["--repo_env=no_c++_toolchain=1"]
proc = subprocess.run(
cmd
+ [

View File

@ -13,7 +13,7 @@ BAZEL_CI_NAMESPACE = "ci-prod"
def main():
install_modules(sys.argv[1])
install_modules(sys.argv[1], sys.argv[1:])
from bazel.wrapper_hook.flag_sync import sync_flags

View File

@ -16,7 +16,7 @@ wrapper_debug(f"wrapper hook script is using {sys.executable}")
def main():
install_modules(sys.argv[1])
install_modules(sys.argv[1], sys.argv[1:])
from bazel.wrapper_hook.autogenerated_targets import autogenerate_targets
from bazel.wrapper_hook.engflow_check import engflow_auth