aboutsummaryrefslogtreecommitdiffstats
path: root/configure
diff options
context:
space:
mode:
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure93
1 files changed, 81 insertions, 12 deletions
diff --git a/configure b/configure
index 978b71e5c61..19b5ecd9d0d 100755
--- a/configure
+++ b/configure
@@ -5,11 +5,16 @@ set -o pipefail -o errtrace -o nounset -o errexit
# submitting any changes
# defaults
+platform=default
build_dir=.
install_dir=/usr/local
build_type=release
-prefix_path=/opt/vpp/external/$(uname -m)/
src_dir="$(dirname "$(readlink -f "$0")")"
+host_arch=$(uname -m)
+arch=${host_arch}
+native_only=no
+wipe=no
+args=()
help()
{
@@ -20,10 +25,15 @@ USAGE: ${0} [options]
OPTIONS:
--help, -h This help
+ --arch, -a Cross-compile for specified target architecture (aarch64, riscv64, i386, ...)
--build-dir, -b Build directory
--install-dir, -i Install directory
--build-type, -t Build type (release, debug, ...)
+ --native-only, -n Only compile for Native CPU (no multiarch)
--wipe, -w Wipe whole repo (except startup.* files)
+ --sanitize, -s Enable sanitizer (mem)
+ --platform, -p Specify target platform
+ --option, -o Enable specific VPP options (fib8, fib16)
__EOF__
}
@@ -42,6 +52,15 @@ while (( "$#" )); do
exit 1
fi
;;
+ -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
+ ;;
-i|--install-dir)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
install_dir=$2
@@ -60,9 +79,44 @@ while (( "$#" )); do
exit 1
fi
;;
+ -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
+ ;;
+ -n|--native-only)
+ native_only=yes
+ shift 1
+ ;;
-w|--wipe)
- git clean -fdx --exclude=startup.\*
- exit 1
+ wipe=yes
+ shift 1
+ ;;
+ -s|--sanitize)
+ shift 1
+ case "$1" in
+ mem)
+ shift 1
+ args+=("-DVPP_ENABLE_SANITIZE_ADDR=ON")
+ ;;
+ esac
+ ;;
+ -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
;;
-*|--*=) # unsupported flags
echo "Error: Unsupported flag $1" >&2
@@ -75,16 +129,31 @@ while (( "$#" )); do
esac
done
-cmake \
- -G Ninja \
- -S ${src_dir}/src \
- -B ${build_dir} \
- -DCMAKE_PREFIX_PATH=${prefix_path} \
- -DCMAKE_INSTALL_PREFIX=${install_dir} \
- -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON \
- -DCMAKE_BUILD_TYPE:STRING=${build_type}
+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
- cat << __EOF__
+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}")
+args+=("-DVPP_PLATFORM=${platform}")
+[ "${native_only}" == "yes" ] && args+=("-DVPP_BUILD_NATIVE_ONLY:BOOL=ON")
+
+[ "${wipe}" == "yes" ] && git clean -fdx --exclude=startup.\*
+
+cmake ${args[@]} -G Ninja -S ${src_dir}/src -B ${build_dir}
+
+cat << __EOF__
Useful build commands: