blob: b51777b104bbd82c3620af43c2afef3261bd8fe6 [file] [edit]
"""Generated unittests to verify that a binary is built for the expected architecture."""
load("//build_defs:internal_shell.bzl", "inline_sh_test")
def _arch_test_impl(
name,
platform_name,
file_platform,
config_setting_label,
bazel_binaries = [],
system_binaries = [],
**kwargs):
"""Bazel rule to verify that a Bazel or system binary is built for the aarch64 architecture.
Args:
name: the name of the test.
platform_name: a diagnostic name for this architecture.
file_platform: the expected output of `file`.
config_setting_label: the label of the config setting that defines this architecture.
bazel_binaries: a set of binary targets to inspect.
system_binaries: a set of paths to system executables to inspect.
**kwargs: other keyword arguments that are passed to the test.
"""
inline_sh_test(
name = name,
srcs = bazel_binaries,
cmd = """
for binary in "%s"; do
(file -L $$binary | grep -q "%s") \\
|| (echo "Test binary is not an %s binary: "; file -L $$binary; exit 1)
done
""" % (
" ".join(["$(rootpaths %s)" % b for b in bazel_binaries] + system_binaries),
file_platform,
platform_name,
),
target_compatible_with = select({
config_setting_label: [],
"//conditions:default": ["@platforms//:incompatible"],
}),
**kwargs
)
def aarch64_test(**kwargs):
_arch_test_impl(
platform_name = "aarch64",
file_platform = "ELF 64-bit LSB.* ARM aarch64",
config_setting_label = "//build_defs:is_linux_aarch64",
**kwargs
)
def x86_64_test(**kwargs):
_arch_test_impl(
platform_name = "x86_64",
file_platform = "ELF 64-bit LSB.* x86-64",
config_setting_label = "//build_defs:is_linux_x86_64",
**kwargs
)