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

qemu_v8: Enable Rust examples build by default #717

Merged
merged 2 commits into from
Jan 19, 2024
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
42 changes: 33 additions & 9 deletions br-ext/package/optee_rust_examples_ext/Config.in
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,39 @@ config BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_SDK
help
The path to OP-TEE TA development SDK

config BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_CROSS_COMPILE
string "OP-TEE Rust examples cross compiler"
default ""
config BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_TARGET_HOST
string "OP-TEE Rust examples host Rust target"
default "aarch64-unknown-linux-gnu"
help
The Rust target platform for building the client part of the Rust
examples. For details regarding supported Rust target platforms,
have a look here:
https://doc.rust-lang.org/stable/rustc/platform-support.html

config BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_TARGET_TA
string "OP-TEE Rust examples TA Rust target"
default "aarch64-unknown-linux-gnu"
help
some help
The Rust target platform for building the TA part of the Rust
examples. For details regarding supported Rust target platforms,
have a look here:
https://doc.rust-lang.org/stable/rustc/platform-support.html

config BR2_PACKAGE_OPTEE_RUST_EXAMPLES_TC_PATH_ENV
string "OP-TEE Rust examples toolchain path"
default ""
help
some help
config BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_CROSS_COMPILE_HOST
string "OP-TEE Rust examples host cross compiler"
default "aarch64-linux-gnu-"
help
Rust native compiler doesn't come with its own linker for most of
the target platforms. Hence this options provides path to GCC linker
in order to link client part of the Rust examples. For example:
aarch64-linux-gnu- or path/to/aarch64-linux-gnu-

config BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_CROSS_COMPILE_TA
string "OP-TEE Rust examples TA cross compiler"
default "aarch64-linux-gnu-"
help
Rust native compiler doesn't come with its own linker for most of
the target platforms. Hence this options provides path to GCC linker
in order to link TA part of the Rust examples. For example:
aarch64-linux-gnu- or path/to/aarch64-linux-gnu-
endif
57 changes: 8 additions & 49 deletions br-ext/package/optee_rust_examples_ext/optee_rust_examples_ext.mk
Original file line number Diff line number Diff line change
Expand Up @@ -6,58 +6,17 @@ OPTEE_RUST_EXAMPLES_EXT_INSTALL_STAGING = YES
OPTEE_RUST_EXAMPLES_EXT_DEPENDENCIES = optee_client_ext
OPTEE_RUST_EXAMPLES_EXT_SDK = $(BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_SDK)

ifneq (,$(BR2_PACKAGE_OPTEE_RUST_EXAMPLES_TC_PATH_ENV))
OPTEE_RUST_EXAMPLES_TC_PATH_ENV = PATH=$(BR2_PACKAGE_OPTEE_RUST_EXAMPLES_TC_PATH_ENV)
endif

EXAMPLE = $(wildcard examples/*)

HOST_TARGET := aarch64-unknown-linux-gnu
TA_TARGET := aarch64-unknown-optee-trustzone
TA_TARGET_NO_STD := aarch64-unknown-linux-gnu

export RUST_TARGET_PATH = $(@D)
export RUST_COMPILER_RT_ROOT = $(RUST_TARGET_PATH)/rust/rust/src/llvm-project/compiler-rt
export OPTEE_DIR = $(@D)/../../..
export OPTEE_OS_DIR = $(OPTEE_DIR)/optee_os
export OPTEE_CLIENT_DIR = $(OPTEE_DIR)/out-br/build/optee_client_ext-1.0
export OPTEE_CLIENT_INCLUDE = $(OPTEE_CLIENT_DIR)/out/export/usr/include
export VENDOR = qemu_v8.mk
export OPTEE_OS_INCLUDE = $(OPTEE_DIR)/optee_os/out/arm/export-ta_arm64/include
export CC = $(OPTEE_DIR)/toolchains/aarch64/bin/aarch64-linux-gnu-gcc

define OPTEE_RUST_EXAMPLES_EXT_BUILD_CMDS
@$(foreach f,$(wildcard $(@D)/examples/*/Makefile), \
echo Building $f && \
$(OPTEE_RUST_EXAMPLES_TC_PATH_ENV) \
CROSS_COMPILE=$(BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_CROSS_COMPILE) \
TA_DEV_KIT_DIR=$(OPTEE_RUST_EXAMPLES_EXT_SDK) \
OPTEE_CLIENT_EXPORT=$(TARGET_DIR) \
$(MAKE) -C $(dir $f) &&) true
endef

define OPTEE_RUST_EXAMPLES_EXT_INSTALL_TARGET_CMDS
@$(foreach f,$(wildcard $(@D)/examples/*/ta/target/$(TA_TARGET)/release/*.ta), \
mkdir -p $(TARGET_DIR)/lib/optee_armtz && \
echo Installing $f && \
$(INSTALL) -v -p --mode=444 \
--target-directory=$(TARGET_DIR)/lib/optee_armtz $f \
&&) true
@$(foreach f,$(wildcard $(@D)/examples/*/ta/target/$(TA_TARGET_NO_STD)/release/*.ta), \
mkdir -p $(TARGET_DIR)/lib/optee_armtz && \
echo Installing $f && \
$(INSTALL) -v -p --mode=444 \
--target-directory=$(TARGET_DIR)/lib/optee_armtz $f \
&&) true
@$(foreach f,$(wildcard $(@D)/examples/*/host/target/$(HOST_TARGET)/release/*-rs), \
echo Installing $f && \
$(INSTALL) -v -p --target-directory=$(TARGET_DIR)/usr/bin $f \
&&) true
@$(foreach f,$(wildcard $(@D)/examples/*/plugin/target/$(HOST_TARGET)/release/*.plugin.so), \
mkdir -p $(TARGET_DIR)/usr/lib/tee-supplicant/plugins && \
echo Installing $f && \
$(INSTALL) -v -p --target-directory=$(TARGET_DIR)/usr/lib/tee-supplicant/plugins $f \
&&) true
echo Building OP-TEE rust examples && \
TARGET_HOST=$(BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_TARGET_HOST) \
TARGET_TA=$(BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_TARGET_TA) \
CROSS_COMPILE_HOST=$(BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_CROSS_COMPILE_HOST) \
CROSS_COMPILE_TA=$(BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_CROSS_COMPILE_TA) \
TA_DEV_KIT_DIR=$(OPTEE_RUST_EXAMPLES_EXT_SDK) \
OPTEE_CLIENT_EXPORT=$(TARGET_DIR) \
$(MAKE) -C $(@D) install O=$(TARGET_DIR)
endef

$(eval $(generic-package))
19 changes: 12 additions & 7 deletions common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -194,15 +194,15 @@ endif
ifeq ($(ARCH),arm)
CROSS_COMPILE_NS_USER ?= "$(CCACHE)$(AARCH$(COMPILE_NS_USER)_CROSS_COMPILE)"
CROSS_COMPILE_NS_KERNEL ?= "$(CCACHE)$(AARCH$(COMPILE_NS_KERNEL)_CROSS_COMPILE)"
CROSS_COMPILE_NS_RUST ?= "$(AARCH$(COMPILE_NS_USER)_CROSS_COMPILE)"
CROSS_COMPILE_S_USER ?= "$(CCACHE)$(AARCH$(COMPILE_S_USER)_CROSS_COMPILE)"
CROSS_COMPILE_S_KERNEL ?= "$(CCACHE)$(AARCH$(COMPILE_S_KERNEL)_CROSS_COMPILE)"
CROSS_COMPILE_RUST ?= "$(AARCH$(COMPILE_S_USER)_CROSS_COMPILE)"
CROSS_COMPILE_S_RUST ?= "$(AARCH$(COMPILE_S_USER)_CROSS_COMPILE)"
else ifeq ($(ARCH),riscv)
CROSS_COMPILE_NS_USER ?= "$(CCACHE)$(RISCV$(COMPILE_NS_USER)_CROSS_COMPILE)"
CROSS_COMPILE_NS_KERNEL ?= "$(CCACHE)$(RISCV$(COMPILE_NS_KERNEL)_CROSS_COMPILE)"
CROSS_COMPILE_S_USER ?= "$(CCACHE)$(RISCV$(COMPILE_S_USER)_CROSS_COMPILE)"
CROSS_COMPILE_S_KERNEL ?= "$(CCACHE)$(RISCV$(COMPILE_S_KERNEL)_CROSS_COMPILE)"
CROSS_COMPILE_RUST ?= "$(RISCV$(COMPILE_S_USER)_CROSS_COMPILE)"
endif

################################################################################
Expand Down Expand Up @@ -284,13 +284,18 @@ BR2_PACKAGE_OPTEE_EXAMPLES_EXT ?= y
BR2_PACKAGE_OPTEE_EXAMPLES_EXT_CROSS_COMPILE ?= $(CROSS_COMPILE_S_USER)
BR2_PACKAGE_OPTEE_EXAMPLES_EXT_SDK ?= $(OPTEE_OS_TA_DEV_KIT_DIR)
BR2_PACKAGE_OPTEE_EXAMPLES_EXT_SITE ?= $(OPTEE_EXAMPLES_PATH)
OPTEE_RUST_ENABLE ?= n
ifeq ($(OPTEE_RUST_ENABLE),y)
ifeq ($(ARCH),arm)
ifeq ($(RUST_ENABLE),y)
BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT ?= y
BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_CROSS_COMPILE ?= $(CROSS_COMPILE_RUST)
BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_CROSS_COMPILE_HOST ?= $(CROSS_COMPILE_NS_RUST)
BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_CROSS_COMPILE_TA ?= $(CROSS_COMPILE_S_RUST)
AARCH64_RUST_TARGET ?= aarch64-unknown-linux-gnu
AARCH32_RUST_TARGET ?= arm-unknown-linux-gnueabihf
BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_TARGET_HOST ?= "$(AARCH$(COMPILE_NS_USER)_RUST_TARGET)"
BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_TARGET_TA ?= "$(AARCH$(COMPILE_S_USER)_RUST_TARGET)"
BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_SDK ?= $(OPTEE_OS_TA_DEV_KIT_DIR)
BR2_PACKAGE_OPTEE_RUST_EXAMPLES_EXT_SITE ?= $(OPTEE_RUST_PATH)
BR2_PACKAGE_OPTEE_RUST_EXAMPLES_TC_PATH_ENV = $(ROOT)/toolchains/aarch64/bin:$(HOME)/.cargo/bin:$(PATH)
endif
endif
# The OPTEE_OS package builds nothing, it just installs files into the
# root FS when applicable (for example: shared libraries)
Expand Down Expand Up @@ -565,7 +570,7 @@ optee-os-clean-common:
optee-rust: $(OPTEE_RUST_PATH)/.done

$(OPTEE_RUST_PATH)/.done:
ifeq ($(OPTEE_RUST_ENABLE),y)
ifeq ($(RUST_ENABLE),y)
@(export OPTEE_DIR=$(ROOT) && \
export CARGO_NET_GIT_FETCH_WITH_CLI=true && \
cd $(OPTEE_RUST_PATH) && ./setup.sh && touch .done)
Expand Down
11 changes: 10 additions & 1 deletion qemu-check.exp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ if {[info exists ::env(XEN_FFA)] && $::env(XEN_FFA) == "y"} {
set cmd3 "xl console domu"
set quiet 0
set xtest_args ""
if {[info exists ::env(RUST_ENABLE)] && $::env(RUST_ENABLE) == "y"} {
set rust_enable 1
} else {
set rust_enable 0
}

# The time required to run some tests (e.g., key generation tests [4007.*])
# can be significant and vary widely -- typically, from about one minute to
Expand All @@ -28,6 +33,7 @@ set xtest_args ""
# ('xtest') with all testsuites enabled (regression+gp+pkcs11).
set timeout 900
set tests "all"
set basedir [file dirname $argv0]

# Parse command line
set myargs $argv
Expand Down Expand Up @@ -179,6 +185,9 @@ if {$::env(XEN_BOOT) == "y"} {
}
if {$tests == "all" || $tests == "trusted-keys"} {
# Invoke Trusted Keys tests
set basedir [file dirname $argv0]
source $basedir/trusted-keys.exp
}
if {($tests == "all" || $tests == "rust") && $::rust_enable == 1} {
# Invoke Rust tests
source $basedir/rust.exp
}
24 changes: 4 additions & 20 deletions qemu_v8.mk
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ GICV3 = y
QEMU_VIRTFS_AUTOMOUNT = y
endif

# Option to enable Rust examples
RUST_ENABLE ?= y

include common.mk

DEBUG ?= 1
Expand Down Expand Up @@ -547,6 +550,7 @@ check: $(CHECK_DEPS)
export QEMU_VIRT=$(QEMU_VIRT) && \
export XEN_BOOT=$(XEN_BOOT) && \
export XEN_FFA=$(XEN_FFA) && \
export RUST_ENABLE=$(RUST_ENABLE) && \
expect $(ROOT)/build/qemu-check.exp -- $(check-args) || \
(if [ "$(DUMP_LOGS_ON_ERROR)" ]; then \
echo "== $$PWD/serial0.log:"; \
Expand All @@ -559,25 +563,5 @@ check: $(CHECK_DEPS)

check-only: check

check-rust: $(CHECK_DEPS)
ln -sf $(ROOT)/out-br/images/rootfs.cpio.gz $(BINARIES_PATH)/
cd $(BINARIES_PATH) && \
export QEMU=$(QEMU_BUILD)/aarch64-softmmu/qemu-system-aarch64 && \
export QEMU_SMP=$(QEMU_SMP) && \
export QEMU_MTE=$(QEMU_MTE) && \
export QEMU_GIC=$(QEMU_GIC_VERSION) && \
export QEMU_MEM=$(QEMU_MEM) && \
expect $(ROOT)/optee_rust/ci/qemu-check.exp -- $(check-args) || \
(if [ "$(DUMP_LOGS_ON_ERROR)" ]; then \
echo "== $$PWD/serial0.log:"; \
cat serial0.log; \
echo "== end of $$PWD/serial0.log:"; \
echo "== $$PWD/serial1.log:"; \
cat serial1.log; \
echo "== end of $$PWD/serial1.log:"; \
fi; false)

check-only-rust: check-rust

check-clean:
rm -f serial0.log serial1.log
Loading