Skip to content

Commit

Permalink
examples: use optee-utee-build to build TA
Browse files Browse the repository at this point in the history
Signed-off-by: ivila <[email protected]>
Reviewed-by: Sumit Garg <[email protected]>
Reviewed-by: Yuan Zhuang <[email protected]>
  • Loading branch information
ivila authored and DemesneGH committed Jan 2, 2025
1 parent 131a55a commit 8e8b8af
Show file tree
Hide file tree
Showing 95 changed files with 160 additions and 3,794 deletions.
4 changes: 2 additions & 2 deletions examples/acipher-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
3 changes: 2 additions & 1 deletion examples/acipher-rs/ta/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
87 changes: 4 additions & 83 deletions examples/acipher-rs/ta/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,88 +16,9 @@
// 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());

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)?;
optee_utee_build::build(RustEdition::Before2024, ta_config)
}
12 changes: 0 additions & 12 deletions examples/acipher-rs/ta/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,16 +137,4 @@ fn invoke_command(sess_ctx: &mut RsaCipher, cmd_id: u32, params: &mut Parameters
}
}

// 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"Example of TA using asymmetric cipher.\0";
const EXT_PROP_VALUE_1: &[u8] = b"Acipher 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/acipher-rs/ta/ta_static.rs

This file was deleted.

4 changes: 2 additions & 2 deletions examples/aes-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
3 changes: 2 additions & 1 deletion examples/aes-rs/ta/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
87 changes: 4 additions & 83 deletions examples/aes-rs/ta/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,88 +16,9 @@
// 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());

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 config = TaConfig::new_default_with_cargo_env(proto::UUID)?;
optee_utee_build::build(RustEdition::Before2024, config)
}
11 changes: 0 additions & 11 deletions examples/aes-rs/ta/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,15 +185,4 @@ pub fn cipher_buffer(aes: &mut AesCipher, params: &mut Parameters) -> Result<()>
Ok(())
}

const TA_FLAGS: u32 = 0;
const TA_STACK_SIZE: u32 = 2 * 1024;
const TA_DATA_SIZE: u32 = 1 * 1024 * 1024;
const TA_VERSION: &[u8] = b"Undefined version\0";
const TA_DESCRIPTION: &[u8] = b"This is an AES example\0";
const EXT_PROP_VALUE_1: &[u8] = b"AES 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"));
Loading

0 comments on commit 8e8b8af

Please sign in to comment.