summaryrefslogtreecommitdiff
path: root/common-functions
blob: ae4c49a5f5eb0ca924ef79c00dd599b143fdb547 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#!/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)
		    TEMP_CROSS_COMPILE=aarch64-linux-gnu- ;;
		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
		38|35)
			;;
		*)
			echo "Unknown toolchain version '$clang_version'" >&2
			if [ $clang_version -gt 38 ]; then
				clang_version=38
			else
				clang_version=35
			fi
			echo "Attempting to build using CLANG$clang_version profile." >&2
			;;
	esac

	echo "CLANG$clang_version"
}

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
}