diff --git a/rust/platform/BUILD.bazel b/rust/platform/BUILD.bazel index d5513b1e79..b513e47025 100644 --- a/rust/platform/BUILD.bazel +++ b/rust/platform/BUILD.bazel @@ -6,6 +6,8 @@ package(default_visibility = ["//visibility:public"]) declare_config_settings() # WASI Preview version constraint settings +# +# TODO(https://github.com/bazelbuild/platforms/pull/123): Replace with upstream. constraint_setting( name = "wasi_version", default_constraint_value = ":wasi_preview_1", @@ -21,6 +23,23 @@ constraint_value( constraint_setting = ":wasi_version", ) +# BPF execution constraints +# +# TODO(https://github.com/bazelbuild/platforms/pull/131): Replace with upstream. +constraint_setting( + name = "bpf_arch", +) + +constraint_value( + name = "bpfeb", + constraint_setting = ":bpf_arch", +) + +constraint_value( + name = "bpfel", + constraint_setting = ":bpf_arch", +) + package_group( name = "function_transition_allowlist", packages = [ diff --git a/rust/platform/triple_mappings.bzl b/rust/platform/triple_mappings.bzl index 6070591e6b..63b03555e3 100644 --- a/rust/platform/triple_mappings.bzl +++ b/rust/platform/triple_mappings.bzl @@ -75,6 +75,8 @@ SUPPORTED_T2_PLATFORM_TRIPLES = { _T3_PLATFORM_TRIPLES = { "aarch64-unknown-nto-qnx710": _support(std = True, host_tools = False), + "bpfeb-unknown-none": _support(std = False, host_tools = False), + "bpfel-unknown-none": _support(std = False, host_tools = False), "wasm64-unknown-unknown": _support(std = False, host_tools = False), } @@ -416,6 +418,16 @@ def triple_to_constraint_set(target_triple): Returns: list: A list of constraints (each represented by a list of strings) """ + if target_triple == "bpfeb-unknown-none": + return [ + "@platforms//os:none", + "@rules_rust//rust/platform:bpfeb", + ] + if target_triple == "bpfel-unknown-none": + return [ + "@platforms//os:none", + "@rules_rust//rust/platform:bpfel", + ] if target_triple == "wasm32-wasi": return [ "@platforms//cpu:wasm32", diff --git a/test/unit/platform_triple/BUILD.bazel b/test/unit/platform_triple/BUILD.bazel index bb30c72b66..96e4b9060b 100644 --- a/test/unit/platform_triple/BUILD.bazel +++ b/test/unit/platform_triple/BUILD.bazel @@ -1,6 +1,11 @@ +load(":bpf_platform_test.bzl", "bpf_platform_test_suite") load(":platform_triple_test.bzl", "platform_triple_test_suite") load(":wasi_platform_test.bzl", "wasi_platform_test_suite") +bpf_platform_test_suite( + name = "bpf_platform_test_suite", +) + platform_triple_test_suite( name = "platform_triple_test_suite", ) diff --git a/test/unit/platform_triple/bpf_platform_test.bzl b/test/unit/platform_triple/bpf_platform_test.bzl new file mode 100644 index 0000000000..c3c5354366 --- /dev/null +++ b/test/unit/platform_triple/bpf_platform_test.bzl @@ -0,0 +1,52 @@ +"""Tests for BPF platform constraint mappings""" + +load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") +load("//rust/platform:triple_mappings.bzl", "triple_to_constraint_set") + +def _bpf_platform_constraints_test_impl(ctx): + env = unittest.begin(ctx) + + bpfeb_constraints = triple_to_constraint_set("bpfeb-unknown-none") + asserts.equals( + env, + [ + "@platforms//os:none", + "@rules_rust//rust/platform:bpfeb", + ], + bpfeb_constraints, + "bpfeb-unknown-none should map to the BPF big-endian CPU and 'none' OS constraints", + ) + + bpfel_constraints = triple_to_constraint_set("bpfel-unknown-none") + asserts.equals( + env, + [ + "@platforms//os:none", + "@rules_rust//rust/platform:bpfel", + ], + bpfel_constraints, + "bpfel-unknown-none should map to the BPF little-endian CPU and 'none' OS constraints", + ) + + return unittest.end(env) + +bpf_platform_constraints_test = unittest.make(_bpf_platform_constraints_test_impl) + +def bpf_platform_test_suite(name, **kwargs): + """Define a test suite for BPF platform constraint mappings. + + Args: + name (str): The name of the test suite. + **kwargs (dict): Additional keyword arguments for the test_suite. + """ + bpf_platform_constraints_test( + name = "bpf_platform_constraints_test", + ) + + native.test_suite( + name = name, + tests = [ + ":bpf_platform_constraints_test", + ], + **kwargs + ) diff --git a/test/unit/platform_triple/platform_triple_test.bzl b/test/unit/platform_triple/platform_triple_test.bzl index 68fe79fa23..69671d6563 100644 --- a/test/unit/platform_triple/platform_triple_test.bzl +++ b/test/unit/platform_triple/platform_triple_test.bzl @@ -125,6 +125,10 @@ def _construct_known_triples_test_impl(ctx): _assert_parts(env, triple("thumbv7em-none-eabi"), "thumbv7em", None, "none", "eabi") _assert_parts(env, triple("thumbv8m.main-none-eabi"), "thumbv8m.main", None, "none", "eabi") + # BPF targets + _assert_parts(env, triple("bpfeb-unknown-none"), "bpfeb", "unknown", "none", None) + _assert_parts(env, triple("bpfel-unknown-none"), "bpfel", "unknown", "none", None) + # Test all WASM32 targets _assert_parts(env, triple("wasm32-unknown-unknown"), "wasm32", "unknown", "unknown", None) _assert_parts(env, triple("wasm32-unknown-emscripten"), "wasm32", "unknown", "emscripten", None)