| #!/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 <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 |
| |
| __EOF__ |