Skip to content

Commit

Permalink
projects/web3: update building scripts
Browse files Browse the repository at this point in the history
- sync Makefiles from other examples
- use the `optee-utee-build` crate for building TA

Signed-off-by: Yuan Zhuang <[email protected]>
  • Loading branch information
DemesneGH committed Jan 9, 2025
1 parent 8e8b8af commit 7efdee6
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 221 deletions.
16 changes: 11 additions & 5 deletions projects/web3/eth_wallet/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 7 additions & 7 deletions projects/web3/eth_wallet/host/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -38,4 +38,4 @@ strip: host
@$(OBJCOPY) --strip-unneeded $(OUT_DIR)/$(NAME) $(OUT_DIR)/$(NAME)

clean:
@cargo clean
@cargo clean
3 changes: 2 additions & 1 deletion projects/web3/eth_wallet/ta/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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
Expand Down
12 changes: 6 additions & 6 deletions projects/web3/eth_wallet/ta/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,25 @@

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
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
Expand Down
94 changes: 6 additions & 88 deletions projects/web3/eth_wallet/ta/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
12 changes: 0 additions & 12 deletions projects/web3/eth_wallet/ta/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
102 changes: 0 additions & 102 deletions projects/web3/eth_wallet/ta/ta_static.rs

This file was deleted.

0 comments on commit 7efdee6

Please sign in to comment.