# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

workspace(name = "manufacturer_test_hooks")

# This is a sample workspace to demonstrate how to write test hooks for
# the OpenTitan Test Framework (OTTF).  This bazel repository is not
# a stand-alone project: it must be connected into the main OpenTitan
# repository by way of the `hooks_setup` call in OpenTitan's WORKSPACE file.

# See this repository's README.md and BUILD.bazel files to understand how to
# write rules for the test hooks.
