This is an automated email from the ASF dual-hosted git repository.

yuanz pushed a commit to branch main
in repository 
https://gitbox.apache.org/repos/asf/incubator-teaclave-trustzone-sdk.git

commit 80b874735ec118f39a7be92559d318b99a5f5f99
Author: ivila <[email protected]>
AuthorDate: Fri Dec 20 17:31:13 2024 +0800

    Use optee-utee-build crate to build hello_world example
    
    1. add optee-utee-build in build-dependencies
    2. remove uuid from build-dependencies
    3. use build method from optee-utee-build instead of custom build script
    4. use gcc as linker instead of ld.bfd to avoid compilation problems on
       Arm host
    5. remove ta_static.rs file
    6. remove configuration consts in src/main.rs
    
    Signed-off-by: ivila <[email protected]>
    Reviewed-by: Sumit Garg <[email protected]>
    Reviewed-by: Yuan Zhuang <[email protected]>
---
 examples/hello_world-rs/ta/Cargo.toml   |   4 +-
 examples/hello_world-rs/ta/Makefile     |   3 +-
 examples/hello_world-rs/ta/build.rs     |  86 ++-------------------------
 examples/hello_world-rs/ta/src/main.rs  |  12 ----
 examples/hello_world-rs/ta/ta_static.rs | 102 --------------------------------
 5 files changed, 8 insertions(+), 199 deletions(-)

diff --git a/examples/hello_world-rs/ta/Cargo.toml 
b/examples/hello_world-rs/ta/Cargo.toml
index badab89..d272b6f 100644
--- a/examples/hello_world-rs/ta/Cargo.toml
+++ b/examples/hello_world-rs/ta/Cargo.toml
@@ -29,9 +29,9 @@ proto = { path = "../proto" }
 optee-utee-sys = { path = "../../../optee-utee/optee-utee-sys" }
 optee-utee = { path = "../../../optee-utee" }
 
-[build_dependencies]
-uuid = { version = "1.6.1", default-features = false }
+[build-dependencies]
 proto = { path = "../proto" }
+optee-utee-build = { path = "../../../optee-utee-build" }
 
 [profile.release]
 panic = "abort"
diff --git a/examples/hello_world-rs/ta/Makefile 
b/examples/hello_world-rs/ta/Makefile
index 72a9cb3..029e66d 100644
--- a/examples/hello_world-rs/ta/Makefile
+++ b/examples/hello_world-rs/ta/Makefile
@@ -20,7 +20,8 @@ UUID ?= $(shell cat "../uuid.txt")
 TARGET ?= aarch64-unknown-linux-gnu
 CROSS_COMPILE ?= aarch64-linux-gnu-
 OBJCOPY := $(CROSS_COMPILE)objcopy
-LINKER_CFG := target.$(TARGET).linker=\"$(CROSS_COMPILE)ld.bfd\"
+# Configure the linker to use GCC, which works on both cross-compilation and 
ARM machines
+LINKER_CFG := target.$(TARGET).linker=\"$(CROSS_COMPILE)gcc\"
 
 TA_SIGN_KEY ?= $(TA_DEV_KIT_DIR)/keys/default_ta.pem
 SIGN := $(TA_DEV_KIT_DIR)/scripts/sign_encrypt.py
diff --git a/examples/hello_world-rs/ta/build.rs 
b/examples/hello_world-rs/ta/build.rs
index fa0d195..a45e9b6 100644
--- a/examples/hello_world-rs/ta/build.rs
+++ b/examples/hello_world-rs/ta/build.rs
@@ -16,88 +16,10 @@
 // under the License.
 
 use proto;
-use std::env;
-use std::fs::File;
-use std::io::{BufRead, BufReader, Write};
-use std::path::{Path, PathBuf};
-use uuid::Uuid;
+use optee_utee_build::{TaConfig, RustEdition, Error};
 
-fn main() -> std::io::Result<()> {
-    let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap());
+fn main() -> Result<(), Error> {
+    let config = TaConfig::new_default_with_cargo_env(proto::UUID)?;
+    optee_utee_build::build(RustEdition::Before2024, config)
 
-    let mut buffer = File::create(out.join("user_ta_header.rs"))?;
-    buffer.write_all(include_bytes!("ta_static.rs"))?;
-
-    let tee_uuid = Uuid::parse_str(proto::UUID).unwrap();
-    let (time_low, time_mid, time_hi_and_version, clock_seq_and_node) = 
tee_uuid.as_fields();
-
-    write!(buffer, "\n")?;
-    write!(
-        buffer,
-        "const TA_UUID: optee_utee_sys::TEE_UUID = optee_utee_sys::TEE_UUID {{
-    timeLow: {:#x},
-    timeMid: {:#x},
-    timeHiAndVersion: {:#x},
-    clockSeqAndNode: {:#x?},
-}};",
-        time_low, time_mid, time_hi_and_version, clock_seq_and_node
-    )?;
-
-    let mut aarch64_flag = true;
-    match env::var("TARGET_TA") {
-        Ok(ref v) if v == "arm-unknown-linux-gnueabihf" || v == 
"arm-unknown-optee" => {
-            println!("cargo:rustc-link-arg=--no-warn-mismatch");
-            aarch64_flag = false;
-        },
-        _ => {}
-    };
-
-    let optee_os_dir = env::var("TA_DEV_KIT_DIR").unwrap();
-    let search_path = Path::new(&optee_os_dir).join("lib");
-
-    let optee_os_path = &PathBuf::from(optee_os_dir.clone());
-    let mut ta_lds = File::create(out.join("ta.lds"))?;
-    let f = File::open(optee_os_path.join("src/ta.ld.S"))?;
-    let f = BufReader::new(f);
-
-    for line in f.lines() {
-        let l = line?;
-
-        if aarch64_flag {
-            if l.starts_with('#') ||
-                l == "OUTPUT_FORMAT(\"elf32-littlearm\")" ||
-                l == "OUTPUT_ARCH(arm)" {
-                continue;
-            }
-        } else {
-            if l.starts_with('#') ||
-                l == "OUTPUT_FORMAT(\"elf64-littleaarch64\")" ||
-                l == "OUTPUT_ARCH(aarch64)" {
-                continue;
-            }
-        }
-
-        if l == "\t. = ALIGN(4096);" {
-            write!(ta_lds, "\t. = ALIGN(65536);\n")?;
-        } else {
-            write!(ta_lds, "{}\n", l)?;
-        }
-    }
-
-    println!("cargo:rustc-link-search={}", out.display());
-    println!("cargo:rerun-if-changed=ta.lds");
-
-    println!("cargo:rustc-link-search={}", search_path.display());
-    println!("cargo:rustc-link-lib=static=utee");
-    println!("cargo:rustc-link-lib=static=utils");
-    println!("cargo:rustc-link-arg=-Tta.lds");
-    println!("cargo:rustc-link-arg=-e__ta_entry");
-    println!("cargo:rustc-link-arg=-pie");
-    println!("cargo:rustc-link-arg=-Os");
-    println!("cargo:rustc-link-arg=--sort-section=alignment");
-
-    let mut dyn_list = File::create(out.join("dyn_list"))?;
-    write!(dyn_list, "{{ __elf_phdr_info; trace_ext_prefix; trace_level; 
ta_head; }};\n")?;
-    println!("cargo:rustc-link-arg=--dynamic-list=dyn_list");
-    Ok(())
 }
diff --git a/examples/hello_world-rs/ta/src/main.rs 
b/examples/hello_world-rs/ta/src/main.rs
index 8ef0567..e29f9d6 100644
--- a/examples/hello_world-rs/ta/src/main.rs
+++ b/examples/hello_world-rs/ta/src/main.rs
@@ -63,16 +63,4 @@ fn invoke_command(cmd_id: u32, params: &mut Parameters) -> 
Result<()> {
     }
 }
 
-// TA configurations
-const TA_FLAGS: u32 = 0;
-const TA_DATA_SIZE: u32 = 32 * 1024;
-const TA_STACK_SIZE: u32 = 2 * 1024;
-const TA_VERSION: &[u8] = b"0.1\0";
-const TA_DESCRIPTION: &[u8] = b"This is a hello world example.\0";
-const EXT_PROP_VALUE_1: &[u8] = b"Hello World TA\0";
-const EXT_PROP_VALUE_2: u32 = 0x0010;
-const TRACE_LEVEL: i32 = 4;
-const TRACE_EXT_PREFIX: &[u8] = b"TA\0";
-const TA_FRAMEWORK_STACK_SIZE: u32 = 2048;
-
 include!(concat!(env!("OUT_DIR"), "/user_ta_header.rs"));
diff --git a/examples/hello_world-rs/ta/ta_static.rs 
b/examples/hello_world-rs/ta/ta_static.rs
deleted file mode 100644
index 20e1d97..0000000
--- a/examples/hello_world-rs/ta/ta_static.rs
+++ /dev/null
@@ -1,102 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-use core::ffi::{c_int, c_void};
-use core::mem;
-use core::primitive::u64;
-
-#[no_mangle]
-pub static mut trace_level: c_int = TRACE_LEVEL;
-
-#[no_mangle]
-pub static trace_ext_prefix: &[u8] = TRACE_EXT_PREFIX;
-
-#[no_mangle]
-#[link_section = ".ta_head"]
-pub static ta_head: optee_utee_sys::ta_head = optee_utee_sys::ta_head {
-    uuid: TA_UUID,
-    stack_size: TA_STACK_SIZE + TA_FRAMEWORK_STACK_SIZE,
-    flags: TA_FLAGS,
-    depr_entry: u64::MAX,
-};
-
-#[no_mangle]
-#[link_section = ".bss"]
-pub static ta_heap: [u8; TA_DATA_SIZE as usize] = [0; TA_DATA_SIZE as usize];
-
-#[no_mangle]
-pub static ta_heap_size: usize = mem::size_of::<u8>() * TA_DATA_SIZE as usize;
-static FLAG_BOOL: bool = (TA_FLAGS & optee_utee_sys::TA_FLAG_SINGLE_INSTANCE) 
!= 0;
-static FLAG_MULTI: bool = (TA_FLAGS & optee_utee_sys::TA_FLAG_MULTI_SESSION) 
!= 0;
-static FLAG_INSTANCE: bool = (TA_FLAGS & 
optee_utee_sys::TA_FLAG_INSTANCE_KEEP_ALIVE) != 0;
-
-#[no_mangle]
-pub static ta_num_props: usize = 9;
-
-#[no_mangle]
-pub static ta_props: [optee_utee_sys::user_ta_property; 9] = [
-    optee_utee_sys::user_ta_property {
-        name: optee_utee_sys::TA_PROP_STR_SINGLE_INSTANCE,
-        prop_type: optee_utee_sys::user_ta_prop_type::USER_TA_PROP_TYPE_BOOL,
-        value: &FLAG_BOOL as *const bool as *mut _,
-    },
-    optee_utee_sys::user_ta_property {
-        name: optee_utee_sys::TA_PROP_STR_MULTI_SESSION,
-        prop_type: optee_utee_sys::user_ta_prop_type::USER_TA_PROP_TYPE_BOOL,
-        value: &FLAG_MULTI as *const bool as *mut _,
-    },
-    optee_utee_sys::user_ta_property {
-        name: optee_utee_sys::TA_PROP_STR_KEEP_ALIVE,
-        prop_type: optee_utee_sys::user_ta_prop_type::USER_TA_PROP_TYPE_BOOL,
-        value: &FLAG_INSTANCE as *const bool as *mut _,
-    },
-    optee_utee_sys::user_ta_property {
-        name: optee_utee_sys::TA_PROP_STR_DATA_SIZE,
-        prop_type: optee_utee_sys::user_ta_prop_type::USER_TA_PROP_TYPE_U32,
-        value: &TA_DATA_SIZE as *const u32 as *mut _,
-    },
-    optee_utee_sys::user_ta_property {
-        name: optee_utee_sys::TA_PROP_STR_STACK_SIZE,
-        prop_type: optee_utee_sys::user_ta_prop_type::USER_TA_PROP_TYPE_U32,
-        value: &TA_STACK_SIZE as *const u32 as *mut _,
-    },
-    optee_utee_sys::user_ta_property {
-        name: optee_utee_sys::TA_PROP_STR_VERSION,
-        prop_type: optee_utee_sys::user_ta_prop_type::USER_TA_PROP_TYPE_STRING,
-        value: TA_VERSION as *const [u8] as *mut _,
-    },
-    optee_utee_sys::user_ta_property {
-        name: optee_utee_sys::TA_PROP_STR_DESCRIPTION,
-        prop_type: optee_utee_sys::user_ta_prop_type::USER_TA_PROP_TYPE_STRING,
-        value: TA_DESCRIPTION as *const [u8] as *mut _,
-    },
-    optee_utee_sys::user_ta_property {
-        name: "gp.ta.description\0".as_ptr(),
-        prop_type: optee_utee_sys::user_ta_prop_type::USER_TA_PROP_TYPE_STRING,
-        value: EXT_PROP_VALUE_1 as *const [u8] as *mut _,
-    },
-    optee_utee_sys::user_ta_property {
-        name: "gp.ta.version\0".as_ptr(),
-        prop_type: optee_utee_sys::user_ta_prop_type::USER_TA_PROP_TYPE_U32,
-        value: &EXT_PROP_VALUE_2 as *const u32 as *mut _,
-    },
-];
-
-#[no_mangle]
-pub unsafe extern "C" fn tahead_get_trace_level() -> c_int {
-    return trace_level;
-}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to