summaryrefslogtreecommitdiffstats
path: root/configure
blob: 29f7dbd32581b660347095551d2c25f0d7948970 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/env bash
set -o pipefail -o errtrace -o nounset -o errexit

# Experimental script, please consult with dmarion@me.com before
# submitting any changes

# defaults
build_dir=.
install_dir=/usr/local
build_type=release
src_dir="$(dirname "$(readlink -f "$0")")"
host_arch=$(uname -m)
arch=${host_arch}
native_only=no
wipe=no
args=()

help()
{
  cat << __EOF__
VPP Build Configuration Script

USAGE: ${0} [options]

OPTIONS:
  --help, -h              This help
  --arch, -a              Cross-compile for specified target architecture (aarch64, riscv64, i386, ...)
  --build-dir, -b         Build directory
  --install-dir, -i       Install directory
  --build-type, -t        Build type (release, debug, ...)
  --native-only, -n       Only compile for Native CPU (no multiarch)
  --wipe, -w              Wipe whole repo (except startup.* files)
__EOF__
}

while (( "$#" )); do
  case "$1" in
    -h|--help)
      help
      exit 1
      ;;
    -b|--build-dir)
      if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
        build_dir=$2
        shift 2
      else
        echo "Error: Argument for $1 is missing" >&2
        exit 1
      fi
      ;;
    -a|--arch)
      if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
	arch=$2
        shift 2
      else
        echo "Error: Argument for $1 is missing" >&2
        exit 1
      fi
      ;;
    -i|--install-dir)
      if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
        install_dir=$2
        shift 2
      else
        echo "Error: Argument for $1 is missing" >&2
        exit 1
      fi
      ;;
    -t|--build-type)
      if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
        build_type=$2
        shift 2
      else
        echo "Error: Argument for $1 is missing" >&2
        exit 1
      fi
      ;;
    -n|--native-only)
      native_only=yes
      shift 1
      ;;
    -w|--wipe)
      wipe=yes
      shift 1
      ;;
    -*|--*=) # unsupported flags
      echo "Error: Unsupported flag $1" >&2
      exit 1
      ;;
    *) # preserve positional arguments
      PARAMS="$PARAMS $1"
      shift
      ;;
  esac
done

if [ "${arch}" != "${host_arch}" ] ; then
  args+=("-DCMAKE_SYSTEM_NAME=Linux")
  args+=("-DCMAKE_SYSTEM_PROCESSOR=${arch}")
  args+=("-DCMAKE_C_COMPILER=clang")
  args+=("-DCMAKE_C_COMPILER_TARGET=${arch}-linux-gnu")
  args+=("-DCMAKE_ASM_COMPILER_TARGET=${arch}-linux-gnu")
  args+=("-DCMAKE_FIND_ROOT_PATH=/usr/${arch}-linux-gnu")
  args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER")
  args+=("-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH")
  args+=("-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH")
  args+=("-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY")
fi

args+=("-DCMAKE_PREFIX_PATH=/opt/vpp/external/${arch}")
args+=("-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON")
args+=("-DCMAKE_INSTALL_PREFIX=${install_dir}")
args+=("-DCMAKE_BUILD_TYPE:STRING=${build_type}")
[ "${native_only}" == "yes" ] && args+=("-DVPP_BUILD_NATIVE_ONLY:BOOL=ON")

[ "${wipe}" == "yes" ] && git clean -fdx --exclude=startup.\*

cmake ${args[@]} -G Ninja -S ${src_dir}/src -B ${build_dir}

cat << __EOF__

  Useful build commands:

  ninja                   Build VPP
  ninja set-build-type-*  Change build type to <debug|release|gcov|...>
  ninja config            Start build configuration TUI
  ninja run               Runs VPP using startup.conf in the build directory
  ninja debug             Runs VPP inside GDB using startup.conf in the build directory
  ninja pkg-deb           Create .deb packages
  ninja install           Install VPP to $install_dir

__EOF__
> fib_proto, u32 fib_index); u32 session_lookup_get_or_alloc_index_for_fib (u32 fib_proto, u32 fib_index); void session_lookup_show_table_entries (vlib_main_t * vm, session_table_t * table, u8 type, u8 is_local); void session_lookup_dump_rules_table (u32 fib_index, u8 fib_proto, u8 transport_proto); void session_lookup_dump_local_rules_table (u32 fib_index, u8 fib_proto, u8 transport_proto); typedef enum _session_rule_scope { SESSION_RULE_SCOPE_GLOBAL = 1, SESSION_RULE_SCOPE_LOCAL = 2, } session_rule_scope_e; typedef struct _session_rule_add_del_args { /** * Actual arguments to adding the rule to a session rules table */ session_rule_table_add_del_args_t table_args; /** * Application namespace where rule should be applied. If 0, * default namespace is used. */ u32 appns_index; /** * Rule scope flag. */ u8 scope; /** * Transport protocol for the rule */ u8 transport_proto; } session_rule_add_del_args_t; int vnet_session_rule_add_del (session_rule_add_del_args_t * args); void session_lookup_set_tables_appns (app_namespace_t * app_ns); void session_lookup_init (void); #endif /* SRC_VNET_SESSION_SESSION_LOOKUP_H_ */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */