Skip to content

Commit

Permalink
Use optee-utee-build crate to build hello_world example
Browse files Browse the repository at this point in the history
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
  • Loading branch information
ivila committed Dec 24, 2024
1 parent 4791ab4 commit 4e487d4
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 199 deletions.
4 changes: 2 additions & 2 deletions examples/hello_world-rs/ta/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion examples/hello_world-rs/ta/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ 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\"
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
Expand Down
86 changes: 4 additions & 82 deletions examples/hello_world-rs/ta/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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_standard_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(())
}
12 changes: 0 additions & 12 deletions examples/hello_world-rs/ta/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
102 changes: 0 additions & 102 deletions examples/hello_world-rs/ta/ta_static.rs

This file was deleted.

0 comments on commit 4e487d4

Please sign in to comment.