sr: use correct reply to sr_policy_add_v2
[vpp.git] / configure
1 #!/usr/bin/env bash
2 set -o pipefail -o errtrace -o nounset -o errexit
3
4 # Experimental script, please consult with dmarion@me.com before
5 # submitting any changes
6
7 # defaults
8 platform=default
9 build_dir=.
10 install_dir=/usr/local
11 build_type=release
12 src_dir="$(dirname "$(readlink -f "$0")")"
13 host_arch=$(uname -m)
14 arch=${host_arch}
15 native_only=no
16 wipe=no
17 args=()
18
19 help()
20 {
21   cat << __EOF__
22 VPP Build Configuration Script
23
24 USAGE: ${0} [options]
25
26 OPTIONS:
27   --help, -h              This help
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
36 __EOF__
37 }
38
39 while (( "$#" )); do
40   case "$1" in
41     -h|--help)
42       help
43       exit 1
44       ;;
45     -b|--build-dir)
46       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
47         build_dir=$2
48         shift 2
49       else
50         echo "Error: Argument for $1 is missing" >&2
51         exit 1
52       fi
53       ;;
54     -a|--arch)
55       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
56         arch=$2
57         shift 2
58       else
59         echo "Error: Argument for $1 is missing" >&2
60         exit 1
61       fi
62       ;;
63     -i|--install-dir)
64       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
65         install_dir=$2
66         shift 2
67       else
68         echo "Error: Argument for $1 is missing" >&2
69         exit 1
70       fi
71       ;;
72     -t|--build-type)
73       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
74         build_type=$2
75         shift 2
76       else
77         echo "Error: Argument for $1 is missing" >&2
78         exit 1
79       fi
80       ;;
81     -p|--platform)
82       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
83         platform=$2
84         shift 2
85       else
86         echo "Error: Argument for $1 is missing" >&2
87         exit 1
88       fi
89       ;;
90     -n|--native-only)
91       native_only=yes
92       shift 1
93       ;;
94     -w|--wipe)
95       wipe=yes
96       shift 1
97       ;;
98     -s|--sanitize)
99       shift 1
100       case "$1" in
101         mem)
102           shift 1
103           args+=("-DVPP_ENABLE_SANITIZE_ADDR=ON")
104           ;;
105       esac
106       ;;
107     -*|--*=) # unsupported flags
108       echo "Error: Unsupported flag $1" >&2
109       exit 1
110       ;;
111     *) # preserve positional arguments
112       PARAMS="$PARAMS $1"
113       shift
114       ;;
115   esac
116 done
117
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")
129 fi
130
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")
137
138 [ "${wipe}" == "yes" ] && git clean -fdx --exclude=startup.\*
139
140 cmake ${args[@]} -G Ninja -S ${src_dir}/src -B ${build_dir}
141
142 cat << __EOF__
143
144   Useful build commands:
145
146   ninja                   Build VPP
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
153
154 __EOF__