xref: /spdk/scripts/arm_cross_compile.sh (revision eb53c23236cccb6b698b7ca70ee783da1c574b5f)
1654c1fc8SKrishna Kanth Reddy#!/usr/bin/env bash
2*eb53c232Spaul luse#  SPDX-License-Identifier: BSD-3-Clause
3*eb53c232Spaul luse#  All rights reserved.
4*eb53c232Spaul luse#
5654c1fc8SKrishna Kanth Reddy
6654c1fc8SKrishna Kanth Reddy# exit on errors
7654c1fc8SKrishna Kanth Reddyset -e
8654c1fc8SKrishna Kanth Reddy
9654c1fc8SKrishna Kanth ReddyROOT_DIR=$(readlink -f $(dirname $0))/../..
10654c1fc8SKrishna Kanth Reddyexport CROSS_COMPILE_DIR=$ROOT_DIR/cross_compiling
11654c1fc8SKrishna Kanth Reddyexport SPDK_DIR=$ROOT_DIR/spdk
12654c1fc8SKrishna Kanth Reddyexport DPDK_DIR=$SPDK_DIR/dpdk
13654c1fc8SKrishna Kanth Reddy
14654c1fc8SKrishna Kanth Reddy# Get Toolchain
15654c1fc8SKrishna Kanth Reddyfunction get_cc_toolchain() {
16654c1fc8SKrishna Kanth Reddy	cd $CROSS_COMPILE_DIR
17654c1fc8SKrishna Kanth Reddy
18654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu" ]; then
19654c1fc8SKrishna Kanth Reddy		echo -e "Getting ARM Cross Compiler Toolchain..."
20654c1fc8SKrishna Kanth Reddy		wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz --no-check-certificate
21654c1fc8SKrishna Kanth Reddy		tar xvf gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
22654c1fc8SKrishna Kanth Reddy	else
23654c1fc8SKrishna Kanth Reddy		echo -e "ARM Cross Compiler Toolchain already downloaded"
24654c1fc8SKrishna Kanth Reddy	fi
25654c1fc8SKrishna Kanth Reddy
26654c1fc8SKrishna Kanth Reddy	export PATH=$PATH:$CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin
27654c1fc8SKrishna Kanth Reddy}
28654c1fc8SKrishna Kanth Reddy
29654c1fc8SKrishna Kanth Reddy# NUMA
30654c1fc8SKrishna Kanth Reddyfunction cross_compile_numa() {
31654c1fc8SKrishna Kanth Reddy	cd $CROSS_COMPILE_DIR
32654c1fc8SKrishna Kanth Reddy
33654c1fc8SKrishna Kanth Reddy	# Download NUMA library
34654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/numactl" ]; then
35654c1fc8SKrishna Kanth Reddy		echo -e "Downloading NUMA library..."
36654c1fc8SKrishna Kanth Reddy		git clone https://github.com/numactl/numactl.git
37654c1fc8SKrishna Kanth Reddy		cd numactl/
38654c1fc8SKrishna Kanth Reddy		git checkout v2.0.13 -b v2.0.13
39654c1fc8SKrishna Kanth Reddy	else
40654c1fc8SKrishna Kanth Reddy		echo -e "NUMA library already downloaded"
41654c1fc8SKrishna Kanth Reddy		cd numactl/
42654c1fc8SKrishna Kanth Reddy	fi
43654c1fc8SKrishna Kanth Reddy
44654c1fc8SKrishna Kanth Reddy	# Build NUMA library
45654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/numactl/build" ]; then
46654c1fc8SKrishna Kanth Reddy		echo -e "Building NUMA library..."
47654c1fc8SKrishna Kanth Reddy		./autogen.sh
48654c1fc8SKrishna Kanth Reddy		autoconf -i
49654c1fc8SKrishna Kanth Reddy		mkdir build
50654c1fc8SKrishna Kanth Reddy		./configure --host=aarch64-none-linux-gnu CC=aarch64-none-linux-gnu-gcc --prefix=$CROSS_COMPILE_DIR/numactl/build
51654c1fc8SKrishna Kanth Reddy		make -j install
52654c1fc8SKrishna Kanth Reddy
53654c1fc8SKrishna Kanth Reddy		# Copy NUMA related dependencies
54654c1fc8SKrishna Kanth Reddy		echo -e "Copying NUMA library dependencies..."
55654c1fc8SKrishna Kanth Reddy
56654c1fc8SKrishna Kanth Reddy		cp build/include/numa*.h $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
57654c1fc8SKrishna Kanth Reddy		cp build/lib/libnuma.a $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/
58654c1fc8SKrishna Kanth Reddy		cp build/lib/libnuma.so $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/
59654c1fc8SKrishna Kanth Reddy	else
60654c1fc8SKrishna Kanth Reddy		echo -e "NUMA library already built"
61654c1fc8SKrishna Kanth Reddy	fi
62654c1fc8SKrishna Kanth Reddy}
63654c1fc8SKrishna Kanth Reddy
64654c1fc8SKrishna Kanth Reddy# util-linux UUID
65654c1fc8SKrishna Kanth Reddyfunction cross_compile_uuid() {
66654c1fc8SKrishna Kanth Reddy	cd $CROSS_COMPILE_DIR
67654c1fc8SKrishna Kanth Reddy
68654c1fc8SKrishna Kanth Reddy	# Download util-linux UUID library
69654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/util-linux" ]; then
70654c1fc8SKrishna Kanth Reddy		echo -e "Downloading util-linux UUID library..."
71654c1fc8SKrishna Kanth Reddy		git clone https://github.com/karelzak/util-linux.git
72654c1fc8SKrishna Kanth Reddy	else
73654c1fc8SKrishna Kanth Reddy		echo -e "util-linux UUID library already downloaded"
74654c1fc8SKrishna Kanth Reddy	fi
75654c1fc8SKrishna Kanth Reddy
76654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/util-linux/.libs" ]; then
77654c1fc8SKrishna Kanth Reddy		cd util-linux/
78654c1fc8SKrishna Kanth Reddy
79654c1fc8SKrishna Kanth Reddy		# Build util-linux UUID library
80654c1fc8SKrishna Kanth Reddy		echo -e "Building util-linux UUID library..."
81654c1fc8SKrishna Kanth Reddy
82654c1fc8SKrishna Kanth Reddy		./autogen.sh
83654c1fc8SKrishna Kanth Reddy		CC=aarch64-none-linux-gnu-gcc CXX=aarch64-none-linux-gnu-g++ LD=aarch64-none-linux-gnu-ld CFLAGS+=-Wl,-rpath=$CROSS_COMPILE_DIR/util-linux/.libs ./configure --host=aarch64-none-linux-gnu --without-tinfo --without-ncurses --without-ncursesw --disable-mount --disable-libmount --disable-pylibmount --disable-libblkid --disable-fdisks --disable-libfdisk
84654c1fc8SKrishna Kanth Reddy		make clean
85654c1fc8SKrishna Kanth Reddy		make -j
86654c1fc8SKrishna Kanth Reddy
87654c1fc8SKrishna Kanth Reddy		# Copy util-linux UUID related dependencies
88654c1fc8SKrishna Kanth Reddy		echo -e "Copying util-linux UUID library dependencies..."
89654c1fc8SKrishna Kanth Reddy
90654c1fc8SKrishna Kanth Reddy		cp .libs/libuuid.so.1.3.0 $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libuuid.so
91654c1fc8SKrishna Kanth Reddy		mkdir -p $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/uuid/
92654c1fc8SKrishna Kanth Reddy		cp libuuid/src/uuid.h $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/uuid/
93654c1fc8SKrishna Kanth Reddy	else
94654c1fc8SKrishna Kanth Reddy		echo -e "util-linux UUID library already built"
95654c1fc8SKrishna Kanth Reddy	fi
96654c1fc8SKrishna Kanth Reddy}
97654c1fc8SKrishna Kanth Reddy
98654c1fc8SKrishna Kanth Reddy# Openssl Crypto and SSL
99654c1fc8SKrishna Kanth Reddyfunction cross_compile_crypto_ssl() {
100654c1fc8SKrishna Kanth Reddy	cd $CROSS_COMPILE_DIR
101654c1fc8SKrishna Kanth Reddy
102654c1fc8SKrishna Kanth Reddy	# Download Openssl Crypto and SSL libraries
103654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/openssl" ]; then
104654c1fc8SKrishna Kanth Reddy		echo -e "Downloading Openssl Crypto and SSL libraries..."
105654c1fc8SKrishna Kanth Reddy		git clone https://github.com/openssl/openssl.git
106654c1fc8SKrishna Kanth Reddy	else
107654c1fc8SKrishna Kanth Reddy		echo -e "Openssl Crypto and SSL libraries already downloaded"
108654c1fc8SKrishna Kanth Reddy	fi
109654c1fc8SKrishna Kanth Reddy
110654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/openssl/build" ]; then
111654c1fc8SKrishna Kanth Reddy		cd openssl
112654c1fc8SKrishna Kanth Reddy
113654c1fc8SKrishna Kanth Reddy		# Build Openssl Crypto and SSL libraries
114654c1fc8SKrishna Kanth Reddy		echo -e "Building Openssl Crypto and SSL libraries..."
115654c1fc8SKrishna Kanth Reddy
116654c1fc8SKrishna Kanth Reddy		mkdir build
117654c1fc8SKrishna Kanth Reddy		./Configure linux-aarch64 --prefix=$CROSS_COMPILE_DIR/openssl/build --cross-compile-prefix=aarch64-none-linux-gnu-
118654c1fc8SKrishna Kanth Reddy		make -j
119654c1fc8SKrishna Kanth Reddy		make -j install
120654c1fc8SKrishna Kanth Reddy
121654c1fc8SKrishna Kanth Reddy		# Copy Openssl Crypto and SSL related dependencies
122654c1fc8SKrishna Kanth Reddy		echo -e "Copying Openssl Crypto and SSL libraries dependencies..."
123654c1fc8SKrishna Kanth Reddy
124654c1fc8SKrishna Kanth Reddy		cp -fr build/include/openssl $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
125654c1fc8SKrishna Kanth Reddy		cp build/lib/libcrypto.so.3 $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libcrypto.so
126654c1fc8SKrishna Kanth Reddy		cp build/lib/libcrypto.so.3 $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libcrypto.so.3
127654c1fc8SKrishna Kanth Reddy		cp build/lib/libssl.so.3 $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libssl.so
128654c1fc8SKrishna Kanth Reddy	else
129654c1fc8SKrishna Kanth Reddy		echo -e "Openssl Crypto and SSL libraries already built"
130654c1fc8SKrishna Kanth Reddy	fi
131654c1fc8SKrishna Kanth Reddy}
132654c1fc8SKrishna Kanth Reddy
133654c1fc8SKrishna Kanth Reddy# Libaio
134654c1fc8SKrishna Kanth Reddyfunction cross_compile_libaio() {
135654c1fc8SKrishna Kanth Reddy	cd $CROSS_COMPILE_DIR
136654c1fc8SKrishna Kanth Reddy
137654c1fc8SKrishna Kanth Reddy	# Download libaio library
138654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/libaio" ]; then
139654c1fc8SKrishna Kanth Reddy		echo -e "Downloading libaio library..."
140654c1fc8SKrishna Kanth Reddy
141654c1fc8SKrishna Kanth Reddy		wget https://ftp.debian.org/debian/pool/main/liba/libaio/libaio_0.3.112.orig.tar.xz --no-check-certificate
142654c1fc8SKrishna Kanth Reddy		tar xvf libaio_0.3.112.orig.tar.xz
143654c1fc8SKrishna Kanth Reddy		mv libaio-0.3.112 libaio
144654c1fc8SKrishna Kanth Reddy	else
145654c1fc8SKrishna Kanth Reddy		echo -e "libaio library already downloaded"
146654c1fc8SKrishna Kanth Reddy	fi
147654c1fc8SKrishna Kanth Reddy
148654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/libaio/build" ]; then
149654c1fc8SKrishna Kanth Reddy		cd libaio
150654c1fc8SKrishna Kanth Reddy
151654c1fc8SKrishna Kanth Reddy		# Build libaio library
152654c1fc8SKrishna Kanth Reddy		echo -e "Building libaio library..."
153654c1fc8SKrishna Kanth Reddy
154654c1fc8SKrishna Kanth Reddy		mkdir build
155654c1fc8SKrishna Kanth Reddy		CC=aarch64-none-linux-gnu-gcc CXX=aarch64-none-linux-gnu-g++ LD=aarch64-none-linux-gnu-ld make -j
156654c1fc8SKrishna Kanth Reddy		make -j install DESTDIR=$CROSS_COMPILE_DIR/libaio/build
157654c1fc8SKrishna Kanth Reddy
158654c1fc8SKrishna Kanth Reddy		# Copy libaio related dependencies
159654c1fc8SKrishna Kanth Reddy		echo -e "Copying libaio library dependencies..."
160654c1fc8SKrishna Kanth Reddy
161654c1fc8SKrishna Kanth Reddy		cp build/usr/include/libaio.h $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
162654c1fc8SKrishna Kanth Reddy		cp build/usr/lib/libaio.so.1.0.1 $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libaio.so
163654c1fc8SKrishna Kanth Reddy	else
164654c1fc8SKrishna Kanth Reddy		echo -e "libaio library already built"
165654c1fc8SKrishna Kanth Reddy	fi
166654c1fc8SKrishna Kanth Reddy}
167654c1fc8SKrishna Kanth Reddy
168654c1fc8SKrishna Kanth Reddy# Ncurses
169654c1fc8SKrishna Kanth Reddyfunction cross_compile_ncurses() {
170654c1fc8SKrishna Kanth Reddy	cd $CROSS_COMPILE_DIR
171654c1fc8SKrishna Kanth Reddy
172654c1fc8SKrishna Kanth Reddy	# Download ncurses library
173654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/ncurses" ]; then
174654c1fc8SKrishna Kanth Reddy		echo -e "Downloading ncurses library..."
175654c1fc8SKrishna Kanth Reddy
176654c1fc8SKrishna Kanth Reddy		wget https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.2.tar.gz --no-check-certificate
177654c1fc8SKrishna Kanth Reddy		tar xvf ncurses-6.2.tar.gz
178654c1fc8SKrishna Kanth Reddy		mv ncurses-6.2 ncurses
179654c1fc8SKrishna Kanth Reddy	else
180654c1fc8SKrishna Kanth Reddy		echo -e "ncurses library already downloaded"
181654c1fc8SKrishna Kanth Reddy	fi
182654c1fc8SKrishna Kanth Reddy
183654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/ncurses_build" ]; then
184654c1fc8SKrishna Kanth Reddy		mkdir ncurses_build
185654c1fc8SKrishna Kanth Reddy
186654c1fc8SKrishna Kanth Reddy		# Build ncurses library
187654c1fc8SKrishna Kanth Reddy		echo -e "Building ncurses library..."
188654c1fc8SKrishna Kanth Reddy
189654c1fc8SKrishna Kanth Reddy		(cd ncurses && ./configure --host=aarch64-none-linux-gnu --prefix=$CROSS_COMPILE_DIR/ncurses_build --disable-stripping && make -j install)
190654c1fc8SKrishna Kanth Reddy
191654c1fc8SKrishna Kanth Reddy		# Copy ncurses related dependencies
192654c1fc8SKrishna Kanth Reddy		echo -e "Copying ncurses library dependencies..."
193654c1fc8SKrishna Kanth Reddy
194654c1fc8SKrishna Kanth Reddy		cp ncurses_build/include/ncurses/ncurses.h $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
195654c1fc8SKrishna Kanth Reddy		cp ncurses_build/include/ncurses/curses.h $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
196654c1fc8SKrishna Kanth Reddy		cp -fr ncurses_build/include/ncurses $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
197654c1fc8SKrishna Kanth Reddy		cp ncurses_build/include/ncurses/menu.h $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
198654c1fc8SKrishna Kanth Reddy		cp ncurses_build/include/ncurses/eti.h $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
199654c1fc8SKrishna Kanth Reddy		cp ncurses_build/include/ncurses/panel.h $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
200654c1fc8SKrishna Kanth Reddy		cp ncurses_build/lib/libncurses* $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/
201654c1fc8SKrishna Kanth Reddy		cp ncurses_build/lib/libmenu.a $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/
202654c1fc8SKrishna Kanth Reddy		cp ncurses_build/lib/libpanel.a $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/
203654c1fc8SKrishna Kanth Reddy	else
204654c1fc8SKrishna Kanth Reddy		echo -e "ncurses library already built"
205654c1fc8SKrishna Kanth Reddy	fi
206654c1fc8SKrishna Kanth Reddy
207654c1fc8SKrishna Kanth Reddy}
208654c1fc8SKrishna Kanth Reddy
209654c1fc8SKrishna Kanth Reddy# CUnit
210654c1fc8SKrishna Kanth Reddyfunction cross_compile_cunit() {
211654c1fc8SKrishna Kanth Reddy	cd $CROSS_COMPILE_DIR
212654c1fc8SKrishna Kanth Reddy
213654c1fc8SKrishna Kanth Reddy	# Download cunit library
214654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/CUnit" ]; then
215654c1fc8SKrishna Kanth Reddy		echo -e "Downloading cunit library..."
216654c1fc8SKrishna Kanth Reddy
217654c1fc8SKrishna Kanth Reddy		git clone https://github.com/jacklicn/CUnit.git
218654c1fc8SKrishna Kanth Reddy	else
219654c1fc8SKrishna Kanth Reddy		echo -e "cunit library already downloaded"
220654c1fc8SKrishna Kanth Reddy	fi
221654c1fc8SKrishna Kanth Reddy
222654c1fc8SKrishna Kanth Reddy	if [ ! -d "$CROSS_COMPILE_DIR/CUnit/build" ]; then
223654c1fc8SKrishna Kanth Reddy		cd CUnit
224654c1fc8SKrishna Kanth Reddy
225654c1fc8SKrishna Kanth Reddy		# Build cunit library
226654c1fc8SKrishna Kanth Reddy		echo -e "Building cunit library..."
227654c1fc8SKrishna Kanth Reddy
228654c1fc8SKrishna Kanth Reddy		mkdir build
229654c1fc8SKrishna Kanth Reddy		libtoolize --force
230654c1fc8SKrishna Kanth Reddy		aclocal
231654c1fc8SKrishna Kanth Reddy		autoheader
232654c1fc8SKrishna Kanth Reddy		automake --force-missing --add-missing
233654c1fc8SKrishna Kanth Reddy		autoconf
234654c1fc8SKrishna Kanth Reddy		./configure --host=aarch64-none-linux-gnu --prefix=$CROSS_COMPILE_DIR/CUnit/build
235654c1fc8SKrishna Kanth Reddy		make -j
236654c1fc8SKrishna Kanth Reddy		make -j install
237654c1fc8SKrishna Kanth Reddy
238654c1fc8SKrishna Kanth Reddy		# Copy cunit related dependencies
239654c1fc8SKrishna Kanth Reddy		echo -e "Copying cunit library dependencies..."
240654c1fc8SKrishna Kanth Reddy
241654c1fc8SKrishna Kanth Reddy		cp -fr build/include/CUnit $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
242654c1fc8SKrishna Kanth Reddy		cp build/lib/libcunit.a $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/
243654c1fc8SKrishna Kanth Reddy		cp build/lib/libcunit.so.1.0.1 $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libcunit.so
244654c1fc8SKrishna Kanth Reddy	else
245654c1fc8SKrishna Kanth Reddy		echo -e "cunit library already built"
246654c1fc8SKrishna Kanth Reddy	fi
247654c1fc8SKrishna Kanth Reddy}
248654c1fc8SKrishna Kanth Reddy
249654c1fc8SKrishna Kanth Reddy# ISA-L
250654c1fc8SKrishna Kanth Reddyfunction cross_compile_isal() {
251654c1fc8SKrishna Kanth Reddy	cd $SPDK_DIR
252654c1fc8SKrishna Kanth Reddy
253654c1fc8SKrishna Kanth Reddy	if [ ! -d "$SPDK_DIR/isa-l/build" ]; then
254654c1fc8SKrishna Kanth Reddy		# Build ISA-L library
255654c1fc8SKrishna Kanth Reddy		echo -e "Building ISA-L library..."
256654c1fc8SKrishna Kanth Reddy
257654c1fc8SKrishna Kanth Reddy		cd isa-l
258654c1fc8SKrishna Kanth Reddy		./autogen.sh
259654c1fc8SKrishna Kanth Reddy		mkdir -p build/lib
260654c1fc8SKrishna Kanth Reddy		ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes ./configure --prefix=$SPDK_DIR/isa-l/build --libdir=$SPDK_DIR/isa-l/build/lib --host=aarch64-none-linux-gnu
261654c1fc8SKrishna Kanth Reddy		make -j
262654c1fc8SKrishna Kanth Reddy		make -j install
263654c1fc8SKrishna Kanth Reddy
264654c1fc8SKrishna Kanth Reddy		# Copy ISAL related dependencies
265654c1fc8SKrishna Kanth Reddy		echo -e "Copying ISA-L library dependencies..."
266654c1fc8SKrishna Kanth Reddy
267654c1fc8SKrishna Kanth Reddy		cp -fr build/include/isa-l $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
268654c1fc8SKrishna Kanth Reddy		cp build/include/isa-l.h $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/libc/usr/include/
269654c1fc8SKrishna Kanth Reddy		cp build/lib/libisal.a $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/
270654c1fc8SKrishna Kanth Reddy		cp build/lib/libisal.so.2.0.30 $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/
271654c1fc8SKrishna Kanth Reddy		ln -sf $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libisal.so.2.0.30 $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libisal.so
272654c1fc8SKrishna Kanth Reddy		ln -sf $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libisal.so.2.0.30 $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libisal.so.2
273654c1fc8SKrishna Kanth Reddy	else
274654c1fc8SKrishna Kanth Reddy		echo -e "ISA-L library already built"
275654c1fc8SKrishna Kanth Reddy	fi
276654c1fc8SKrishna Kanth Reddy}
277654c1fc8SKrishna Kanth Reddy
278654c1fc8SKrishna Kanth Reddy# DPDK
279654c1fc8SKrishna Kanth Reddyfunction cross_compile_dpdk() {
280654c1fc8SKrishna Kanth Reddy	cd $DPDK_DIR
281654c1fc8SKrishna Kanth Reddy
282654c1fc8SKrishna Kanth Reddy	if [ ! -d "$DPDK_DIR/build" ]; then
283654c1fc8SKrishna Kanth Reddy		# Build DPDK libraries
284654c1fc8SKrishna Kanth Reddy		echo -e "Building DPDK libraries..."
285654c1fc8SKrishna Kanth Reddy
286654c1fc8SKrishna Kanth Reddy		apt install pkg-config-aarch64-linux-gnu
287654c1fc8SKrishna Kanth Reddy		meson aarch64-build-gcc --cross-file config/arm/arm64_armv8_linux_gcc -Dprefix=$DPDK_DIR/build
288654c1fc8SKrishna Kanth Reddy		ninja -C aarch64-build-gcc
289654c1fc8SKrishna Kanth Reddy		ninja -C aarch64-build-gcc install
290654c1fc8SKrishna Kanth Reddy		cd ..
291654c1fc8SKrishna Kanth Reddy
292654c1fc8SKrishna Kanth Reddy		# Copy DPDK related dependencies
293654c1fc8SKrishna Kanth Reddy		echo -e "Copying DPDK libraries dependencies..."
294654c1fc8SKrishna Kanth Reddy
295654c1fc8SKrishna Kanth Reddy		cp -fr dpdk/build/bin dpdk/aarch64-build-gcc/
296654c1fc8SKrishna Kanth Reddy		cp -fr dpdk/build/include dpdk/aarch64-build-gcc/
297654c1fc8SKrishna Kanth Reddy		cp -fr dpdk/build/share dpdk/aarch64-build-gcc/
298654c1fc8SKrishna Kanth Reddy		cp -fr dpdk/build/lib/* dpdk/aarch64-build-gcc/lib/
299654c1fc8SKrishna Kanth Reddy		cp $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libcrypto.so.3 dpdk/aarch64-build-gcc/lib/
300654c1fc8SKrishna Kanth Reddy		cp $CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/10.2.1/libcrypto.so dpdk/aarch64-build-gcc/lib/
301654c1fc8SKrishna Kanth Reddy	else
302654c1fc8SKrishna Kanth Reddy		echo -e "DPDK libraries already built"
303654c1fc8SKrishna Kanth Reddy	fi
304654c1fc8SKrishna Kanth Reddy}
305654c1fc8SKrishna Kanth Reddy
306654c1fc8SKrishna Kanth Reddy# SPDK
307654c1fc8SKrishna Kanth Reddyfunction cross_compile_spdk() {
308654c1fc8SKrishna Kanth Reddy	cd $SPDK_DIR
309654c1fc8SKrishna Kanth Reddy
310654c1fc8SKrishna Kanth Reddy	# Build SPDK libraries and binaries
311654c1fc8SKrishna Kanth Reddy	echo -e "Building SPDK libraries and binaries..."
312654c1fc8SKrishna Kanth Reddy
313654c1fc8SKrishna Kanth Reddy	CC=aarch64-none-linux-gnu-gcc CXX=aarch64-none-linux-gnu-g++ LD=aarch64-none-linux-gnu-ld CFLAGS+=-I$DPDK_DIR/aarch64-build-gcc/include ./configure --cross-prefix=aarch64-none-linux-gnu --without-vhost --with-dpdk=$DPDK_DIR/aarch64-build-gcc --target-arch=armv8-a
314654c1fc8SKrishna Kanth Reddy
315654c1fc8SKrishna Kanth Reddy	make -j
316654c1fc8SKrishna Kanth Reddy}
317654c1fc8SKrishna Kanth Reddy
318654c1fc8SKrishna Kanth Reddymkdir -p $CROSS_COMPILE_DIR
319654c1fc8SKrishna Kanth Reddy
320654c1fc8SKrishna Kanth Reddyget_cc_toolchain
321654c1fc8SKrishna Kanth Reddy
322654c1fc8SKrishna Kanth Reddycross_compile_packages=(numa uuid crypto_ssl libaio ncurses cunit isal dpdk spdk)
323654c1fc8SKrishna Kanth Reddy
3246e7b3e4cSSebastian Brzezinkafor index in "${cross_compile_packages[@]}"; do
325654c1fc8SKrishna Kanth Reddy	cross_compile_$index
326654c1fc8SKrishna Kanth Reddydone
327