2 set -o pipefail -o errtrace -o nounset -o errexit
4 # Experimental script, please consult with dmarion@me.com before
5 # submitting any changes
10 install_dir=/usr/local
12 src_dir="$(dirname "$(readlink -f "$0")")"
22 VPP Build Configuration Script
28 --arch, -a Cross-compile for specified target architecture (aarch64, riscv64, i386, ...)
29 --build-dir, -b Build directory
30 --install-dir, -i Install directory
31 --build-type, -t Build type (release, debug, ...)
32 --native-only, -n Only compile for Native CPU (no multiarch)
33 --wipe, -w Wipe whole repo (except startup.* files)
34 --sanitize, -s Enable sanitizer (mem)
35 --platform, -p Specify target platform
46 if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
50 echo "Error: Argument for $1 is missing" >&2
55 if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
59 echo "Error: Argument for $1 is missing" >&2
64 if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
68 echo "Error: Argument for $1 is missing" >&2
73 if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
77 echo "Error: Argument for $1 is missing" >&2
82 if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
86 echo "Error: Argument for $1 is missing" >&2
103 args+=("-DVPP_ENABLE_SANITIZE_ADDR=ON")
107 -*|--*=) # unsupported flags
108 echo "Error: Unsupported flag $1" >&2
111 *) # preserve positional arguments
118 if [ "${arch}" != "${host_arch}" ] ; then
119 args+=("-DCMAKE_SYSTEM_NAME=Linux")
120 args+=("-DCMAKE_SYSTEM_PROCESSOR=${arch}")
121 args+=("-DCMAKE_C_COMPILER=clang")
122 args+=("-DCMAKE_C_COMPILER_TARGET=${arch}-linux-gnu")
123 args+=("-DCMAKE_ASM_COMPILER_TARGET=${arch}-linux-gnu")
124 args+=("-DCMAKE_FIND_ROOT_PATH=/usr/${arch}-linux-gnu")
125 args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER")
126 args+=("-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH")
127 args+=("-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH")
128 args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY")
131 args+=("-DCMAKE_PREFIX_PATH=/opt/vpp/external/${arch}")
132 args+=("-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON")
133 args+=("-DCMAKE_INSTALL_PREFIX=${install_dir}")
134 args+=("-DCMAKE_BUILD_TYPE:STRING=${build_type}")
135 args+=("-DVPP_PLATFORM=${platform}")
136 [ "${native_only}" == "yes" ] && args+=("-DVPP_BUILD_NATIVE_ONLY:BOOL=ON")
138 [ "${wipe}" == "yes" ] && git clean -fdx --exclude=startup.\*
140 cmake ${args[@]} -G Ninja -S ${src_dir}/src -B ${build_dir}
144 Useful build commands:
147 ninja set-build-type-* Change build type to <debug|release|gcov|...>
148 ninja config Start build configuration TUI
149 ninja run Runs VPP using startup.conf in the build directory
150 ninja debug Runs VPP inside GDB using startup.conf in the build directory
151 ninja pkg-deb Create .deb packages
152 ninja install Install VPP to $install_dir