ipsec: fix coverity 249212
[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 __EOF__
34 }
35
36 while (( "$#" )); do
37   case "$1" in
38     -h|--help)
39       help
40       exit 1
41       ;;
42     -b|--build-dir)
43       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
44         build_dir=$2
45         shift 2
46       else
47         echo "Error: Argument for $1 is missing" >&2
48         exit 1
49       fi
50       ;;
51     -a|--arch)
52       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
53         arch=$2
54         shift 2
55       else
56         echo "Error: Argument for $1 is missing" >&2
57         exit 1
58       fi
59       ;;
60     -i|--install-dir)
61       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
62         install_dir=$2
63         shift 2
64       else
65         echo "Error: Argument for $1 is missing" >&2
66         exit 1
67       fi
68       ;;
69     -t|--build-type)
70       if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
71         build_type=$2
72         shift 2
73       else
74         echo "Error: Argument for $1 is missing" >&2
75         exit 1
76       fi
77       ;;
78     -n|--native-only)
79       native_only=yes
80       shift 1
81       ;;
82     -w|--wipe)
83       wipe=yes
84       shift 1
85       ;;
86     -*|--*=) # unsupported flags
87       echo "Error: Unsupported flag $1" >&2
88       exit 1
89       ;;
90     *) # preserve positional arguments
91       PARAMS="$PARAMS $1"
92       shift
93       ;;
94   esac
95 done
96
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")
108 fi
109
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")
115
116 [ "${wipe}" == "yes" ] && git clean -fdx --exclude=startup.\*
117
118 cmake ${args[@]} -G Ninja -S ${src_dir}/src -B ${build_dir}
119
120 cat << __EOF__
121
122   Useful build commands:
123
124   ninja                   Build VPP
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
131
132 __EOF__