# Device Libraries

## Overview

The OpenTitan repository contains device libraries which are used within our
Reference Firmware Images, and can (and should) be used by other OpenTitan
device software.

These are organised into the `sw/device/lib` directory.

-   [`sw/device/lib/base`](https://github.com/lowRISC/opentitan/tree/master/sw/device/lib/base)
    contains the Base Libraries, including
    [freestanding C library headers](https://github.com/lowRISC/opentitan/tree/master/sw/device/lib/base/freestanding).
    The Base Libraries are simple libraries that can be used by any other OpenTitan device software libraries.
-   [`sw/device/lib/dif`](./dif/README.md)
    contains the [Device Interface Functions](../../../doc/contributing/sw/device_interface_functions.md).
-   `sw/device/lib/arch` contains the libraries to be used on specific device
    configurations (for instance FPGA, Simulation, etc.).
-   [`sw/device/lib/runtime`](https://github.com/lowRISC/opentitan/tree/master/sw/device/lib/runtime)
    contains general libraries for more advanced on-device functionality
    (including logging, printing, and interacting with the RISC-V core).
-   [`sw/device/lib/testing`](./testing/README.md)
    contains test library code. Test library code is any (reusable) code that
    could aid in the writing of smoke, IP integration, or system-level tests,
    that is a layer of above the DIFs. In other words, this code may make use
    of the DIFs to actuate the hardware, and chip-level test code may make use
    of this code to actuate the DIFs.

## Documentation Index

{{% sectionContent %}}
