|
|
|
"""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,
|
|
|
|
file_platform,
|
|
|
|
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: a diagnostic name for this architecture.
|
|
|
|
file_platform: the expected output of `file`.
|
|
|
|
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,
|
|
|
|
tools = 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,
|
|
|
|
),
|
|
|
|
target_compatible_with = select({
|
|
|
|
"//build_defs:" + platform: [],
|
|
|
|
"//conditions:default": ["@platforms//:incompatible"],
|
|
|
|
}),
|
|
|
|
**kwargs
|
|
|
|
)
|
|
|
|
|
|
|
|
def aarch64_test(**kwargs):
|
|
|
|
_arch_test_impl(
|
|
|
|
platform = "aarch64",
|
|
|
|
file_platform = "ELF 64-bit LSB.* ARM aarch64",
|
|
|
|
**kwargs
|
|
|
|
)
|
|
|
|
|
|
|
|
def x86_64_test(**kwargs):
|
|
|
|
_arch_test_impl(
|
|
|
|
platform = "x86_64",
|
|
|
|
file_platform = "ELF 64-bit LSB.*, ARM x86_64",
|
|
|
|
**kwargs
|
|
|
|
)
|