2021-04-29 18:47:25 +02:00
|
|
|
#!/usr/bin/env bash
|
2021-05-28 17:32:58 +02:00
|
|
|
set -o pipefail -o errtrace -o nounset -o errexit
|
2021-04-29 18:47:25 +02:00
|
|
|
|
|
|
|
# Experimental script, please consult with dmarion@me.com before
|
|
|
|
# submitting any changes
|
|
|
|
|
|
|
|
# defaults
|
2023-10-23 18:36:18 +02:00
|
|
|
platform=default
|
2021-04-29 18:47:25 +02:00
|
|
|
build_dir=.
|
|
|
|
install_dir=/usr/local
|
|
|
|
build_type=release
|
2021-05-04 11:34:37 +02:00
|
|
|
src_dir="$(dirname "$(readlink -f "$0")")"
|
2021-10-31 19:47:23 +01:00
|
|
|
host_arch=$(uname -m)
|
|
|
|
arch=${host_arch}
|
2022-04-25 12:38:40 +02:00
|
|
|
native_only=no
|
2021-10-31 19:47:23 +01:00
|
|
|
wipe=no
|
|
|
|
args=()
|
2021-04-29 18:47:25 +02:00
|
|
|
|
|
|
|
help()
|
|
|
|
{
|
|
|
|
cat << __EOF__
|
|
|
|
VPP Build Configuration Script
|
|
|
|
|
|
|
|
USAGE: ${0} [options]
|
|
|
|
|
|
|
|
OPTIONS:
|
|
|
|
--help, -h This help
|
2021-10-31 19:47:23 +01:00
|
|
|
--arch, -a Cross-compile for specified target architecture (aarch64, riscv64, i386, ...)
|
2021-04-29 18:47:25 +02:00
|
|
|
--build-dir, -b Build directory
|
|
|
|
--install-dir, -i Install directory
|
2021-05-04 09:37:56 +02:00
|
|
|
--build-type, -t Build type (release, debug, ...)
|
2022-04-25 12:38:40 +02:00
|
|
|
--native-only, -n Only compile for Native CPU (no multiarch)
|
2021-04-29 18:47:25 +02:00
|
|
|
--wipe, -w Wipe whole repo (except startup.* files)
|
2022-10-11 10:09:55 +02:00
|
|
|
--sanitize, -s Enable sanitizer (mem)
|
2023-10-23 18:36:18 +02:00
|
|
|
--platform, -p Specify target platform
|
2024-02-08 17:06:22 +01:00
|
|
|
--option, -o Enable specific VPP options (fib8, fib16)
|
2021-04-29 18:47:25 +02:00
|
|
|
__EOF__
|
|
|
|
}
|
|
|
|
|
|
|
|
while (( "$#" )); do
|
|
|
|
case "$1" in
|
|
|
|
-h|--help)
|
|
|
|
help
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
-b|--build-dir)
|
|
|
|
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
|
|
|
|
build_dir=$2
|
|
|
|
shift 2
|
|
|
|
else
|
|
|
|
echo "Error: Argument for $1 is missing" >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
2021-10-31 19:47:23 +01:00
|
|
|
-a|--arch)
|
|
|
|
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
|
|
|
|
arch=$2
|
|
|
|
shift 2
|
|
|
|
else
|
|
|
|
echo "Error: Argument for $1 is missing" >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
2021-04-29 18:47:25 +02:00
|
|
|
-i|--install-dir)
|
|
|
|
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
|
|
|
|
install_dir=$2
|
|
|
|
shift 2
|
|
|
|
else
|
|
|
|
echo "Error: Argument for $1 is missing" >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
-t|--build-type)
|
|
|
|
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
|
|
|
|
build_type=$2
|
|
|
|
shift 2
|
|
|
|
else
|
|
|
|
echo "Error: Argument for $1 is missing" >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
2023-10-23 18:36:18 +02:00
|
|
|
-p|--platform)
|
|
|
|
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
|
|
|
|
platform=$2
|
|
|
|
shift 2
|
|
|
|
else
|
|
|
|
echo "Error: Argument for $1 is missing" >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
2022-04-25 12:38:40 +02:00
|
|
|
-n|--native-only)
|
|
|
|
native_only=yes
|
|
|
|
shift 1
|
|
|
|
;;
|
2021-04-29 18:47:25 +02:00
|
|
|
-w|--wipe)
|
2021-10-31 19:47:23 +01:00
|
|
|
wipe=yes
|
|
|
|
shift 1
|
2021-04-29 18:47:25 +02:00
|
|
|
;;
|
2022-10-11 10:09:55 +02:00
|
|
|
-s|--sanitize)
|
|
|
|
shift 1
|
|
|
|
case "$1" in
|
|
|
|
mem)
|
|
|
|
shift 1
|
|
|
|
args+=("-DVPP_ENABLE_SANITIZE_ADDR=ON")
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
;;
|
2024-02-08 17:06:22 +01:00
|
|
|
-o|--option)
|
|
|
|
shift 1
|
|
|
|
case "$1" in
|
|
|
|
fib8)
|
|
|
|
shift 1
|
|
|
|
args+=("-DVPP_IP_FIB_MTRIE_16=OFF")
|
|
|
|
;;
|
|
|
|
fib16)
|
|
|
|
shift 1
|
|
|
|
args+=("-DVPP_IP_FIB_MTRIE_16=ON")
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
;;
|
2021-04-29 18:47:25 +02:00
|
|
|
-*|--*=) # unsupported flags
|
|
|
|
echo "Error: Unsupported flag $1" >&2
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
*) # preserve positional arguments
|
|
|
|
PARAMS="$PARAMS $1"
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2021-10-31 19:47:23 +01:00
|
|
|
if [ "${arch}" != "${host_arch}" ] ; then
|
|
|
|
args+=("-DCMAKE_SYSTEM_NAME=Linux")
|
|
|
|
args+=("-DCMAKE_SYSTEM_PROCESSOR=${arch}")
|
|
|
|
args+=("-DCMAKE_C_COMPILER=clang")
|
|
|
|
args+=("-DCMAKE_C_COMPILER_TARGET=${arch}-linux-gnu")
|
|
|
|
args+=("-DCMAKE_ASM_COMPILER_TARGET=${arch}-linux-gnu")
|
|
|
|
args+=("-DCMAKE_FIND_ROOT_PATH=/usr/${arch}-linux-gnu")
|
|
|
|
args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER")
|
|
|
|
args+=("-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH")
|
|
|
|
args+=("-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH")
|
|
|
|
args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY")
|
|
|
|
fi
|
2021-04-29 18:47:25 +02:00
|
|
|
|
2021-10-31 19:47:23 +01:00
|
|
|
args+=("-DCMAKE_PREFIX_PATH=/opt/vpp/external/${arch}")
|
|
|
|
args+=("-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON")
|
|
|
|
args+=("-DCMAKE_INSTALL_PREFIX=${install_dir}")
|
|
|
|
args+=("-DCMAKE_BUILD_TYPE:STRING=${build_type}")
|
2023-10-23 18:36:18 +02:00
|
|
|
args+=("-DVPP_PLATFORM=${platform}")
|
2022-04-25 12:38:40 +02:00
|
|
|
[ "${native_only}" == "yes" ] && args+=("-DVPP_BUILD_NATIVE_ONLY:BOOL=ON")
|
2021-10-31 19:47:23 +01:00
|
|
|
|
|
|
|
[ "${wipe}" == "yes" ] && git clean -fdx --exclude=startup.\*
|
|
|
|
|
|
|
|
cmake ${args[@]} -G Ninja -S ${src_dir}/src -B ${build_dir}
|
|
|
|
|
|
|
|
cat << __EOF__
|
2021-04-29 18:47:25 +02:00
|
|
|
|
|
|
|
Useful build commands:
|
|
|
|
|
2021-05-03 12:40:27 +02:00
|
|
|
ninja Build VPP
|
|
|
|
ninja set-build-type-* Change build type to <debug|release|gcov|...>
|
|
|
|
ninja config Start build configuration TUI
|
|
|
|
ninja run Runs VPP using startup.conf in the build directory
|
|
|
|
ninja debug Runs VPP inside GDB using startup.conf in the build directory
|
|
|
|
ninja pkg-deb Create .deb packages
|
|
|
|
ninja install Install VPP to $install_dir
|
2021-04-29 18:47:25 +02:00
|
|
|
|
|
|
|
__EOF__
|