blob: 9d01ae1692f493e5cfb053096cc48c71fdb648f3 [file] [log] [blame]
#!/bin/bash
RESULT_BUF=`echo -e ------------------------------------------------------------`
RESULT_PASS_COUNT=0
RESULT_FAIL_COUNT=0
function result_log
{
if [ $1 -eq 0 ]; then
RESULT_BUF="`printf \"%s\n%55s\tpass\" \"$RESULT_BUF\" \"$2\"`"
RESULT_PASS_COUNT=$(($RESULT_PASS_COUNT + 1))
else
RESULT_BUF="`printf \"%s\n%55s\tfail\" \"$RESULT_BUF\" \"$2\"`"
RESULT_FAIL_COUNT=$(($RESULT_FAIL_COUNT + 1))
fi
}
function result_print
{
printf "%s" "$RESULT_BUF"
echo -e "\n------------------------------------------------------------"
printf "pass\t$RESULT_PASS_COUNT\n"
printf "fail\t$RESULT_FAIL_COUNT\n"
exit $RESULT_FAIL_COUNT
}
function get_build_arch
{
case `uname -m` in
arm*)
BUILD_ARCH=ARM;;
aarch64*)
BUILD_ARCH=AARCH64;;
i?86*)
BUILD_ARCH=IA32;;
x86_64*)
BUILD_ARCH=X64;;
*)
BUILD_ARCH=other;;
esac
}
function set_cross_compile
{
get_build_arch
echo "Target: $PLATFORM_ARCH"
echo "Build: $BUILD_ARCH"
if [ "$PLATFORM_ARCH" = "$BUILD_ARCH" ]; then
TEMP_CROSS_COMPILE=
else
case "$PLATFORM_ARCH" in
AARCH64)
if [ X"$CROSS_COMPILE_64" != X"" ]; then
TEMP_CROSS_COMPILE="$CROSS_COMPILE_64"
else
TEMP_CROSS_COMPILE=aarch64-linux-gnu-
fi
;;
ARM)
TEMP_CROSS_COMPILE=arm-linux-gnueabihf- ;;
IA32)
TEMP_CROSS_COMPILE=x86_64-linux-gnu-
for family in 6 5 4 3; do
if i$family86-linux-gnu-as -version >/dev/null 2>&1;then
TEMP_CROSS_COMPILE=i$family86-linux-gnu-
break
fi
done
;;
X64)
TEMP_CROSS_COMPILE=x86_64-linux-gnu- ;;
*)
echo "Unsupported target architecture '$PLATFORM_ARCH'!" >&2
;;
esac
fi
}
function get_gcc_version
{
$1 -v >/dev/null 2>&1 || return 1
gcc_version=$($1 -dumpversion)
MAJVER=`echo $gcc_version | cut -d. -f1`
case $gcc_version in
4*)
echo GCC$(echo ${gcc_version} | awk -F. '{print $1$2}')
;;
*)
if [ "$MAJVER" -ge 5 ]; then
# We only have a GCC5 build profile for now, so...
# echo GCC$MAJVER
echo GCC5
else
echo "Unknown toolchain version '$gcc_version'" >&2
echo "Attempting to build using GCC49 profile." >&2
echo GCC49
fi
;;
esac
return 0
}
function get_clang_version
{
clang_version=`$1 --version | head -1 | sed 's/^.*version\s*\([0-9]*\).\([0-9]*\).*/\1\2/g'`
case $clang_version in
35*)
echo "CLANG$clang_version"
;;
*)
echo "Unknown toolchain version '$clang_version'" >&2
echo "Attempting to build using CLANG35 profile." >&2
echo CLANG35
;;
esac
}
function download_patch_openssl
{
OPENSSL_VER=`ls EDKII_openssl-*.patch | sed 's/^.*-\([0-9.a-z]*\).patch/\1/'`
OPENSSL_TAR=openssl-${OPENSSL_VER}.tar.gz
OPENSSL_URL=http://www.openssl.org/source/${OPENSSL_TAR}
OPENSSL_DIR=openssl-${OPENSSL_VER}
OPENSSL_PATCH=EDKII_openssl-${OPENSSL_VER}.patch
if [ -e "$WORKSPACE"/CryptoPkg/Include/openssl/opensslconf.h ]; then
echo "OpenSSL already imported!"
return 0
fi
# Use cached copy if available
if [ -f "$WORKSPACE"/LinaroPkg/"$OPENSSL_TAR" ]; then
tar xzf "$WORKSPACE"/LinaroPkg/"$OPENSSL_TAR"
else
wget -O - -q ${OPENSSL_URL} | tar xzf -
fi
echo "Importing OpenSSL $OPENSSL_VER"
( cd ${OPENSSL_DIR}; patch -p1 -i ../${OPENSSL_PATCH} )
./Install.sh
if [ $? -eq 0 ]; then
OPENSSL_CONFIGURED=TRUE
else
echo "OpenSSL $OPENSSL_VER import failed!" >&2
rm -rf $OPENSSL_TAR $OPENSSL_DIR
return 1
fi
}
function clone_process_openssl
{
if [ -e openssl/include/openssl/opensslconf.h ]; then
echo "OpenSSL already imported!"
return 0
fi
OPENSSL_VER=`git ls-remote --tags git://github.com/openssl/openssl.git | awk '{print $2;}' | sed 's-^refs/tags/--g' | grep -v '\^{}$' | grep '^OpenSSL' | grep -v '^OpenSSL_FIPS' | tail -1 | sed -n 's/^OpenSSL_\([0-9]*\)_\([0-9]*\)_\([0-9.a-z]*\)$/openssl-\1.\2.\3\n/p'`
OPENSSL_TAR="$OPENSSL_VER.tar.gz"
if [ -z "$OPENSSL_TAR" ]; then
return 1
fi
OPENSSL_URL=http://www.openssl.org/source/${OPENSSL_TAR}
if [ ! -f "$OPENSSL_TAR" ]; then
wget -q ${OPENSSL_URL}
else
rm -rf openssl
fi
tar xzf "$OPENSSL_TAR"
mv "$OPENSSL_VER" openssl
# perl process_files.pl # not needed and not currently working
return $?
}
function import_openssl
{
# Don't re-import if already done
if [ "$OPENSSL_CONFIGURED" = "TRUE" ]; then
echo "Using existing OpenSSL $OPENSSL_VER"
return 0
fi
cd CryptoPkg/Library/OpensslLib/
if [ -f EDKII_openssl-*.patch ]; then
download_patch_openssl
else
clone_process_openssl
fi
RET=$?
cd - >/dev/null
return $RET
}
function search_packages_path
{
file="$1"
IFS=:
for dir in $PACKAGES_PATH; do
if [ -e "$dir/$file" ]; then
echo "$dir/$file"
unset IFS
return 0
fi
done
echo "$file not found in any directory on PACKAGES_PATH!" >&2
unset IFS
return 1
}