X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=configure;h=19b5ecd9d0d4fd07c3a9a01a1dd6d40dea1c7e4a;hb=HEAD;hp=369adedaab8ce47288eff8ca131ac17b5778caee;hpb=2e5544f3533d619d404d1309678f78b5693feab2;p=vpp.git diff --git a/configure b/configure index 369adedaab8..19b5ecd9d0d 100755 --- 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 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