Home | History | Annotate | Download | only in uefi-tools
      1 #!/bin/bash
      2 
      3 RESULT_BUF=`echo -e ------------------------------------------------------------`
      4 RESULT_PASS_COUNT=0
      5 RESULT_FAIL_COUNT=0
      6 
      7 function result_log
      8 {
      9 	if [ $1 -eq 0 ]; then
     10 		RESULT_BUF="`printf \"%s\n%55s\tpass\" \"$RESULT_BUF\" \"$2\"`"
     11 		RESULT_PASS_COUNT=$(($RESULT_PASS_COUNT + 1))
     12 	else
     13 		RESULT_BUF="`printf \"%s\n%55s\tfail\" \"$RESULT_BUF\" \"$2\"`"
     14 		RESULT_FAIL_COUNT=$(($RESULT_FAIL_COUNT + 1))
     15 	fi
     16 }
     17 
     18 function result_print
     19 {
     20 	printf "%s" "$RESULT_BUF"
     21 	echo -e "\n------------------------------------------------------------"
     22 	printf "pass\t$RESULT_PASS_COUNT\n"
     23 	printf "fail\t$RESULT_FAIL_COUNT\n"
     24 
     25 	exit $RESULT_FAIL_COUNT
     26 }
     27 
     28 function get_build_arch
     29 {
     30 	case `uname -m` in
     31 	    arm*)
     32 	        BUILD_ARCH=ARM;;
     33 	    aarch64*)
     34 	        BUILD_ARCH=AARCH64;;
     35 	    i?86*)
     36 		BUILD_ARCH=IA32;;
     37 	    x86_64*)
     38 		BUILD_ARCH=X64;;
     39 	    *)
     40 	        BUILD_ARCH=other;;
     41 	esac
     42 }
     43 
     44 function set_cross_compile
     45 {
     46 	get_build_arch
     47 
     48 	echo "Target: $PLATFORM_ARCH"
     49 	echo "Build: $BUILD_ARCH"
     50  	if [ "$PLATFORM_ARCH" = "$BUILD_ARCH" ]; then
     51 	    TEMP_CROSS_COMPILE=
     52 	else
     53 	    case "$PLATFORM_ARCH" in
     54 		AARCH64)
     55                     if [ X"$CROSS_COMPILE_64" != X"" ]; then
     56                         TEMP_CROSS_COMPILE="$CROSS_COMPILE_64"
     57                     else
     58                         TEMP_CROSS_COMPILE=aarch64-linux-gnu-
     59                     fi
     60                 ;;
     61 		ARM)
     62 		    TEMP_CROSS_COMPILE=arm-linux-gnueabihf- ;;
     63 		IA32)
     64 		    TEMP_CROSS_COMPILE=x86_64-linux-gnu-
     65 		    for family in 6 5 4 3; do
     66 		        if i$family86-linux-gnu-as -version >/dev/null 2>&1;then
     67 		            TEMP_CROSS_COMPILE=i$family86-linux-gnu-
     68 		            break
     69 		        fi
     70 		    done
     71 		;;
     72 		X64)
     73 		    TEMP_CROSS_COMPILE=x86_64-linux-gnu- ;;
     74 		*)
     75 	            echo "Unsupported target architecture '$PLATFORM_ARCH'!" >&2
     76 		;;
     77 	    esac
     78 	fi
     79 }
     80 
     81 function get_gcc_version
     82 {
     83 	$1 -v >/dev/null 2>&1 || return 1
     84 	gcc_version=$($1 -dumpversion)
     85 	MAJVER=`echo $gcc_version | cut -d. -f1`
     86 
     87 	case $gcc_version in
     88 		4*)
     89 			echo GCC$(echo ${gcc_version} | awk -F. '{print $1$2}')
     90 			;;
     91 		*)
     92 			if [ "$MAJVER" -ge 5 ]; then
     93 			    # We only have a GCC5 build profile for now, so...
     94 			    # echo GCC$MAJVER
     95 			    echo GCC5
     96 			else
     97 			    echo "Unknown toolchain version '$gcc_version'" >&2
     98 			    echo "Attempting to build using GCC49 profile." >&2
     99 			    echo GCC49
    100 			fi
    101 			;;
    102 	esac
    103 
    104 	return 0
    105 }
    106 
    107 function get_clang_version
    108 {
    109 	clang_version=`$1 --version | head -1 | sed 's/^.*version\s*\([0-9]*\).\([0-9]*\).*/\1\2/g'`
    110 	case $clang_version in
    111 		35*)
    112 			echo "CLANG$clang_version"
    113 			;;
    114 		*)
    115 			echo "Unknown toolchain version '$clang_version'" >&2
    116 			echo "Attempting to build using CLANG35 profile." >&2
    117 			echo CLANG35
    118 			;;
    119 	esac
    120 }
    121 
    122 function download_patch_openssl
    123 {
    124     OPENSSL_VER=`ls EDKII_openssl-*.patch | sed 's/^.*-\([0-9.a-z]*\).patch/\1/'`
    125     OPENSSL_TAR=openssl-${OPENSSL_VER}.tar.gz
    126     OPENSSL_URL=http://www.openssl.org/source/${OPENSSL_TAR}
    127     OPENSSL_DIR=openssl-${OPENSSL_VER}
    128     OPENSSL_PATCH=EDKII_openssl-${OPENSSL_VER}.patch
    129 
    130     if [ -e "$WORKSPACE"/CryptoPkg/Include/openssl/opensslconf.h ]; then
    131         echo "OpenSSL already imported!"
    132         return 0
    133     fi
    134 
    135     # Use cached copy if available
    136     if [ -f "$WORKSPACE"/LinaroPkg/"$OPENSSL_TAR" ]; then
    137 	tar xzf "$WORKSPACE"/LinaroPkg/"$OPENSSL_TAR"
    138     else
    139 	wget -O - -q ${OPENSSL_URL} | tar xzf -
    140     fi
    141 
    142     echo "Importing OpenSSL $OPENSSL_VER"
    143     ( cd ${OPENSSL_DIR}; patch -p1 -i ../${OPENSSL_PATCH} )
    144     ./Install.sh
    145 
    146     if [ $? -eq 0 ]; then
    147 	OPENSSL_CONFIGURED=TRUE
    148     else
    149 	echo "OpenSSL $OPENSSL_VER import failed!" >&2
    150 	rm -rf $OPENSSL_TAR $OPENSSL_DIR
    151 	return 1
    152     fi
    153 }
    154 
    155 function clone_process_openssl
    156 {
    157     if [ -e openssl/include/openssl/opensslconf.h ]; then
    158         echo "OpenSSL already imported!"
    159         return 0
    160     fi
    161 
    162     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'`
    163     OPENSSL_TAR="$OPENSSL_VER.tar.gz"
    164     if [ -z "$OPENSSL_TAR" ]; then
    165         return 1
    166     fi
    167     OPENSSL_URL=http://www.openssl.org/source/${OPENSSL_TAR}
    168     if [ ! -f "$OPENSSL_TAR" ]; then
    169         wget -q ${OPENSSL_URL}
    170     else
    171         rm -rf openssl
    172     fi
    173     tar xzf "$OPENSSL_TAR"
    174     mv "$OPENSSL_VER" openssl
    175     # perl process_files.pl # not needed and not currently working
    176     return $?
    177 }
    178 
    179 function import_openssl
    180 {
    181     # Don't re-import if already done
    182     if [ "$OPENSSL_CONFIGURED" = "TRUE" ]; then
    183 	echo "Using existing OpenSSL $OPENSSL_VER"
    184 	return 0
    185     fi
    186 
    187     cd CryptoPkg/Library/OpensslLib/
    188     if [ -f EDKII_openssl-*.patch ]; then
    189         download_patch_openssl
    190     else
    191         clone_process_openssl
    192     fi
    193     RET=$?
    194     cd - >/dev/null
    195     return $RET
    196 }
    197 
    198 function search_packages_path
    199 {
    200     file="$1"
    201 
    202     IFS=:
    203     for dir in $PACKAGES_PATH; do
    204 	if [ -e "$dir/$file" ]; then
    205 	    echo "$dir/$file"
    206 	    unset IFS
    207 	    return 0
    208 	fi
    209     done
    210 
    211     echo "$file not found in any directory on PACKAGES_PATH!" >&2
    212     unset IFS
    213     return 1
    214 }
    215