Add Documentation for no-std
Acked-by: Joakim Bech <joakim.bech@linaro.org>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
Signed-off-by: Yuan Zhuang <yuanz@apache.org>
diff --git a/README.md b/README.md
index 5c0aa53..17cd7ee 100644
--- a/README.md
+++ b/README.md
@@ -14,9 +14,17 @@
libraries (i.e., crates). Teaclave TrustZone SDK is a sub-project of [Apache
Teaclave (incubating)](https://teaclave.apache.org/).
+Teaclave TrustZone SDK provides two development modes for Rust TAs: `no-std`
+(check out the `no-std` branch) and `std` (check out the `master` branch).
+We recommend using `no-std` by default. For a detailed comparison, please refer
+to [Comparison](#comparison).
+
## Table of Contents
-- [Quick start with the OP-TEE Repo for QEMUv8](#quick-start-with-the-op-tee-repo-for-qemuv8)
+- [TA Development Modes](#ta-development-modes)
+ - [Comparison](#comparison)
+ - [Supported Examples](#supported-examples)
+- [Quick Start with the OP-TEE Repo for QEMUv8](#quick-start-with-the-op-tee-repo-for-qemuv8)
- [Getting started](#getting-started)
- [Environment](#environment)
- [Develop with QEMUv8](#develop-with-qemuv8)
@@ -25,11 +33,48 @@
- [Run Rust Applications](#run-rust-applications)
- [Run Rust Applications in QEMUv8](#run-rust-applications-in-qemuv8)
- [Run Rust Applications on other platforms](#run-rust-applications-on-other-platforms)
+ - [Test](#test)
- [Documentation](#documentation)
- [Publication](#publication)
- [Contributing](#contributing)
- [Community](#community)
+
+## TA Development Modes
+
+### Comparison
+
+#### `no-std`
+
+- **Pros**:
+ - Reuses standard Rust tier-1 toolchain targets (`aarch64-unknown-linux-gnu`,
+ `arm-unknown-linux-gnueabihf`).
+ - Significant performance improvements.
+ - Substantial reduction in binary size.
+
+- **Cons**:
+ - Limited support for third-party crates. In the no-std mode, Trusted Applications
+ (TAs) are unable to utilize crates dependent on the standard library (std).
+
+#### `std`
+
+- **Pros**:
+ - Enables the utilization of more third-party crates, including those requiring
+ `std`, such as `serde_json` and `rustls`, which are essential for functionality.
+
+- **Cons**:
+ - Manual porting of `std` with infrequent updates. Currently using `std` version
+ `1.56.1` and `Rust` version `nightly-2021-09-20`. (Planned to update)
+
+### Supported Examples
+
+- **Common**: See
+ [Overview of OP-TEE Rust Examples](https://teaclave.apache.org/trustzone-sdk-docs/overview-of-optee-rust-examples/).
+
+- **`no-std`**: Excludes `test_serde`, `test_tcp_client`, `test_udp_socket`,
+ `test_message_passing_interface`, `test_tls_client`, `test_tls_server`.
+
+
## Quick start with the OP-TEE Repo for QEMUv8
Teaclave TrustZone SDK has been integrated into the OP-TEE Repo since OP-TEE
@@ -38,6 +83,9 @@
documentation](https://optee.readthedocs.io/en/latest/building/optee_with_rust.html)
to set up the OP-TEE repo and try the Rust examples!
+UPDATES: The `no-std` TA has replaced the original `std` TAs since OP-TEE
+Release 4.1.0 (19/Jan/24).
+
## Getting started
### Environment
@@ -215,6 +263,12 @@
Copy the applications to your platform and run.
+### Test
+
+In the `tests/` directory, we offer comprehensive tests for examples. The
+applications can run on a pre-built QEMU image, independently of cloning the
+OP-TEE repo. You can compose a simple test here to validate your application.
+
## Documentation
- [Overview of OP-TEE Rust