2017-03-30 19:06:49 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
2018-10-03 14:32:45 +00:00
|
|
|
trap 'echo -e "\n\nConfiguration failed\n\n" >&2' ERR
|
|
|
|
|
2017-03-30 19:06:49 +00:00
|
|
|
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"
|
2017-11-15 17:36:36 +00:00
|
|
|
echo ""
|
|
|
|
echo " --prefix=path Configure installation prefix (default: /usr/local)"
|
|
|
|
echo ""
|
2017-03-30 19:06:49 +00:00
|
|
|
echo " --enable-debug Configure for debug builds"
|
2018-09-10 14:08:25 +00:00
|
|
|
echo " --enable-log-bt Enable support of backtrace printing in SPDK logs (requires libunwind)."
|
2017-03-30 19:06:49 +00:00
|
|
|
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"
|
2016-03-24 20:27:53 +00:00
|
|
|
echo " --enable-lto Enable link-time optimization"
|
2019-02-11 18:19:32 +00:00
|
|
|
echo " --enable-pgo-capture Enable generation of profile guided optimization data"
|
|
|
|
echo " --enable-pgo-use Use previously captured profile guided optimization data"
|
2018-03-06 22:39:04 +00:00
|
|
|
echo " --disable-tests Disable building of tests"
|
2017-03-30 19:06:49 +00:00
|
|
|
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."
|
2017-05-08 22:07:13 +00:00
|
|
|
echo " dpdk Optional. Uses dpdk submodule in spdk tree if not specified."
|
2017-03-30 19:06:49 +00:00
|
|
|
echo " example: /usr/share/dpdk/x86_64-default-linuxapp-gcc"
|
2019-02-08 21:37:23 +00:00
|
|
|
echo " env Use an alternate environment implementation instead of DPDK."
|
|
|
|
echo " Implies --without-dpdk."
|
|
|
|
echo " igb-uio-driver Build and use DPDK's igb-uio driver instead of uio_pci_generic"
|
|
|
|
echo " or vfio-pci. Required on some systems to use qat devices"
|
|
|
|
echo " No path required"
|
|
|
|
echo " crypto Required to build vbdev crypto module."
|
|
|
|
echo " No path required."
|
2017-03-30 19:06:49 +00:00
|
|
|
echo " fio Required to build fio_plugin."
|
|
|
|
echo " example: /usr/src/fio"
|
2018-03-14 00:05:36 +00:00
|
|
|
echo " vhost Required to build vhost target."
|
|
|
|
echo " No path required."
|
2019-02-25 00:57:46 +00:00
|
|
|
echo " internal-vhost-lib Use the internal copy of rte_vhost."
|
|
|
|
echo " No path required."
|
2017-10-17 17:04:28 +00:00
|
|
|
echo " virtio Required to build vhost initiator (Virtio) bdev module."
|
|
|
|
echo " No path required."
|
2018-04-03 23:07:39 +00:00
|
|
|
echo " pmdk Required to build persistent memory bdev."
|
|
|
|
echo " example: /usr/share/pmdk"
|
2018-10-15 20:46:41 +00:00
|
|
|
echo " reduce Required to build vbdev compression module."
|
2018-09-21 14:37:54 +00:00
|
|
|
echo " No path required."
|
2018-03-13 14:42:45 +00:00
|
|
|
echo " vpp Required to build VPP net module."
|
|
|
|
echo " example: /vpp_repo/build-root/install-vpp-native/vpp"
|
2017-03-30 19:06:49 +00:00
|
|
|
echo " rbd [disabled]"
|
|
|
|
echo " No path required."
|
|
|
|
echo " rdma [disabled]"
|
|
|
|
echo " No path required."
|
2018-08-14 17:56:26 +00:00
|
|
|
echo " shared Required to build spdk shared libraries."
|
|
|
|
echo " No path required."
|
2017-12-04 17:07:04 +00:00
|
|
|
echo " iscsi-initiator [disabled]"
|
|
|
|
echo " No path required."
|
2017-05-30 08:45:46 +00:00
|
|
|
echo " vtune Required to profile I/O under Intel VTune Amplifier XE."
|
|
|
|
echo " example: /opt/intel/vtune_amplifier_xe_version"
|
2018-09-20 16:54:49 +00:00
|
|
|
echo " ocf Required to build OCF module."
|
|
|
|
echo " If argument is directory, interpret it as root of OCF repo"
|
|
|
|
echo " If argument is file, interpret it as compiled OCF lib"
|
2019-02-12 13:27:52 +00:00
|
|
|
echo " If no argument is specified, OCF git submodule is used by default"
|
2018-09-20 16:54:49 +00:00
|
|
|
echo " example: /usr/src/ocf/"
|
2019-01-21 09:05:59 +00:00
|
|
|
echo " isal Enabled by default on x86 architecture. Can be built without though."
|
|
|
|
echo " No path required."
|
2019-02-14 19:07:42 +00:00
|
|
|
echo " uring Required to support I/O uring on Linux. If no argument, searches"
|
|
|
|
echo " the standard installation directory. If an argument is provided, it is"
|
|
|
|
echo " considered a directory containing liburing.a and io_uring.h."
|
2017-03-30 19:06:49 +00:00
|
|
|
echo ""
|
2018-03-28 18:24:48 +00:00
|
|
|
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 ""
|
2017-03-30 19:06:49 +00:00
|
|
|
}
|
|
|
|
|
2018-10-03 14:58:36 +00:00
|
|
|
# Load default values
|
|
|
|
# Convert config to sourcable configuration file
|
2018-09-21 14:32:36 +00:00
|
|
|
sed -r 's/CONFIG_([[:alnum:]_]+)=(.*)/CONFIG[\1]=\2/g' CONFIG > CONFIG.sh
|
2018-10-03 14:58:36 +00:00
|
|
|
declare -A CONFIG
|
|
|
|
source CONFIG.sh
|
|
|
|
rm CONFIG.sh
|
|
|
|
|
2019-05-07 13:33:48 +00:00
|
|
|
BUILD_CMD="${CC:-cc} -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS"
|
2018-10-03 14:58:36 +00:00
|
|
|
|
2018-03-08 23:02:09 +00:00
|
|
|
function check_dir() {
|
|
|
|
arg="$1"
|
|
|
|
dir="${arg#*=}"
|
|
|
|
if [ ! -d "$dir" ]; then
|
|
|
|
echo "$arg: directory not found"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2017-03-30 19:06:49 +00:00
|
|
|
for i in "$@"; do
|
|
|
|
case "$i" in
|
|
|
|
-h|--help)
|
|
|
|
usage
|
|
|
|
exit 0
|
|
|
|
;;
|
2017-11-15 17:36:36 +00:00
|
|
|
--prefix=*)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[PREFIX]="${i#*=}"
|
2017-11-15 17:36:36 +00:00
|
|
|
;;
|
2017-03-30 19:06:49 +00:00
|
|
|
--enable-debug)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[DEBUG]=y
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--disable-debug)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[DEBUG]=n
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
2018-09-10 14:08:25 +00:00
|
|
|
--enable-log-bt)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[LOG_BACKTRACE]=y
|
2018-09-10 14:08:25 +00:00
|
|
|
;;
|
|
|
|
--disable-log-bt)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[LOG_BACKTRACE]=n
|
2018-07-18 19:08:17 +00:00
|
|
|
;;
|
2017-03-30 19:06:49 +00:00
|
|
|
--enable-asan)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[ASAN]=y
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--disable-asan)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[ASAN]=n
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--enable-ubsan)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[UBSAN]=y
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--disable-ubsan)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[UBSAN]=n
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
2017-05-24 22:00:54 +00:00
|
|
|
--enable-tsan)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[TSAN]=y
|
2017-05-24 22:00:54 +00:00
|
|
|
;;
|
|
|
|
--disable-tsan)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[TSAN]=n
|
2017-05-24 22:00:54 +00:00
|
|
|
;;
|
2017-03-30 19:06:49 +00:00
|
|
|
--enable-coverage)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[COVERAGE]=y
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--disable-coverage)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[COVERAGE]=n
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
2016-03-24 20:27:53 +00:00
|
|
|
--enable-lto)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[LTO]=y
|
2016-03-24 20:27:53 +00:00
|
|
|
;;
|
|
|
|
--disable-lto)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[LTO]=n
|
2016-03-24 20:27:53 +00:00
|
|
|
;;
|
2019-02-11 18:19:32 +00:00
|
|
|
--enable-pgo-capture)
|
|
|
|
CONFIG[PGO_CAPTURE]=y
|
|
|
|
;;
|
|
|
|
--disable-pgo-capture)
|
|
|
|
CONFIG[PGO_CAPTURE]=n
|
|
|
|
;;
|
|
|
|
--enable-pgo-use)
|
|
|
|
CONFIG[PGO_USE]=y
|
|
|
|
;;
|
|
|
|
--disable-pgo-use)
|
|
|
|
CONFIG[PGO_USE]=n
|
|
|
|
;;
|
2018-03-06 22:39:04 +00:00
|
|
|
--enable-tests)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[TESTS]=y
|
2018-03-06 22:39:04 +00:00
|
|
|
;;
|
|
|
|
--disable-tests)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[TESTS]=n
|
2018-03-06 22:39:04 +00:00
|
|
|
;;
|
2017-03-30 19:06:49 +00:00
|
|
|
--enable-werror)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[WERROR]=y
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--disable-werror)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[WERROR]=n
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
2019-02-08 21:37:23 +00:00
|
|
|
--with-dpdk=*)
|
|
|
|
check_dir "$i"
|
|
|
|
CONFIG[DPDK_DIR]=$(readlink -f ${i#*=})
|
|
|
|
;;
|
|
|
|
--without-dpdk)
|
|
|
|
CONFIG[DPDK_DIR]=
|
|
|
|
;;
|
2017-03-30 19:06:49 +00:00
|
|
|
--with-env=*)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[ENV]="${i#*=}"
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--with-rbd)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[RBD]=y
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--without-rbd)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[RBD]=n
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--with-rdma)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[RDMA]=y
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--without-rdma)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[RDMA]=n
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
2018-08-14 17:56:26 +00:00
|
|
|
--with-shared)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[SHARED]=y
|
2018-08-14 17:56:26 +00:00
|
|
|
;;
|
|
|
|
--without-shared)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[SHARED]=n
|
2018-08-14 17:56:26 +00:00
|
|
|
;;
|
2017-12-04 17:07:04 +00:00
|
|
|
--with-iscsi-initiator)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[ISCSI_INITIATOR]=y
|
2017-12-04 17:07:04 +00:00
|
|
|
;;
|
|
|
|
--without-iscsi-initiator)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[ISCSI_INITIATOR]=n
|
2017-12-04 17:07:04 +00:00
|
|
|
;;
|
2018-03-22 23:24:14 +00:00
|
|
|
--with-crypto)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[CRYPTO]=y
|
2018-03-22 23:24:14 +00:00
|
|
|
;;
|
|
|
|
--without-crypto)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[CRYPTO]=n
|
2018-03-22 23:24:14 +00:00
|
|
|
;;
|
2018-03-14 00:05:36 +00:00
|
|
|
--with-vhost)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VHOST]=y
|
2018-03-14 00:05:36 +00:00
|
|
|
;;
|
|
|
|
--without-vhost)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VHOST]=n
|
2018-03-14 00:05:36 +00:00
|
|
|
;;
|
2019-02-25 00:57:46 +00:00
|
|
|
--with-internal-vhost-lib)
|
|
|
|
CONFIG[VHOST_INTERNAL_LIB]=y
|
|
|
|
;;
|
|
|
|
--without-internal-vhost-lib)
|
|
|
|
CONFIG[VHOST_INTERNAL_LIB]=n
|
|
|
|
;;
|
2017-10-17 17:04:28 +00:00
|
|
|
--with-virtio)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VIRTIO]=y
|
2017-10-17 17:04:28 +00:00
|
|
|
;;
|
|
|
|
--without-virtio)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VIRTIO]=n
|
2017-10-17 17:04:28 +00:00
|
|
|
;;
|
2018-04-03 23:07:39 +00:00
|
|
|
--with-pmdk)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[PMDK]=y
|
|
|
|
CONFIG[PMDK_DIR]=""
|
2017-09-29 08:49:51 +00:00
|
|
|
;;
|
2018-04-03 23:07:39 +00:00
|
|
|
--with-pmdk=*)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[PMDK]=y
|
2018-03-08 23:02:09 +00:00
|
|
|
check_dir "$i"
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[PMDK_DIR]=$(readlink -f ${i#*=})
|
2017-09-29 08:49:51 +00:00
|
|
|
;;
|
2018-04-03 23:07:39 +00:00
|
|
|
--without-pmdk)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[PMDK]=n
|
2017-09-29 08:49:51 +00:00
|
|
|
;;
|
2018-09-21 14:37:54 +00:00
|
|
|
--with-reduce)
|
|
|
|
CONFIG[REDUCE]=y
|
|
|
|
;;
|
|
|
|
--without-reduce)
|
|
|
|
CONFIG[REDUCE]=n
|
|
|
|
;;
|
2018-03-13 14:42:45 +00:00
|
|
|
--with-vpp)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VPP]=y
|
2018-03-13 14:42:45 +00:00
|
|
|
;;
|
|
|
|
--with-vpp=*)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VPP]=y
|
2018-03-13 14:42:45 +00:00
|
|
|
check_dir "$i"
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VPP_DIR]=$(readlink -f ${i#*=})
|
2018-03-13 14:42:45 +00:00
|
|
|
;;
|
|
|
|
--without-vpp)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VPP]=n
|
2018-03-13 14:42:45 +00:00
|
|
|
;;
|
2017-03-30 19:06:49 +00:00
|
|
|
--with-fio=*)
|
2018-03-08 23:02:09 +00:00
|
|
|
check_dir "$i"
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[FIO_SOURCE_DIR]="${i#*=}"
|
|
|
|
CONFIG[FIO_PLUGIN]=y
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
|
|
|
--without-fio)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[FIO_SOURCE_DIR]=
|
|
|
|
CONFIG[FIO_PLUGIN]=n
|
2017-03-30 19:06:49 +00:00
|
|
|
;;
|
2017-05-30 08:45:46 +00:00
|
|
|
--with-vtune=*)
|
2018-03-08 23:02:09 +00:00
|
|
|
check_dir "$i"
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VTUNE_DIR]="${i#*=}"
|
|
|
|
CONFIG[VTUNE]=y
|
2017-05-30 08:45:46 +00:00
|
|
|
;;
|
|
|
|
--without-vtune)
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VTUNE_DIR]=
|
|
|
|
CONFIG[VTUNE]=n
|
2017-05-30 08:45:46 +00:00
|
|
|
;;
|
2018-10-10 17:09:07 +00:00
|
|
|
--with-igb-uio-driver)
|
|
|
|
CONFIG[IGB_UIO_DRIVER]=y
|
|
|
|
;;
|
|
|
|
--without-igb-uio-driver)
|
|
|
|
CONFIG[IGB_UIO_DRIVER]=n
|
|
|
|
;;
|
2019-02-12 13:27:52 +00:00
|
|
|
--with-ocf)
|
|
|
|
CONFIG[OCF]=y
|
|
|
|
CONFIG[OCF_PATH]=$(readlink -f "./ocf")
|
|
|
|
;;
|
2018-09-20 16:54:49 +00:00
|
|
|
--with-ocf=*)
|
|
|
|
CONFIG[OCF]=y
|
|
|
|
CONFIG[OCF_PATH]=$(readlink -f ${i#*=})
|
|
|
|
;;
|
|
|
|
--without-ocf)
|
|
|
|
CONFIG[OCF]=n
|
|
|
|
CONFIG[OCF_PATH]=
|
|
|
|
;;
|
2019-01-21 09:05:59 +00:00
|
|
|
--with-isal)
|
2019-03-06 21:14:53 +00:00
|
|
|
CONFIG[ISAL]=y
|
|
|
|
;;
|
|
|
|
--without-isal)
|
|
|
|
CONFIG[ISAL]=n
|
|
|
|
;;
|
2019-02-14 19:07:42 +00:00
|
|
|
--with-uring=*)
|
|
|
|
CONFIG[URING]=y
|
|
|
|
CONFIG[URING_PATH]=$(readlink -f ${i#*=})
|
|
|
|
;;
|
|
|
|
--with-uring)
|
|
|
|
CONFIG[URING]=y
|
|
|
|
CONFIG[URING_PATH]=
|
|
|
|
;;
|
|
|
|
--without-uring)
|
|
|
|
CONFIG[URING]=n
|
|
|
|
CONFIG[URING_PATH]=
|
|
|
|
;;
|
2017-03-30 19:06:49 +00:00
|
|
|
--)
|
|
|
|
break
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Unrecognized option $i"
|
|
|
|
usage
|
|
|
|
exit 1
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2019-01-21 09:05:59 +00:00
|
|
|
# Detect architecture and force no isal if non x86 archtecture
|
2019-02-04 23:14:42 +00:00
|
|
|
arch=$(uname -m)
|
2019-01-21 09:05:59 +00:00
|
|
|
if [[ $arch != x86_64* ]]; then
|
|
|
|
echo "Notice: ISAL auto-disabled due to CPU incompatiblity."
|
|
|
|
CONFIG[ISAL]=n
|
|
|
|
fi
|
|
|
|
|
2018-10-15 20:46:41 +00:00
|
|
|
if [[ "${CONFIG[ISAL]}" = "n" ]] && [[ "${CONFIG[REDUCE]}" = "y" ]]; then
|
|
|
|
echo "ERROR Conflicting options: --with-reduce is not compatible with --without-isal."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2018-10-03 14:58:36 +00:00
|
|
|
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
|
2018-10-04 11:24:38 +00:00
|
|
|
if [ ! -f "$rootdir"/dpdk/config/common_base ]; then
|
2017-06-02 00:51:29 +00:00
|
|
|
echo "DPDK not found; please specify --with-dpdk=<path> or run:"
|
|
|
|
echo
|
|
|
|
echo " git submodule update --init"
|
|
|
|
exit 1
|
2018-10-03 14:58:36 +00:00
|
|
|
else
|
|
|
|
CONFIG[DPDK_DIR]="${rootdir}/dpdk/build"
|
|
|
|
echo "Using default DPDK in ${CONFIG[DPDK_DIR]}"
|
2017-06-02 00:51:29 +00:00
|
|
|
fi
|
2017-03-30 19:06:49 +00:00
|
|
|
fi
|
2018-07-19 19:55:44 +00:00
|
|
|
else
|
2019-02-08 21:37:23 +00:00
|
|
|
if [ -n "${CONFIG[DPDK_DIR]}" ]; then
|
|
|
|
echo "--with-env and --with-dpdk are mutually exclusive."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2018-10-03 14:58:36 +00:00
|
|
|
if [ "${CONFIG[VHOST]}" = "y" ]; then
|
2018-07-19 19:55:44 +00:00
|
|
|
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.
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VHOST]="n"
|
|
|
|
if [ "${CONFIG[VIRTIO]}" = "y" ]; then
|
2018-07-19 19:55:44 +00:00
|
|
|
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.
|
2018-10-03 14:58:36 +00:00
|
|
|
CONFIG[VIRTIO]="n"
|
2017-03-30 19:06:49 +00:00
|
|
|
fi
|
|
|
|
|
2018-10-03 14:58:36 +00:00
|
|
|
if [ "${CONFIG[FIO_PLUGIN]}" = "y" ]; then
|
|
|
|
if [ -z "${CONFIG[FIO_SOURCE_DIR]}" ]; then
|
2017-03-30 19:06:49 +00:00
|
|
|
echo "When fio is enabled, you must specify the fio directory using --with-fio=path"
|
|
|
|
exit 1
|
|
|
|
fi
|
2018-10-03 14:58:36 +00:00
|
|
|
else
|
|
|
|
CONFIG[FIO_SOURCE_DIR]=
|
2017-03-30 19:06:49 +00:00
|
|
|
fi
|
|
|
|
|
2018-10-03 14:58:36 +00:00
|
|
|
if [ "${CONFIG[VTUNE]}" = "y" ]; then
|
|
|
|
if [ -z "${CONFIG[VTUNE_DIR]}" ]; then
|
2017-05-30 08:45:46 +00:00
|
|
|
echo "When VTune is enabled, you must specify the VTune directory using --with-vtune=path"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-10-03 14:58:36 +00:00
|
|
|
if [ "${CONFIG[ASAN]}" = "y" -a "${CONFIG[TSAN]}" = "y" ]; then
|
2017-05-24 22:00:54 +00:00
|
|
|
echo "ERROR: ASAN and TSAN cannot be enabled at the same time."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2018-08-14 17:56:26 +00:00
|
|
|
if [[ "$OSTYPE" == "freebsd"* ]]; then
|
2017-07-13 18:01:45 +00:00
|
|
|
# FreeBSD doesn't support all configurations
|
2018-10-03 14:58:36 +00:00
|
|
|
if [[ "${CONFIG[COVERAGE]}" == "y" ]]; then
|
2017-07-13 18:01:45 +00:00
|
|
|
echo "ERROR: CONFIG_COVERAGE not available on FreeBSD"
|
|
|
|
exit 1
|
|
|
|
fi
|
2017-06-14 00:01:22 +00:00
|
|
|
fi
|
|
|
|
|
2018-10-03 14:58:36 +00:00
|
|
|
if [ "${CONFIG[RDMA]}" = "y" ]; then
|
2019-05-07 16:30:45 +00:00
|
|
|
if ! echo -e '#include <infiniband/verbs.h>\n#include <rdma/rdma_verbs.h>\n' \
|
|
|
|
'int main(void) { return 0; }\n' \
|
|
|
|
| $BUILD_CMD -libverbs -lrdmacm - 2>/dev/null; then
|
|
|
|
echo --with-rdma requires libverbs and librdmacm.
|
|
|
|
echo Please install then re-run this script.
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if echo -e '#include <infiniband/verbs.h>\n' \
|
|
|
|
'int main(void) { return !!IBV_WR_SEND_WITH_INV; }\n' \
|
|
|
|
| $BUILD_CMD -c - 2>/dev/null; then
|
2019-05-07 17:12:15 +00:00
|
|
|
CONFIG[RDMA_SEND_WITH_INVAL]="y"
|
|
|
|
else
|
|
|
|
CONFIG[RDMA_SEND_WITH_INVAL]="n"
|
|
|
|
echo "
|
2018-08-15 20:09:49 +00:00
|
|
|
*******************************************************************************
|
|
|
|
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.
|
2018-08-22 16:31:54 +00:00
|
|
|
*******************************************************************************"
|
2018-08-15 20:09:49 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-01-21 09:05:59 +00:00
|
|
|
if [[ "${CONFIG[ISAL]}" = "y" ]] || [[ "${CONFIG[CRYPTO]}" = "y" ]]; then
|
2019-04-30 05:56:39 +00:00
|
|
|
ver=$(nasm -v | awk '{print $3}' | sed 's/[^0-9]*//g')
|
|
|
|
if [[ "${ver:0:1}" -le "2" ]] && [[ "${ver:0:3}" -le "213" ]] && [[ "${ver:0:5}" -lt "21303" ]]; then
|
2019-01-29 19:08:53 +00:00
|
|
|
echo "Notice: ISA-L, compression & crypto auto-disabled due to nasm dependency."
|
2019-04-25 07:41:00 +00:00
|
|
|
echo "These features require NASM version 2.13.03 or newer. Please install"
|
2019-01-21 09:05:59 +00:00
|
|
|
echo "or upgrade then re-run this script."
|
|
|
|
CONFIG[ISAL]=n
|
|
|
|
CONFIG[CRYPTO]=n
|
|
|
|
CONFIG[IPSEC_MB]=n
|
2018-10-15 20:46:41 +00:00
|
|
|
CONFIG[REDUCE]=n
|
2019-01-21 09:05:59 +00:00
|
|
|
else
|
|
|
|
if [[ "${CONFIG[CRYPTO]}" = "y" ]]; then
|
|
|
|
CONFIG[IPSEC_MB]=y
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "${CONFIG[ISAL]}" = "y" ]]; then
|
2019-01-29 09:38:22 +00:00
|
|
|
if [ ! -f "$rootdir"/isa-l/autogen.sh ]; then
|
2019-01-29 17:44:49 +00:00
|
|
|
echo "ISA-L was not found; To install ISA-L run:"
|
2019-01-21 09:05:59 +00:00
|
|
|
echo " git submodule update --init"
|
2018-08-28 19:55:04 +00:00
|
|
|
exit 1
|
2018-08-18 16:25:41 +00:00
|
|
|
fi
|
2019-01-21 09:05:59 +00:00
|
|
|
|
|
|
|
if [[ "${CONFIG[RBD]}" = "y" ]]; then
|
2018-10-15 20:46:41 +00:00
|
|
|
echo "ISAL and RBD cannot co-exist currently so disabling ISAL and compression."
|
2019-01-21 09:05:59 +00:00
|
|
|
CONFIG[ISAL]=n
|
2018-10-15 20:46:41 +00:00
|
|
|
CONFIG[REDUCE]=n
|
2019-01-21 09:05:59 +00:00
|
|
|
else
|
|
|
|
cd $rootdir/isa-l
|
|
|
|
ISAL_LOG=/tmp/spdk-isal.log
|
|
|
|
echo -n "Configuring ISA-L (logfile: $ISAL_LOG)..."
|
|
|
|
./autogen.sh &> $ISAL_LOG
|
|
|
|
./configure CFLAGS="-fPIC -g -O2" --enable-shared=no >> $ISAL_LOG 2>&1
|
|
|
|
echo "done."
|
|
|
|
cd $rootdir
|
|
|
|
fi
|
2018-08-18 16:25:41 +00:00
|
|
|
fi
|
2018-08-15 20:09:49 +00:00
|
|
|
|
2019-05-07 13:40:08 +00:00
|
|
|
if [[ "${CONFIG[PMDK]}" = "y" ]]; then
|
|
|
|
if ! echo -e '#include <libpmemblk.h>\nint main(void) { return 0; }\n' \
|
|
|
|
| $BUILD_CMD -lpmemblk - 2>/dev/null; then
|
|
|
|
echo --with-pmdk requires libpmemblk.
|
|
|
|
echo Please install then re-run this script.
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-09-21 14:37:54 +00:00
|
|
|
if [[ "${CONFIG[REDUCE]}" = "y" ]]; then
|
2019-05-07 13:33:48 +00:00
|
|
|
if ! echo -e '#include <libpmem.h>\nint main(void) { return 0; }\n' \
|
|
|
|
| $BUILD_CMD -lpmem - 2>/dev/null; then
|
2018-09-21 14:37:54 +00:00
|
|
|
echo --with-reduce requires libpmem.
|
|
|
|
echo Please install then re-run this script.
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-05-07 16:42:28 +00:00
|
|
|
if [[ "${CONFIG[RBD]}" = "y" ]]; then
|
|
|
|
if ! echo -e '#include <rbd/librbd.h>\n#include <rados/librados.h>\n' \
|
|
|
|
'int main(void) { return 0; }\n' \
|
|
|
|
| $BUILD_CMD -lrados -lrbd - 2>/dev/null; then
|
|
|
|
echo --with-rbd requires librados and librbd.
|
|
|
|
echo Please install then re-run this script.
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-05-07 16:55:00 +00:00
|
|
|
if [[ "${CONFIG[ISCSI_INITIATOR]}" = "y" ]]; then
|
|
|
|
# Fedora installs libiscsi to /usr/lib64/iscsi for some reason.
|
|
|
|
if ! echo -e '#include <iscsi/iscsi.h>\n#include <iscsi/scsi-lowlevel.h>\n' \
|
|
|
|
'#if LIBISCSI_API_VERSION < 20150621\n' \
|
|
|
|
'#error\n' \
|
|
|
|
'#endif\n' \
|
|
|
|
'int main(void) { return 0; }\n' \
|
|
|
|
| $BUILD_CMD -L/usr/lib64/iscsi -liscsi - 2>/dev/null; then
|
|
|
|
echo --with-iscsi-initiator requires libiscsi with
|
|
|
|
echo 'LIBISCSI_API_VERSION >= 20150621.'
|
|
|
|
echo Please install then re-run this script.
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-05-08 15:35:23 +00:00
|
|
|
if [[ "${CONFIG[LOG_BACKTRACE]}" = "y" ]]; then
|
|
|
|
if ! echo -e '#include <libunwind.h>\nint main(void) { return 0; }\n' \
|
|
|
|
| $BUILD_CMD -lunwind - 2>/dev/null; then
|
|
|
|
echo --enable-log-bt requires libunwind.
|
|
|
|
echo Please install then re-run this script.
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-05-08 15:48:59 +00:00
|
|
|
if [[ "${CONFIG[ASAN]}" = "y" ]]; then
|
|
|
|
if ! echo -e 'int main(void) { return 0; }\n' \
|
|
|
|
| $BUILD_CMD -fsanitize=address - 2>/dev/null; then
|
|
|
|
echo --enable-asan requires libasan.
|
|
|
|
echo Please install then re-run this script.
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "${CONFIG[UBSAN]}" = "y" ]]; then
|
|
|
|
if ! echo -e 'int main(void) { return 0; }\n' \
|
|
|
|
| $BUILD_CMD -fsanitize=undefined - 2>/dev/null; then
|
|
|
|
echo --enable-ubsan requires libubsan.
|
|
|
|
echo Please install then re-run this script.
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "${CONFIG[TSAN]}" = "y" ]]; then
|
|
|
|
if ! echo -e 'int main(void) { return 0; }\n' \
|
|
|
|
| $BUILD_CMD -fsanitize=thread - 2>/dev/null; then
|
|
|
|
echo --enable-tsan requires libtsan.
|
|
|
|
echo Please install then re-run this script.
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-09-20 16:54:49 +00:00
|
|
|
if [[ "${CONFIG[OCF]}" = "y" ]]; then
|
|
|
|
# If OCF_PATH is a file, assume it is a library and use it to compile with
|
|
|
|
if [ -f ${CONFIG[OCF_PATH]} ]; then
|
|
|
|
CONFIG[CUSTOMOCF]=y
|
|
|
|
else
|
|
|
|
CONFIG[CUSTOMOCF]=n
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-02-11 18:19:32 +00:00
|
|
|
if [[ "${CONFIG[PGO_CAPTURE]}" = "y" && "${CONFIG[PGO_USE]}" = "y" ]]; then
|
|
|
|
echo "ERROR: --enable-pgo-capture and --enable-pgo-use are mutually exclusive."
|
|
|
|
exit 1
|
2019-02-12 19:45:01 +00:00
|
|
|
elif [[ "${CONFIG[PGO_USE]}" = "y" ]]; then
|
|
|
|
CC_TYPE=$($rootdir/scripts/detect_cc.sh --cc=$CC --cxx=$CXX --lto=$CONFIG[LTO] --ld=$LD | grep "CC_TYPE" | cut -d "=" -f 2)
|
|
|
|
if [[ "$CC_TYPE" = "clang" ]]; then
|
|
|
|
# For clang we need to run an extra step on gathered profiling data.
|
|
|
|
echo "Generating suitable profile data"
|
|
|
|
llvm-profdata merge -output=build/pgo/default.profdata build/pgo
|
|
|
|
fi
|
2019-02-11 18:19:32 +00:00
|
|
|
fi
|
|
|
|
|
2019-02-14 19:07:42 +00:00
|
|
|
if [[ "${CONFIG[URING]}" = "y" ]]; then
|
|
|
|
if [[ -n "${CONFIG[URING_PATH]}" ]]; then
|
|
|
|
if [ ! -d "${CONFIG[URING_PATH]}" ]; then
|
|
|
|
echo "${CONFIG[URING_PATH]}: directory not found"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
2019-02-11 18:19:32 +00:00
|
|
|
|
2018-10-03 17:58:52 +00:00
|
|
|
# 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.
|
2018-09-21 14:32:36 +00:00
|
|
|
if [ $(egrep -c "^\s*CONFIG_[[:alnum:]_]+=" CONFIG) -ne ${#CONFIG[@]} ]; then
|
2018-10-03 17:58:52 +00:00
|
|
|
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[@]" \
|
2018-09-21 14:32:36 +00:00
|
|
|
<(sed -r -e '/^\s*$/d; /^\s*#.*/d; s/(CONFIG_[[:alnum:]_]+)=.*/\1/g' CONFIG | sort) \
|
2018-10-03 17:58:52 +00:00
|
|
|
<(printf "CONFIG_%s\n" ${!CONFIG[@]} | sort)
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2018-09-21 14:32:36 +00:00
|
|
|
echo -n "Creating mk/config.mk..."
|
|
|
|
cp -f CONFIG mk/config.mk
|
2018-10-03 14:58:36 +00:00
|
|
|
for key in ${!CONFIG[@]}; do
|
2018-09-21 14:32:36 +00:00
|
|
|
sed -i.bak -r "s#^\s*CONFIG_${key}=.*#CONFIG_${key}\?=${CONFIG[$key]}#g" mk/config.mk
|
2018-10-03 14:58:36 +00:00
|
|
|
done
|
|
|
|
# On FreeBSD sed -i 'SUFFIX' - SUFFIX is mandatory. So no way but to delete the backed file.
|
2018-09-21 14:32:36 +00:00
|
|
|
rm -f mk/config.mk.bak
|
2017-03-30 19:06:49 +00:00
|
|
|
|
2018-03-28 18:24:48 +00:00
|
|
|
# Environment variables
|
2018-09-27 19:40:04 +00:00
|
|
|
[ -n "$CFLAGS" ] && echo "CFLAGS?=$CFLAGS" > mk/cc.flags.mk
|
|
|
|
[ -n "$CXXFLAGS" ] && echo "CXXFLAGS?=$CXXFLAGS" >> mk/cc.flags.mk
|
|
|
|
[ -n "$LDFLAGS" ] && echo "LDFLAGS?=$LDFLAGS" >> mk/cc.flags.mk
|
|
|
|
[ -n "$DESTDIR" ] && echo "DESTDIR?=$DESTDIR" >> mk/cc.flags.mk
|
2018-09-21 14:32:36 +00:00
|
|
|
|
2017-04-03 21:01:12 +00:00
|
|
|
echo "done."
|
2018-09-21 14:32:36 +00:00
|
|
|
|
2018-08-14 17:56:26 +00:00
|
|
|
if [[ "$OSTYPE" == "freebsd"* ]]; then
|
2017-07-13 18:01:45 +00:00
|
|
|
echo "Type 'gmake' to build."
|
2017-05-28 19:35:46 +00:00
|
|
|
else
|
2017-07-13 18:01:45 +00:00
|
|
|
echo "Type 'make' to build."
|
2017-05-28 19:35:46 +00:00
|
|
|
fi
|
2017-03-30 19:06:49 +00:00
|
|
|
|
|
|
|
exit 0
|