| #!/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 |
| } |