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


The following commit(s) were added to refs/heads/main by this push:
     new dd1a754  projects/web3: update building scripts
dd1a754 is described below

commit dd1a75455ae0d1868aac4ae99cd1571ffe6fe928
Author: Yuan Zhuang <[email protected]>
AuthorDate: Thu Jan 9 07:10:56 2025 +0000

    projects/web3: update building scripts
    
    - sync Makefiles from other examples
    - use the `optee-utee-build` crate for building TA
    
    Signed-off-by: Yuan Zhuang <[email protected]>
    Reviewed-by: Sumit Garg <[email protected]>
---
 projects/web3/eth_wallet/Makefile        |  16 +++--
 projects/web3/eth_wallet/host/Makefile   |  14 ++---
 projects/web3/eth_wallet/ta/Cargo.toml   |   3 +-
 projects/web3/eth_wallet/ta/Makefile     |  12 ++--
 projects/web3/eth_wallet/ta/build.rs     |  94 ++--------------------------
 projects/web3/eth_wallet/ta/src/main.rs  |  12 ----
 projects/web3/eth_wallet/ta/ta_static.rs | 102 -------------------------------
 7 files changed, 32 insertions(+), 221 deletions(-)

diff --git a/projects/web3/eth_wallet/Makefile 
b/projects/web3/eth_wallet/Makefile
index c266055..a7a3dec 100644
--- a/projects/web3/eth_wallet/Makefile
+++ b/projects/web3/eth_wallet/Makefile
@@ -22,11 +22,17 @@ CROSS_COMPILE_TA ?= aarch64-linux-gnu-
 TARGET_HOST ?= aarch64-unknown-linux-gnu
 TARGET_TA ?= aarch64-unknown-linux-gnu
 
-all:
-       $(q)make -C host TARGET_HOST=$(TARGET_HOST) \
-               CROSS_COMPILE_HOST=$(CROSS_COMPILE_HOST)
-       $(q)make -C ta TARGET_TA=$(TARGET_TA) \
-               CROSS_COMPILE_TA=$(CROSS_COMPILE_TA)
+.PHONY: host ta all clean
+
+all: host ta
+
+host:
+       $(q)make -C host TARGET=$(TARGET_HOST) \
+               CROSS_COMPILE=$(CROSS_COMPILE_HOST)
+
+ta:
+       $(q)make -C ta TARGET=$(TARGET_TA) \
+               CROSS_COMPILE=$(CROSS_COMPILE_TA)
 
 clean:
        $(q)make -C host clean
diff --git a/projects/web3/eth_wallet/host/Makefile 
b/projects/web3/eth_wallet/host/Makefile
index b1c50c4..3f2f431 100644
--- a/projects/web3/eth_wallet/host/Makefile
+++ b/projects/web3/eth_wallet/host/Makefile
@@ -17,16 +17,16 @@
 
 NAME := eth_wallet-rs
 
-TARGET_HOST ?= aarch64-unknown-linux-gnu
-CROSS_COMPILE_HOST ?= aarch64-linux-gnu-
-OBJCOPY := $(CROSS_COMPILE_HOST)objcopy
-LINKER_CFG := target.$(TARGET_HOST).linker=\"$(CROSS_COMPILE_HOST)gcc\"
+TARGET ?= aarch64-unknown-linux-gnu
+CROSS_COMPILE ?= aarch64-linux-gnu-
+OBJCOPY := $(CROSS_COMPILE)objcopy
+LINKER_CFG := target.$(TARGET).linker=\"$(CROSS_COMPILE)gcc\"
 
-OUT_DIR := $(CURDIR)/target/$(TARGET_HOST)/release
+OUT_DIR := $(CURDIR)/target/$(TARGET)/release
 
 ifeq ($(STD),)
 all:
-       @echo "Please `export STD=y` then rerun `source environment` to build 
the STD version"
+       @echo "Please \`export STD=y\` then rerun \`source environment\` to 
build the STD version"
 else
 all: host strip
 endif
@@ -38,4 +38,4 @@ strip: host
        @$(OBJCOPY) --strip-unneeded $(OUT_DIR)/$(NAME) $(OUT_DIR)/$(NAME)
 
 clean:
-       @cargo clean
+       @cargo clean
\ No newline at end of file
diff --git a/projects/web3/eth_wallet/ta/Cargo.toml 
b/projects/web3/eth_wallet/ta/Cargo.toml
index e118e59..bc864b4 100644
--- a/projects/web3/eth_wallet/ta/Cargo.toml
+++ b/projects/web3/eth_wallet/ta/Cargo.toml
@@ -21,7 +21,7 @@ version = "0.3.0"
 authors = ["Teaclave Contributors <[email protected]>"]
 license = "Apache-2.0"
 repository = "https://github.com/apache/incubator-teaclave-trustzone-sdk.git";
-description = "An example of Rust OP-TEE TrustZone SDK."
+description = "An example of Ethereum wallet TA."
 edition = "2018"
 
 [dependencies]
@@ -43,6 +43,7 @@ bincode = "1.3.3"
 [build-dependencies]
 uuid = { version = "1.8", default-features = false }
 proto = { path = "../proto" }
+optee-utee-build = { path = "../../../../optee-utee-build" }
 
 [profile.release]
 lto = false
diff --git a/projects/web3/eth_wallet/ta/Makefile 
b/projects/web3/eth_wallet/ta/Makefile
index 46037a8..d948521 100644
--- a/projects/web3/eth_wallet/ta/Makefile
+++ b/projects/web3/eth_wallet/ta/Makefile
@@ -19,10 +19,11 @@
 
 UUID ?= $(shell cat "../uuid.txt")
 
-TARGET_TA ?= aarch64-unknown-linux-gnu
-CROSS_COMPILE_TA ?= aarch64-linux-gnu-
+TARGET ?= aarch64-unknown-linux-gnu
+CROSS_COMPILE ?= aarch64-linux-gnu-
 OBJCOPY := $(CROSS_COMPILE_TA)objcopy
-LINKER_CFG := target.$(TARGET_TA).linker=\"$(CROSS_COMPILE_TA)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
@@ -30,14 +31,13 @@ OUT_DIR := $(CURDIR)/target/$(TARGET_TA)/release
 
 ifeq ($(STD),)
 all:
-       @echo "Please `export STD=y` then rerun `source environment` to build 
the STD version"
+       @echo "Please \`export STD=y\` then rerun \`source environment\` to 
build the STD version"
 else
 all: ta strip sign
 endif
 
-# set the cross compile for building inner libraries, such as C libraries in 
ring
 ta:
-       @CROSS_COMPILE=$(CROSS_COMPILE_TA) xargo build --target $(TARGET_TA) 
--release --config $(LINKER_CFG)
+       @xargo build --target $(TARGET) --release --config $(LINKER_CFG)
 
 strip: ta
        @$(OBJCOPY) --strip-unneeded $(OUT_DIR)/ta $(OUT_DIR)/stripped_ta
diff --git a/projects/web3/eth_wallet/ta/build.rs 
b/projects/web3/eth_wallet/ta/build.rs
index 9efe628..2352649 100644
--- a/projects/web3/eth_wallet/ta/build.rs
+++ b/projects/web3/eth_wallet/ta/build.rs
@@ -16,93 +16,11 @@
 // 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::{Error, RustEdition, TaConfig};
 
-fn main() -> std::io::Result<()> {
-    let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap());
-
-    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(())
+fn main() -> Result<(), Error> {
+    let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)?
+        .ta_data_size(1024 * 1024)
+        .ta_stack_size(128 * 1024);
+    optee_utee_build::build(RustEdition::Before2024, ta_config)
 }
diff --git a/projects/web3/eth_wallet/ta/src/main.rs 
b/projects/web3/eth_wallet/ta/src/main.rs
index d889a26..5f72179 100644
--- a/projects/web3/eth_wallet/ta/src/main.rs
+++ b/projects/web3/eth_wallet/ta/src/main.rs
@@ -166,16 +166,4 @@ fn invoke_command(cmd_id: u32, params: &mut Parameters) -> 
optee_utee::Result<()
     Ok(())
 }
 
-// TA configurations
-const TA_FLAGS: u32 = 0;
-const TA_DATA_SIZE: u32 = 1024 * 1024;
-const TA_STACK_SIZE: u32 = 128 * 1024;
-const TA_VERSION: &[u8] = b"0.3\0";
-const TA_DESCRIPTION: &[u8] = b"This is an example of Ethereum wallet TA\0";
-const EXT_PROP_VALUE_1: &[u8] = b"Ethereum wallet 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/projects/web3/eth_wallet/ta/ta_static.rs 
b/projects/web3/eth_wallet/ta/ta_static.rs
deleted file mode 100644
index 20e1d97..0000000
--- a/projects/web3/eth_wallet/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