2 set -o pipefail -o errtrace -o nounset -o errexit
4 # Experimental script, please consult with dmarion@me.com before
5 # submitting any changes
11 src_dir="$(dirname "$(readlink -f "$0")")"
21 VPP Build Configuration Script
27 --arch, -a Cross-compile for specified target architecture (aarch64, riscv64, i386, ...)
28 --build-dir, -b Build directory
29 --install-dir, -i Install directory
30 --build-type, -t Build type (release, debug, ...)
31 --native-only, -n Only compile for Native CPU (no multiarch)
32 --wipe, -w Wipe whole repo (except startup.* files)
43 if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
47 echo "Error: Argument for $1 is missing" >&2
52 if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
56 echo "Error: Argument for $1 is missing" >&2
61 if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
65 echo "Error: Argument for $1 is missing" >&2
70 if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
74 echo "Error: Argument for $1 is missing" >&2
86 -*|--*=) # unsupported flags
87 echo "Error: Unsupported flag $1" >&2
90 *) # preserve positional arguments
97 if [ "${arch}" != "${host_arch}" ] ; then
98 args+=("-DCMAKE_SYSTEM_NAME=Linux")
99 args+=("-DCMAKE_SYSTEM_PROCESSOR=${arch}")
100 args+=("-DCMAKE_C_COMPILER=clang")
101 args+=("-DCMAKE_C_COMPILER_TARGET=${arch}-linux-gnu")
102 args+=("-DCMAKE_ASM_COMPILER_TARGET=${arch}-linux-gnu")
103 args+=("-DCMAKE_FIND_ROOT_PATH=/usr/${arch}-linux-gnu")
104 args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER")
105 args+=("-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH")
106 args+=("-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH")
107 args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY")
110 args+=("-DCMAKE_PREFIX_PATH=/opt/vpp/external/${arch}")
111 args+=("-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON")
112 args+=("-DCMAKE_INSTALL_PREFIX=${install_dir}")
113 args+=("-DCMAKE_BUILD_TYPE:STRING=${build_type}")
114 [ "${native_only}" == "yes" ] && args+=("-DVPP_BUILD_NATIVE_ONLY:BOOL=ON")
116 [ "${wipe}" == "yes" ] && git clean -fdx --exclude=startup.\*
118 cmake ${args[@]} -G Ninja -S ${src_dir}/src -B ${build_dir}
122 Useful build commands:
125 ninja set-build-type-* Change build type to <debug|release|gcov|...>
126 ninja config Start build configuration TUI
127 ninja run Runs VPP using startup.conf in the build directory
128 ninja debug Runs VPP inside GDB using startup.conf in the build directory
129 ninja pkg-deb Create .deb packages
130 ninja install Install VPP to $install_dir