19dd998cdSBen Walker#!/usr/bin/env bash 29dd998cdSBen Walker 39dd998cdSBen Walkerset -e 49dd998cdSBen Walker 514bbde7bSPawel Wodkowskitrap 'echo -e "\n\nConfiguration failed\n\n" >&2' ERR 614bbde7bSPawel Wodkowski 7e62a3c65SSeth Howellrootdir=$(readlink -f $(dirname $0)) 865ed6034SMichal Bergersource "$rootdir/scripts/common.sh" 9e62a3c65SSeth Howell 109dd998cdSBen Walkerfunction usage() 119dd998cdSBen Walker{ 129dd998cdSBen Walker echo "'configure' configures SPDK to compile on supported platforms." 139dd998cdSBen Walker echo "" 149dd998cdSBen Walker echo "Usage: ./configure [OPTION]..." 159dd998cdSBen Walker echo "" 169dd998cdSBen Walker echo "Defaults for the options are specified in brackets." 179dd998cdSBen Walker echo "" 189dd998cdSBen Walker echo "General:" 199dd998cdSBen Walker echo " -h, --help Display this help and exit" 202e7fe8e8SDaniel Verkamp echo "" 212e7fe8e8SDaniel Verkamp echo " --prefix=path Configure installation prefix (default: /usr/local)" 220e6ddfd6SBen Walker echo " --target-arch=arch Target build architecture. Must be a valid GNU arch. Default: native" 232e7fe8e8SDaniel Verkamp echo "" 243def834cSAmelia Blachuciak echo " --cross-prefix=prefix Prefix for cross compilation (default: none)" 253def834cSAmelia Blachuciak echo " example: aarch64-linux-gnu" 263def834cSAmelia Blachuciak echo "" 279dd998cdSBen Walker echo " --enable-debug Configure for debug builds" 289dd998cdSBen Walker echo " --enable-werror Treat compiler warnings as errors" 299dd998cdSBen Walker echo " --enable-asan Enable address sanitizer" 309dd998cdSBen Walker echo " --enable-ubsan Enable undefined behavior sanitizer" 319dd998cdSBen Walker echo " --enable-coverage Enable code coverage tracking" 326d6d1161SDaniel Verkamp echo " --enable-lto Enable link-time optimization" 33995d60f4SBen Walker echo " --enable-pgo-capture Enable generation of profile guided optimization data" 34995d60f4SBen Walker echo " --enable-pgo-use Use previously captured profile guided optimization data" 359fcb1cb0STomasz Zawadzki echo " --disable-tests Disable building of functional tests" 369fcb1cb0STomasz Zawadzki echo " --disable-unit-tests Disable building of unit tests" 379b2c6452SJacek Kalwas echo " --disable-examples Disable building of examples" 389dd998cdSBen Walker echo "" 399dd998cdSBen Walker echo "Specifying Dependencies:" 409dd998cdSBen Walker echo "--with-DEPENDENCY[=path] Use the given dependency. Optionally, provide the" 419dd998cdSBen Walker echo " path." 429dd998cdSBen Walker echo "--without-DEPENDENCY Do not link to the given dependency. This may" 439dd998cdSBen Walker echo " disable features and components." 449dd998cdSBen Walker echo "" 459dd998cdSBen Walker echo "Valid dependencies are listed below." 46161c88a0SDarek Stojaczyk echo " dpdk Build against a custom dpdk version. By default, the dpdk" 47161c88a0SDarek Stojaczyk echo " submodule in spdk tree will be used." 489dd998cdSBen Walker echo " example: /usr/share/dpdk/x86_64-default-linuxapp-gcc" 4906cc8045SBen Walker echo " env Use an alternate environment implementation instead of DPDK." 5006cc8045SBen Walker echo " Implies --without-dpdk." 51161c88a0SDarek Stojaczyk echo " igb-uio-driver Build DPDK's igb-uio driver." 52161c88a0SDarek Stojaczyk echo " Required on some systems to use qat devices. This flag is" 53161c88a0SDarek Stojaczyk echo " effective only with the default dpdk submodule." 5406cc8045SBen Walker echo " No path required" 55e58e9fbdSpaul luse echo " idxd Build the IDXD library and accel framework plug-in module." 56e58e9fbdSpaul luse echo " Disabled while experimental. Only built for x86 when enabled." 57161c88a0SDarek Stojaczyk echo " crypto Build vbdev crypto module." 5806cc8045SBen Walker echo " No path required." 59161c88a0SDarek Stojaczyk echo " fio Build fio_plugin." 60c3329b52SMichal Berger echo " default: /usr/src/fio" 61161c88a0SDarek Stojaczyk echo " vhost Build vhost target. Enabled by default." 6235260f2bSDaniel Verkamp echo " No path required." 63161c88a0SDarek Stojaczyk echo " virtio Build vhost initiator and virtio-pci bdev modules." 647dee96ceSDariusz Stojaczyk echo " No path required." 65*b30d57cdSChangpeng Liu echo " vfio-user Build NVMf custom vfio-user target." 66*b30d57cdSChangpeng Liu echo " No path required." 67161c88a0SDarek Stojaczyk echo " pmdk Build persistent memory bdev." 68218dcd84SJim Harris echo " example: /usr/share/pmdk" 69161c88a0SDarek Stojaczyk echo " reduce Build vbdev compression module." 7097022803SJim Harris echo " No path required." 71161c88a0SDarek Stojaczyk echo " rbd Build Ceph RBD bdev module." 729dd998cdSBen Walker echo " No path required." 73161c88a0SDarek Stojaczyk echo " rdma Build RDMA transport for NVMf target and initiator." 74daee62a0SAlexey Marchuk echo " Accepts optional RDMA provider name. Can be \"verbs\" or \"mlx5_dv\"." 75daee62a0SAlexey Marchuk echo " If no provider specified, \"verbs\" provider is used by default." 76ed56a3d4SAnil Veerabhadrappa echo " fc Build FC transport for NVMf target." 77ed56a3d4SAnil Veerabhadrappa echo " If an argument is provided, it is considered a directory containing" 78ed56a3d4SAnil Veerabhadrappa echo " libufc.a and fc_lld.h. Otherwise the regular system paths will" 79ed56a3d4SAnil Veerabhadrappa echo " be searched." 80161c88a0SDarek Stojaczyk echo " shared Build spdk shared libraries." 810923734cSLance Hartmann echo " No path required." 82161c88a0SDarek Stojaczyk echo " iscsi-initiator Build with iscsi bdev module." 832af15344SJim Harris echo " No path required." 845712088aSRoman Sudarikov echo " vtune Required to profile I/O under Intel VTune Amplifier XE." 855712088aSRoman Sudarikov echo " example: /opt/intel/vtune_amplifier_xe_version" 86161c88a0SDarek Stojaczyk echo " ocf Build OCF library and bdev module." 87d1fee489SVitaliy Mysak echo " If argument is directory, interpret it as root of OCF repo" 88d1fee489SVitaliy Mysak echo " If argument is file, interpret it as compiled OCF lib" 8998d60de6SPiotr Pelplinski echo " If no argument is specified, OCF git submodule is used by default" 90d1fee489SVitaliy Mysak echo " example: /usr/src/ocf/" 918cad9cc1SRichael Zhuang echo " isal Build with ISA-L. Enabled by default on x86 and aarch64 architectures." 92552e21ccSZiye Yang echo " No path required." 93465f4c12SZiye Yang echo " uring Build I/O uring bdev or socket module." 94161c88a0SDarek Stojaczyk echo " If an argument is provided, it is considered a directory containing" 95161c88a0SDarek Stojaczyk echo " liburing.a and io_uring.h. Otherwise the regular system paths will" 96161c88a0SDarek Stojaczyk echo " be searched." 977fa15e28SXiaodong Liu echo " fuse Build FUSE components for mounting a blobfs filesystem." 987fa15e28SXiaodong Liu echo " No path required." 99805d9942STomasz Kulasek echo " nvme-cuse Build NVMe driver with support for CUSE-based character devices." 100805d9942STomasz Kulasek echo " No path required." 10173763d40SArtur Paszkiewicz echo " raid5 Build with bdev_raid module RAID5 support." 10273763d40SArtur Paszkiewicz echo " No path required." 1039dd998cdSBen Walker echo "" 10408ec96ebSDaniel Verkamp echo "Environment variables:" 10508ec96ebSDaniel Verkamp echo "" 10673439e6fSBen Walker echo "CC C compiler" 10708ec96ebSDaniel Verkamp echo "CFLAGS C compiler flags" 10873439e6fSBen Walker echo "CXX C++ compiler" 10908ec96ebSDaniel Verkamp echo "CXXFLAGS C++ compiler flags" 11073439e6fSBen Walker echo "LD Linker" 11108ec96ebSDaniel Verkamp echo "LDFLAGS Linker flags" 11208ec96ebSDaniel Verkamp echo "DESTDIR Destination for 'make install'" 11308ec96ebSDaniel Verkamp echo "" 1149dd998cdSBen Walker} 1159dd998cdSBen Walker 116577df16aSPawel Wodkowski# Load default values 117577df16aSPawel Wodkowski# Convert config to sourcable configuration file 118e62a3c65SSeth Howellsed -r 's/CONFIG_([[:alnum:]_]+)=(.*)/CONFIG[\1]=\2/g' $rootdir/CONFIG > $rootdir/CONFIG.sh 119577df16aSPawel Wodkowskideclare -A CONFIG 120e62a3c65SSeth Howellsource $rootdir/CONFIG.sh 121e62a3c65SSeth Howellrm $rootdir/CONFIG.sh 122577df16aSPawel Wodkowski 1234d2e26d8STomasz Zawadzkifor i in "$@"; do 1244d2e26d8STomasz Zawadzki case "$i" in 1254d2e26d8STomasz Zawadzki --cross-prefix=*) 1264d2e26d8STomasz Zawadzki CONFIG[CROSS_PREFIX]="${i#*=}" 1274d2e26d8STomasz Zawadzki ;; 1284d2e26d8STomasz Zawadzki --enable-lto) 1294d2e26d8STomasz Zawadzki CONFIG[LTO]=y 1304d2e26d8STomasz Zawadzki ;; 1314d2e26d8STomasz Zawadzki --disable-lto) 1324d2e26d8STomasz Zawadzki CONFIG[LTO]=n 1334d2e26d8STomasz Zawadzki ;; 1344d2e26d8STomasz Zawadzki esac 1354d2e26d8STomasz Zawadzkidone 1364d2e26d8STomasz Zawadzki 137873c8748STomasz Kulasek# Detect the compiler toolchain 138873c8748STomasz Kulasek$rootdir/scripts/detect_cc.sh --cc="$CC" --cxx="$CXX" --lto="${CONFIG[LTO]}" --ld="$LD" --cross-prefix="${CONFIG[CROSS_PREFIX]}" > $rootdir/mk/cc.mk 139873c8748STomasz Kulasek 14051d69a7fSJonathan RichardsonCC=$(cat $rootdir/mk/cc.mk | grep "DEFAULT_CC=" | sed s/DEFAULT_CC=//) 141873c8748STomasz KulasekCC_TYPE=$(cat $rootdir/mk/cc.mk | grep "CC_TYPE=" | cut -d "=" -f 2) 142873c8748STomasz Kulasek 143873c8748STomasz Kulasekarch=$($CC -dumpmachine) 1445a764955SMichal Bergersys_name=$(uname -s) 145873c8748STomasz Kulasek 146873c8748STomasz Kulasek# Sanitize default configuration. All parameters set by user explicit should fail 147873c8748STomasz Kulasek# Force no ISA-L if non-x86 or non-aarch64 architecture 148873c8748STomasz Kulasekif [[ "${CONFIG[ISAL]}" = "y" ]]; then 149873c8748STomasz Kulasek if [[ $arch != x86_64* ]] && [[ $arch != aarch64* ]]; then 150873c8748STomasz Kulasek CONFIG[ISAL]=n 151873c8748STomasz Kulasek echo "Notice: ISA-L not supported for ${arch}. Turning off default feature." 152873c8748STomasz Kulasek fi 153873c8748STomasz Kulasekfi 154873c8748STomasz Kulasek 1555a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 156873c8748STomasz Kulasek # Vhost, rte_vhost library and virtio are only supported on Linux. 157873c8748STomasz Kulasek CONFIG[VHOST]="n" 158873c8748STomasz Kulasek CONFIG[VIRTIO]="n" 159873c8748STomasz Kulasek echo "Notice: Vhost, rte_vhost library and virtio are only supported on Linux. Turning off default feature." 160873c8748STomasz Kulasekfi 161873c8748STomasz Kulasek 162325010bfSRichael Zhuang#check nasm only on x86 163325010bfSRichael Zhuangif [[ $arch == x86_64* ]]; then 16465ed6034SMichal Berger ver=$(nasm -v 2>/dev/null | awk '{print $3}') 16565ed6034SMichal Berger if lt "$ver" 2.14; then 16635e54647STomasz Zawadzki # ISA-L, compression & crypto require NASM version 2.14 or newer. 167873c8748STomasz Kulasek CONFIG[ISAL]=n 168873c8748STomasz Kulasek CONFIG[CRYPTO]=n 169873c8748STomasz Kulasek CONFIG[IPSEC_MB]=n 170873c8748STomasz Kulasek CONFIG[REDUCE]=n 171873c8748STomasz Kulasek HAVE_NASM=n 17235e54647STomasz Zawadzki echo "Notice: ISA-L, compression & crypto require NASM version 2.14 or newer. Turning off default ISA-L and crypto features." 173873c8748STomasz Kulasek else 174873c8748STomasz Kulasek HAVE_NASM=y 175873c8748STomasz Kulasek fi 176325010bfSRichael Zhuangfi 177873c8748STomasz Kulasek 1781723a800SGangCaofunction check_dir() { 1791723a800SGangCao arg="$1" 1801723a800SGangCao dir="${arg#*=}" 1811723a800SGangCao if [ ! -d "$dir" ]; then 1821723a800SGangCao echo "$arg: directory not found" 1831723a800SGangCao exit 1 1841723a800SGangCao fi 1851723a800SGangCao} 1861723a800SGangCao 1879dd998cdSBen Walkerfor i in "$@"; do 1889dd998cdSBen Walker case "$i" in 1899dd998cdSBen Walker -h|--help) 1909dd998cdSBen Walker usage 1919dd998cdSBen Walker exit 0 1929dd998cdSBen Walker ;; 1934d2e26d8STomasz Zawadzki --cross-prefix=*) ;& 1944d2e26d8STomasz Zawadzki --enable-lto) ;& 1954d2e26d8STomasz Zawadzki --disable-lto) 1964d2e26d8STomasz Zawadzki # Options handled before detecting CC. 1974d2e26d8STomasz Zawadzki ;; 1982e7fe8e8SDaniel Verkamp --prefix=*) 199577df16aSPawel Wodkowski CONFIG[PREFIX]="${i#*=}" 2002e7fe8e8SDaniel Verkamp ;; 2010e6ddfd6SBen Walker --target-arch=*) 2020e6ddfd6SBen Walker CONFIG[ARCH]="${i#*=}" 2030e6ddfd6SBen Walker ;; 2049dd998cdSBen Walker --enable-debug) 205577df16aSPawel Wodkowski CONFIG[DEBUG]=y 2069dd998cdSBen Walker ;; 2079dd998cdSBen Walker --disable-debug) 208577df16aSPawel Wodkowski CONFIG[DEBUG]=n 2099dd998cdSBen Walker ;; 2109dd998cdSBen Walker --enable-asan) 211577df16aSPawel Wodkowski CONFIG[ASAN]=y 2129dd998cdSBen Walker ;; 2139dd998cdSBen Walker --disable-asan) 214577df16aSPawel Wodkowski CONFIG[ASAN]=n 2159dd998cdSBen Walker ;; 2169dd998cdSBen Walker --enable-ubsan) 217577df16aSPawel Wodkowski CONFIG[UBSAN]=y 2189dd998cdSBen Walker ;; 2199dd998cdSBen Walker --disable-ubsan) 220577df16aSPawel Wodkowski CONFIG[UBSAN]=n 2219dd998cdSBen Walker ;; 222830912e2SBen Walker --enable-tsan) 223577df16aSPawel Wodkowski CONFIG[TSAN]=y 224830912e2SBen Walker ;; 225830912e2SBen Walker --disable-tsan) 226577df16aSPawel Wodkowski CONFIG[TSAN]=n 227830912e2SBen Walker ;; 2289dd998cdSBen Walker --enable-coverage) 229577df16aSPawel Wodkowski CONFIG[COVERAGE]=y 2309dd998cdSBen Walker ;; 2319dd998cdSBen Walker --disable-coverage) 232577df16aSPawel Wodkowski CONFIG[COVERAGE]=n 2339dd998cdSBen Walker ;; 234995d60f4SBen Walker --enable-pgo-capture) 235995d60f4SBen Walker CONFIG[PGO_CAPTURE]=y 236995d60f4SBen Walker ;; 237995d60f4SBen Walker --disable-pgo-capture) 238995d60f4SBen Walker CONFIG[PGO_CAPTURE]=n 239995d60f4SBen Walker ;; 240995d60f4SBen Walker --enable-pgo-use) 241995d60f4SBen Walker CONFIG[PGO_USE]=y 242995d60f4SBen Walker ;; 243995d60f4SBen Walker --disable-pgo-use) 244995d60f4SBen Walker CONFIG[PGO_USE]=n 245995d60f4SBen Walker ;; 2469022a59eSDaniel Verkamp --enable-tests) 247577df16aSPawel Wodkowski CONFIG[TESTS]=y 2489022a59eSDaniel Verkamp ;; 2499022a59eSDaniel Verkamp --disable-tests) 250577df16aSPawel Wodkowski CONFIG[TESTS]=n 2519022a59eSDaniel Verkamp ;; 2529fcb1cb0STomasz Zawadzki --enable-unit-tests) 2539fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=y 2549fcb1cb0STomasz Zawadzki ;; 2559fcb1cb0STomasz Zawadzki --disable-unit-tests) 2569fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=n 2579fcb1cb0STomasz Zawadzki ;; 2589b2c6452SJacek Kalwas --enable-examples) 2599b2c6452SJacek Kalwas CONFIG[EXAMPLES]=y 2609b2c6452SJacek Kalwas ;; 2619b2c6452SJacek Kalwas --disable-examples) 2629b2c6452SJacek Kalwas CONFIG[EXAMPLES]=n 2639b2c6452SJacek Kalwas ;; 2649dd998cdSBen Walker --enable-werror) 265577df16aSPawel Wodkowski CONFIG[WERROR]=y 2669dd998cdSBen Walker ;; 2679dd998cdSBen Walker --disable-werror) 268577df16aSPawel Wodkowski CONFIG[WERROR]=n 2699dd998cdSBen Walker ;; 27006cc8045SBen Walker --with-dpdk=*) 27106cc8045SBen Walker check_dir "$i" 27206cc8045SBen Walker CONFIG[DPDK_DIR]=$(readlink -f ${i#*=}) 27306cc8045SBen Walker ;; 27406cc8045SBen Walker --without-dpdk) 27506cc8045SBen Walker CONFIG[DPDK_DIR]= 27606cc8045SBen Walker ;; 2779dd998cdSBen Walker --with-env=*) 278577df16aSPawel Wodkowski CONFIG[ENV]="${i#*=}" 2799dd998cdSBen Walker ;; 2809dd998cdSBen Walker --with-rbd) 281577df16aSPawel Wodkowski CONFIG[RBD]=y 2829dd998cdSBen Walker ;; 2839dd998cdSBen Walker --without-rbd) 284577df16aSPawel Wodkowski CONFIG[RBD]=n 2859dd998cdSBen Walker ;; 286daee62a0SAlexey Marchuk --with-rdma=*) 287daee62a0SAlexey Marchuk CONFIG[RDMA]=y 288daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]=${i#*=} 289daee62a0SAlexey Marchuk ;; 2909dd998cdSBen Walker --with-rdma) 291577df16aSPawel Wodkowski CONFIG[RDMA]=y 292daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]="verbs" 2939dd998cdSBen Walker ;; 2949dd998cdSBen Walker --without-rdma) 295577df16aSPawel Wodkowski CONFIG[RDMA]=n 2969dd998cdSBen Walker ;; 297ed56a3d4SAnil Veerabhadrappa --with-fc=*) 298ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 299ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]=$(readlink -f ${i#*=}) 300ed56a3d4SAnil Veerabhadrappa ;; 301ed56a3d4SAnil Veerabhadrappa --with-fc) 302ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 303ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 304ed56a3d4SAnil Veerabhadrappa ;; 305ed56a3d4SAnil Veerabhadrappa --without-fc) 306ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=n 307ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 308ed56a3d4SAnil Veerabhadrappa ;; 3090923734cSLance Hartmann --with-shared) 310577df16aSPawel Wodkowski CONFIG[SHARED]=y 3110923734cSLance Hartmann ;; 3120923734cSLance Hartmann --without-shared) 313577df16aSPawel Wodkowski CONFIG[SHARED]=n 3140923734cSLance Hartmann ;; 3152af15344SJim Harris --with-iscsi-initiator) 316577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=y 3172af15344SJim Harris ;; 3182af15344SJim Harris --without-iscsi-initiator) 319577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=n 3202af15344SJim Harris ;; 3216118b853SDaniel Verkamp --with-crypto) 322577df16aSPawel Wodkowski CONFIG[CRYPTO]=y 3236118b853SDaniel Verkamp ;; 3246118b853SDaniel Verkamp --without-crypto) 325577df16aSPawel Wodkowski CONFIG[CRYPTO]=n 3266118b853SDaniel Verkamp ;; 32735260f2bSDaniel Verkamp --with-vhost) 328577df16aSPawel Wodkowski CONFIG[VHOST]=y 32935260f2bSDaniel Verkamp ;; 33035260f2bSDaniel Verkamp --without-vhost) 331577df16aSPawel Wodkowski CONFIG[VHOST]=n 33235260f2bSDaniel Verkamp ;; 3337dee96ceSDariusz Stojaczyk --with-virtio) 334577df16aSPawel Wodkowski CONFIG[VIRTIO]=y 3357dee96ceSDariusz Stojaczyk ;; 3367dee96ceSDariusz Stojaczyk --without-virtio) 337577df16aSPawel Wodkowski CONFIG[VIRTIO]=n 3387dee96ceSDariusz Stojaczyk ;; 339*b30d57cdSChangpeng Liu --with-vfio-user) 340*b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=y 341*b30d57cdSChangpeng Liu ;; 342*b30d57cdSChangpeng Liu --without-vfio-user) 343*b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=n 344*b30d57cdSChangpeng Liu ;; 345218dcd84SJim Harris --with-pmdk) 346577df16aSPawel Wodkowski CONFIG[PMDK]=y 347577df16aSPawel Wodkowski CONFIG[PMDK_DIR]="" 348fca11f15SPiotr Pelplinski ;; 349218dcd84SJim Harris --with-pmdk=*) 350577df16aSPawel Wodkowski CONFIG[PMDK]=y 3511723a800SGangCao check_dir "$i" 352577df16aSPawel Wodkowski CONFIG[PMDK_DIR]=$(readlink -f ${i#*=}) 353fca11f15SPiotr Pelplinski ;; 354218dcd84SJim Harris --without-pmdk) 355577df16aSPawel Wodkowski CONFIG[PMDK]=n 356fca11f15SPiotr Pelplinski ;; 35797022803SJim Harris --with-reduce) 35897022803SJim Harris CONFIG[REDUCE]=y 35997022803SJim Harris ;; 36097022803SJim Harris --without-reduce) 36197022803SJim Harris CONFIG[REDUCE]=n 36297022803SJim Harris ;; 363c3329b52SMichal Berger --with-fio) ;& 3649dd998cdSBen Walker --with-fio=*) 365c3329b52SMichal Berger if [[ ${i#*=} != "$i" ]]; then 366c3329b52SMichal Berger CONFIG[FIO_SOURCE_DIR]=$(readlink -f "${i#*=}") 367c3329b52SMichal Berger fi 368c3329b52SMichal Berger check_dir "--with-fio=${CONFIG[FIO_SOURCE_DIR]}" 369577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=y 3709dd998cdSBen Walker ;; 3719dd998cdSBen Walker --without-fio) 372577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=n 3739dd998cdSBen Walker ;; 3745712088aSRoman Sudarikov --with-vtune=*) 3751723a800SGangCao check_dir "$i" 376577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]="${i#*=}" 377577df16aSPawel Wodkowski CONFIG[VTUNE]=y 3785712088aSRoman Sudarikov ;; 3795712088aSRoman Sudarikov --without-vtune) 380577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]= 381577df16aSPawel Wodkowski CONFIG[VTUNE]=n 3825712088aSRoman Sudarikov ;; 3839abf7e8fSSeth Howell --with-igb-uio-driver) 3849abf7e8fSSeth Howell CONFIG[IGB_UIO_DRIVER]=y 3859abf7e8fSSeth Howell ;; 3869abf7e8fSSeth Howell --without-igb-uio-driver) 3879abf7e8fSSeth Howell CONFIG[IGB_UIO_DRIVER]=n 3889abf7e8fSSeth Howell ;; 38998d60de6SPiotr Pelplinski --with-ocf) 39098d60de6SPiotr Pelplinski CONFIG[OCF]=y 39198d60de6SPiotr Pelplinski CONFIG[OCF_PATH]=$(readlink -f "./ocf") 39298d60de6SPiotr Pelplinski ;; 393d1fee489SVitaliy Mysak --with-ocf=*) 394d1fee489SVitaliy Mysak CONFIG[OCF]=y 395d1fee489SVitaliy Mysak CONFIG[OCF_PATH]=$(readlink -f ${i#*=}) 396d1fee489SVitaliy Mysak ;; 397d1fee489SVitaliy Mysak --without-ocf) 398d1fee489SVitaliy Mysak CONFIG[OCF]=n 399d1fee489SVitaliy Mysak CONFIG[OCF_PATH]= 400d1fee489SVitaliy Mysak ;; 401552e21ccSZiye Yang --with-isal) 402552e21ccSZiye Yang CONFIG[ISAL]=y 403552e21ccSZiye Yang ;; 404552e21ccSZiye Yang --without-isal) 405552e21ccSZiye Yang CONFIG[ISAL]=n 406552e21ccSZiye Yang ;; 4078165bf71SBen Walker --with-uring=*) 4088165bf71SBen Walker CONFIG[URING]=y 4098165bf71SBen Walker CONFIG[URING_PATH]=$(readlink -f ${i#*=}) 4108165bf71SBen Walker ;; 4118165bf71SBen Walker --with-uring) 4128165bf71SBen Walker CONFIG[URING]=y 4138165bf71SBen Walker CONFIG[URING_PATH]= 4148165bf71SBen Walker ;; 4158165bf71SBen Walker --without-uring) 4168165bf71SBen Walker CONFIG[URING]=n 4178165bf71SBen Walker CONFIG[URING_PATH]= 4188165bf71SBen Walker ;; 4197fa15e28SXiaodong Liu --with-fuse) 4207fa15e28SXiaodong Liu CONFIG[FUSE]=y 4217fa15e28SXiaodong Liu ;; 4227fa15e28SXiaodong Liu --without-fuse) 4237fa15e28SXiaodong Liu CONFIG[FUSE]=n 4247fa15e28SXiaodong Liu ;; 425805d9942STomasz Kulasek --with-nvme-cuse) 426805d9942STomasz Kulasek CONFIG[NVME_CUSE]=y 427805d9942STomasz Kulasek ;; 428805d9942STomasz Kulasek --without-nvme-cuse) 429805d9942STomasz Kulasek CONFIG[NVME_CUSE]=n 430805d9942STomasz Kulasek ;; 43173763d40SArtur Paszkiewicz --with-raid5) 43273763d40SArtur Paszkiewicz CONFIG[RAID5]=y 43373763d40SArtur Paszkiewicz ;; 43473763d40SArtur Paszkiewicz --without-raid5) 43573763d40SArtur Paszkiewicz CONFIG[RAID5]=n 43673763d40SArtur Paszkiewicz ;; 437e58e9fbdSpaul luse --with-idxd) 438e58e9fbdSpaul luse CONFIG[IDXD]=y 439e58e9fbdSpaul luse ;; 440e58e9fbdSpaul luse --without-idxd) 441e58e9fbdSpaul luse CONFIG[IDXD]=n 442e58e9fbdSpaul luse ;; 4439dd998cdSBen Walker --) 4449dd998cdSBen Walker break 4459dd998cdSBen Walker ;; 4469dd998cdSBen Walker *) 4479dd998cdSBen Walker echo "Unrecognized option $i" 4489dd998cdSBen Walker usage 4499dd998cdSBen Walker exit 1 4509dd998cdSBen Walker esac 4519dd998cdSBen Walkerdone 4529dd998cdSBen Walker 453131c9aadSAlexey Marchukif [[ $arch == x86_64* ]]; then 45400dd9e85SSeth Howell BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS -march=native) 455131c9aadSAlexey Marchukelse 456131c9aadSAlexey Marchuk BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS) 457131c9aadSAlexey Marchukfi 4586c23a6f4SMichal BergerBUILD_CMD+=(-I/usr/local/include -L/usr/local/lib) 45973439e6fSBen Walker 460*b30d57cdSChangpeng Liufunction set_os_id_version() { 461*b30d57cdSChangpeng Liu if [[ -f /etc/os-release ]]; then 462*b30d57cdSChangpeng Liu source /etc/os-release 463*b30d57cdSChangpeng Liu fi 464*b30d57cdSChangpeng Liu 465*b30d57cdSChangpeng Liu OSID=$ID 466*b30d57cdSChangpeng Liu OSVERSION=$VERSION_ID 467*b30d57cdSChangpeng Liu 468*b30d57cdSChangpeng Liu echo "OS-ID: $OSID | OS-Version: $OSVERSION" 469*b30d57cdSChangpeng Liu} 470*b30d57cdSChangpeng Liu 471*b30d57cdSChangpeng Liuif [[ "${CONFIG[VFIO_USER]}" = "y" ]]; then 472*b30d57cdSChangpeng Liu if [[ $arch != x86_64* ]] || [[ $sys_name == "FreeBSD" ]]; then 473*b30d57cdSChangpeng Liu echo "Non x86_64 and Linux platform, disable CONFIG_VFIO_USER" 474*b30d57cdSChangpeng Liu CONFIG[VFIO_USER]="n" 475*b30d57cdSChangpeng Liu break 476*b30d57cdSChangpeng Liu fi 477*b30d57cdSChangpeng Liu 478*b30d57cdSChangpeng Liu set_os_id_version 479*b30d57cdSChangpeng Liu 480*b30d57cdSChangpeng Liu # disable tests on ubuntu16 due to lack of macro definition in pci_regs.h 481*b30d57cdSChangpeng Liu if [[ $OSID == "ubuntu" ]] && [[ $OSVERSION == "16.04" ]]; then 482*b30d57cdSChangpeng Liu echo "ubuntu16 OS, disable CONFIG_VFIO_USER" 483*b30d57cdSChangpeng Liu CONFIG[VFIO_USER]="n" 484*b30d57cdSChangpeng Liu break 485*b30d57cdSChangpeng Liu fi 486*b30d57cdSChangpeng Liu 487*b30d57cdSChangpeng Liu if ! hash cmake; then 488*b30d57cdSChangpeng Liu echo "cmake not installed, disable CONFIG_VFIO_USER" 489*b30d57cdSChangpeng Liu CONFIG[VFIO_USER]="n" 490*b30d57cdSChangpeng Liu break 491*b30d57cdSChangpeng Liu fi 492*b30d57cdSChangpeng Liu 493*b30d57cdSChangpeng Liu if [[ ! -d /usr/include/json-c ]] && [[ ! -d /usr/local/include/json-c ]]; then 494*b30d57cdSChangpeng Liu echo "json-c-devel not installed, disable CONFIG_VFIO_USER" 495*b30d57cdSChangpeng Liu CONFIG[VFIO_USER]="n" 496*b30d57cdSChangpeng Liu break 497*b30d57cdSChangpeng Liu fi 498*b30d57cdSChangpeng Liu 499*b30d57cdSChangpeng Liu if [[ ! -e /usr/include/cmocka.h ]] && [[ ! -e /usr/local/include/cmocka.h ]]; then 500*b30d57cdSChangpeng Liu echo "libcmocka-devel not installed, disable CONFIG_VFIO_USER" 501*b30d57cdSChangpeng Liu CONFIG[VFIO_USER]="n" 502*b30d57cdSChangpeng Liu break 503*b30d57cdSChangpeng Liu fi 504*b30d57cdSChangpeng Liu 505*b30d57cdSChangpeng Liufi 506*b30d57cdSChangpeng Liu 507e58e9fbdSpaul luse# IDXD uses Intel specific instructions. 508e58e9fbdSpaul luseif [[ "${CONFIG[IDXD]}" = "y" ]]; then 5092755fbdfSpaul luse if [ $(uname -s) == "FreeBSD" ]; then 5102755fbdfSpaul luse intel="hw.model: Intel" 5112755fbdfSpaul luse cpu_vendor=$(sysctl -a | grep hw.model | cut -c 1-15) 5122755fbdfSpaul luse else 513e58e9fbdSpaul luse intel="GenuineIntel" 514e58e9fbdSpaul luse cpu_vendor=$(grep -i 'vendor' /proc/cpuinfo --max-count=1) 5152755fbdfSpaul luse fi 516e58e9fbdSpaul luse if [[ "$cpu_vendor" != *"$intel"* ]]; then 517e58e9fbdSpaul luse echo "ERROR: IDXD cannot be used due to CPU incompatiblity." 518e58e9fbdSpaul luse exit 1 519e58e9fbdSpaul luse fi 520e58e9fbdSpaul lusefi 521e58e9fbdSpaul luse 5228cad9cc1SRichael Zhuang# Detect architecture and force no ISA-L if non-x86 or non-aarch64 architecture 523c510bd88SBen Walkerif [[ "${CONFIG[ISAL]}" = "y" ]]; then 5248cad9cc1SRichael Zhuang if [[ $arch != x86_64* ]] && [[ $arch != aarch64* ]]; then 525873c8748STomasz Kulasek echo "ERROR: ISA-L cannot be used due to CPU incompatiblity." 526873c8748STomasz Kulasek exit 1 527552e21ccSZiye Yang fi 528c510bd88SBen Walkerfi 529552e21ccSZiye Yang 530d9d4e40dSpaul luseif [[ "${CONFIG[ISAL]}" = "n" ]] && [[ "${CONFIG[REDUCE]}" = "y" ]]; then 531d9d4e40dSpaul luse echo "ERROR Conflicting options: --with-reduce is not compatible with --without-isal." 532d9d4e40dSpaul luse exit 1 533d9d4e40dSpaul lusefi 534d9d4e40dSpaul luse 535577df16aSPawel Wodkowskiif [ -z "${CONFIG[ENV]}" ]; then 536577df16aSPawel Wodkowski CONFIG[ENV]=$rootdir/lib/env_dpdk 537577df16aSPawel Wodkowski echo "Using default SPDK env in ${CONFIG[ENV]}" 538577df16aSPawel Wodkowski if [ -z "${CONFIG[DPDK_DIR]}" ]; then 53938e26cf5STomasz Zawadzki if [ ! -f "$rootdir"/dpdk/config/meson.build ]; then 540d199eb29SDaniel Verkamp echo "DPDK not found; please specify --with-dpdk=<path> or run:" 541d199eb29SDaniel Verkamp echo 542d199eb29SDaniel Verkamp echo " git submodule update --init" 543d199eb29SDaniel Verkamp exit 1 544577df16aSPawel Wodkowski else 545577df16aSPawel Wodkowski CONFIG[DPDK_DIR]="${rootdir}/dpdk/build" 546577df16aSPawel Wodkowski echo "Using default DPDK in ${CONFIG[DPDK_DIR]}" 547d199eb29SDaniel Verkamp fi 5489dd998cdSBen Walker fi 5497d2a2f52SBen Walkerelse 55006cc8045SBen Walker if [ -n "${CONFIG[DPDK_DIR]}" ]; then 55106cc8045SBen Walker echo "--with-env and --with-dpdk are mutually exclusive." 55206cc8045SBen Walker exit 1 55306cc8045SBen Walker fi 55406cc8045SBen Walker 555577df16aSPawel Wodkowski if [ "${CONFIG[VHOST]}" = "y" ]; then 5567d2a2f52SBen Walker echo "Vhost is only supported when using the default DPDK environment. Disabling it." 5577d2a2f52SBen Walker fi 5587d2a2f52SBen Walker # Always disable vhost, but only print the error message if the user explicitly turned it on. 559577df16aSPawel Wodkowski CONFIG[VHOST]="n" 560577df16aSPawel Wodkowski if [ "${CONFIG[VIRTIO]}" = "y" ]; then 5617d2a2f52SBen Walker echo "Virtio is only supported when using the default DPDK environment. Disabling it." 5627d2a2f52SBen Walker fi 5637d2a2f52SBen Walker # Always disable virtio, but only print the error message if the user explicitly turned it on. 564577df16aSPawel Wodkowski CONFIG[VIRTIO]="n" 5659dd998cdSBen Walkerfi 5669dd998cdSBen Walker 567577df16aSPawel Wodkowskiif [ "${CONFIG[VTUNE]}" = "y" ]; then 568577df16aSPawel Wodkowski if [ -z "${CONFIG[VTUNE_DIR]}" ]; then 5695712088aSRoman Sudarikov echo "When VTune is enabled, you must specify the VTune directory using --with-vtune=path" 5705712088aSRoman Sudarikov exit 1 5715712088aSRoman Sudarikov fi 5725712088aSRoman Sudarikovfi 5735712088aSRoman Sudarikov 574577df16aSPawel Wodkowskiif [ "${CONFIG[ASAN]}" = "y" -a "${CONFIG[TSAN]}" = "y" ]; then 575830912e2SBen Walker echo "ERROR: ASAN and TSAN cannot be enabled at the same time." 576830912e2SBen Walker exit 1 577830912e2SBen Walkerfi 578830912e2SBen Walker 5795a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 5805091cadcSPaul Luse # FreeBSD doesn't support all configurations 581577df16aSPawel Wodkowski if [[ "${CONFIG[COVERAGE]}" == "y" ]]; then 5825091cadcSPaul Luse echo "ERROR: CONFIG_COVERAGE not available on FreeBSD" 5835091cadcSPaul Luse exit 1 5845091cadcSPaul Luse fi 5855091cadcSPaul Lusefi 5865091cadcSPaul Luse 5875a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 58827b920a2SDarek Stojaczyk if [[ "${CONFIG[VHOST]}" == "y" ]]; then 589873c8748STomasz Kulasek echo "Vhost is only supported on Linux." 590873c8748STomasz Kulasek exit 1 59127b920a2SDarek Stojaczyk fi 59227b920a2SDarek Stojaczyk if [[ "${CONFIG[VIRTIO]}" == "y" ]]; then 593873c8748STomasz Kulasek echo "Virtio is only supported on Linux." 594873c8748STomasz Kulasek exit 1 59527b920a2SDarek Stojaczyk fi 59627b920a2SDarek Stojaczykfi 59727b920a2SDarek Stojaczyk 598577df16aSPawel Wodkowskiif [ "${CONFIG[RDMA]}" = "y" ]; then 599daee62a0SAlexey Marchuk if [[ ! "${CONFIG[RDMA_PROV]}" == "verbs" ]] && [[ ! "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]]; then 600daee62a0SAlexey Marchuk echo "Invalid RDMA provider specified, must be \"verbs\" or \"mlx5_dv\"" 601daee62a0SAlexey Marchuk exit 1 602daee62a0SAlexey Marchuk fi 603daee62a0SAlexey Marchuk 604eed0c6beSDarek Stojaczyk if ! echo -e '#include <infiniband/verbs.h>\n#include <rdma/rdma_verbs.h>\n' \ 605eed0c6beSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 60643a713f9SSeth Howell | ${BUILD_CMD[@]} -libverbs -lrdmacm - 2>/dev/null; then 607eed0c6beSDarek Stojaczyk echo --with-rdma requires libverbs and librdmacm. 608eed0c6beSDarek Stojaczyk echo Please install then re-run this script. 609eed0c6beSDarek Stojaczyk exit 1 610eed0c6beSDarek Stojaczyk fi 611eed0c6beSDarek Stojaczyk 612eed0c6beSDarek Stojaczyk if echo -e '#include <infiniband/verbs.h>\n' \ 613eed0c6beSDarek Stojaczyk 'int main(void) { return !!IBV_WR_SEND_WITH_INV; }\n' \ 61443a713f9SSeth Howell | ${BUILD_CMD[@]} -c - 2>/dev/null; then 615577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="y" 6167671073bSSeth Howell else 617577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="n" 61817a819f8SJim Harris echo " 6197671073bSSeth Howell******************************************************************************* 6207671073bSSeth HowellWARNING: The Infiniband Verbs opcode Send With Invalidate is either not 6217671073bSSeth Howellsupported or is not functional with the current version of libibverbs installed 6227671073bSSeth Howellon this system. Please upgrade to at least version 1.1. 6237671073bSSeth Howell 6247671073bSSeth HowellBeginning with Linux kernel 4.14, the kernel NVMe-oF initiator leverages Send 6257671073bSSeth HowellWith Invalidate RDMA operations to improve performance. Failing to use the 6267671073bSSeth HowellSend With Invalidate operation on the NVMe-oF target side results in full 6277671073bSSeth Howellfunctionality, but greatly reduced performance. The SPDK NVMe-oF target will 6287671073bSSeth Howellbe unable to leverage that operation using the currently installed version 6297671073bSSeth Howellof libibverbs, so Linux kernel NVMe-oF initiators based on kernels greater 6307671073bSSeth Howellthan or equal to 4.14 will see significantly reduced performance. 63117a819f8SJim Harris*******************************************************************************" 6327671073bSSeth Howell fi 63394966468SAlexey Marchuk 63494966468SAlexey Marchuk if echo -e '#include <rdma/rdma_cma.h>\n' \ 63594966468SAlexey Marchuk 'int main(void) { return !!RDMA_OPTION_ID_ACK_TIMEOUT; }\n' \ 63694966468SAlexey Marchuk | ${BUILD_CMD[@]} -c - 2>/dev/null; then 63794966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="y" 63894966468SAlexey Marchuk else 63994966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="n" 64094966468SAlexey Marchuk echo "RDMA_OPTION_ID_ACK_TIMEOUT is not supported" 64194966468SAlexey Marchuk fi 64294966468SAlexey Marchuk 643daee62a0SAlexey Marchuk if [ "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]; then 644daee62a0SAlexey Marchuk if ! echo -e '#include <spdk/stdinc.h>\n' \ 645daee62a0SAlexey Marchuk '#include <infiniband/mlx5dv.h>\n' \ 646daee62a0SAlexey Marchuk '#include <rdma/rdma_cma.h>\n' \ 647daee62a0SAlexey Marchuk 'int main(void) { return rdma_establish(NULL) || ' \ 648daee62a0SAlexey Marchuk '!!IBV_QP_INIT_ATTR_SEND_OPS_FLAGS || !!MLX5_OPCODE_RDMA_WRITE; }\n' \ 649daee62a0SAlexey Marchuk | ${BUILD_CMD[@]} -lmlx5 -I${rootdir}/include -c - 2>/dev/null; then 650daee62a0SAlexey Marchuk echo "mlx5_dv provider is not supported" 651daee62a0SAlexey Marchuk exit 1 652daee62a0SAlexey Marchuk fi 653daee62a0SAlexey Marchuk fi 654daee62a0SAlexey Marchuk 655daee62a0SAlexey Marchuk echo "Using "${CONFIG[RDMA_PROV]}" RDMA provider" 6567671073bSSeth Howellfi 6577671073bSSeth Howell 658ed56a3d4SAnil Veerabhadrappaif [[ "${CONFIG[FC]}" = "y" ]]; then 659ed56a3d4SAnil Veerabhadrappa if [[ -n "${CONFIG[FC_PATH]}" ]]; then 660ed56a3d4SAnil Veerabhadrappa if [ ! -d "${CONFIG[FC_PATH]}" ]; then 661ed56a3d4SAnil Veerabhadrappa echo "${CONFIG[FC_PATH]}: directory not found" 662ed56a3d4SAnil Veerabhadrappa exit 1 663ed56a3d4SAnil Veerabhadrappa fi 664ed56a3d4SAnil Veerabhadrappa fi 665ed56a3d4SAnil Veerabhadrappafi 666ed56a3d4SAnil Veerabhadrappa 667552e21ccSZiye Yangif [[ "${CONFIG[ISAL]}" = "y" ]] || [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 668325010bfSRichael Zhuang if [[ "${HAVE_NASM}" = "n" ]] && [[ $arch == x86_64* ]]; then 66935e54647STomasz Zawadzki echo "ERROR: ISA-L, compression & crypto require NASM version 2.14 or newer." 670873c8748STomasz Kulasek echo "Please install or upgrade them re-run this script." 671873c8748STomasz Kulasek exit 1 672552e21ccSZiye Yang else 673552e21ccSZiye Yang if [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 674552e21ccSZiye Yang CONFIG[IPSEC_MB]=y 675552e21ccSZiye Yang fi 676552e21ccSZiye Yang fi 677552e21ccSZiye Yangfi 678552e21ccSZiye Yang 679552e21ccSZiye Yangif [[ "${CONFIG[ISAL]}" = "y" ]]; then 680385f42ebSDarek Stojaczyk if [ ! -f "$rootdir"/isa-l/autogen.sh ]; then 681a89dbbffSBen Walker echo "ISA-L was not found; To install ISA-L run:" 682552e21ccSZiye Yang echo " git submodule update --init" 683b324f73cSPaul Luse exit 1 6840fb1e1c5SPaul Luse fi 685552e21ccSZiye Yang 686552e21ccSZiye Yang cd $rootdir/isa-l 687e4aee795SAlexey Marchuk ISAL_LOG=$rootdir/isa-l/spdk-isal.log 688552e21ccSZiye Yang echo -n "Configuring ISA-L (logfile: $ISAL_LOG)..." 689552e21ccSZiye Yang ./autogen.sh &> $ISAL_LOG 690552e21ccSZiye Yang ./configure CFLAGS="-fPIC -g -O2" --enable-shared=no >> $ISAL_LOG 2>&1 691552e21ccSZiye Yang echo "done." 692552e21ccSZiye Yang cd $rootdir 693552e21ccSZiye Yangfi 6947671073bSSeth Howell 695ce711726SDarek Stojaczykif [[ "${CONFIG[PMDK]}" = "y" ]]; then 696ce711726SDarek Stojaczyk if ! echo -e '#include <libpmemblk.h>\nint main(void) { return 0; }\n' \ 69743a713f9SSeth Howell | ${BUILD_CMD[@]} -lpmemblk - 2>/dev/null; then 698ce711726SDarek Stojaczyk echo --with-pmdk requires libpmemblk. 699ce711726SDarek Stojaczyk echo Please install then re-run this script. 700ce711726SDarek Stojaczyk exit 1 701ce711726SDarek Stojaczyk fi 702ce711726SDarek Stojaczykfi 703ce711726SDarek Stojaczyk 70497022803SJim Harrisif [[ "${CONFIG[REDUCE]}" = "y" ]]; then 705c4a3b312SDarek Stojaczyk if ! echo -e '#include <libpmem.h>\nint main(void) { return 0; }\n' \ 70643a713f9SSeth Howell | ${BUILD_CMD[@]} -lpmem - 2>/dev/null; then 70797022803SJim Harris echo --with-reduce requires libpmem. 70897022803SJim Harris echo Please install then re-run this script. 70997022803SJim Harris exit 1 71097022803SJim Harris fi 71197022803SJim Harrisfi 71297022803SJim Harris 713805d9942STomasz Kulasekif [[ "${CONFIG[NVME_CUSE]}" = "y" ]]; then 714805d9942STomasz Kulasek if ! echo -e '#define FUSE_USE_VERSION 31\n#include <fuse3/cuse_lowlevel.h>\n#include <fuse3/fuse_lowlevel.h>\n#include <fuse3/fuse_opt.h>\nint main(void) { return 0; }\n' \ 715805d9942STomasz Kulasek | ${BUILD_CMD[@]} -lfuse3 -D_FILE_OFFSET_BITS=64 - 2>/dev/null; then 716805d9942STomasz Kulasek echo --with-cuse requires libfuse3. 717805d9942STomasz Kulasek echo Please install then re-run this script. 718805d9942STomasz Kulasek exit 1 719805d9942STomasz Kulasek fi 720805d9942STomasz Kulasekfi 721805d9942STomasz Kulasek 72255bd0d3aSDarek Stojaczykif [[ "${CONFIG[RBD]}" = "y" ]]; then 72355bd0d3aSDarek Stojaczyk if ! echo -e '#include <rbd/librbd.h>\n#include <rados/librados.h>\n' \ 72455bd0d3aSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 72543a713f9SSeth Howell | ${BUILD_CMD[@]} -lrados -lrbd - 2>/dev/null; then 72655bd0d3aSDarek Stojaczyk echo --with-rbd requires librados and librbd. 72755bd0d3aSDarek Stojaczyk echo Please install then re-run this script. 72855bd0d3aSDarek Stojaczyk exit 1 72955bd0d3aSDarek Stojaczyk fi 73055bd0d3aSDarek Stojaczykfi 73155bd0d3aSDarek Stojaczyk 7325cb18040SDarek Stojaczykif [[ "${CONFIG[ISCSI_INITIATOR]}" = "y" ]]; then 7335cb18040SDarek Stojaczyk # Fedora installs libiscsi to /usr/lib64/iscsi for some reason. 7345cb18040SDarek Stojaczyk if ! echo -e '#include <iscsi/iscsi.h>\n#include <iscsi/scsi-lowlevel.h>\n' \ 7355cb18040SDarek Stojaczyk '#if LIBISCSI_API_VERSION < 20150621\n' \ 7365cb18040SDarek Stojaczyk '#error\n' \ 7375cb18040SDarek Stojaczyk '#endif\n' \ 7385cb18040SDarek Stojaczyk 'int main(void) { return 0; }\n' \ 73943a713f9SSeth Howell | ${BUILD_CMD[@]} -L/usr/lib64/iscsi -liscsi - 2>/dev/null; then 7405cb18040SDarek Stojaczyk echo --with-iscsi-initiator requires libiscsi with 7415cb18040SDarek Stojaczyk echo 'LIBISCSI_API_VERSION >= 20150621.' 7425cb18040SDarek Stojaczyk echo Please install then re-run this script. 7435cb18040SDarek Stojaczyk exit 1 7445cb18040SDarek Stojaczyk fi 7455cb18040SDarek Stojaczykfi 7465cb18040SDarek Stojaczyk 7473674c1d3SDarek Stojaczykif [[ "${CONFIG[ASAN]}" = "y" ]]; then 7483674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 74943a713f9SSeth Howell | ${BUILD_CMD[@]} -fsanitize=address - 2>/dev/null; then 7503674c1d3SDarek Stojaczyk echo --enable-asan requires libasan. 7513674c1d3SDarek Stojaczyk echo Please install then re-run this script. 7523674c1d3SDarek Stojaczyk exit 1 7533674c1d3SDarek Stojaczyk fi 7543674c1d3SDarek Stojaczykfi 7553674c1d3SDarek Stojaczyk 7563674c1d3SDarek Stojaczykif [[ "${CONFIG[UBSAN]}" = "y" ]]; then 7573674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 75843a713f9SSeth Howell | ${BUILD_CMD[@]} -fsanitize=undefined - 2>/dev/null; then 7593674c1d3SDarek Stojaczyk echo --enable-ubsan requires libubsan. 7603674c1d3SDarek Stojaczyk echo Please install then re-run this script. 761fa729fd3SWANGHAILIANG echo If installed, please check that the GCC version is at least 6.4 \ 762fa729fd3SWANGHAILIANG and synchronize CC accordingly. 7633674c1d3SDarek Stojaczyk exit 1 7643674c1d3SDarek Stojaczyk fi 7653674c1d3SDarek Stojaczykfi 7663674c1d3SDarek Stojaczyk 7673674c1d3SDarek Stojaczykif [[ "${CONFIG[TSAN]}" = "y" ]]; then 7683674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 76943a713f9SSeth Howell | ${BUILD_CMD[@]} -fsanitize=thread - 2>/dev/null; then 7703674c1d3SDarek Stojaczyk echo --enable-tsan requires libtsan. 7713674c1d3SDarek Stojaczyk echo Please install then re-run this script. 7723674c1d3SDarek Stojaczyk exit 1 7733674c1d3SDarek Stojaczyk fi 7743674c1d3SDarek Stojaczykfi 7753674c1d3SDarek Stojaczyk 776d1fee489SVitaliy Mysakif [[ "${CONFIG[OCF]}" = "y" ]]; then 777d1fee489SVitaliy Mysak # If OCF_PATH is a file, assume it is a library and use it to compile with 778d1fee489SVitaliy Mysak if [ -f ${CONFIG[OCF_PATH]} ]; then 779d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=y 780d1fee489SVitaliy Mysak else 781d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=n 782d1fee489SVitaliy Mysak fi 783d1fee489SVitaliy Mysakfi 784d1fee489SVitaliy Mysak 785995d60f4SBen Walkerif [[ "${CONFIG[PGO_CAPTURE]}" = "y" && "${CONFIG[PGO_USE]}" = "y" ]]; then 786995d60f4SBen Walker echo "ERROR: --enable-pgo-capture and --enable-pgo-use are mutually exclusive." 787995d60f4SBen Walker exit 1 788954728e9SBen Walkerelif [[ "${CONFIG[PGO_USE]}" = "y" ]]; then 789954728e9SBen Walker if [[ "$CC_TYPE" = "clang" ]]; then 790954728e9SBen Walker # For clang we need to run an extra step on gathered profiling data. 791954728e9SBen Walker echo "Generating suitable profile data" 792954728e9SBen Walker llvm-profdata merge -output=build/pgo/default.profdata build/pgo 793954728e9SBen Walker fi 794995d60f4SBen Walkerfi 795995d60f4SBen Walker 7968165bf71SBen Walkerif [[ "${CONFIG[URING]}" = "y" ]]; then 7978165bf71SBen Walker if [[ -n "${CONFIG[URING_PATH]}" ]]; then 7988165bf71SBen Walker if [ ! -d "${CONFIG[URING_PATH]}" ]; then 7998165bf71SBen Walker echo "${CONFIG[URING_PATH]}: directory not found" 8008165bf71SBen Walker exit 1 8018165bf71SBen Walker fi 8028165bf71SBen Walker fi 8038165bf71SBen Walkerfi 804995d60f4SBen Walker 8057fa15e28SXiaodong Liuif [[ "${CONFIG[FUSE]}" = "y" ]]; then 8067fa15e28SXiaodong Liu if [[ ! -d /usr/include/fuse3 ]] && [[ ! -d /usr/local/include/fuse3 ]]; then 8077fa15e28SXiaodong Liu echo "--with-fuse requires libfuse3." 8087fa15e28SXiaodong Liu echo "Please install then re-run this script." 8097fa15e28SXiaodong Liu exit 1 8107fa15e28SXiaodong Liu fi 8117fa15e28SXiaodong Liufi 8127fa15e28SXiaodong Liu 81348f70f48SPawel Wodkowski# We are now ready to generate final configuration. But first do sanity 81448f70f48SPawel Wodkowski# check to see if all keys in CONFIG array have its reflection in CONFIG file. 815e62a3c65SSeth Howellif [ $(egrep -c "^\s*CONFIG_[[:alnum:]_]+=" $rootdir/CONFIG) -ne ${#CONFIG[@]} ]; then 81648f70f48SPawel Wodkowski echo "" 81748f70f48SPawel Wodkowski echo "BUG: Some configuration options are not present in CONFIG file. Please update this file." 81848f70f48SPawel Wodkowski echo "Missing options in CONFIG (+) file and in current config (-): " 81948f70f48SPawel Wodkowski diff -u --label "CONFIG file" --label "CONFIG[@]" \ 82085bc2bbeSPawel Wodkowski <(sed -r -e '/^\s*$/d; /^\s*#.*/d; s/(CONFIG_[[:alnum:]_]+)=.*/\1/g' CONFIG | sort) \ 82148f70f48SPawel Wodkowski <(printf "CONFIG_%s\n" ${!CONFIG[@]} | sort) 82248f70f48SPawel Wodkowski exit 1 82348f70f48SPawel Wodkowskifi 82448f70f48SPawel Wodkowski 82585bc2bbeSPawel Wodkowskiecho -n "Creating mk/config.mk..." 826e62a3c65SSeth Howellcp -f $rootdir/CONFIG $rootdir/mk/config.mk 827577df16aSPawel Wodkowskifor key in ${!CONFIG[@]}; do 828e62a3c65SSeth Howell sed -i.bak -r "s#^\s*CONFIG_${key}=.*#CONFIG_${key}\?=${CONFIG[$key]}#g" $rootdir/mk/config.mk 829577df16aSPawel Wodkowskidone 830577df16aSPawel Wodkowski# On FreeBSD sed -i 'SUFFIX' - SUFFIX is mandatory. So no way but to delete the backed file. 831e62a3c65SSeth Howellrm -f $rootdir/mk/config.mk.bak 832baa6eac0SDarek Stojaczykecho "done." 8339dd998cdSBen Walker 83408ec96ebSDaniel Verkamp# Environment variables 835baa6eac0SDarek Stojaczykecho -n "Creating mk/cc.flags.mk..." 836e62a3c65SSeth Howellrm -f $rootdir/mk/cc.flags.mk 837e62a3c65SSeth Howell[ -n "$CFLAGS" ] && echo "CFLAGS?=$CFLAGS" > $rootdir/mk/cc.flags.mk 838e62a3c65SSeth Howell[ -n "$CXXFLAGS" ] && echo "CXXFLAGS?=$CXXFLAGS" >> $rootdir/mk/cc.flags.mk 839e62a3c65SSeth Howell[ -n "$LDFLAGS" ] && echo "LDFLAGS?=$LDFLAGS" >> $rootdir/mk/cc.flags.mk 840e62a3c65SSeth Howell[ -n "$DESTDIR" ] && echo "DESTDIR?=$DESTDIR" >> $rootdir/mk/cc.flags.mk 8410b56a5b4SJim Harrisecho "done." 84285bc2bbeSPawel Wodkowski 843db3ebfe6SMichal Berger# Create .sh with build config for easy sourcing|lookup during the tests. 844db3ebfe6SMichal Bergerfor conf in "${!CONFIG[@]}"; do 845db3ebfe6SMichal Berger echo "CONFIG_$conf=${CONFIG[$conf]}" 846db3ebfe6SMichal Bergerdone >"$rootdir/test/common/build_config.sh" 847db3ebfe6SMichal Berger 8485a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 849870ce250SPaul Luse echo "Type 'gmake' to build." 850870ce250SPaul Luseelse 8510b56a5b4SJim Harris echo "Type 'make' to build." 852870ce250SPaul Lusefi 8539dd998cdSBen Walker 8549dd998cdSBen Walkerexit 0 855