hs-test: fixed timed out tests passing in the CI
[vpp.git] / configure
index 369aded..19b5ecd 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,14 +1,20 @@
 #!/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
+platform=default
 build_dir=.
 install_dir=/usr/local
 build_type=release
-prefix_path=/opt/vpp/external/$(uname -m)/
 src_dir="$(dirname "$(readlink -f "$0")")"
+host_arch=$(uname -m)
+arch=${host_arch}
+native_only=no
+wipe=no
+args=()
 
 help()
 {
@@ -19,10 +25,15 @@ 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)
+  --sanitize, -s          Enable sanitizer (mem)
+  --platform, -p          Specify target platform
+  --option, -o            Enable specific VPP options (fib8, fib16)
 __EOF__
 }
 
@@ -41,6 +52,15 @@ while (( "$#" )); do
         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
@@ -59,9 +79,44 @@ while (( "$#" )); do
         exit 1
       fi
       ;;
+    -p|--platform)
+      if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
+        platform=$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)
-      git clean -fdx --exclude=startup.\*
-      exit 1
+      wipe=yes
+      shift 1
+      ;;
+    -s|--sanitize)
+      shift 1
+      case "$1" in
+       mem)
+         shift 1
+         args+=("-DVPP_ENABLE_SANITIZE_ADDR=ON")
+         ;;
+      esac
+      ;;
+    -o|--option)
+      shift 1
+      case "$1" in
+       fib8)
+         shift 1
+         args+=("-DVPP_IP_FIB_MTRIE_16=OFF")
+         ;;
+       fib16)
+         shift 1
+         args+=("-DVPP_IP_FIB_MTRIE_16=ON")
+         ;;
+      esac
       ;;
     -*|--*=) # unsupported flags
       echo "Error: Unsupported flag $1" >&2
@@ -74,22 +129,37 @@ while (( "$#" )); do
   esac
 done
 
-cmake \
-  -G Ninja \
-  -S ${src_dir}/src \
-  -B ${build_dir} \
-  -DCMAKE_PREFIX_PATH=${prefix_path} \
-  -DCMAKE_INSTALL_PREFIX=${install_dir} \
-  -DCMAKE_BUILD_TYPE:STRING=${build_type}
+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
 
-  cat << __EOF__
+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}")
+args+=("-DVPP_PLATFORM=${platform}")
+[ "${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 compdb            Generate compile_commands.json
   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