Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

projects/web3: update building scripts #159

Merged
merged 1 commit into from
Jan 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.

Loading