Overview
======

Note: This describes the layout of the Tock 2.0 `libtock-rs` crates, not the
Tock 1.0 crates. Not all of the Tock 2.0 crates have been merged into this
repository yet.

This document gives an overview of the crates in this repository, and is
intended to be useful to `libtock-rs` newcomers.

## `libtock`

Note: `libtock` is currently called `libtock2`, as `libtock` is already a Tock
1.0 crate.

`libtock` provides the default `libtock-rs` experience. It re-exports all of the
drivers `libtock-rs` provides, and provides usable defaults for panic handling
and memory allocation. It should be easy to build a Tock application that only
has one direct dependency: `libtock`.

In order to be easy to use, `libtock` has a hard dependency on
`libtock_runtime`, and therefore cannot be used in a unit test environment. If
you want to unit test code that uses `libtock-rs`, you should depend on the
individual libraries rather than `libtock`.

## Naming convention note

Although these crates have yet to be uploaded to crates.io, they likely will be
uploaded in the future. Therefore, to avoid name collisions, most crates in this
repository have a name that begins with `libtock`. Crates that are only intended
for internal use (e.g. `syscall_tests`, which tests code internal to
`libtock_platform`) do not have the `libtock_` prefix.

The directory names of `libtock_` crates do not contain the `libtock_` prefix.

## Core abstractions: `libtock_platform`

In order to unit test `libtock-rs` code, we need a way to run `libtock-rs` on
our development machines (and in CI). Ironically, that means most crates in
`libtock-rs` are platform independent. `libtock_platform` provides the tools
that allow code to run in both a unit test environment and in real Tock apps. It
consists primarily of the `Syscalls` trait and supporting machinery.

## Syscall implementations: `libtock_runtime` and `libtock_unittest`

In order to run `libtock-rs` code, you need a `libtock_platform::Syscalls`
implementation. Multiple implementations exist that work in different
environments:

* `libtock_runtime` provides a syscall interface that uses a real Tock kernel.
  This is the crate to use in Tock process binaries.
* `libtock_unittest` provides a fake kernel for use in unit tests.

In addition, `libtock_runtime` provides the linker script and Rust runtime
needed to start a Tock process binary. `libtock_unittest` relies on `std` to
provide a runtime.

## Panic handler crates

Each Rust binary must have exactly one panic handler (note that `std` provides a
panic handler for binaries that depend on it). The following crates provide a
`#[panic_handler]` implementation for Tock process binaries:

* `libtock_panic_debug` provides useful diagnostics in the event of a panic, at
  the expense of code size. This is the panic handler used by `libtock`.

## Driver crates

Driver crates provide interfaces to specific Tock APIs:

| Crate                   | Tock API        |
|-------------------------|-----------------|
|`libtock_console`        |[Console]        |
|`libtock_low_level_debug`|[Low-Level Debug]|

[Console]: https://github.com/tock/tock/blob/master/doc/syscalls/00001_console.md
[Low-Level Debug]: https://github.com/tock/tock/blob/master/doc/syscalls/00008_low_level_debug.md
