This is an automated email from the ASF dual-hosted git repository. yuanz pushed a commit to branch no-std in repository https://gitbox.apache.org/repos/asf/incubator-teaclave-trustzone-sdk.git
commit ab8b60b0202c025de999f65f3cd0c8d05865fbd8 Author: Sumit Garg <[email protected]> AuthorDate: Wed Dec 27 05:38:20 2023 +0000 optee-utee: Add optional no_std feature support Default feature remains std support, no_std can be enabled optionally. Signed-off-by: Sumit Garg <[email protected]> --- optee-utee/Cargo.toml | 11 ++++++++--- optee-utee/src/arithmetical.rs | 4 +++- optee-utee/src/crypto_op.rs | 6 +++++- optee-utee/src/error.rs | 11 +++++++---- optee-utee/src/extension.rs | 4 ++++ optee-utee/src/lib.rs | 9 +++++++++ optee-utee/src/object.rs | 6 +++++- optee-utee/src/parameter.rs | 4 ++-- optee-utee/src/time.rs | 2 +- optee-utee/src/trace.rs | 18 ++++++------------ 10 files changed, 50 insertions(+), 25 deletions(-) diff --git a/optee-utee/Cargo.toml b/optee-utee/Cargo.toml index c0ea0f2..c477d18 100644 --- a/optee-utee/Cargo.toml +++ b/optee-utee/Cargo.toml @@ -24,13 +24,18 @@ repository = "https://github.com/apache/incubator-teaclave-trustzone-sdk.git" description = "TEE internal core API." edition = "2018" +[features] +default = ["std", "sys_std"] +std = [] +sys_std = ["optee-utee-sys/std"] + [dependencies] -optee-utee-sys = { path = "optee-utee-sys" } +optee-utee-sys = { path = "optee-utee-sys", default-features = false } optee-utee-macros = { path = "macros" } -libc = { path = "../rust/libc", version = "=0.2.99" } bitflags = "=1.0.4" uuid = { version = "0.8", default-features = false } -hex = "0.3" +hex = { version = "0.4", default-features = false, features = ["alloc"] } +libc_alloc = "=1.0.5" [workspace] members = ['systest'] diff --git a/optee-utee/src/arithmetical.rs b/optee-utee/src/arithmetical.rs index 13bbf29..ecb3ade 100644 --- a/optee-utee/src/arithmetical.rs +++ b/optee-utee/src/arithmetical.rs @@ -17,7 +17,9 @@ use crate::{Error, Result}; use optee_utee_sys as raw; -use std::{cmp::max, fmt}; +use core::{cmp::max, fmt}; +#[cfg(not(feature = "std"))] +use alloc::vec::Vec; pub type BigIntUnit = u32; pub type BigIntFMMUnit = u32; diff --git a/optee-utee/src/crypto_op.rs b/optee-utee/src/crypto_op.rs index 854b902..e7a9a62 100644 --- a/optee-utee/src/crypto_op.rs +++ b/optee-utee/src/crypto_op.rs @@ -17,7 +17,11 @@ use crate::{Attribute, Error, ObjHandle, Result, TransientObject}; use optee_utee_sys as raw; -use std::{mem, ptr}; +use core::{mem, ptr}; +#[cfg(not(feature = "std"))] +use alloc::boxed::Box; +#[cfg(not(feature = "std"))] +use alloc::vec::Vec; /// Specify one of the available cryptographic operations. #[repr(u32)] diff --git a/optee-utee/src/error.rs b/optee-utee/src/error.rs index 7317471..0b929ed 100644 --- a/optee-utee/src/error.rs +++ b/optee-utee/src/error.rs @@ -16,8 +16,11 @@ // under the License. use optee_utee_sys as raw; -use std::convert::From; -use std::fmt; +use core::{fmt, result}; +#[cfg(feature = "std")] +use std::error; +#[cfg(not(feature = "std"))] +use core::error; /// A specialized [`Result`](https://doc.rust-lang.org/std/result/enum.Result.html) /// type for TEE operations. @@ -29,7 +32,7 @@ use std::fmt; /// Ok(()) /// } /// ```` -pub type Result<T> = std::result::Result<T, Error>; +pub type Result<T> = result::Result<T, Error>; pub struct Error { code: u32, @@ -231,7 +234,7 @@ impl fmt::Display for Error { } } -impl std::error::Error for Error { +impl error::Error for Error { fn description(&self) -> &str { self.message() } diff --git a/optee-utee/src/extension.rs b/optee-utee/src/extension.rs index 9263803..0e005db 100644 --- a/optee-utee/src/extension.rs +++ b/optee-utee/src/extension.rs @@ -17,6 +17,10 @@ use crate::{Error, Result, Uuid}; use optee_utee_sys as raw; +#[cfg(not(feature = "std"))] +use alloc::vec::Vec; +#[cfg(not(feature = "std"))] +use alloc::borrow::ToOwned; pub struct LoadablePlugin { uuid: Uuid diff --git a/optee-utee/src/lib.rs b/optee-utee/src/lib.rs index 2893b76..821c93f 100644 --- a/optee-utee/src/lib.rs +++ b/optee-utee/src/lib.rs @@ -15,6 +15,13 @@ // specific language governing permissions and limitations // under the License. +#![cfg_attr(not(feature = "std"), no_std)] +#![cfg_attr(not(feature = "std"), feature(error_in_core))] + +// Requires `alloc`. +#[macro_use] +extern crate alloc; + pub use self::error::{Error, ErrorKind, Result}; pub use self::object::*; pub use self::crypto_op::*; @@ -38,4 +45,6 @@ pub mod time; pub mod arithmetical; pub mod extension; pub mod uuid; + +#[cfg(feature = "std")] pub mod net; diff --git a/optee-utee/src/object.rs b/optee-utee/src/object.rs index 031c9c1..374af55 100644 --- a/optee-utee/src/object.rs +++ b/optee-utee/src/object.rs @@ -18,7 +18,11 @@ use crate::{Error, Result}; use bitflags::bitflags; use optee_utee_sys as raw; -use std::{marker, mem, ptr}; +use core::{marker, mem, ptr}; +#[cfg(not(feature = "std"))] +use alloc::boxed::Box; +#[cfg(not(feature = "std"))] +use alloc::vec::Vec; /// A general attribute (buffer or value) that can be used to populate an object or to specify /// opeation parameters. diff --git a/optee-utee/src/parameter.rs b/optee-utee/src/parameter.rs index 5694c67..02b771a 100644 --- a/optee-utee/src/parameter.rs +++ b/optee-utee/src/parameter.rs @@ -15,9 +15,9 @@ // specific language governing permissions and limitations // under the License. +use core::{marker, slice}; use crate::{Error, ErrorKind, Result}; use optee_utee_sys as raw; -use std::marker; pub struct Parameters(pub Parameter, pub Parameter, pub Parameter, pub Parameter); @@ -74,7 +74,7 @@ pub struct ParamMemref<'parameter> { impl<'parameter> ParamMemref<'parameter> { pub fn buffer(&mut self) -> &mut [u8] { unsafe { - std::slice::from_raw_parts_mut((*self.raw).buffer as *mut u8, (*self.raw).size as usize) + slice::from_raw_parts_mut((*self.raw).buffer as *mut u8, (*self.raw).size as usize) } } diff --git a/optee-utee/src/time.rs b/optee-utee/src/time.rs index 9b5b14a..6d41f87 100644 --- a/optee-utee/src/time.rs +++ b/optee-utee/src/time.rs @@ -17,7 +17,7 @@ use crate::{Error, Result}; use optee_utee_sys as raw; -use std::fmt; +use core::fmt; /// A millisecond resolution structure for saving the time. pub struct Time { diff --git a/optee-utee/src/trace.rs b/optee-utee/src/trace.rs index cff61aa..ca9b49e 100644 --- a/optee-utee/src/trace.rs +++ b/optee-utee/src/trace.rs @@ -15,11 +15,9 @@ // specific language governing permissions and limitations // under the License. -use libc; use optee_utee_sys as raw; -use std::fmt; -use std::io; -use std::io::Write; +use core::ffi::*; +use core::fmt::{Arguments, Write, Result}; pub struct Trace; @@ -28,7 +26,7 @@ impl Trace { Trace {} } - pub fn _print(fmt: fmt::Arguments) { + pub fn _print(fmt: Arguments) { let mut writer = Trace::new(); let result = writer.write_fmt(fmt); @@ -48,15 +46,11 @@ impl Trace { } } -impl io::Write for Trace { - fn write(&mut self, buf: &[u8]) -> io::Result<usize> { +impl Write for Trace { + fn write_str(&mut self, buf: &str) -> Result<> { unsafe { - raw::_utee_log(buf.as_ptr() as *const libc::c_void, buf.len()); + raw::_utee_log(buf.as_ptr() as *const c_void, buf.len()); } - Ok(buf.len()) - } - - fn flush(&mut self) -> io::Result<()> { Ok(()) } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
