Create Starlark rule for shared-binary tests.
This allows running tests using a prebuilt binary with different arguments and data dependencies. It avoids a pass-through shell script which causes issues on some platforms.
PiperOrigin-RevId: 302484282
diff --git a/build_tools/bazel/run_binary_test.bzl b/build_tools/bazel/run_binary_test.bzl
new file mode 100644
index 0000000..b1e31b7
--- /dev/null
+++ b/build_tools/bazel/run_binary_test.bzl
@@ -0,0 +1,62 @@
+# Copyright 2020 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Creates a test from the binary output of another rule.
+
+The rule instantiation can pass additional arguments to the binary and provide
+it with additional data files (as well as the standard bazel test classification
+attiributes). This allows compiling the binary once and not recompiling or
+relinking it for each test rule. It also avoids a wrapper shell script, which
+adds unnecessary shell dependencies and confuses some tooling about the type of
+the binary.
+
+Example usage:
+
+run_binary_test(
+ name = "my_test",
+ args = ["--input_file=$(location :data_file)"],
+ data = [":data_file"],
+ test_binary = ":some_cc_binary",
+)
+"""
+
+def _run_binary_test_impl(ctx):
+ ctx.actions.run_shell(
+ inputs = [ctx.file.test_binary],
+ outputs = [ctx.outputs.executable],
+ command = "cp $1 $2",
+ arguments = [ctx.file.test_binary.path, ctx.outputs.executable.path],
+ mnemonic = "CopyExecutable",
+ )
+
+ data_runfiles = ctx.runfiles(files = ctx.files.data)
+
+ binary_runfiles = ctx.attr.test_binary[DefaultInfo].default_runfiles
+
+ return [DefaultInfo(
+ executable = ctx.outputs.executable,
+ runfiles = data_runfiles.merge(binary_runfiles),
+ )]
+
+run_binary_test = rule(
+ _run_binary_test_impl,
+ attrs = {
+ "test_binary": attr.label(
+ mandatory = True,
+ allow_single_file = True,
+ ),
+ "data": attr.label_list(allow_empty = True, allow_files = True),
+ },
+ test = True,
+)
diff --git a/iree/modules/check/BUILD b/iree/modules/check/BUILD
index 1a9a4ca..4616e1d 100644
--- a/iree/modules/check/BUILD
+++ b/iree/modules/check/BUILD
@@ -64,8 +64,6 @@
] + PLATFORM_VULKAN_DEPS + IREE_DRIVER_MODULES,
)
-exports_files(["check_module.sh"])
-
cc_library(
name = "native_module",
testonly = True,
diff --git a/iree/modules/check/check_module.sh b/iree/modules/check/check_module.sh
deleted file mode 100755
index 0e8203b..0000000
--- a/iree/modules/check/check_module.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-"$TEST_SRCDIR/iree_core/iree/modules/check/iree-check-module" "$@"
diff --git a/iree/modules/check/test/BUILD b/iree/modules/check/test/BUILD
index 0fa6fa5..bfe4411 100644
--- a/iree/modules/check/test/BUILD
+++ b/iree/modules/check/test/BUILD
@@ -14,6 +14,7 @@
load("//iree/tools:compilation.bzl", "iree_bytecode_module")
load("//iree:lit_test.bzl", "iree_lit_test_suite")
+load("//build_tools/bazel:run_binary_test.bzl", "run_binary_test")
package(
default_visibility = ["//visibility:public"],
@@ -37,17 +38,14 @@
translate_tool = "//iree/compiler/Dialect/Modules/Check:check-translate",
)
-sh_test(
+run_binary_test(
name = "success_test",
- srcs = ["//iree/modules/check:check_module.sh"],
args = [
"--driver=vmla",
"--input_file=$(location :success_module)",
],
- data = [
- ":success_module",
- "//iree/modules/check:iree-check-module",
- ],
+ data = [":success_module"],
+ test_binary = "//iree/modules/check:iree-check-module",
)
iree_bytecode_module(
@@ -57,16 +55,13 @@
translate_tool = "//iree/compiler/Dialect/Modules/Check:check-translate",
)
-sh_test(
+run_binary_test(
name = "failure_test",
- srcs = ["//iree/modules/check:check_module.sh"],
args = [
"--driver=vmla",
"--input_file=$(location :failure_module)",
"--expect_failure",
],
- data = [
- ":failure_module",
- "//iree/modules/check:iree-check-module",
- ],
+ data = [":failure_module"],
+ test_binary = "//iree/modules/check:iree-check-module",
)