per Intel policy to include file commit date using git cmd below. The policy does not apply to non-Intel (C) notices. git log --follow -C90% --format=%ad --date default <file> | tail -1 and then pull just the year from the result. Intel copyrights were not added to files where Intel either had no contribution ot the contribution lacked substance (ie license header updates, formatting changes, etc) For intel copyrights added, --follow and -C95% were used. Signed-off-by: paul luse <paul.e.luse@intel.com> Change-Id: I2ef86976095b88a9bf5b1003e59f3943cd6bbe4c Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15209 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
327 lines
12 KiB
Bash
Executable File
327 lines
12 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
# All rights reserved.
|
|
#
|
|
|
|
# exit on errors
|
|
set -e
|
|
|
|
ROOT_DIR=$(readlink -f $(dirname $0))/../..
|
|
export CROSS_COMPILE_DIR=$ROOT_DIR/cross_compiling
|
|
export SPDK_DIR=$ROOT_DIR/spdk
|
|
export DPDK_DIR=$SPDK_DIR/dpdk
|
|
|
|
# Get Toolchain
|
|
function get_cc_toolchain() {
|
|
cd $CROSS_COMPILE_DIR
|
|
|
|
if [ ! -d "$CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu" ]; then
|
|
echo -e "Getting ARM Cross Compiler Toolchain..."
|
|
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
|
|
tar xvf gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
|
|
else
|
|
echo -e "ARM Cross Compiler Toolchain already downloaded"
|
|
fi
|
|
|
|
export PATH=$PATH:$CROSS_COMPILE_DIR/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin
|
|
}
|
|
|
|
# NUMA
|
|
function cross_compile_numa() {
|
|
cd $CROSS_COMPILE_DIR
|
|
|
|
# Download NUMA library
|
|
if [ ! -d "$CROSS_COMPILE_DIR/numactl" ]; then
|
|
echo -e "Downloading NUMA library..."
|
|
git clone https://github.com/numactl/numactl.git
|
|
cd numactl/
|
|
git checkout v2.0.13 -b v2.0.13
|
|
else
|
|
echo -e "NUMA library already downloaded"
|
|
cd numactl/
|
|
fi
|
|
|
|
# Build NUMA library
|
|
if [ ! -d "$CROSS_COMPILE_DIR/numactl/build" ]; then
|
|
echo -e "Building NUMA library..."
|
|
./autogen.sh
|
|
autoconf -i
|
|
mkdir build
|
|
./configure --host=aarch64-none-linux-gnu CC=aarch64-none-linux-gnu-gcc --prefix=$CROSS_COMPILE_DIR/numactl/build
|
|
make -j install
|
|
|
|
# Copy NUMA related dependencies
|
|
echo -e "Copying NUMA library dependencies..."
|
|
|
|
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/
|
|
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/
|
|
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/
|
|
else
|
|
echo -e "NUMA library already built"
|
|
fi
|
|
}
|
|
|
|
# util-linux UUID
|
|
function cross_compile_uuid() {
|
|
cd $CROSS_COMPILE_DIR
|
|
|
|
# Download util-linux UUID library
|
|
if [ ! -d "$CROSS_COMPILE_DIR/util-linux" ]; then
|
|
echo -e "Downloading util-linux UUID library..."
|
|
git clone https://github.com/karelzak/util-linux.git
|
|
else
|
|
echo -e "util-linux UUID library already downloaded"
|
|
fi
|
|
|
|
if [ ! -d "$CROSS_COMPILE_DIR/util-linux/.libs" ]; then
|
|
cd util-linux/
|
|
|
|
# Build util-linux UUID library
|
|
echo -e "Building util-linux UUID library..."
|
|
|
|
./autogen.sh
|
|
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
|
|
make clean
|
|
make -j
|
|
|
|
# Copy util-linux UUID related dependencies
|
|
echo -e "Copying util-linux UUID library dependencies..."
|
|
|
|
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
|
|
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/
|
|
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/
|
|
else
|
|
echo -e "util-linux UUID library already built"
|
|
fi
|
|
}
|
|
|
|
# Openssl Crypto and SSL
|
|
function cross_compile_crypto_ssl() {
|
|
cd $CROSS_COMPILE_DIR
|
|
|
|
# Download Openssl Crypto and SSL libraries
|
|
if [ ! -d "$CROSS_COMPILE_DIR/openssl" ]; then
|
|
echo -e "Downloading Openssl Crypto and SSL libraries..."
|
|
git clone https://github.com/openssl/openssl.git
|
|
else
|
|
echo -e "Openssl Crypto and SSL libraries already downloaded"
|
|
fi
|
|
|
|
if [ ! -d "$CROSS_COMPILE_DIR/openssl/build" ]; then
|
|
cd openssl
|
|
|
|
# Build Openssl Crypto and SSL libraries
|
|
echo -e "Building Openssl Crypto and SSL libraries..."
|
|
|
|
mkdir build
|
|
./Configure linux-aarch64 --prefix=$CROSS_COMPILE_DIR/openssl/build --cross-compile-prefix=aarch64-none-linux-gnu-
|
|
make -j
|
|
make -j install
|
|
|
|
# Copy Openssl Crypto and SSL related dependencies
|
|
echo -e "Copying Openssl Crypto and SSL libraries dependencies..."
|
|
|
|
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/
|
|
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
|
|
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
|
|
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
|
|
else
|
|
echo -e "Openssl Crypto and SSL libraries already built"
|
|
fi
|
|
}
|
|
|
|
# Libaio
|
|
function cross_compile_libaio() {
|
|
cd $CROSS_COMPILE_DIR
|
|
|
|
# Download libaio library
|
|
if [ ! -d "$CROSS_COMPILE_DIR/libaio" ]; then
|
|
echo -e "Downloading libaio library..."
|
|
|
|
wget https://ftp.debian.org/debian/pool/main/liba/libaio/libaio_0.3.112.orig.tar.xz --no-check-certificate
|
|
tar xvf libaio_0.3.112.orig.tar.xz
|
|
mv libaio-0.3.112 libaio
|
|
else
|
|
echo -e "libaio library already downloaded"
|
|
fi
|
|
|
|
if [ ! -d "$CROSS_COMPILE_DIR/libaio/build" ]; then
|
|
cd libaio
|
|
|
|
# Build libaio library
|
|
echo -e "Building libaio library..."
|
|
|
|
mkdir build
|
|
CC=aarch64-none-linux-gnu-gcc CXX=aarch64-none-linux-gnu-g++ LD=aarch64-none-linux-gnu-ld make -j
|
|
make -j install DESTDIR=$CROSS_COMPILE_DIR/libaio/build
|
|
|
|
# Copy libaio related dependencies
|
|
echo -e "Copying libaio library dependencies..."
|
|
|
|
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/
|
|
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
|
|
else
|
|
echo -e "libaio library already built"
|
|
fi
|
|
}
|
|
|
|
# Ncurses
|
|
function cross_compile_ncurses() {
|
|
cd $CROSS_COMPILE_DIR
|
|
|
|
# Download ncurses library
|
|
if [ ! -d "$CROSS_COMPILE_DIR/ncurses" ]; then
|
|
echo -e "Downloading ncurses library..."
|
|
|
|
wget https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.2.tar.gz --no-check-certificate
|
|
tar xvf ncurses-6.2.tar.gz
|
|
mv ncurses-6.2 ncurses
|
|
else
|
|
echo -e "ncurses library already downloaded"
|
|
fi
|
|
|
|
if [ ! -d "$CROSS_COMPILE_DIR/ncurses_build" ]; then
|
|
mkdir ncurses_build
|
|
|
|
# Build ncurses library
|
|
echo -e "Building ncurses library..."
|
|
|
|
(cd ncurses && ./configure --host=aarch64-none-linux-gnu --prefix=$CROSS_COMPILE_DIR/ncurses_build --disable-stripping && make -j install)
|
|
|
|
# Copy ncurses related dependencies
|
|
echo -e "Copying ncurses library dependencies..."
|
|
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
else
|
|
echo -e "ncurses library already built"
|
|
fi
|
|
|
|
}
|
|
|
|
# CUnit
|
|
function cross_compile_cunit() {
|
|
cd $CROSS_COMPILE_DIR
|
|
|
|
# Download cunit library
|
|
if [ ! -d "$CROSS_COMPILE_DIR/CUnit" ]; then
|
|
echo -e "Downloading cunit library..."
|
|
|
|
git clone https://github.com/jacklicn/CUnit.git
|
|
else
|
|
echo -e "cunit library already downloaded"
|
|
fi
|
|
|
|
if [ ! -d "$CROSS_COMPILE_DIR/CUnit/build" ]; then
|
|
cd CUnit
|
|
|
|
# Build cunit library
|
|
echo -e "Building cunit library..."
|
|
|
|
mkdir build
|
|
libtoolize --force
|
|
aclocal
|
|
autoheader
|
|
automake --force-missing --add-missing
|
|
autoconf
|
|
./configure --host=aarch64-none-linux-gnu --prefix=$CROSS_COMPILE_DIR/CUnit/build
|
|
make -j
|
|
make -j install
|
|
|
|
# Copy cunit related dependencies
|
|
echo -e "Copying cunit library dependencies..."
|
|
|
|
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/
|
|
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/
|
|
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
|
|
else
|
|
echo -e "cunit library already built"
|
|
fi
|
|
}
|
|
|
|
# ISA-L
|
|
function cross_compile_isal() {
|
|
cd $SPDK_DIR
|
|
|
|
if [ ! -d "$SPDK_DIR/isa-l/build" ]; then
|
|
# Build ISA-L library
|
|
echo -e "Building ISA-L library..."
|
|
|
|
cd isa-l
|
|
./autogen.sh
|
|
mkdir -p build/lib
|
|
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
|
|
make -j
|
|
make -j install
|
|
|
|
# Copy ISAL related dependencies
|
|
echo -e "Copying ISA-L library dependencies..."
|
|
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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
|
|
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
|
|
else
|
|
echo -e "ISA-L library already built"
|
|
fi
|
|
}
|
|
|
|
# DPDK
|
|
function cross_compile_dpdk() {
|
|
cd $DPDK_DIR
|
|
|
|
if [ ! -d "$DPDK_DIR/build" ]; then
|
|
# Build DPDK libraries
|
|
echo -e "Building DPDK libraries..."
|
|
|
|
apt install pkg-config-aarch64-linux-gnu
|
|
meson aarch64-build-gcc --cross-file config/arm/arm64_armv8_linux_gcc -Dprefix=$DPDK_DIR/build
|
|
ninja -C aarch64-build-gcc
|
|
ninja -C aarch64-build-gcc install
|
|
cd ..
|
|
|
|
# Copy DPDK related dependencies
|
|
echo -e "Copying DPDK libraries dependencies..."
|
|
|
|
cp -fr dpdk/build/bin dpdk/aarch64-build-gcc/
|
|
cp -fr dpdk/build/include dpdk/aarch64-build-gcc/
|
|
cp -fr dpdk/build/share dpdk/aarch64-build-gcc/
|
|
cp -fr dpdk/build/lib/* dpdk/aarch64-build-gcc/lib/
|
|
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/
|
|
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/
|
|
else
|
|
echo -e "DPDK libraries already built"
|
|
fi
|
|
}
|
|
|
|
# SPDK
|
|
function cross_compile_spdk() {
|
|
cd $SPDK_DIR
|
|
|
|
# Build SPDK libraries and binaries
|
|
echo -e "Building SPDK libraries and binaries..."
|
|
|
|
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
|
|
|
|
make -j
|
|
}
|
|
|
|
mkdir -p $CROSS_COMPILE_DIR
|
|
|
|
get_cc_toolchain
|
|
|
|
cross_compile_packages=(numa uuid crypto_ssl libaio ncurses cunit isal dpdk spdk)
|
|
|
|
for index in "${cross_compile_packages[@]}"; do
|
|
cross_compile_$index
|
|
done
|