configure: switch to arrays when generating CONFIG.local

This patch is preparation for including build configuration in fedora
devel package.

Change-Id: I174e2a9392a2be2efa9d8032cb8c4d8360208781
Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-on: https://review.gerrithub.io/427909
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
Pawel Wodkowski 2018-10-03 16:58:36 +02:00 committed by Jim Harris
parent 461cfcecc6
commit 577df16ab9
3 changed files with 95 additions and 159 deletions

4
CONFIG
View File

@ -63,11 +63,11 @@ CONFIG_TESTS?=y
# Directory that contains the desired SPDK environment library.
# By default, this is implemented using DPDK.
CONFIG_ENV?=$(SPDK_ROOT_DIR)/lib/env_dpdk
CONFIG_ENV?=
# This directory should contain 'include' and 'lib' directories for your DPDK
# installation.
CONFIG_DPDK_DIR?=$(SPDK_ROOT_DIR)/dpdk/build
CONFIG_DPDK_DIR?=
# Build SPDK FIO plugin. Requires CONFIG_FIO_SOURCE_DIR set to a valid
# fio source code directory.

View File

@ -14,6 +14,8 @@ cd $rootdir
date -u
git describe --tags
./configure $config_params
# Print some test system info out for the log
echo "** START ** Info for Hostname: $HOSTNAME"
uname -a

248
configure vendored
View File

@ -66,6 +66,14 @@ function usage()
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#*=}"
@ -82,70 +90,70 @@ for i in "$@"; do
exit 0
;;
--prefix=*)
CONFIG_PREFIX="${i#*=}"
CONFIG[PREFIX]="${i#*=}"
;;
--enable-debug)
CONFIG_DEBUG=y
CONFIG[DEBUG]=y
;;
--disable-debug)
CONFIG_DEBUG=n
CONFIG[DEBUG]=n
;;
--enable-log-bt)
CONFIG_LOG_BACKTRACE=y
CONFIG[LOG_BACKTRACE]=y
;;
--disable-log-bt)
CONFIG_LOG_BACKTRACE=n
CONFIG[LOG_BACKTRACE]=n
;;
--enable-asan)
CONFIG_ASAN=y
CONFIG[ASAN]=y
;;
--disable-asan)
CONFIG_ASAN=n
CONFIG[ASAN]=n
;;
--enable-ubsan)
CONFIG_UBSAN=y
CONFIG[UBSAN]=y
;;
--disable-ubsan)
CONFIG_UBSAN=n
CONFIG[UBSAN]=n
;;
--enable-tsan)
CONFIG_TSAN=y
CONFIG[TSAN]=y
;;
--disable-tsan)
CONFIG_TSAN=n
CONFIG[TSAN]=n
;;
--enable-coverage)
CONFIG_COVERAGE=y
CONFIG[COVERAGE]=y
;;
--disable-coverage)
CONFIG_COVERAGE=n
CONFIG[COVERAGE]=n
;;
--enable-lto)
CONFIG_LTO=y
CONFIG[LTO]=y
;;
--disable-lto)
CONFIG_LTO=n
CONFIG[LTO]=n
;;
--enable-tests)
CONFIG_TESTS=y
CONFIG[TESTS]=y
;;
--disable-tests)
CONFIG_TESTS=n
CONFIG[TESTS]=n
;;
--enable-werror)
CONFIG_WERROR=y
CONFIG[WERROR]=y
;;
--disable-werror)
CONFIG_WERROR=n
CONFIG[WERROR]=n
;;
--with-env=*)
CONFIG_ENV="${i#*=}"
CONFIG[ENV]="${i#*=}"
;;
--with-rbd)
CONFIG_RBD=y
CONFIG[RBD]=y
;;
--without-rbd)
CONFIG_RBD=n
CONFIG[RBD]=n
;;
--with-raid)
echo "--with-raid option ignored and is now deprecated. RAID module is always enabled."
@ -154,87 +162,88 @@ for i in "$@"; do
echo "--without-raid option ignored and is now deprecated. RAID module is always enabled."
;;
--with-rdma)
CONFIG_RDMA=y
CONFIG[RDMA]=y
;;
--without-rdma)
CONFIG_RDMA=n
CONFIG[RDMA]=n
;;
--with-shared)
CONFIG_SHARED=y
CONFIG[SHARED]=y
;;
--without-shared)
CONFIG_SHARED=n
CONFIG[SHARED]=n
;;
--with-iscsi-initiator)
CONFIG_ISCSI_INITIATOR=y
CONFIG[ISCSI_INITIATOR]=y
;;
--without-iscsi-initiator)
CONFIG_ISCSI_INITIATOR=n
CONFIG[ISCSI_INITIATOR]=n
;;
--with-dpdk=*)
check_dir "$i"
CONFIG_DPDK_DIR=$(readlink -f ${i#*=})
CONFIG[DPDK_DIR]=$(readlink -f ${i#*=})
;;
--without-dpdk)
CONFIG_DPDK_DIR=
CONFIG[DPDK_DIR]=
;;
--with-crypto)
CONFIG_CRYPTO=y
CONFIG[CRYPTO]=y
;;
--without-crypto)
CONFIG_CRYPTO=n
CONFIG[CRYPTO]=n
;;
--with-vhost)
CONFIG_VHOST=y
CONFIG[VHOST]=y
;;
--without-vhost)
CONFIG_VHOST=n
CONFIG[VHOST]=n
;;
--with-virtio)
CONFIG_VIRTIO=y
CONFIG[VIRTIO]=y
;;
--without-virtio)
CONFIG_VIRTIO=n
CONFIG[VIRTIO]=n
;;
--with-pmdk)
CONFIG_PMDK=y
CONFIG[PMDK]=y
CONFIG[PMDK_DIR]=""
;;
--with-pmdk=*)
CONFIG_PMDK=y
CONFIG[PMDK]=y
check_dir "$i"
CONFIG_PMDK_DIR=$(readlink -f ${i#*=})
CONFIG[PMDK_DIR]=$(readlink -f ${i#*=})
;;
--without-pmdk)
CONFIG_PMDK=n
CONFIG[PMDK]=n
;;
--with-vpp)
CONFIG_VPP=y
CONFIG[VPP]=y
;;
--with-vpp=*)
CONFIG_VPP=y
CONFIG[VPP]=y
check_dir "$i"
CONFIG_VPP_DIR=$(readlink -f ${i#*=})
CONFIG[VPP_DIR]=$(readlink -f ${i#*=})
;;
--without-vpp)
CONFIG_VPP=n
CONFIG[VPP]=n
;;
--with-fio=*)
check_dir "$i"
CONFIG_FIO_SOURCE_DIR="${i#*=}"
CONFIG_FIO_PLUGIN=y
CONFIG[FIO_SOURCE_DIR]="${i#*=}"
CONFIG[FIO_PLUGIN]=y
;;
--without-fio)
CONFIG_FIO_SOURCE_DIR=
CONFIG_FIO_PLUGIN=n
CONFIG[FIO_SOURCE_DIR]=
CONFIG[FIO_PLUGIN]=n
;;
--with-vtune=*)
check_dir "$i"
CONFIG_VTUNE_DIR="${i#*=}"
CONFIG_VTUNE=y
CONFIG[VTUNE_DIR]="${i#*=}"
CONFIG[VTUNE]=y
;;
--without-vtune)
CONFIG_VTUNE_DIR=
CONFIG_VTUNE=n
CONFIG[VTUNE_DIR]=
CONFIG[VTUNE]=n
;;
--)
break
@ -246,58 +255,64 @@ for i in "$@"; do
esac
done
if [ -z "$CONFIG_ENV" ]; then
if [ -z "$CONFIG_DPDK_DIR" ]; then
rootdir=$(readlink -f $(dirname $0))
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_spdk ]; 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
CONFIG_DPDK_DIR="$rootdir"/dpdk/build
fi
else
if [ "$CONFIG_VHOST" = "y" ]; then
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
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"
CONFIG[VIRTIO]="n"
fi
if [ "$CONFIG_FIO_PLUGIN" = "y" ]; then
if [ -z "$CONFIG_FIO_SOURCE_DIR" ]; then
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
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
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
if [[ "${CONFIG[COVERAGE]}" == "y" ]]; then
echo "ERROR: CONFIG_COVERAGE not available on FreeBSD"
exit 1
fi
fi
if [ "$CONFIG_RDMA" = "y" ]; then
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
@ -307,9 +322,9 @@ if [ "$CONFIG_RDMA" = "y" ]; then
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"
CONFIG[RDMA_SEND_WITH_INVAL]="y"
else
CONFIG_RDMA_SEND_WITH_INVAL="n"
CONFIG[RDMA_SEND_WITH_INVAL]="n"
echo "
*******************************************************************************
WARNING: The Infiniband Verbs opcode Send With Invalidate is either not
@ -328,7 +343,7 @@ than or equal to 4.14 will see significantly reduced performance.
fi
fi
if [[ "$CONFIG_CRYPTO" = "y" ]]; then
if [[ "${CONFIG[CRYPTO]}" = "y" ]]; then
echo NOTE: Crypto is currently marked as experimental. Do not use in production.
set +e
nasm_ver=$(nasm -v | sed 's/[^0-9]*//g' | awk '{print substr ($0, 0, 5)}')
@ -348,93 +363,12 @@ if [[ "$CONFIG_CRYPTO" = "y" ]]; then
fi
echo -n "Creating CONFIG.local..."
# Write the configuration file
rm -f CONFIG.local
if [ -n "$CONFIG_PREFIX" ]; then
echo "CONFIG_PREFIX?=$CONFIG_PREFIX" >> CONFIG.local
fi
if [ -n "$CONFIG_DEBUG" ]; then
echo "CONFIG_DEBUG?=$CONFIG_DEBUG" >> CONFIG.local
fi
if [ -n "$CONFIG_LOG_BACKTRACE" ]; then
echo "CONFIG_LOG_BACKTRACE?=$CONFIG_LOG_BACKTRACE" >> CONFIG.local
fi
if [ -n "$CONFIG_WERROR" ]; then
echo "CONFIG_WERROR?=$CONFIG_WERROR" >> CONFIG.local
fi
if [ -n "$CONFIG_COVERAGE" ]; then
echo "CONFIG_COVERAGE?=$CONFIG_COVERAGE" >> CONFIG.local
fi
if [ -n "$CONFIG_LTO" ]; then
echo "CONFIG_LTO?=$CONFIG_LTO" >> CONFIG.local
fi
if [ -n "$CONFIG_TESTS" ]; then
echo "CONFIG_TESTS?=$CONFIG_TESTS" >> CONFIG.local
fi
if [ -n "$CONFIG_ASAN" ]; then
echo "CONFIG_ASAN?=$CONFIG_ASAN" >> CONFIG.local
fi
if [ -n "$CONFIG_UBSAN" ]; then
echo "CONFIG_UBSAN?=$CONFIG_UBSAN" >> CONFIG.local
fi
if [ -n "$CONFIG_TSAN" ]; then
echo "CONFIG_TSAN?=$CONFIG_TSAN" >> CONFIG.local
fi
if [ -n "$CONFIG_ENV" ]; then
echo "CONFIG_ENV?=$CONFIG_ENV" >> CONFIG.local
fi
if [ -n "$CONFIG_DPDK_DIR" ]; then
echo "CONFIG_DPDK_DIR?=$CONFIG_DPDK_DIR" >> CONFIG.local
fi
if [ -n "$CONFIG_CRYPTO" ]; then
echo "CONFIG_CRYPTO?=$CONFIG_CRYPTO" >> CONFIG.local
fi
if [ -n "$CONFIG_VHOST" ]; then
echo "CONFIG_VHOST?=$CONFIG_VHOST" >> CONFIG.local
fi
if [ -n "$CONFIG_VIRTIO" ]; then
echo "CONFIG_VIRTIO?=$CONFIG_VIRTIO" >> CONFIG.local
fi
if [ -n "$CONFIG_PMDK" ]; then
echo "CONFIG_PMDK?=$CONFIG_PMDK" >> CONFIG.local
fi
if [ -n "$CONFIG_PMDK_DIR" ]; then
echo "CONFIG_PMDK_DIR?=$CONFIG_PMDK_DIR" >> CONFIG.local
fi
if [ -n "$CONFIG_VPP" ]; then
echo "CONFIG_VPP?=$CONFIG_VPP" >> CONFIG.local
fi
if [ -n "$CONFIG_VPP_DIR" ]; then
echo "CONFIG_VPP_DIR?=$CONFIG_VPP_DIR" >> CONFIG.local
fi
if [ -n "$CONFIG_FIO_PLUGIN" ]; then
echo "CONFIG_FIO_PLUGIN?=$CONFIG_FIO_PLUGIN" >> CONFIG.local
fi
if [ -n "$CONFIG_FIO_SOURCE_DIR" ]; then
echo "CONFIG_FIO_SOURCE_DIR?=$CONFIG_FIO_SOURCE_DIR" >> CONFIG.local
fi
if [ -n "$CONFIG_RDMA" ]; then
echo "CONFIG_RDMA?=$CONFIG_RDMA" >> CONFIG.local
fi
if [ -n "$CONFIG_RDMA_SEND_WITH_INVAL" ]; then
echo "CONFIG_RDMA_SEND_WITH_INVAL?=$CONFIG_RDMA_SEND_WITH_INVAL" >> CONFIG.local
fi
if [ -n "$CONFIG_SHARED" ]; then
echo "CONFIG_SHARED?=$CONFIG_SHARED" >> CONFIG.local
fi
if [ -n "$CONFIG_ISCSI_INITIATOR" ]; then
echo "CONFIG_ISCSI_INITIATOR?=$CONFIG_ISCSI_INITIATOR" >> CONFIG.local
fi
if [ -n "$CONFIG_RBD" ]; then
echo "CONFIG_RBD?=$CONFIG_RBD" >> CONFIG.local
fi
if [ -n "$CONFIG_VTUNE" ]; then
echo "CONFIG_VTUNE?=$CONFIG_VTUNE" >> CONFIG.local
fi
if [ -n "$CONFIG_VTUNE_DIR" ]; then
echo "CONFIG_VTUNE_DIR?=$CONFIG_VTUNE_DIR" >> CONFIG.local
fi
cp -f CONFIG CONFIG.local
for key in ${!CONFIG[@]}; do
sed -i.bak -r "s#^\s*CONFIG_${key}\?=.*#CONFIG_${key}\?=${CONFIG[$key]}#g" CONFIG.local
done
# On FreeBSD sed -i 'SUFFIX' - SUFFIX is mandatory. So no way but to delete the backed file.
rm -f CONFIG.local.bak
# Environment variables
if [ -n "$CFLAGS" ]; then