158 lines
3.7 KiB
Bash
Executable file
158 lines
3.7 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Builds OP-TEE Trusted OS.
|
|
# Not intended to be called directly, invoked from tos-build.sh.
|
|
#
|
|
# Board configuration is extracted from
|
|
# parse-platforms.py and platforms.config.
|
|
#
|
|
|
|
TOOLS_DIR="`dirname $0`"
|
|
. "$TOOLS_DIR"/common-functions
|
|
|
|
export CFG_TEE_CORE_LOG_LEVEL=2 # 0=none 1=err 2=info 3=debug 4=flow
|
|
|
|
function usage
|
|
{
|
|
echo "usage:"
|
|
echo "opteed-build.sh -e <EDK2 source directory> -t <UEFI build profile/toolchain> <platform>"
|
|
echo
|
|
}
|
|
|
|
function build_platform
|
|
{
|
|
unset CFG_ARM64_core PLATFORM PLATFORM_FLAVOR DEBUG
|
|
TOS_PLATFORM="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o tos_platform`"
|
|
if [ X"$TOS_PLATFORM" = X"" ]; then
|
|
TOS_PLATFORM="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o atf_platform`"
|
|
if [ X"$TOS_PLATFORM" = X"" ]; then
|
|
TOS_PLATFORM=$1
|
|
fi
|
|
fi
|
|
TOS_PLATFORM_FLAVOR="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o tos_platform_flavor`"
|
|
|
|
#
|
|
# Read platform configuration
|
|
#
|
|
PLATFORM_ARCH="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o arch`"
|
|
PLATFORM_IMAGE_DIR="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o uefi_image_dir`"
|
|
PLATFORM_BUILDFLAGS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o tos_buildflags`"
|
|
|
|
if [ $VERBOSE -eq 1 ]; then
|
|
echo "PLATFORM_ARCH=$PLATFORM_ARCH"
|
|
echo "PLATFORM_IMAGE_DIR=$PLATFORM_IMAGE_DIR"
|
|
echo "PLATFORM_BUILDFLAGS=$PLATFORM_BUILDFLAGS"
|
|
fi
|
|
|
|
#
|
|
# Set up cross compilation variables (if applicable)
|
|
#
|
|
# OP-TEE requires both 64- and 32-bit compilers for a 64-bit build
|
|
# For details, visit
|
|
# https://github.com/OP-TEE/optee_os/blob/master/documentation/build_system.md#cross_compile-cross-compiler-selection
|
|
#
|
|
set_cross_compile
|
|
if [ "$PLATFORM_ARCH" = "AARCH64" ]; then
|
|
export CFG_ARM64_core=y
|
|
export CROSS_COMPILE_core="$TEMP_CROSS_COMPILE"
|
|
export CROSS_COMPILE_ta_arm64="$TEMP_CROSS_COMPILE"
|
|
PLATFORM_ARCH="ARM"
|
|
set_cross_compile
|
|
PLATFORM_ARCH="AARCH64"
|
|
echo "CFG_ARM64_core=$CFG_ARM64_core"
|
|
echo "CROSS_COMPILE_ta_arm64=$CROSS_COMPILE_ta_arm64"
|
|
else
|
|
export CFG_ARM64_core=n
|
|
fi
|
|
export CROSS_COMPILE="$TEMP_CROSS_COMPILE"
|
|
echo "CROSS_COMPILE=$CROSS_COMPILE"
|
|
echo "CROSS_COMPILE_core=$CROSS_COMPILE_core"
|
|
|
|
#
|
|
# Set up build variables
|
|
#
|
|
BUILD_TOS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o build_tos`"
|
|
case "$BUILD_TOS" in
|
|
debug*)
|
|
export DEBUG=1
|
|
echo "PROFILE=DEBUG"
|
|
;;
|
|
*)
|
|
export DEBUG=0
|
|
echo "PROFILE=RELEASE"
|
|
;;
|
|
esac
|
|
|
|
export PLATFORM=$TOS_PLATFORM
|
|
export PLATFORM_FLAVOR=$TOS_PLATFORM_FLAVOR
|
|
echo "PLATFORM=$PLATFORM"
|
|
echo "PLATFORM_FLAVOR=$PLATFORM_FLAVOR"
|
|
echo "CFG_TEE_CORE_LOG_LEVEL=$CFG_TEE_CORE_LOG_LEVEL"
|
|
|
|
#
|
|
# Build OP-TEE
|
|
#
|
|
if [ $VERBOSE -eq 1 ]; then
|
|
echo "Calling OP-TEE build:"
|
|
fi
|
|
make -j$NUM_THREADS ${PLATFORM_BUILDFLAGS}
|
|
if [ $? -eq 0 ]; then
|
|
#
|
|
# Copy resulting images to UEFI image dir
|
|
#
|
|
if [ $VERBOSE -eq 1 ]; then
|
|
echo "Copying tee.bin to "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/""
|
|
fi
|
|
cp -a out/arm-plat-"$TOS_PLATFORM"/core/tee.bin "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/"
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Check to see if we are in a trusted OS directory
|
|
# refuse to continue if we aren't
|
|
if [ ! -f documentation/optee_design.md ]
|
|
then
|
|
echo "ERROR: we aren't in the optee_os directory."
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
build=
|
|
|
|
if [ $# = 0 ]
|
|
then
|
|
usage
|
|
exit 1
|
|
else
|
|
while [ "$1" != "" ]; do
|
|
case $1 in
|
|
"-e" )
|
|
shift
|
|
EDK2_DIR="$1"
|
|
;;
|
|
"/h" | "/?" | "-?" | "-h" | "--help" )
|
|
usage
|
|
exit
|
|
;;
|
|
"-t" )
|
|
shift
|
|
BUILD_PROFILE="$1"
|
|
;;
|
|
* )
|
|
build="$1"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
fi
|
|
|
|
if [ X"$build" = X"" ]; then
|
|
echo "No platform specified!" >&2
|
|
echo
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
build_platform $build
|
|
exit $?
|