#!/usr/bin/env bash set -o pipefail -o errtrace -o nounset -o errexit # Experimental script, please consult with dmarion@me.com before # submitting any changes # defaults build_dir=. install_dir=/usr/local build_type=release prefix_path=/opt/vpp/external/$(uname -m)/ src_dir="$(dirname "$(readlink -f "$0")")" help() { cat << __EOF__ VPP Build Configuration Script USAGE: ${0} [options] OPTIONS: --help, -h This help --build-dir, -b Build directory --install-dir, -i Install directory --build-type, -t Build type (release, debug, ...) --wipe, -w Wipe whole repo (except startup.* files) __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 ;; -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 ;; -w|--wipe) git clean -fdx --exclude=startup.\* exit 1 ;; -*|--*=) # unsupported flags echo "Error: Unsupported flag $1" >&2 exit 1 ;; *) # preserve positional arguments PARAMS="$PARAMS $1" shift ;; 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} cat << __EOF__ Useful build commands: ninja Build VPP ninja set-build-type-* Change build type to 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 __EOF__