blob: 3bf90cdbf5f464fce2a1ec811bfd40e72c6a7b22 [file]
# Copyright 2026 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
"""Rule for bundling files into a directory (TreeArtifact).
Bazel operates on individual files, but some tools require a directory
path rather than individual file paths. iree_directory bridges this gap:
it copies source files into a declared directory, producing a single
TreeArtifact output whose path can be used as a directory reference.
Usage:
load("//build_tools/bazel:iree_directory.bzl", "iree_directory")
iree_directory(
name = "my_data_dir",
srcs = glob(["*.dat"]),
)
When used as a dependency in iree_hal_executable's flag_values, the
placeholder resolves to the directory path (since TreeArtifacts produce
a single output whose path is the directory itself).
"""
def _iree_directory_impl(ctx):
"""Copies source files into a declared directory."""
srcs = ctx.files.srcs
if not srcs:
fail("iree_directory requires at least one source file")
directory = ctx.actions.declare_directory(ctx.attr.name)
args = ctx.actions.args()
args.add(directory.path)
args.add_all(srcs)
ctx.actions.run_shell(
inputs = srcs,
outputs = [directory],
arguments = [args],
command = 'dest="$1"; shift; mkdir -p "$dest" && cp "$@" "$dest"',
)
return [DefaultInfo(files = depset([directory]))]
iree_directory = rule(
implementation = _iree_directory_impl,
attrs = {
"srcs": attr.label_list(mandatory = True, allow_files = True),
},
)