summaryrefslogtreecommitdiffstats
path: root/src/spdk/configure
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/spdk/configure
parentInitial commit. (diff)
downloadceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.tar.xz
ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.zip
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/spdk/configure')
-rwxr-xr-xsrc/spdk/configure404
1 files changed, 404 insertions, 0 deletions
diff --git a/src/spdk/configure b/src/spdk/configure
new file mode 100755
index 00000000..41377132
--- /dev/null
+++ b/src/spdk/configure
@@ -0,0 +1,404 @@
+#!/usr/bin/env bash
+
+set -e
+
+trap 'echo -e "\n\nConfiguration failed\n\n" >&2' ERR
+
+function usage()
+{
+ echo "'configure' configures SPDK to compile on supported platforms."
+ echo ""
+ echo "Usage: ./configure [OPTION]..."
+ echo ""
+ echo "Defaults for the options are specified in brackets."
+ echo ""
+ echo "General:"
+ echo " -h, --help Display this help and exit"
+ echo ""
+ echo " --prefix=path Configure installation prefix (default: /usr/local)"
+ echo ""
+ echo " --enable-debug Configure for debug builds"
+ echo " --enable-log-bt Enable support of backtrace printing in SPDK logs (requires libunwind)."
+ echo " --enable-werror Treat compiler warnings as errors"
+ echo " --enable-asan Enable address sanitizer"
+ echo " --enable-ubsan Enable undefined behavior sanitizer"
+ echo " --enable-coverage Enable code coverage tracking"
+ echo " --enable-lto Enable link-time optimization"
+ echo " --disable-tests Disable building of tests"
+ echo " --with-env=path Use an alternate environment implementation"
+ echo ""
+ echo "Specifying Dependencies:"
+ echo "--with-DEPENDENCY[=path] Use the given dependency. Optionally, provide the"
+ echo " path."
+ echo "--without-DEPENDENCY Do not link to the given dependency. This may"
+ echo " disable features and components."
+ echo ""
+ echo "Valid dependencies are listed below."
+ echo " crypto Required to build vbdev crypto module."
+ echo " No path required."
+ echo " dpdk Optional. Uses dpdk submodule in spdk tree if not specified."
+ echo " example: /usr/share/dpdk/x86_64-default-linuxapp-gcc"
+ echo " fio Required to build fio_plugin."
+ echo " example: /usr/src/fio"
+ echo " igb-uio-driver Required on some systems to use qat devices"
+ echo " No path required"
+ echo " vhost Required to build vhost target."
+ echo " No path required."
+ echo " virtio Required to build vhost initiator (Virtio) bdev module."
+ echo " No path required."
+ echo " pmdk Required to build persistent memory bdev."
+ echo " example: /usr/share/pmdk"
+ echo " vpp Required to build VPP net module."
+ echo " example: /vpp_repo/build-root/install-vpp-native/vpp"
+ echo " rbd [disabled]"
+ echo " No path required."
+ echo " rdma [disabled]"
+ echo " No path required."
+ echo " shared Required to build spdk shared libraries."
+ echo " No path required."
+ echo " iscsi-initiator [disabled]"
+ echo " No path required."
+ echo " vtune Required to profile I/O under Intel VTune Amplifier XE."
+ echo " example: /opt/intel/vtune_amplifier_xe_version"
+ echo ""
+ echo "Environment variables:"
+ echo ""
+ echo "CFLAGS C compiler flags"
+ echo "CXXFLAGS C++ compiler flags"
+ echo "LDFLAGS Linker flags"
+ echo "DESTDIR Destination for 'make install'"
+ echo ""
+}
+
+# Load default values
+# Convert config to sourcable configuration file
+sed -r 's/CONFIG_([[:alnum:]_]+)=(.*)/CONFIG[\1]=\2/g' CONFIG > CONFIG.sh
+declare -A CONFIG
+source CONFIG.sh
+rm CONFIG.sh
+
+
+function check_dir() {
+ arg="$1"
+ dir="${arg#*=}"
+ if [ ! -d "$dir" ]; then
+ echo "$arg: directory not found"
+ exit 1
+ fi
+}
+
+for i in "$@"; do
+ case "$i" in
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ --prefix=*)
+ CONFIG[PREFIX]="${i#*=}"
+ ;;
+ --enable-debug)
+ CONFIG[DEBUG]=y
+ ;;
+ --disable-debug)
+ CONFIG[DEBUG]=n
+ ;;
+ --enable-log-bt)
+ CONFIG[LOG_BACKTRACE]=y
+ ;;
+ --disable-log-bt)
+ CONFIG[LOG_BACKTRACE]=n
+ ;;
+ --enable-asan)
+ CONFIG[ASAN]=y
+ ;;
+ --disable-asan)
+ CONFIG[ASAN]=n
+ ;;
+ --enable-ubsan)
+ CONFIG[UBSAN]=y
+ ;;
+ --disable-ubsan)
+ CONFIG[UBSAN]=n
+ ;;
+ --enable-tsan)
+ CONFIG[TSAN]=y
+ ;;
+ --disable-tsan)
+ CONFIG[TSAN]=n
+ ;;
+ --enable-coverage)
+ CONFIG[COVERAGE]=y
+ ;;
+ --disable-coverage)
+ CONFIG[COVERAGE]=n
+ ;;
+ --enable-lto)
+ CONFIG[LTO]=y
+ ;;
+ --disable-lto)
+ CONFIG[LTO]=n
+ ;;
+ --enable-tests)
+ CONFIG[TESTS]=y
+ ;;
+ --disable-tests)
+ CONFIG[TESTS]=n
+ ;;
+ --enable-werror)
+ CONFIG[WERROR]=y
+ ;;
+ --disable-werror)
+ CONFIG[WERROR]=n
+ ;;
+ --with-env=*)
+ CONFIG[ENV]="${i#*=}"
+ ;;
+ --with-rbd)
+ CONFIG[RBD]=y
+ ;;
+ --without-rbd)
+ CONFIG[RBD]=n
+ ;;
+ --with-raid)
+ echo "--with-raid option ignored and is now deprecated. RAID module is always enabled."
+ ;;
+ --without-raid)
+ echo "--without-raid option ignored and is now deprecated. RAID module is always enabled."
+ ;;
+ --with-rdma)
+ CONFIG[RDMA]=y
+ ;;
+ --without-rdma)
+ CONFIG[RDMA]=n
+ ;;
+ --with-shared)
+ CONFIG[SHARED]=y
+ ;;
+ --without-shared)
+ CONFIG[SHARED]=n
+ ;;
+ --with-iscsi-initiator)
+ CONFIG[ISCSI_INITIATOR]=y
+ ;;
+ --without-iscsi-initiator)
+ CONFIG[ISCSI_INITIATOR]=n
+ ;;
+ --with-dpdk=*)
+ check_dir "$i"
+ CONFIG[DPDK_DIR]=$(readlink -f ${i#*=})
+ ;;
+ --without-dpdk)
+ CONFIG[DPDK_DIR]=
+ ;;
+ --with-crypto)
+ CONFIG[CRYPTO]=y
+ ;;
+ --without-crypto)
+ CONFIG[CRYPTO]=n
+ ;;
+ --with-vhost)
+ CONFIG[VHOST]=y
+ ;;
+ --without-vhost)
+ CONFIG[VHOST]=n
+ ;;
+ --with-virtio)
+ CONFIG[VIRTIO]=y
+ ;;
+ --without-virtio)
+ CONFIG[VIRTIO]=n
+ ;;
+ --with-pmdk)
+ CONFIG[PMDK]=y
+ CONFIG[PMDK_DIR]=""
+ ;;
+ --with-pmdk=*)
+ CONFIG[PMDK]=y
+ check_dir "$i"
+ CONFIG[PMDK_DIR]=$(readlink -f ${i#*=})
+ ;;
+ --without-pmdk)
+ CONFIG[PMDK]=n
+ ;;
+ --with-vpp)
+ CONFIG[VPP]=y
+ ;;
+ --with-vpp=*)
+ CONFIG[VPP]=y
+ check_dir "$i"
+ CONFIG[VPP_DIR]=$(readlink -f ${i#*=})
+ ;;
+ --without-vpp)
+ CONFIG[VPP]=n
+ ;;
+ --with-fio=*)
+ check_dir "$i"
+ CONFIG[FIO_SOURCE_DIR]="${i#*=}"
+ CONFIG[FIO_PLUGIN]=y
+ ;;
+ --without-fio)
+ CONFIG[FIO_SOURCE_DIR]=
+ CONFIG[FIO_PLUGIN]=n
+ ;;
+ --with-vtune=*)
+ check_dir "$i"
+ CONFIG[VTUNE_DIR]="${i#*=}"
+ CONFIG[VTUNE]=y
+ ;;
+ --without-vtune)
+ CONFIG[VTUNE_DIR]=
+ CONFIG[VTUNE]=n
+ ;;
+ --with-igb-uio-driver)
+ CONFIG[IGB_UIO_DRIVER]=y
+ ;;
+ --without-igb-uio-driver)
+ CONFIG[IGB_UIO_DRIVER]=n
+ ;;
+ --)
+ break
+ ;;
+ *)
+ echo "Unrecognized option $i"
+ usage
+ exit 1
+ esac
+done
+
+if [ -z "${CONFIG[ENV]}" ]; then
+ rootdir=$(readlink -f $(dirname $0))
+ CONFIG[ENV]=$rootdir/lib/env_dpdk
+ echo "Using default SPDK env in ${CONFIG[ENV]}"
+ if [ -z "${CONFIG[DPDK_DIR]}" ]; then
+ if [ ! -f "$rootdir"/dpdk/config/common_base ]; then
+ echo "DPDK not found; please specify --with-dpdk=<path> or run:"
+ echo
+ echo " git submodule update --init"
+ exit 1
+ else
+ CONFIG[DPDK_DIR]="${rootdir}/dpdk/build"
+ echo "Using default DPDK in ${CONFIG[DPDK_DIR]}"
+ fi
+ fi
+else
+ if [ "${CONFIG[VHOST]}" = "y" ]; then
+ echo "Vhost is only supported when using the default DPDK environment. Disabling it."
+ fi
+ # Always disable vhost, but only print the error message if the user explicitly turned it on.
+ CONFIG[VHOST]="n"
+ if [ "${CONFIG[VIRTIO]}" = "y" ]; then
+ echo "Virtio is only supported when using the default DPDK environment. Disabling it."
+ fi
+ # Always disable virtio, but only print the error message if the user explicitly turned it on.
+ CONFIG[VIRTIO]="n"
+fi
+
+if [ "${CONFIG[FIO_PLUGIN]}" = "y" ]; then
+ if [ -z "${CONFIG[FIO_SOURCE_DIR]}" ]; then
+ echo "When fio is enabled, you must specify the fio directory using --with-fio=path"
+ exit 1
+ fi
+else
+ CONFIG[FIO_SOURCE_DIR]=
+fi
+
+if [ "${CONFIG[VTUNE]}" = "y" ]; then
+ if [ -z "${CONFIG[VTUNE_DIR]}" ]; then
+ echo "When VTune is enabled, you must specify the VTune directory using --with-vtune=path"
+ exit 1
+ fi
+fi
+
+if [ "${CONFIG[ASAN]}" = "y" -a "${CONFIG[TSAN]}" = "y" ]; then
+ echo "ERROR: ASAN and TSAN cannot be enabled at the same time."
+ exit 1
+fi
+
+if [[ "$OSTYPE" == "freebsd"* ]]; then
+ # FreeBSD doesn't support all configurations
+ if [[ "${CONFIG[COVERAGE]}" == "y" ]]; then
+ echo "ERROR: CONFIG_COVERAGE not available on FreeBSD"
+ exit 1
+ fi
+fi
+
+if [ "${CONFIG[RDMA]}" = "y" ]; then
+ if [ "$OSTYPE" != "FreeBSD"* ]; then
+ ibv_lib_file="$(readlink -f /usr/lib64/libibverbs.so)" || true
+ if [ -z $ibv_lib_file ]; then
+ ibv_lib_file="libibverbs.so.0.0.0"
+ fi
+ ibv_ver_str="$(basename $ibv_lib_file)"
+ ibv_maj_ver=`echo $ibv_ver_str | cut -d. -f3`
+ ibv_min_ver=`echo $ibv_ver_str | cut -d. -f4`
+ if [[ "$ibv_maj_var" > 1 || ("$ibv_maj_ver" -eq 1 && "$ibv_min_ver" -ge 1) ]]; then
+ CONFIG[RDMA_SEND_WITH_INVAL]="y"
+ else
+ CONFIG[RDMA_SEND_WITH_INVAL]="n"
+ echo "
+*******************************************************************************
+WARNING: The Infiniband Verbs opcode Send With Invalidate is either not
+supported or is not functional with the current version of libibverbs installed
+on this system. Please upgrade to at least version 1.1.
+
+Beginning with Linux kernel 4.14, the kernel NVMe-oF initiator leverages Send
+With Invalidate RDMA operations to improve performance. Failing to use the
+Send With Invalidate operation on the NVMe-oF target side results in full
+functionality, but greatly reduced performance. The SPDK NVMe-oF target will
+be unable to leverage that operation using the currently installed version
+of libibverbs, so Linux kernel NVMe-oF initiators based on kernels greater
+than or equal to 4.14 will see significantly reduced performance.
+*******************************************************************************"
+ fi
+ fi
+fi
+
+if [[ "${CONFIG[CRYPTO]}" = "y" ]]; then
+ if [[ $(nasm -v | sed 's/[^0-9]*//g' | awk '{print substr ($0, 0, 5)}') -lt "21202" ]]; then
+ echo Crypto requires NASM version 2.12.02 or newer. Please install
+ echo or upgrade then re-run this script.
+ exit 1
+ else
+ if [[ "$(find /usr -name intel-ipsec-mb.h 2>/dev/null)" == "" ]]; then
+ echo "To enable crypto you must first go to the intel-ipsec-mb directory and "
+ echo "run 'make' then 'sudo make install' then re-run this script."
+ exit 1
+ fi
+ fi
+fi
+
+# We are now ready to generate final configuration. But first do sanity
+# check to see if all keys in CONFIG array have its reflection in CONFIG file.
+if [ $(egrep -c "^\s*CONFIG_[[:alnum:]_]+=" CONFIG) -ne ${#CONFIG[@]} ]; then
+ echo ""
+ echo "BUG: Some configuration options are not present in CONFIG file. Please update this file."
+ echo "Missing options in CONFIG (+) file and in current config (-): "
+ diff -u --label "CONFIG file" --label "CONFIG[@]" \
+ <(sed -r -e '/^\s*$/d; /^\s*#.*/d; s/(CONFIG_[[:alnum:]_]+)=.*/\1/g' CONFIG | sort) \
+ <(printf "CONFIG_%s\n" ${!CONFIG[@]} | sort)
+ exit 1
+fi
+
+echo -n "Creating mk/config.mk..."
+cp -f CONFIG mk/config.mk
+for key in ${!CONFIG[@]}; do
+ sed -i.bak -r "s#^\s*CONFIG_${key}=.*#CONFIG_${key}\?=${CONFIG[$key]}#g" mk/config.mk
+done
+# On FreeBSD sed -i 'SUFFIX' - SUFFIX is mandatory. So no way but to delete the backed file.
+rm -f mk/config.mk.bak
+
+# Environment variables
+[ -n "$CFLAGS" ] && echo "CFLAGS?=$CFLAGS" >> mk/config.mk
+[ -n "$CXXFLAGS" ] && echo "CXXFLAGS?=$CXXFLAGS" >> mk/config.mk
+[ -n "$LDFLAGS" ] && echo "LDFLAGS?=$LDFLAGS" >> mk/config.mk
+[ -n "$DESTDIR" ] && echo "DESTDIR?=$DESTDIR" >> mk/config.mk
+
+echo "done."
+
+if [[ "$OSTYPE" == "freebsd"* ]]; then
+ echo "Type 'gmake' to build."
+else
+ echo "Type 'make' to build."
+fi
+
+exit 0