| # Copyright lowRISC contributors. | |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. | |
| # SPDX-License-Identifier: Apache-2.0 | |
| load("@//rules:opentitan_test.bzl", "dv_params", "opentitan_functest") | |
| package(default_visibility = ["//visibility:public"]) | |
| # Note, this file contains step-by-step instructions on how to both: | |
| # 1. add custom test hook libraries (that override the default), labeled | |
| # `TH-STEP *` for "Test Hook Step *", and, | |
| # 2. add custom manufacturer tests, labeled `OTFT-STEP *` for "OpenTitan | |
| # Functest Step *". | |
| # Read on to learn more about these features. | |
| ################################################################################ | |
| # Config Settings for each Test Hook Library. | |
| # | |
| # These allow you to select which set of test hooks Bazel should use via a | |
| # command line argument, e.g., `--define test_hooks=<config setting name>` | |
| # | |
| # Modify this as described below to add more test hooks libraries. | |
| ################################################################################ | |
| # Example running the open-source AES smoketest with default test hooks: | |
| # bazel test //sw/device/tests:aes_smoketest --define test_hooks=default | |
| # - or - | |
| # bazel test //sw/device/tests:aes_smoketest | |
| config_setting( | |
| name = "hooks_default", | |
| define_values = { | |
| "test_hooks": "default", | |
| }, | |
| ) | |
| # Example running the open-source AES smoketest with non-default test hooks: | |
| # bazel test //sw/device/tests:aes_smoketest --define test_hooks=hooks_1 | |
| config_setting( | |
| name = "hooks_1", | |
| define_values = { | |
| "test_hooks": "hooks_1", | |
| }, | |
| ) | |
| # TH-Step 1: Copy/Uncomment below to add an additional set of test hooks. | |
| # config_setting( | |
| # name = "hooks_2", | |
| # define_values = { | |
| # "test_hooks": "hooks_2", | |
| # }, | |
| # ) | |
| # TH-Step 2: Copy/Uncomment the row below to add an additional set of test hooks. | |
| _TEST_HOOKS_DEPS = select({ | |
| "hooks_1": [":test_hooks_1"], | |
| # "hooks_2": [":test_hooks_2"], | |
| "hooks_default": [], | |
| "//conditions:default": [], | |
| }) | |
| ################################################################################ | |
| # Example Manufacturer Test Hook Library. | |
| # | |
| # Modify this section as described below to add more test hooks libraries. | |
| ################################################################################ | |
| cc_library( | |
| name = "test_hooks_1", | |
| srcs = ["test_hooks_1.c"], | |
| deps = [ | |
| "@//sw/device/lib/runtime:log", | |
| ], | |
| alwayslink = True, | |
| ) | |
| # TH-Step 3: Copy/Uncomment below to add an additional test hooks library that | |
| # may override the default test hooks. | |
| # cc_library( | |
| # # The name is the label that will be used to refer to this library below, | |
| # # in the single `test_hooks` library that is a dependency of the OTTF. | |
| # name = "test_hooks_2", | |
| # | |
| # # `srcs` is a list of source files and private header files. | |
| # srcs = ["test_hooks_2.c"], | |
| # | |
| # # `hdrs` is a list of public header files for the `test_hooks` library. | |
| # hdrs = [], | |
| # | |
| # # `deps` is a list of dependencies for this library. | |
| # # Any dependencies local to this repo can start with `//`. | |
| # # Any dependencies from the main opentitan repo must start with `@//`. | |
| # deps = ["@//sw/device/lib/runtime:log"], | |
| # | |
| # # We use alwayslink to force the symbols exported by this library to | |
| # # override the default test hook weak symbols provided by the default | |
| # # `test_hooks` library below. | |
| # alwayslink = True, | |
| # ) | |
| ################################################################################ | |
| # DO NOT MODIFY THIS SECTION | |
| # | |
| # The main `test_hooks` library that may be overridden by manufacturer test hook | |
| # libraries defined above. | |
| ################################################################################ | |
| cc_library( | |
| name = "test_hooks", | |
| srcs = ["test_hooks_default.c"], | |
| deps = ["@//sw/device/lib/base:macros"] + _TEST_HOOKS_DEPS, | |
| ) | |
| ################################################################################ | |
| # Manufacturer Tests | |
| # | |
| # These may make use of any manufacturer test hook libraries the same was as | |
| # open-source tests may, but it is probably uneccessary, since these are custom | |
| # manufacturer defined tests. | |
| # | |
| # Additional tests may be added below as `opentitan_functest` rules. Same as | |
| # above, any dependencies local to this repo can start with `//`. However, any | |
| # dependencies from the main opentitan repo must start with `@//`. | |
| # | |
| # To run the example test below using the default location: | |
| # `bazel test @manufacturer_test_hooks//:example_test` | |
| # | |
| # To run the example test below when the `@manufacturer_test_hooks` repo is in a | |
| # different location on the system, use: | |
| # `MANUFACTURER_HOOKS_DIR=/path/to/test_hooks | |
| # bazel test @manufacturer_test_hooks//:example_test` | |
| ################################################################################ | |
| # OTFT-Step 1: Copy/paste the below `opentitan_functest` to add an additional | |
| # manufacturer-specific test. | |
| opentitan_functest( | |
| name = "example_test", | |
| srcs = ["example_test.c"], | |
| dv = dv_params( | |
| rom = "//sw/device/silicon_creator/rom:rom_with_fake_keys", | |
| ), | |
| key = "fake_test_key_0", | |
| targets = [ | |
| "cw310_rom", | |
| "cw310_test_rom", | |
| "dv", | |
| ], | |
| deps = [ | |
| "@//sw/device/lib/testing/test_framework:ottf_main", | |
| ], | |
| ) | |
| ################################################################################ | |
| # Statically Hooked Manufacturer Tests | |
| # | |
| # This provides an example of how to use open source test code in | |
| # `sw/device/tests/` with manufacturer test hooks (defined in this Bazel | |
| # repository) without having to specify which test hooks library should be | |
| # executed with the test on the command line. | |
| # | |
| # TODO(lowRISC:opentitan#13180): see description in `sw/device/tests/BUILD`. | |
| # | |
| # To run the example test below using the default location: | |
| # `bazel test @manufacturer_test_hooks//:statically_hooked_opensource_test` | |
| # | |
| # To run the example test below when the `@manufacturer_test_hooks` repo is in a | |
| # different location on the system, use: | |
| # `MANUFACTURER_HOOKS_DIR=/path/to/test_hooks | |
| # bazel test @manufacturer_test_hooks//:statically_hooked_opensource_test` | |
| ################################################################################ | |
| opentitan_functest( | |
| name = "statically_hooked_opensource_test", | |
| srcs = ["@//sw/device/tests:example_test_from_flash.c"], | |
| dv = dv_params( | |
| rom = "//sw/device/silicon_creator/rom:rom_with_fake_keys", | |
| ), | |
| key = "fake_test_key_0", | |
| targets = [ | |
| "cw310_rom", | |
| "cw310_test_rom", | |
| "dv", | |
| ], | |
| deps = [ | |
| "@//sw/device/lib/testing/test_framework:ottf_main", | |
| "@manufacturer_test_hooks//:test_hooks_1", | |
| ], | |
| ) |