diff --git a/.bazelrc b/.bazelrc index fc3f213e3..b238747bc 100644 --- a/.bazelrc +++ b/.bazelrc @@ -23,6 +23,14 @@ common --repo_env=BAZEL_NO_APPLE_CPP_TOOLCHAIN=1 common:ci --toolchain_resolution_debug='@@bazel_tools//tools/cpp:toolchain_type' +# rules_rs experimental toolchains require @llvm//constraints/libc:gnu.2.28 on the target +# platform for gnu Linux targets. The auto-detected host platform doesn't include it, so we +# use a custom platform that inherits host cpu/os constraints and adds gnu.2.28. This works +# on both x86_64 and aarch64 Linux builders. +# --enable_platform_specific_config (in defaults.bazelrc) makes this activate automatically on Linux. +common:linux --platforms=//bazel/platforms:linux_gnu +common:linux --host_platform=//bazel/platforms:linux_gnu + common:release --build_tag_filters=release common:release --stamp common:release --compilation_mode=opt diff --git a/MODULE.bazel b/MODULE.bazel index 21fc39526..954d832d5 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -21,7 +21,7 @@ bazel_dep(name = "rules_pkg", version = "1.1.0") bazel_dep(name = "rules_python", version = "1.0.0") bazel_dep(name = "rules_shell", version = "0.6.1") bazel_dep(name = "tar.bzl", version = "0.5.5") -bazel_dep(name = "with_cfg.bzl", version = "0.14.1") +bazel_dep(name = "with_cfg.bzl", version = "0.14.6") bazel_lib_toolchains = use_extension("@tar.bzl//tar:extensions.bzl", "toolchains") use_repo(bazel_lib_toolchains, "bsd_tar_toolchains") @@ -130,29 +130,29 @@ osx.from_archive( "https://github.com/joseluisq/macosx-sdks/releases/download/26.1/MacOSX26.1.sdk.tar.xz", ], ) +use_repo(osx, "macos_sdk") -# Rust configuration -bazel_dep(name = "rules_rust", version = "0.68.1", dev_dependency = IS_RELEASE) +# Rust configuration (via rules_rs's bundled rules_rust) +rules_rust_ext = use_extension( + "@rules_rs//rs:rules_rust.bzl", + "rules_rust", + dev_dependency = IS_RELEASE, +) +use_repo(rules_rust_ext, "rules_rust") -rust = use_extension( - "@rules_rust//rust:extensions.bzl", - "rust", +toolchains = use_extension( + "@rules_rs//rs/toolchains:module_extension.bzl", + "toolchains", dev_dependency = IS_RELEASE, ) -rust.toolchain( +toolchains.toolchain( edition = "2024", - extra_target_triples = [ - "aarch64-apple-darwin", - "x86_64-apple-darwin", - "aarch64-unknown-linux-musl", - "x86_64-unknown-linux-musl", - ], - versions = ["1.88.0"], + version = "1.88.0", ) -use_repo(rust, "rust_toolchains") +use_repo(toolchains, "default_rust_toolchains") register_toolchains( - "@rust_toolchains//:all", + "@default_rust_toolchains//:all", dev_dependency = IS_RELEASE, ) @@ -163,7 +163,7 @@ bazel_dep(name = "bazel_env.bzl", version = "0.5.0", dev_dependency = IS_RELEASE bazel_dep(name = "bzip2", version = "1.0.8.bcr.3", dev_dependency = IS_RELEASE) bazel_dep(name = "gazelle", version = "0.47.0", dev_dependency = IS_RELEASE) bazel_dep(name = "rules_go", version = "0.60.0", dev_dependency = IS_RELEASE) -bazel_dep(name = "rules_rs", version = "0.0.26", dev_dependency = IS_RELEASE) +bazel_dep(name = "rules_rs", version = "0.0.64", dev_dependency = IS_RELEASE) bazel_dep(name = "xz", version = "5.4.5.bcr.7", dev_dependency = IS_RELEASE) bazel_dep(name = "zstd", version = "1.5.7", dev_dependency = IS_RELEASE) bazel_dep(name = "rules_multitool", version = "1.9.0", dev_dependency = IS_RELEASE) @@ -183,8 +183,10 @@ crate.from_cargo( cargo_toml = "//:Cargo.toml", platform_triples = [ "aarch64-apple-darwin", + "aarch64-unknown-linux-gnu", "aarch64-unknown-linux-musl", "x86_64-apple-darwin", + "x86_64-unknown-linux-gnu", "x86_64-unknown-linux-musl", ], ) diff --git a/bazel/platforms/BUILD.bazel b/bazel/platforms/BUILD.bazel index 67469d7ac..0df79aaaa 100644 --- a/bazel/platforms/BUILD.bazel +++ b/bazel/platforms/BUILD.bazel @@ -13,7 +13,10 @@ load("//bazel/platforms/config:defs.bzl", "linker_suffix", "platforms") "@platforms//os:{}".format(p.os), "@platforms//cpu:{}".format(p.cpu), "//bazel/platforms/linkers:{}".format(p.linker), - ], + ] + ([ + "@llvm//constraints/libc:musl", + "@llvm//constraints/pie:off", + ] if p.os == "linux" else []), visibility = ["//visibility:public"], ) for p in platforms] @@ -29,6 +32,18 @@ alias( visibility = ["//visibility:public"], ) +# A host-compatible Linux platform with glibc 2.28+, used as the build target +# and exec platform on Linux. Inherits cpu/os from the auto-detected host so +# it works on both x86_64 and aarch64 builders without separate entries. +platform( + name = "linux_gnu", + constraint_values = [ + "@llvm//constraints/libc:gnu.2.28", + ], + parents = ["@platforms//host"], + visibility = ["//visibility:public"], +) + platform( name = "rbe", constraint_values = [ diff --git a/e2e/.bazelrc b/e2e/.bazelrc index 2a0acb9f5..b9fc0f272 100644 --- a/e2e/.bazelrc +++ b/e2e/.bazelrc @@ -6,6 +6,13 @@ common --@rules_cc//cc/toolchains/args/archiver_flags:use_libtool_on_macos=false common --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 common --repo_env=BAZEL_NO_APPLE_CPP_TOOLCHAIN=1 +# rules_rs experimental toolchains require @llvm//constraints/libc:gnu.2.28 on the target +# platform for gnu Linux targets. The auto-detected host platform doesn't include it, so we +# use a custom platform that inherits host cpu/os constraints and adds gnu.2.28. +common --enable_platform_specific_config +common:linux --platforms=@aspect_rules_py//bazel/platforms:linux_gnu +common:linux --host_platform=@aspect_rules_py//bazel/platforms:linux_gnu + # Configure a default venv # common --@pypi//venv=say diff --git a/e2e/cases/freethreaded-805/BUILD.bazel b/e2e/cases/freethreaded-805/BUILD.bazel index 21c3a33d2..8aeab222f 100644 --- a/e2e/cases/freethreaded-805/BUILD.bazel +++ b/e2e/cases/freethreaded-805/BUILD.bazel @@ -3,6 +3,10 @@ load("@bazel_lib//lib:transitions.bzl", "platform_transition_test") platform( name = "freethreaded", + constraint_values = [ + # rules_rs Rust toolchains for linux-gnu targets require gnu.2.28. + "@llvm//constraints/libc:gnu.2.28", + ], flags = [ "--@aspect_rules_py//py/private/interpreter:freethreaded=true", ], diff --git a/e2e/cases/interpreter-features-836/BUILD.bazel b/e2e/cases/interpreter-features-836/BUILD.bazel index f0c535227..e747c996e 100644 --- a/e2e/cases/interpreter-features-836/BUILD.bazel +++ b/e2e/cases/interpreter-features-836/BUILD.bazel @@ -9,6 +9,8 @@ platform( constraint_values = [ "@platforms//os:linux", "@platforms//cpu:x86_64", + # rules_rs Rust toolchains for linux-gnu targets require gnu.2.28. + "@llvm//constraints/libc:gnu.2.28", ], flags = [ "--@aspect_rules_py//py/private/interpreter:exclude_feature=turtle", diff --git a/e2e/cases/oci/py_image_layer/BUILD.bazel b/e2e/cases/oci/py_image_layer/BUILD.bazel index bae5f3d92..4403b7e3e 100644 --- a/e2e/cases/oci/py_image_layer/BUILD.bazel +++ b/e2e/cases/oci/py_image_layer/BUILD.bazel @@ -9,6 +9,8 @@ platform( constraint_values = [ "@platforms//os:linux", "@platforms//cpu:aarch64", + # rules_rs Rust toolchains for linux-gnu targets require gnu.2.28. + "@llvm//constraints/libc:gnu.2.28", ], ) @@ -17,6 +19,8 @@ platform( constraint_values = [ "@platforms//os:linux", "@platforms//cpu:x86_64", + # rules_rs Rust toolchains for linux-gnu targets require gnu.2.28. + "@llvm//constraints/libc:gnu.2.28", ], ) diff --git a/e2e/cases/oci/py_venv_image_layer/BUILD.bazel b/e2e/cases/oci/py_venv_image_layer/BUILD.bazel index a616b3f24..20f05b4cf 100644 --- a/e2e/cases/oci/py_venv_image_layer/BUILD.bazel +++ b/e2e/cases/oci/py_venv_image_layer/BUILD.bazel @@ -10,6 +10,8 @@ platform( constraint_values = [ "@platforms//os:linux", "@platforms//cpu:aarch64", + # rules_rs Rust toolchains for linux-gnu targets require gnu.2.28. + "@llvm//constraints/libc:gnu.2.28", ], flags = [ "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", @@ -25,6 +27,8 @@ platform( constraint_values = [ "@platforms//os:linux", "@platforms//cpu:x86_64", + # rules_rs Rust toolchains for linux-gnu targets require gnu.2.28. + "@llvm//constraints/libc:gnu.2.28", ], flags = [ "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", diff --git a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel index 8ac6632dc..9f70c3140 100644 --- a/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel +++ b/e2e/cases/uv-deps-650/crossbuild/BUILD.bazel @@ -10,6 +10,8 @@ platform( constraint_values = [ "@platforms//os:linux", "@platforms//cpu:aarch64", + # rules_rs Rust toolchains for linux-gnu targets require gnu.2.28. + "@llvm//constraints/libc:gnu.2.28", ], flags = [ "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", @@ -25,6 +27,8 @@ platform( constraint_values = [ "@platforms//os:linux", "@platforms//cpu:x86_64", + # rules_rs Rust toolchains for linux-gnu targets require gnu.2.28. + "@llvm//constraints/libc:gnu.2.28", ], flags = [ "--@aspect_rules_py//uv/private/constraints/platform:platform_libc=glibc", diff --git a/py/tests/py-pex-binary/BUILD.bazel b/py/tests/py-pex-binary/BUILD.bazel index 98b65ae44..c036fd0e4 100644 --- a/py/tests/py-pex-binary/BUILD.bazel +++ b/py/tests/py-pex-binary/BUILD.bazel @@ -46,6 +46,8 @@ platform( constraint_values = [ "@platforms//os:linux", "@platforms//cpu:x86_64", + # rules_rs Rust toolchains for linux-gnu targets require gnu.2.28. + "@llvm//constraints/libc:gnu.2.28", ], )