From 86655b19364e1c24197c559920a3de811707a74f Mon Sep 17 00:00:00 2001 From: Sumit Garg Date: Fri, 29 Dec 2023 18:53:34 +0530 Subject: [PATCH] Makefile: Drop automatic OP-TEE modules build Rather than automatically building OP-TEE OS and OP-TEE Client, we should ask users to build them for their particular platforms using whichever OP-TEE release they are targeting. Users just have to export paths for OP-TEE OS build artifacts via TA_DEV_KIT_DIR and for OP-TEE Client via OPTEE_CLIENT_EXPORT. This is the common practice followed by C counterparts like optee_test and optee_examples. Along with that it make OP-TEE rust examples compatible with build systems like Yocto etc. Regarding toolchains, we don't need to fetch them explicitly but rather users can use the distro cross compiler or the one they have installed on a particular location via CROSS_COMPILE environment variable. With that build command simplifies to just following: $ make CROSS_COMPILE=aarch64-linux-gnu- \ TA_DEV_KIT_DIR=/out/arm-plat-vexpress/export-ta_arm64/ \ OPTEE_CLIENT_EXPORT=/out/export/ Signed-off-by: Sumit Garg --- Makefile | 75 +++++++++++++++++++++-------------------------------- environment | 41 ----------------------------- setup.sh | 49 ---------------------------------- 3 files changed, 30 insertions(+), 135 deletions(-) delete mode 100644 environment diff --git a/Makefile b/Makefile index c92b2733..ff44d22f 100644 --- a/Makefile +++ b/Makefile @@ -15,71 +15,56 @@ # specific language governing permissions and limitations # under the License. -OPTEE_PATH ?= $(OPTEE_DIR) -OPTEE_BUILD_PATH ?= $(OPTEE_PATH)/build -OPTEE_OS_PATH ?= $(OPTEE_PATH)/optee_os -OPTEE_CLIENT_PATH ?= $(OPTEE_PATH)/optee_client - -CCACHE ?= $(shell which ccache) +ifneq ($V,1) + q := @ + echo := @echo +else + q := + echo := @: +endif EXAMPLES = $(wildcard examples/*) EXAMPLES_INSTALL = $(EXAMPLES:%=%-install) EXAMPLES_CLEAN = $(EXAMPLES:%=%-clean) ifneq ($(ARCH), arm) - VENDOR := qemu_v8.mk - AARCH_CROSS_COMPILE := $(OPTEE_PATH)/toolchains/aarch64/bin/aarch64-linux-gnu- - HOST_TARGET := aarch64-unknown-linux-gnu - TA_TARGET := aarch64-unknown-linux-gnu + CROSS_COMPILE ?= aarch64-linux-gnu- + TARGET := aarch64-unknown-linux-gnu else - VENDOR := qemu.mk - ARCH_CROSS_COMPILE := $(OPTEE_PATH)/toolchains/aarch32/bin/arm-linux-gnueabihf- - HOST_TARGET := arm-unknown-linux-gnueabihf - TA_TARGET := arm-unknown-linux-gnueabihf + CROSS_COMPILE ?= arm-linux-gnueabihf- + TARGET := arm-unknown-linux-gnueabihf endif -all: toolchains optee-os optee-client examples -optee: toolchains optee-os optee-client - -toolchains: - make -C $(OPTEE_BUILD_PATH) -f $(VENDOR) toolchains - -optee-os: - make -C $(OPTEE_BUILD_PATH) -f $(VENDOR) optee-os +export ARCH -OPTEE_CLIENT_FLAGS ?= CROSS_COMPILE="$(CCACHE) $(AARCH_CROSS_COMPILE)" \ - CFG_TEE_BENCHMARK=n \ - CFG_TA_TEST_PATH=y \ - WITH_TEEACL=0 - -optee-client: - make -C $(OPTEE_CLIENT_PATH) $(OPTEE_CLIENT_FLAGS) +.PHONY: all +ifneq ($(wildcard $(TA_DEV_KIT_DIR)/host_include/conf.mk),) +all: examples examples-install +else +all: + $(q)echo "TA_DEV_KIT_DIR is not correctly defined" && false +endif -examples: $(EXAMPLES) toolchains optee-os optee-client +examples: $(EXAMPLES) $(EXAMPLES): - make -C $@ + $(q)make -C $@ CROSS_COMPILE=$(CROSS_COMPILE) TA_DEV_KIT_DIR=$(TA_DEV_KIT_DIR) \ + OPTEE_CLIENT_EXPORT=$(OPTEE_CLIENT_EXPORT) examples-install: $(EXAMPLES_INSTALL) -$(EXAMPLES_INSTALL): - install -D $(@:%-install=%)/host/target/$(HOST_TARGET)/release/$(@:examples/%-install=%) -t out/host/ - install -D $(@:%-install=%)/ta/target/$(TA_TARGET)/release/*.ta -t out/ta/ - if [ -d "$(@:%-install=%)/plugin/target/" ]; then \ - install -D $(@:%-install=%)/plugin/target/$(HOST_TARGET)/release/*.plugin.so -t out/plugin/; \ +$(EXAMPLES_INSTALL): examples + install -D $(@:%-install=%)/host/target/$(TARGET)/release/$(@:examples/%-install=%) -t out/host/ + install -D $(@:%-install=%)/ta/target/$(TARGET)/release/*.ta -t out/ta/ + $(q)if [ -d "$(@:%-install=%)/plugin/target/" ]; then \ + install -D $(@:%-install=%)/plugin/target/$(TARGET)/release/*.plugin.so -t out/plugin/; \ fi -optee-os-clean: - make -C $(OPTEE_OS_PATH) O=out/arm clean - -optee-client-clean: - make -C $(OPTEE_CLIENT_PATH) $(OPTEE_CLIENT_CLEAN_FLAGS) clean - examples-clean: $(EXAMPLES_CLEAN) out-clean $(EXAMPLES_CLEAN): - make -C $(@:-clean=) clean + $(q)make -C $(@:-clean=) clean out-clean: rm -rf out -.PHONY: clean optee-os-clean optee-client-clean $(EXAMPLES) $(EXAMPLES_CLEAN) +.PHONY: clean $(EXAMPLES) $(EXAMPLES_CLEAN) -clean: optee-os-clean optee-client-clean $(EXAMPLES_CLEAN) +clean: $(EXAMPLES_CLEAN) diff --git a/environment b/environment deleted file mode 100644 index 3216d099..00000000 --- a/environment +++ /dev/null @@ -1,41 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -export RUST_TARGET_PATH="$(pwd)" -export RUST_COMPILER_RT_ROOT=$RUST_TARGET_PATH/rust/rust/src/llvm-project/compiler-rt -if [ -z "$OPTEE_DIR" ] -then - export OPTEE_DIR="$(pwd)/optee" -fi -export OPTEE_OS_DIR="$OPTEE_DIR/optee_os" -export OPTEE_CLIENT_DIR="$OPTEE_DIR/optee_client/out" -export OPTEE_CLIENT_INCLUDE="$OPTEE_DIR/optee_client/out/export/usr/include" -if [ "$ARCH" = "arm" ] -then - export ARCH="arm" - export PATH=$PATH:$OPTEE_DIR/toolchains/aarch32/bin - export VENDOR="qemu.mk" - export OPTEE_OS_INCLUDE="$OPTEE_DIR/optee_os/out/arm/export-ta_arm32/include" - export CC=$OPTEE_DIR/toolchains/aarch32/bin/arm-linux-gnueabihf-gcc -else - # export ARCH="aarch64" # comment this because currently optee_os cannot be compiled in the aarch64 target - unset ARCH - export PATH=$PATH:$OPTEE_DIR/toolchains/aarch64/bin - 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 -fi diff --git a/setup.sh b/setup.sh index fda0e089..7e439d1f 100755 --- a/setup.sh +++ b/setup.sh @@ -38,52 +38,3 @@ fi # rustup-wrapped command to trigger installation. We've arbitrarily chosen # "cargo --version" since it has no other effect. cargo --version >/dev/null - -######################################################## -# initialize submodules: optee_os / optee_client / build -OPTEE_RELEASE_VERSION=3.20.0 - -if [[ -z "$OPTEE_DIR" ]] || [[ "$OPTEE_DIR" == "$(pwd)/optee" ]] -then - OPTEE_DIR="$(pwd)/optee" - echo "optee dir: $OPTEE_DIR" - OPTEE_SUBMODULES=(optee_os optee_client build) - - if [ ! -d "$OPTEE_DIR" ] - then - mkdir "$OPTEE_DIR" - else - rm -r "$OPTEE_DIR"/* - fi - - # download optee release - echo "Downloading optee release..." - for submodule in ${OPTEE_SUBMODULES[*]} - do - echo "Downloading $submodule..." - curl --retry 5 -s -S \ - -L "https://github.com/OP-TEE/$submodule/archive/refs/tags/$OPTEE_RELEASE_VERSION.tar.gz" \ - -o "$OPTEE_DIR/$OPTEE_RELEASE_VERSION.tar.gz" - if [ ! $? -eq 0 ] - then - rm "$OPTEE_DIR/$OPTEE_RELEASE_VERSION.tar.gz" && \ - echo "Download failed" && \ - exit 1 - fi - echo "Uncompressing $submodule..." - mkdir -p "$OPTEE_DIR/$submodule" && \ - tar zxf "$OPTEE_DIR/$OPTEE_RELEASE_VERSION.tar.gz" \ - -C "$OPTEE_DIR/$submodule" --strip-components 1 - if [ ! $? -eq 0 ] - then - rm "$OPTEE_DIR/$OPTEE_RELEASE_VERSION.tar.gz" && \ - rm -r "$OPTEE_DIR/$submodule" && \ - echo "Downloaded file is damaged" && \ - exit 1 - fi - rm "$OPTEE_DIR/$OPTEE_RELEASE_VERSION.tar.gz" - done - echo "Download finished" -else - echo "OPTEE_DIR has been set, omit to download optee submodules" -fi