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]

Reply via email to