api: Mark old message versions as deprecated
[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 build_dir=.
9 install_dir=/usr/local
10 build_type=release
11 src_dir="$(dirname "$(readlink -f "$0")")"
12 host_arch=$(uname -m)
13 arch=${host_arch}
14 native_only=no
15 wipe=no
16 args=()
17
18 help()
19 {
20   cat << __EOF__
21 VPP Build Configuration Script
22
23 USAGE: ${0} [options]
24
25 OPTIONS:
26   --help, -h              This help
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)
33   --sanitize, -s          Enable sanitizer (mem)
34 __EOF__
35 }
36
37 while (( "$#" )); do
38   case "$1" in
39     -h|--help)
40       help
41       exit 1
42       ;;
43     -b|--build-dir)
44       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
45         build_dir=$2
46         shift 2
47       else
48         echo "Error: Argument for $1 is missing" >&2
49         exit 1
50       fi
51       ;;
52     -a|--arch)
53       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
54         arch=$2
55         shift 2
56       else
57         echo "Error: Argument for $1 is missing" >&2
58         exit 1
59       fi
60       ;;
61     -i|--install-dir)
62       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
63         install_dir=$2
64         shift 2
65       else
66         echo "Error: Argument for $1 is missing" >&2
67         exit 1
68       fi
69       ;;
70     -t|--build-type)
71       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
72         build_type=$2
73         shift 2
74       else
75         echo "Error: Argument for $1 is missing" >&2
76         exit 1
77       fi
78       ;;
79     -n|--native-only)
80       native_only=yes
81       shift 1
82       ;;
83     -w|--wipe)
84       wipe=yes
85       shift 1
86       ;;
87     -s|--sanitize)
88       shift 1
89       case "$1" in
90         mem)
91           shift 1
92           args+=("-DVPP_ENABLE_SANITIZE_ADDR=ON")
93           ;;
94       esac
95       ;;
96     -*|--*=) # unsupported flags
97       echo "Error: Unsupported flag $1" >&2
98       exit 1
99       ;;
100     *) # preserve positional arguments
101       PARAMS="$PARAMS $1"
102       shift
103       ;;
104   esac
105 done
106
107 if [ "${arch}" != "${host_arch}" ] ; then
108   args+=("-DCMAKE_SYSTEM_NAME=Linux")
109   args+=("-DCMAKE_SYSTEM_PROCESSOR=${arch}")
110   args+=("-DCMAKE_C_COMPILER=clang")
111   args+=("-DCMAKE_C_COMPILER_TARGET=${arch}-linux-gnu")
112   args+=("-DCMAKE_ASM_COMPILER_TARGET=${arch}-linux-gnu")
113   args+=("-DCMAKE_FIND_ROOT_PATH=/usr/${arch}-linux-gnu")
114   args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER")
115   args+=("-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH")
116   args+=("-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH")
117   args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY")
118 fi
119
120 args+=("-DCMAKE_PREFIX_PATH=/opt/vpp/external/${arch}")
121 args+=("-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON")
122 args+=("-DCMAKE_INSTALL_PREFIX=${install_dir}")
123 args+=("-DCMAKE_BUILD_TYPE:STRING=${build_type}")
124 [ "${native_only}" == "yes" ] && args+=("-DVPP_BUILD_NATIVE_ONLY:BOOL=ON")
125
126 [ "${wipe}" == "yes" ] && git clean -fdx --exclude=startup.\*
127
128 cmake ${args[@]} -G Ninja -S ${src_dir}/src -B ${build_dir}
129
130 cat << __EOF__
131
132   Useful build commands:
133
134   ninja                   Build VPP
135   ninja set-build-type-*  Change build type to <debug|release|gcov|...>
136   ninja config            Start build configuration TUI
137   ninja run               Runs VPP using startup.conf in the build directory
138   ninja debug             Runs VPP inside GDB using startup.conf in the build directory
139   ninja pkg-deb           Create .deb packages
140   ninja install           Install VPP to $install_dir
141
142 __EOF__