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)) 8e62a3c65SSeth Howell 99dd998cdSBen Walkerfunction usage() 109dd998cdSBen Walker{ 119dd998cdSBen Walker echo "'configure' configures SPDK to compile on supported platforms." 129dd998cdSBen Walker echo "" 139dd998cdSBen Walker echo "Usage: ./configure [OPTION]..." 149dd998cdSBen Walker echo "" 159dd998cdSBen Walker echo "Defaults for the options are specified in brackets." 169dd998cdSBen Walker echo "" 179dd998cdSBen Walker echo "General:" 189dd998cdSBen Walker echo " -h, --help Display this help and exit" 192e7fe8e8SDaniel Verkamp echo "" 202e7fe8e8SDaniel Verkamp echo " --prefix=path Configure installation prefix (default: /usr/local)" 210e6ddfd6SBen Walker echo " --target-arch=arch Target build architecture. Must be a valid GNU arch. Default: native" 222e7fe8e8SDaniel Verkamp echo "" 233def834cSAmelia Blachuciak echo " --cross-prefix=prefix Prefix for cross compilation (default: none)" 243def834cSAmelia Blachuciak echo " example: aarch64-linux-gnu" 253def834cSAmelia Blachuciak echo "" 269dd998cdSBen Walker echo " --enable-debug Configure for debug builds" 27ae2b2f64SPawel Wodkowski echo " --enable-log-bt Enable support of backtrace printing in SPDK logs (requires libunwind)." 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" 55161c88a0SDarek Stojaczyk echo " crypto Build vbdev crypto module." 5606cc8045SBen Walker echo " No path required." 57161c88a0SDarek Stojaczyk echo " fio Build fio_plugin." 589dd998cdSBen Walker echo " example: /usr/src/fio" 59161c88a0SDarek Stojaczyk echo " vhost Build vhost target. Enabled by default." 6035260f2bSDaniel Verkamp echo " No path required." 61161c88a0SDarek Stojaczyk echo " internal-vhost-lib Use the internal copy of rte_vhost. By default, the upstream" 62161c88a0SDarek Stojaczyk echo " rte_vhost from DPDK will be used." 632b846accSDarek Stojaczyk echo " No path required." 64161c88a0SDarek Stojaczyk echo " virtio Build vhost initiator and virtio-pci bdev modules." 657dee96ceSDariusz Stojaczyk echo " No path required." 66161c88a0SDarek Stojaczyk echo " pmdk Build persistent memory bdev." 67218dcd84SJim Harris echo " example: /usr/share/pmdk" 68161c88a0SDarek Stojaczyk echo " reduce Build vbdev compression module." 6997022803SJim Harris echo " No path required." 70161c88a0SDarek Stojaczyk echo " vpp Build VPP net module." 7198516945SLiang Yan echo " example: /vpp_repo/build-root/rpmbuild/vpp-18.01.1.0/build-root/install-vpp-native/vpp" 72161c88a0SDarek Stojaczyk echo " rbd Build Ceph RBD bdev module." 739dd998cdSBen Walker echo " No path required." 74161c88a0SDarek Stojaczyk echo " rdma Build RDMA transport for NVMf target and initiator." 759dd998cdSBen Walker echo " No path required." 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." 93161c88a0SDarek Stojaczyk echo " uring Build I/O uring bdev." 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 123873c8748STomasz Kulasek# Detect the compiler toolchain 124873c8748STomasz Kulasek$rootdir/scripts/detect_cc.sh --cc="$CC" --cxx="$CXX" --lto="${CONFIG[LTO]}" --ld="$LD" --cross-prefix="${CONFIG[CROSS_PREFIX]}" > $rootdir/mk/cc.mk 125873c8748STomasz Kulasek 126873c8748STomasz KulasekCC=$(cat $rootdir/mk/cc.mk | grep "DEFAULT_CC=" | cut -d "=" -f 2) 127873c8748STomasz KulasekCC_TYPE=$(cat $rootdir/mk/cc.mk | grep "CC_TYPE=" | cut -d "=" -f 2) 128873c8748STomasz Kulasek 129873c8748STomasz Kulasekarch=$($CC -dumpmachine) 130*5a764955SMichal Bergersys_name=$(uname -s) 131873c8748STomasz Kulasek 132873c8748STomasz Kulasek# Sanitize default configuration. All parameters set by user explicit should fail 133873c8748STomasz Kulasek# Force no ISA-L if non-x86 or non-aarch64 architecture 134873c8748STomasz Kulasekif [[ "${CONFIG[ISAL]}" = "y" ]]; then 135873c8748STomasz Kulasek if [[ $arch != x86_64* ]] && [[ $arch != aarch64* ]]; then 136873c8748STomasz Kulasek CONFIG[ISAL]=n 137873c8748STomasz Kulasek echo "Notice: ISA-L not supported for ${arch}. Turning off default feature." 138873c8748STomasz Kulasek fi 139873c8748STomasz Kulasekfi 140873c8748STomasz Kulasek 141*5a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 142873c8748STomasz Kulasek # Vhost, rte_vhost library and virtio are only supported on Linux. 143873c8748STomasz Kulasek CONFIG[VHOST]="n" 144873c8748STomasz Kulasek CONFIG[VHOST_INTERNAL_LIB]="n" 145873c8748STomasz Kulasek CONFIG[VIRTIO]="n" 146873c8748STomasz Kulasek echo "Notice: Vhost, rte_vhost library and virtio are only supported on Linux. Turning off default feature." 147873c8748STomasz Kulasekfi 148873c8748STomasz Kulasek 149325010bfSRichael Zhuang#check nasm only on x86 150325010bfSRichael Zhuangif [[ $arch == x86_64* ]]; then 151873c8748STomasz Kulasek ver=$(nasm -v 2>/dev/null | awk '{print $3}' | sed 's/[^0-9]*//g') 152873c8748STomasz Kulasek if [[ "${ver:0:1}" -le "2" ]] && [[ "${ver:0:3}" -le "213" ]] && [[ "${ver:0:5}" -lt "21303" ]]; then 153873c8748STomasz Kulasek # ISA-L, compression & crypto require NASM version 2.13.03 or newer. 154873c8748STomasz Kulasek CONFIG[ISAL]=n 155873c8748STomasz Kulasek CONFIG[CRYPTO]=n 156873c8748STomasz Kulasek CONFIG[IPSEC_MB]=n 157873c8748STomasz Kulasek CONFIG[REDUCE]=n 158873c8748STomasz Kulasek HAVE_NASM=n 159873c8748STomasz Kulasek echo "Notice: ISA-L, compression & crypto require NASM version 2.13.03 or newer. Turning off default ISA-L and crypto features." 160873c8748STomasz Kulasek else 161873c8748STomasz Kulasek HAVE_NASM=y 162873c8748STomasz Kulasek fi 163325010bfSRichael Zhuangfi 164873c8748STomasz Kulasek 1651723a800SGangCaofunction check_dir() { 1661723a800SGangCao arg="$1" 1671723a800SGangCao dir="${arg#*=}" 1681723a800SGangCao if [ ! -d "$dir" ]; then 1691723a800SGangCao echo "$arg: directory not found" 1701723a800SGangCao exit 1 1711723a800SGangCao fi 1721723a800SGangCao} 1731723a800SGangCao 1749dd998cdSBen Walkerfor i in "$@"; do 1759dd998cdSBen Walker case "$i" in 1769dd998cdSBen Walker -h|--help) 1779dd998cdSBen Walker usage 1789dd998cdSBen Walker exit 0 1799dd998cdSBen Walker ;; 1802e7fe8e8SDaniel Verkamp --prefix=*) 181577df16aSPawel Wodkowski CONFIG[PREFIX]="${i#*=}" 1822e7fe8e8SDaniel Verkamp ;; 1830e6ddfd6SBen Walker --target-arch=*) 1840e6ddfd6SBen Walker CONFIG[ARCH]="${i#*=}" 1850e6ddfd6SBen Walker ;; 1863def834cSAmelia Blachuciak --cross-prefix=*) 1873def834cSAmelia Blachuciak CONFIG[CROSS_PREFIX]="${i#*=}" 1883def834cSAmelia Blachuciak ;; 1899dd998cdSBen Walker --enable-debug) 190577df16aSPawel Wodkowski CONFIG[DEBUG]=y 1919dd998cdSBen Walker ;; 1929dd998cdSBen Walker --disable-debug) 193577df16aSPawel Wodkowski CONFIG[DEBUG]=n 1949dd998cdSBen Walker ;; 195ae2b2f64SPawel Wodkowski --enable-log-bt) 196577df16aSPawel Wodkowski CONFIG[LOG_BACKTRACE]=y 197ae2b2f64SPawel Wodkowski ;; 198ae2b2f64SPawel Wodkowski --disable-log-bt) 199577df16aSPawel Wodkowski CONFIG[LOG_BACKTRACE]=n 200848daf27SPawel Wodkowski ;; 2019dd998cdSBen Walker --enable-asan) 202577df16aSPawel Wodkowski CONFIG[ASAN]=y 2039dd998cdSBen Walker ;; 2049dd998cdSBen Walker --disable-asan) 205577df16aSPawel Wodkowski CONFIG[ASAN]=n 2069dd998cdSBen Walker ;; 2079dd998cdSBen Walker --enable-ubsan) 208577df16aSPawel Wodkowski CONFIG[UBSAN]=y 2099dd998cdSBen Walker ;; 2109dd998cdSBen Walker --disable-ubsan) 211577df16aSPawel Wodkowski CONFIG[UBSAN]=n 2129dd998cdSBen Walker ;; 213830912e2SBen Walker --enable-tsan) 214577df16aSPawel Wodkowski CONFIG[TSAN]=y 215830912e2SBen Walker ;; 216830912e2SBen Walker --disable-tsan) 217577df16aSPawel Wodkowski CONFIG[TSAN]=n 218830912e2SBen Walker ;; 2199dd998cdSBen Walker --enable-coverage) 220577df16aSPawel Wodkowski CONFIG[COVERAGE]=y 2219dd998cdSBen Walker ;; 2229dd998cdSBen Walker --disable-coverage) 223577df16aSPawel Wodkowski CONFIG[COVERAGE]=n 2249dd998cdSBen Walker ;; 2256d6d1161SDaniel Verkamp --enable-lto) 226577df16aSPawel Wodkowski CONFIG[LTO]=y 2276d6d1161SDaniel Verkamp ;; 2286d6d1161SDaniel Verkamp --disable-lto) 229577df16aSPawel Wodkowski CONFIG[LTO]=n 2306d6d1161SDaniel Verkamp ;; 231995d60f4SBen Walker --enable-pgo-capture) 232995d60f4SBen Walker CONFIG[PGO_CAPTURE]=y 233995d60f4SBen Walker ;; 234995d60f4SBen Walker --disable-pgo-capture) 235995d60f4SBen Walker CONFIG[PGO_CAPTURE]=n 236995d60f4SBen Walker ;; 237995d60f4SBen Walker --enable-pgo-use) 238995d60f4SBen Walker CONFIG[PGO_USE]=y 239995d60f4SBen Walker ;; 240995d60f4SBen Walker --disable-pgo-use) 241995d60f4SBen Walker CONFIG[PGO_USE]=n 242995d60f4SBen Walker ;; 2439022a59eSDaniel Verkamp --enable-tests) 244577df16aSPawel Wodkowski CONFIG[TESTS]=y 2459022a59eSDaniel Verkamp ;; 2469022a59eSDaniel Verkamp --disable-tests) 247577df16aSPawel Wodkowski CONFIG[TESTS]=n 2489022a59eSDaniel Verkamp ;; 2499fcb1cb0STomasz Zawadzki --enable-unit-tests) 2509fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=y 2519fcb1cb0STomasz Zawadzki ;; 2529fcb1cb0STomasz Zawadzki --disable-unit-tests) 2539fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=n 2549fcb1cb0STomasz Zawadzki ;; 2559b2c6452SJacek Kalwas --enable-examples) 2569b2c6452SJacek Kalwas CONFIG[EXAMPLES]=y 2579b2c6452SJacek Kalwas ;; 2589b2c6452SJacek Kalwas --disable-examples) 2599b2c6452SJacek Kalwas CONFIG[EXAMPLES]=n 2609b2c6452SJacek Kalwas ;; 2619dd998cdSBen Walker --enable-werror) 262577df16aSPawel Wodkowski CONFIG[WERROR]=y 2639dd998cdSBen Walker ;; 2649dd998cdSBen Walker --disable-werror) 265577df16aSPawel Wodkowski CONFIG[WERROR]=n 2669dd998cdSBen Walker ;; 26706cc8045SBen Walker --with-dpdk=*) 26806cc8045SBen Walker check_dir "$i" 26906cc8045SBen Walker CONFIG[DPDK_DIR]=$(readlink -f ${i#*=}) 27006cc8045SBen Walker ;; 27106cc8045SBen Walker --without-dpdk) 27206cc8045SBen Walker CONFIG[DPDK_DIR]= 27306cc8045SBen Walker ;; 2749dd998cdSBen Walker --with-env=*) 275577df16aSPawel Wodkowski CONFIG[ENV]="${i#*=}" 2769dd998cdSBen Walker ;; 2779dd998cdSBen Walker --with-rbd) 278577df16aSPawel Wodkowski CONFIG[RBD]=y 2799dd998cdSBen Walker ;; 2809dd998cdSBen Walker --without-rbd) 281577df16aSPawel Wodkowski CONFIG[RBD]=n 2829dd998cdSBen Walker ;; 2839dd998cdSBen Walker --with-rdma) 284577df16aSPawel Wodkowski CONFIG[RDMA]=y 2859dd998cdSBen Walker ;; 2869dd998cdSBen Walker --without-rdma) 287577df16aSPawel Wodkowski CONFIG[RDMA]=n 2889dd998cdSBen Walker ;; 289ed56a3d4SAnil Veerabhadrappa --with-fc=*) 290ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 291ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]=$(readlink -f ${i#*=}) 292ed56a3d4SAnil Veerabhadrappa ;; 293ed56a3d4SAnil Veerabhadrappa --with-fc) 294ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 295ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 296ed56a3d4SAnil Veerabhadrappa ;; 297ed56a3d4SAnil Veerabhadrappa --without-fc) 298ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=n 299ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 300ed56a3d4SAnil Veerabhadrappa ;; 3010923734cSLance Hartmann --with-shared) 302577df16aSPawel Wodkowski CONFIG[SHARED]=y 3030923734cSLance Hartmann ;; 3040923734cSLance Hartmann --without-shared) 305577df16aSPawel Wodkowski CONFIG[SHARED]=n 3060923734cSLance Hartmann ;; 3072af15344SJim Harris --with-iscsi-initiator) 308577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=y 3092af15344SJim Harris ;; 3102af15344SJim Harris --without-iscsi-initiator) 311577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=n 3122af15344SJim Harris ;; 3136118b853SDaniel Verkamp --with-crypto) 314577df16aSPawel Wodkowski CONFIG[CRYPTO]=y 3156118b853SDaniel Verkamp ;; 3166118b853SDaniel Verkamp --without-crypto) 317577df16aSPawel Wodkowski CONFIG[CRYPTO]=n 3186118b853SDaniel Verkamp ;; 31935260f2bSDaniel Verkamp --with-vhost) 320577df16aSPawel Wodkowski CONFIG[VHOST]=y 32135260f2bSDaniel Verkamp ;; 32235260f2bSDaniel Verkamp --without-vhost) 323577df16aSPawel Wodkowski CONFIG[VHOST]=n 32435260f2bSDaniel Verkamp ;; 3252b846accSDarek Stojaczyk --with-internal-vhost-lib) 3262b846accSDarek Stojaczyk CONFIG[VHOST_INTERNAL_LIB]=y 3272b846accSDarek Stojaczyk ;; 3282b846accSDarek Stojaczyk --without-internal-vhost-lib) 3292b846accSDarek Stojaczyk CONFIG[VHOST_INTERNAL_LIB]=n 3302b846accSDarek Stojaczyk ;; 3317dee96ceSDariusz Stojaczyk --with-virtio) 332577df16aSPawel Wodkowski CONFIG[VIRTIO]=y 3337dee96ceSDariusz Stojaczyk ;; 3347dee96ceSDariusz Stojaczyk --without-virtio) 335577df16aSPawel Wodkowski CONFIG[VIRTIO]=n 3367dee96ceSDariusz Stojaczyk ;; 337218dcd84SJim Harris --with-pmdk) 338577df16aSPawel Wodkowski CONFIG[PMDK]=y 339577df16aSPawel Wodkowski CONFIG[PMDK_DIR]="" 340fca11f15SPiotr Pelplinski ;; 341218dcd84SJim Harris --with-pmdk=*) 342577df16aSPawel Wodkowski CONFIG[PMDK]=y 3431723a800SGangCao check_dir "$i" 344577df16aSPawel Wodkowski CONFIG[PMDK_DIR]=$(readlink -f ${i#*=}) 345fca11f15SPiotr Pelplinski ;; 346218dcd84SJim Harris --without-pmdk) 347577df16aSPawel Wodkowski CONFIG[PMDK]=n 348fca11f15SPiotr Pelplinski ;; 34997022803SJim Harris --with-reduce) 35097022803SJim Harris CONFIG[REDUCE]=y 35197022803SJim Harris ;; 35297022803SJim Harris --without-reduce) 35397022803SJim Harris CONFIG[REDUCE]=n 35497022803SJim Harris ;; 355e793fad5STomasz Zawadzki --with-vpp) 356577df16aSPawel Wodkowski CONFIG[VPP]=y 357e793fad5STomasz Zawadzki ;; 358e793fad5STomasz Zawadzki --with-vpp=*) 359577df16aSPawel Wodkowski CONFIG[VPP]=y 360e793fad5STomasz Zawadzki check_dir "$i" 361577df16aSPawel Wodkowski CONFIG[VPP_DIR]=$(readlink -f ${i#*=}) 362e793fad5STomasz Zawadzki ;; 363e793fad5STomasz Zawadzki --without-vpp) 364577df16aSPawel Wodkowski CONFIG[VPP]=n 365e793fad5STomasz Zawadzki ;; 3669dd998cdSBen Walker --with-fio=*) 3671723a800SGangCao check_dir "$i" 368577df16aSPawel Wodkowski CONFIG[FIO_SOURCE_DIR]="${i#*=}" 369577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=y 3709dd998cdSBen Walker ;; 3719dd998cdSBen Walker --without-fio) 372577df16aSPawel Wodkowski CONFIG[FIO_SOURCE_DIR]= 373577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=n 3749dd998cdSBen Walker ;; 3755712088aSRoman Sudarikov --with-vtune=*) 3761723a800SGangCao check_dir "$i" 377577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]="${i#*=}" 378577df16aSPawel Wodkowski CONFIG[VTUNE]=y 3795712088aSRoman Sudarikov ;; 3805712088aSRoman Sudarikov --without-vtune) 381577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]= 382577df16aSPawel Wodkowski CONFIG[VTUNE]=n 3835712088aSRoman Sudarikov ;; 3849abf7e8fSSeth Howell --with-igb-uio-driver) 3859abf7e8fSSeth Howell CONFIG[IGB_UIO_DRIVER]=y 3869abf7e8fSSeth Howell ;; 3879abf7e8fSSeth Howell --without-igb-uio-driver) 3889abf7e8fSSeth Howell CONFIG[IGB_UIO_DRIVER]=n 3899abf7e8fSSeth Howell ;; 39098d60de6SPiotr Pelplinski --with-ocf) 39198d60de6SPiotr Pelplinski CONFIG[OCF]=y 39298d60de6SPiotr Pelplinski CONFIG[OCF_PATH]=$(readlink -f "./ocf") 39398d60de6SPiotr Pelplinski ;; 394d1fee489SVitaliy Mysak --with-ocf=*) 395d1fee489SVitaliy Mysak CONFIG[OCF]=y 396d1fee489SVitaliy Mysak CONFIG[OCF_PATH]=$(readlink -f ${i#*=}) 397d1fee489SVitaliy Mysak ;; 398d1fee489SVitaliy Mysak --without-ocf) 399d1fee489SVitaliy Mysak CONFIG[OCF]=n 400d1fee489SVitaliy Mysak CONFIG[OCF_PATH]= 401d1fee489SVitaliy Mysak ;; 402552e21ccSZiye Yang --with-isal) 403552e21ccSZiye Yang CONFIG[ISAL]=y 404552e21ccSZiye Yang ;; 405552e21ccSZiye Yang --without-isal) 406552e21ccSZiye Yang CONFIG[ISAL]=n 407552e21ccSZiye Yang ;; 4088165bf71SBen Walker --with-uring=*) 4098165bf71SBen Walker CONFIG[URING]=y 4108165bf71SBen Walker CONFIG[URING_PATH]=$(readlink -f ${i#*=}) 4118165bf71SBen Walker ;; 4128165bf71SBen Walker --with-uring) 4138165bf71SBen Walker CONFIG[URING]=y 4148165bf71SBen Walker CONFIG[URING_PATH]= 4158165bf71SBen Walker ;; 4168165bf71SBen Walker --without-uring) 4178165bf71SBen Walker CONFIG[URING]=n 4188165bf71SBen Walker CONFIG[URING_PATH]= 4198165bf71SBen Walker ;; 4207fa15e28SXiaodong Liu --with-fuse) 4217fa15e28SXiaodong Liu CONFIG[FUSE]=y 4227fa15e28SXiaodong Liu ;; 4237fa15e28SXiaodong Liu --without-fuse) 4247fa15e28SXiaodong Liu CONFIG[FUSE]=n 4257fa15e28SXiaodong Liu ;; 426805d9942STomasz Kulasek --with-nvme-cuse) 427805d9942STomasz Kulasek CONFIG[NVME_CUSE]=y 428805d9942STomasz Kulasek ;; 429805d9942STomasz Kulasek --without-nvme-cuse) 430805d9942STomasz Kulasek CONFIG[NVME_CUSE]=n 431805d9942STomasz Kulasek ;; 43273763d40SArtur Paszkiewicz --with-raid5) 43373763d40SArtur Paszkiewicz CONFIG[RAID5]=y 43473763d40SArtur Paszkiewicz ;; 43573763d40SArtur Paszkiewicz --without-raid5) 43673763d40SArtur Paszkiewicz CONFIG[RAID5]=n 43773763d40SArtur Paszkiewicz ;; 4389dd998cdSBen Walker --) 4399dd998cdSBen Walker break 4409dd998cdSBen Walker ;; 4419dd998cdSBen Walker *) 4429dd998cdSBen Walker echo "Unrecognized option $i" 4439dd998cdSBen Walker usage 4449dd998cdSBen Walker exit 1 4459dd998cdSBen Walker esac 4469dd998cdSBen Walkerdone 4479dd998cdSBen Walker 448131c9aadSAlexey Marchukif [[ $arch == x86_64* ]]; then 44900dd9e85SSeth Howell BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS -march=native) 450131c9aadSAlexey Marchukelse 451131c9aadSAlexey Marchuk BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS) 452131c9aadSAlexey Marchukfi 45373439e6fSBen Walker 4548cad9cc1SRichael Zhuang# Detect architecture and force no ISA-L if non-x86 or non-aarch64 architecture 455c510bd88SBen Walkerif [[ "${CONFIG[ISAL]}" = "y" ]]; then 4568cad9cc1SRichael Zhuang if [[ $arch != x86_64* ]] && [[ $arch != aarch64* ]]; then 457873c8748STomasz Kulasek echo "ERROR: ISA-L cannot be used due to CPU incompatiblity." 458873c8748STomasz Kulasek exit 1 459552e21ccSZiye Yang fi 460c510bd88SBen Walkerfi 461552e21ccSZiye Yang 462d9d4e40dSpaul luseif [[ "${CONFIG[ISAL]}" = "n" ]] && [[ "${CONFIG[REDUCE]}" = "y" ]]; then 463d9d4e40dSpaul luse echo "ERROR Conflicting options: --with-reduce is not compatible with --without-isal." 464d9d4e40dSpaul luse exit 1 465d9d4e40dSpaul lusefi 466d9d4e40dSpaul luse 467577df16aSPawel Wodkowskiif [ -z "${CONFIG[ENV]}" ]; then 468577df16aSPawel Wodkowski CONFIG[ENV]=$rootdir/lib/env_dpdk 469577df16aSPawel Wodkowski echo "Using default SPDK env in ${CONFIG[ENV]}" 470577df16aSPawel Wodkowski if [ -z "${CONFIG[DPDK_DIR]}" ]; then 4719e655874SDarek Stojaczyk if [ ! -f "$rootdir"/dpdk/config/common_base ]; then 472d199eb29SDaniel Verkamp echo "DPDK not found; please specify --with-dpdk=<path> or run:" 473d199eb29SDaniel Verkamp echo 474d199eb29SDaniel Verkamp echo " git submodule update --init" 475d199eb29SDaniel Verkamp exit 1 476577df16aSPawel Wodkowski else 477577df16aSPawel Wodkowski CONFIG[DPDK_DIR]="${rootdir}/dpdk/build" 478577df16aSPawel Wodkowski echo "Using default DPDK in ${CONFIG[DPDK_DIR]}" 479d199eb29SDaniel Verkamp fi 48017e0283dSDarek Stojaczyk 48117e0283dSDarek Stojaczyk if [[ "${CONFIG[VHOST]}" = "y" ]] && [[ "${CONFIG[VHOST_INTERNAL_LIB]}" = "n" ]]; then 48217e0283dSDarek Stojaczyk # We lookup "common_linux" file to check if DPDK version is >= 19.05. 48317e0283dSDarek Stojaczyk # "common_linux" is available since exactly DPDK 19.05 - it was renamed 48417e0283dSDarek Stojaczyk # from "common_linuxapp". 48517e0283dSDarek Stojaczyk if [ ! -f "$rootdir"/dpdk/config/common_linux ]; then 48617e0283dSDarek Stojaczyk echo "Notice: Using internal, legacy rte_vhost library due to DPDK" \ 48717e0283dSDarek Stojaczyk "version < 19.05" 48817e0283dSDarek Stojaczyk CONFIG[VHOST_INTERNAL_LIB]=y 48917e0283dSDarek Stojaczyk fi 49017e0283dSDarek Stojaczyk fi 49117e0283dSDarek Stojaczyk else 49217e0283dSDarek Stojaczyk if [[ "${CONFIG[VHOST]}" = "y" ]] && [[ "${CONFIG[VHOST_INTERNAL_LIB]}" = "n" ]]; then 49317e0283dSDarek Stojaczyk # DPDK must be already built, so we can simply try to use the new rte_vhost. 49417e0283dSDarek Stojaczyk # It has a number of internal dependencies though, so don't try to link the 49517e0283dSDarek Stojaczyk # program, just compile it 49617e0283dSDarek Stojaczyk if ! echo -e '#include <rte_vhost.h>\n' \ 49717e0283dSDarek Stojaczyk 'int main(void) { return rte_vhost_extern_callback_register(0, NULL, NULL); }\n' \ 49843a713f9SSeth Howell | ${BUILD_CMD[@]} -c -Wno-deprecated-declarations -Werror \ 499e58dfd56SDarek Stojaczyk -I"${CONFIG[DPDK_DIR]}/include" - &>/dev/null; then 50017e0283dSDarek Stojaczyk echo "Notice: DPDK's rte_vhost not found or version < 19.05, using internal," \ 50117e0283dSDarek Stojaczyk "legacy rte_vhost library." 50217e0283dSDarek Stojaczyk CONFIG[VHOST_INTERNAL_LIB]=y 50317e0283dSDarek Stojaczyk fi 50417e0283dSDarek Stojaczyk fi 5059dd998cdSBen Walker fi 5067d2a2f52SBen Walkerelse 50706cc8045SBen Walker if [ -n "${CONFIG[DPDK_DIR]}" ]; then 50806cc8045SBen Walker echo "--with-env and --with-dpdk are mutually exclusive." 50906cc8045SBen Walker exit 1 51006cc8045SBen Walker fi 51106cc8045SBen Walker 512577df16aSPawel Wodkowski if [ "${CONFIG[VHOST]}" = "y" ]; then 5137d2a2f52SBen Walker echo "Vhost is only supported when using the default DPDK environment. Disabling it." 5147d2a2f52SBen Walker fi 5157d2a2f52SBen Walker # Always disable vhost, but only print the error message if the user explicitly turned it on. 516577df16aSPawel Wodkowski CONFIG[VHOST]="n" 517577df16aSPawel Wodkowski if [ "${CONFIG[VIRTIO]}" = "y" ]; then 5187d2a2f52SBen Walker echo "Virtio is only supported when using the default DPDK environment. Disabling it." 5197d2a2f52SBen Walker fi 5207d2a2f52SBen Walker # Always disable virtio, but only print the error message if the user explicitly turned it on. 521577df16aSPawel Wodkowski CONFIG[VIRTIO]="n" 5229dd998cdSBen Walkerfi 5239dd998cdSBen Walker 524577df16aSPawel Wodkowskiif [ "${CONFIG[FIO_PLUGIN]}" = "y" ]; then 525577df16aSPawel Wodkowski if [ -z "${CONFIG[FIO_SOURCE_DIR]}" ]; then 5269dd998cdSBen Walker echo "When fio is enabled, you must specify the fio directory using --with-fio=path" 5279dd998cdSBen Walker exit 1 5289dd998cdSBen Walker fi 529577df16aSPawel Wodkowskielse 530577df16aSPawel Wodkowski CONFIG[FIO_SOURCE_DIR]= 5319dd998cdSBen Walkerfi 5329dd998cdSBen Walker 533577df16aSPawel Wodkowskiif [ "${CONFIG[VTUNE]}" = "y" ]; then 534577df16aSPawel Wodkowski if [ -z "${CONFIG[VTUNE_DIR]}" ]; then 5355712088aSRoman Sudarikov echo "When VTune is enabled, you must specify the VTune directory using --with-vtune=path" 5365712088aSRoman Sudarikov exit 1 5375712088aSRoman Sudarikov fi 5385712088aSRoman Sudarikovfi 5395712088aSRoman Sudarikov 540577df16aSPawel Wodkowskiif [ "${CONFIG[ASAN]}" = "y" -a "${CONFIG[TSAN]}" = "y" ]; then 541830912e2SBen Walker echo "ERROR: ASAN and TSAN cannot be enabled at the same time." 542830912e2SBen Walker exit 1 543830912e2SBen Walkerfi 544830912e2SBen Walker 545*5a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 5465091cadcSPaul Luse # FreeBSD doesn't support all configurations 547577df16aSPawel Wodkowski if [[ "${CONFIG[COVERAGE]}" == "y" ]]; then 5485091cadcSPaul Luse echo "ERROR: CONFIG_COVERAGE not available on FreeBSD" 5495091cadcSPaul Luse exit 1 5505091cadcSPaul Luse fi 5515091cadcSPaul Lusefi 5525091cadcSPaul Luse 553*5a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 55427b920a2SDarek Stojaczyk if [[ "${CONFIG[VHOST]}" == "y" ]]; then 555873c8748STomasz Kulasek echo "Vhost is only supported on Linux." 556873c8748STomasz Kulasek exit 1 55727b920a2SDarek Stojaczyk fi 558d43ee98cSTomasz Zawadzki if [[ "${CONFIG[VHOST_INTERNAL_LIB]}" == "y" ]]; then 559873c8748STomasz Kulasek echo "Internal rte_vhost library is only supported on Linux." 560873c8748STomasz Kulasek exit 1 561d43ee98cSTomasz Zawadzki fi 56227b920a2SDarek Stojaczyk if [[ "${CONFIG[VIRTIO]}" == "y" ]]; then 563873c8748STomasz Kulasek echo "Virtio is only supported on Linux." 564873c8748STomasz Kulasek exit 1 56527b920a2SDarek Stojaczyk fi 56627b920a2SDarek Stojaczykfi 56727b920a2SDarek Stojaczyk 568577df16aSPawel Wodkowskiif [ "${CONFIG[RDMA]}" = "y" ]; then 569eed0c6beSDarek Stojaczyk if ! echo -e '#include <infiniband/verbs.h>\n#include <rdma/rdma_verbs.h>\n' \ 570eed0c6beSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 57143a713f9SSeth Howell | ${BUILD_CMD[@]} -libverbs -lrdmacm - 2>/dev/null; then 572eed0c6beSDarek Stojaczyk echo --with-rdma requires libverbs and librdmacm. 573eed0c6beSDarek Stojaczyk echo Please install then re-run this script. 574eed0c6beSDarek Stojaczyk exit 1 575eed0c6beSDarek Stojaczyk fi 576eed0c6beSDarek Stojaczyk 577eed0c6beSDarek Stojaczyk if echo -e '#include <infiniband/verbs.h>\n' \ 578eed0c6beSDarek Stojaczyk 'int main(void) { return !!IBV_WR_SEND_WITH_INV; }\n' \ 57943a713f9SSeth Howell | ${BUILD_CMD[@]} -c - 2>/dev/null; then 580577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="y" 5817671073bSSeth Howell else 582577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="n" 58317a819f8SJim Harris echo " 5847671073bSSeth Howell******************************************************************************* 5857671073bSSeth HowellWARNING: The Infiniband Verbs opcode Send With Invalidate is either not 5867671073bSSeth Howellsupported or is not functional with the current version of libibverbs installed 5877671073bSSeth Howellon this system. Please upgrade to at least version 1.1. 5887671073bSSeth Howell 5897671073bSSeth HowellBeginning with Linux kernel 4.14, the kernel NVMe-oF initiator leverages Send 5907671073bSSeth HowellWith Invalidate RDMA operations to improve performance. Failing to use the 5917671073bSSeth HowellSend With Invalidate operation on the NVMe-oF target side results in full 5927671073bSSeth Howellfunctionality, but greatly reduced performance. The SPDK NVMe-oF target will 5937671073bSSeth Howellbe unable to leverage that operation using the currently installed version 5947671073bSSeth Howellof libibverbs, so Linux kernel NVMe-oF initiators based on kernels greater 5957671073bSSeth Howellthan or equal to 4.14 will see significantly reduced performance. 59617a819f8SJim Harris*******************************************************************************" 5977671073bSSeth Howell fi 59894966468SAlexey Marchuk 59994966468SAlexey Marchuk if echo -e '#include <rdma/rdma_cma.h>\n' \ 60094966468SAlexey Marchuk 'int main(void) { return !!RDMA_OPTION_ID_ACK_TIMEOUT; }\n' \ 60194966468SAlexey Marchuk | ${BUILD_CMD[@]} -c - 2>/dev/null; then 60294966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="y" 60394966468SAlexey Marchuk else 60494966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="n" 60594966468SAlexey Marchuk echo "RDMA_OPTION_ID_ACK_TIMEOUT is not supported" 60694966468SAlexey Marchuk fi 60794966468SAlexey Marchuk 6087671073bSSeth Howellfi 6097671073bSSeth Howell 610ed56a3d4SAnil Veerabhadrappaif [[ "${CONFIG[FC]}" = "y" ]]; then 611ed56a3d4SAnil Veerabhadrappa if [[ -n "${CONFIG[FC_PATH]}" ]]; then 612ed56a3d4SAnil Veerabhadrappa if [ ! -d "${CONFIG[FC_PATH]}" ]; then 613ed56a3d4SAnil Veerabhadrappa echo "${CONFIG[FC_PATH]}: directory not found" 614ed56a3d4SAnil Veerabhadrappa exit 1 615ed56a3d4SAnil Veerabhadrappa fi 616ed56a3d4SAnil Veerabhadrappa fi 617ed56a3d4SAnil Veerabhadrappafi 618ed56a3d4SAnil Veerabhadrappa 619552e21ccSZiye Yangif [[ "${CONFIG[ISAL]}" = "y" ]] || [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 620325010bfSRichael Zhuang if [[ "${HAVE_NASM}" = "n" ]] && [[ $arch == x86_64* ]]; then 621873c8748STomasz Kulasek echo "ERROR: ISA-L, compression & crypto require NASM version 2.13.03 or newer." 622873c8748STomasz Kulasek echo "Please install or upgrade them re-run this script." 623873c8748STomasz Kulasek exit 1 624552e21ccSZiye Yang else 625552e21ccSZiye Yang if [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 626552e21ccSZiye Yang CONFIG[IPSEC_MB]=y 627552e21ccSZiye Yang fi 628552e21ccSZiye Yang fi 629552e21ccSZiye Yangfi 630552e21ccSZiye Yang 631552e21ccSZiye Yangif [[ "${CONFIG[ISAL]}" = "y" ]]; then 632385f42ebSDarek Stojaczyk if [ ! -f "$rootdir"/isa-l/autogen.sh ]; then 633a89dbbffSBen Walker echo "ISA-L was not found; To install ISA-L run:" 634552e21ccSZiye Yang echo " git submodule update --init" 635b324f73cSPaul Luse exit 1 6360fb1e1c5SPaul Luse fi 637552e21ccSZiye Yang 638552e21ccSZiye Yang cd $rootdir/isa-l 639e4aee795SAlexey Marchuk ISAL_LOG=$rootdir/isa-l/spdk-isal.log 640552e21ccSZiye Yang echo -n "Configuring ISA-L (logfile: $ISAL_LOG)..." 641552e21ccSZiye Yang ./autogen.sh &> $ISAL_LOG 642552e21ccSZiye Yang ./configure CFLAGS="-fPIC -g -O2" --enable-shared=no >> $ISAL_LOG 2>&1 643552e21ccSZiye Yang echo "done." 644552e21ccSZiye Yang cd $rootdir 645552e21ccSZiye Yangfi 6467671073bSSeth Howell 647ce711726SDarek Stojaczykif [[ "${CONFIG[PMDK]}" = "y" ]]; then 648ce711726SDarek Stojaczyk if ! echo -e '#include <libpmemblk.h>\nint main(void) { return 0; }\n' \ 64943a713f9SSeth Howell | ${BUILD_CMD[@]} -lpmemblk - 2>/dev/null; then 650ce711726SDarek Stojaczyk echo --with-pmdk requires libpmemblk. 651ce711726SDarek Stojaczyk echo Please install then re-run this script. 652ce711726SDarek Stojaczyk exit 1 653ce711726SDarek Stojaczyk fi 654ce711726SDarek Stojaczykfi 655ce711726SDarek Stojaczyk 65697022803SJim Harrisif [[ "${CONFIG[REDUCE]}" = "y" ]]; then 657c4a3b312SDarek Stojaczyk if ! echo -e '#include <libpmem.h>\nint main(void) { return 0; }\n' \ 65843a713f9SSeth Howell | ${BUILD_CMD[@]} -lpmem - 2>/dev/null; then 65997022803SJim Harris echo --with-reduce requires libpmem. 66097022803SJim Harris echo Please install then re-run this script. 66197022803SJim Harris exit 1 66297022803SJim Harris fi 66397022803SJim Harrisfi 66497022803SJim Harris 66514a62d67STomasz Kulasekif [[ "${CONFIG[VPP]}" = "y" ]]; then 66614a62d67STomasz Kulasek if [ ! -z "${CONFIG[VPP_DIR]}" ]; then 66714a62d67STomasz Kulasek VPP_CFLAGS="-L${CONFIG[VPP_DIR]}/lib -I${CONFIG[VPP_DIR]}/include" 66814a62d67STomasz Kulasek fi 66914a62d67STomasz Kulasek if ! echo -e '#include <vnet/session/application_interface.h>\nint main(void) { return 0; }\n' \ 67043a713f9SSeth Howell | ${BUILD_CMD[@]} ${VPP_CFLAGS} -lvppinfra -lsvm -lvlibmemoryclient - 2>/dev/null; then 67114a62d67STomasz Kulasek echo --with-vpp requires installed vpp. 67214a62d67STomasz Kulasek echo Please install then re-run this script. 67314a62d67STomasz Kulasek exit 1 67414a62d67STomasz Kulasek fi 67514a62d67STomasz Kulasekfi 67614a62d67STomasz Kulasek 677805d9942STomasz Kulasekif [[ "${CONFIG[NVME_CUSE]}" = "y" ]]; then 678805d9942STomasz 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' \ 679805d9942STomasz Kulasek | ${BUILD_CMD[@]} -lfuse3 -D_FILE_OFFSET_BITS=64 - 2>/dev/null; then 680805d9942STomasz Kulasek echo --with-cuse requires libfuse3. 681805d9942STomasz Kulasek echo Please install then re-run this script. 682805d9942STomasz Kulasek exit 1 683805d9942STomasz Kulasek fi 684805d9942STomasz Kulasekfi 685805d9942STomasz Kulasek 68655bd0d3aSDarek Stojaczykif [[ "${CONFIG[RBD]}" = "y" ]]; then 68755bd0d3aSDarek Stojaczyk if ! echo -e '#include <rbd/librbd.h>\n#include <rados/librados.h>\n' \ 68855bd0d3aSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 68943a713f9SSeth Howell | ${BUILD_CMD[@]} -lrados -lrbd - 2>/dev/null; then 69055bd0d3aSDarek Stojaczyk echo --with-rbd requires librados and librbd. 69155bd0d3aSDarek Stojaczyk echo Please install then re-run this script. 69255bd0d3aSDarek Stojaczyk exit 1 69355bd0d3aSDarek Stojaczyk fi 69455bd0d3aSDarek Stojaczykfi 69555bd0d3aSDarek Stojaczyk 6965cb18040SDarek Stojaczykif [[ "${CONFIG[ISCSI_INITIATOR]}" = "y" ]]; then 6975cb18040SDarek Stojaczyk # Fedora installs libiscsi to /usr/lib64/iscsi for some reason. 6985cb18040SDarek Stojaczyk if ! echo -e '#include <iscsi/iscsi.h>\n#include <iscsi/scsi-lowlevel.h>\n' \ 6995cb18040SDarek Stojaczyk '#if LIBISCSI_API_VERSION < 20150621\n' \ 7005cb18040SDarek Stojaczyk '#error\n' \ 7015cb18040SDarek Stojaczyk '#endif\n' \ 7025cb18040SDarek Stojaczyk 'int main(void) { return 0; }\n' \ 70343a713f9SSeth Howell | ${BUILD_CMD[@]} -L/usr/lib64/iscsi -liscsi - 2>/dev/null; then 7045cb18040SDarek Stojaczyk echo --with-iscsi-initiator requires libiscsi with 7055cb18040SDarek Stojaczyk echo 'LIBISCSI_API_VERSION >= 20150621.' 7065cb18040SDarek Stojaczyk echo Please install then re-run this script. 7075cb18040SDarek Stojaczyk exit 1 7085cb18040SDarek Stojaczyk fi 7095cb18040SDarek Stojaczykfi 7105cb18040SDarek Stojaczyk 71102406e56SDarek Stojaczykif [[ "${CONFIG[LOG_BACKTRACE]}" = "y" ]]; then 71202406e56SDarek Stojaczyk if ! echo -e '#include <libunwind.h>\nint main(void) { return 0; }\n' \ 71343a713f9SSeth Howell | ${BUILD_CMD[@]} -lunwind - 2>/dev/null; then 71402406e56SDarek Stojaczyk echo --enable-log-bt requires libunwind. 71502406e56SDarek Stojaczyk echo Please install then re-run this script. 71602406e56SDarek Stojaczyk exit 1 71702406e56SDarek Stojaczyk fi 71802406e56SDarek Stojaczykfi 71902406e56SDarek Stojaczyk 7203674c1d3SDarek Stojaczykif [[ "${CONFIG[ASAN]}" = "y" ]]; then 7213674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 72243a713f9SSeth Howell | ${BUILD_CMD[@]} -fsanitize=address - 2>/dev/null; then 7233674c1d3SDarek Stojaczyk echo --enable-asan requires libasan. 7243674c1d3SDarek Stojaczyk echo Please install then re-run this script. 7253674c1d3SDarek Stojaczyk exit 1 7263674c1d3SDarek Stojaczyk fi 7273674c1d3SDarek Stojaczykfi 7283674c1d3SDarek Stojaczyk 7293674c1d3SDarek Stojaczykif [[ "${CONFIG[UBSAN]}" = "y" ]]; then 7303674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 73143a713f9SSeth Howell | ${BUILD_CMD[@]} -fsanitize=undefined - 2>/dev/null; then 7323674c1d3SDarek Stojaczyk echo --enable-ubsan requires libubsan. 7333674c1d3SDarek Stojaczyk echo Please install then re-run this script. 7343674c1d3SDarek Stojaczyk exit 1 7353674c1d3SDarek Stojaczyk fi 7363674c1d3SDarek Stojaczykfi 7373674c1d3SDarek Stojaczyk 7383674c1d3SDarek Stojaczykif [[ "${CONFIG[TSAN]}" = "y" ]]; then 7393674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 74043a713f9SSeth Howell | ${BUILD_CMD[@]} -fsanitize=thread - 2>/dev/null; then 7413674c1d3SDarek Stojaczyk echo --enable-tsan requires libtsan. 7423674c1d3SDarek Stojaczyk echo Please install then re-run this script. 7433674c1d3SDarek Stojaczyk exit 1 7443674c1d3SDarek Stojaczyk fi 7453674c1d3SDarek Stojaczykfi 7463674c1d3SDarek Stojaczyk 747d1fee489SVitaliy Mysakif [[ "${CONFIG[OCF]}" = "y" ]]; then 748d1fee489SVitaliy Mysak # If OCF_PATH is a file, assume it is a library and use it to compile with 749d1fee489SVitaliy Mysak if [ -f ${CONFIG[OCF_PATH]} ]; then 750d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=y 751d1fee489SVitaliy Mysak else 752d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=n 753d1fee489SVitaliy Mysak fi 754d1fee489SVitaliy Mysakfi 755d1fee489SVitaliy Mysak 756995d60f4SBen Walkerif [[ "${CONFIG[PGO_CAPTURE]}" = "y" && "${CONFIG[PGO_USE]}" = "y" ]]; then 757995d60f4SBen Walker echo "ERROR: --enable-pgo-capture and --enable-pgo-use are mutually exclusive." 758995d60f4SBen Walker exit 1 759954728e9SBen Walkerelif [[ "${CONFIG[PGO_USE]}" = "y" ]]; then 760954728e9SBen Walker if [[ "$CC_TYPE" = "clang" ]]; then 761954728e9SBen Walker # For clang we need to run an extra step on gathered profiling data. 762954728e9SBen Walker echo "Generating suitable profile data" 763954728e9SBen Walker llvm-profdata merge -output=build/pgo/default.profdata build/pgo 764954728e9SBen Walker fi 765995d60f4SBen Walkerfi 766995d60f4SBen Walker 7678165bf71SBen Walkerif [[ "${CONFIG[URING]}" = "y" ]]; then 7688165bf71SBen Walker if [[ -n "${CONFIG[URING_PATH]}" ]]; then 7698165bf71SBen Walker if [ ! -d "${CONFIG[URING_PATH]}" ]; then 7708165bf71SBen Walker echo "${CONFIG[URING_PATH]}: directory not found" 7718165bf71SBen Walker exit 1 7728165bf71SBen Walker fi 7738165bf71SBen Walker fi 7748165bf71SBen Walkerfi 775995d60f4SBen Walker 7767fa15e28SXiaodong Liuif [[ "${CONFIG[FUSE]}" = "y" ]]; then 7777fa15e28SXiaodong Liu if [[ ! -d /usr/include/fuse3 ]] && [[ ! -d /usr/local/include/fuse3 ]]; then 7787fa15e28SXiaodong Liu echo "--with-fuse requires libfuse3." 7797fa15e28SXiaodong Liu echo "Please install then re-run this script." 7807fa15e28SXiaodong Liu exit 1 7817fa15e28SXiaodong Liu fi 7827fa15e28SXiaodong Liufi 7837fa15e28SXiaodong Liu 78448f70f48SPawel Wodkowski# We are now ready to generate final configuration. But first do sanity 78548f70f48SPawel Wodkowski# check to see if all keys in CONFIG array have its reflection in CONFIG file. 786e62a3c65SSeth Howellif [ $(egrep -c "^\s*CONFIG_[[:alnum:]_]+=" $rootdir/CONFIG) -ne ${#CONFIG[@]} ]; then 78748f70f48SPawel Wodkowski echo "" 78848f70f48SPawel Wodkowski echo "BUG: Some configuration options are not present in CONFIG file. Please update this file." 78948f70f48SPawel Wodkowski echo "Missing options in CONFIG (+) file and in current config (-): " 79048f70f48SPawel Wodkowski diff -u --label "CONFIG file" --label "CONFIG[@]" \ 79185bc2bbeSPawel Wodkowski <(sed -r -e '/^\s*$/d; /^\s*#.*/d; s/(CONFIG_[[:alnum:]_]+)=.*/\1/g' CONFIG | sort) \ 79248f70f48SPawel Wodkowski <(printf "CONFIG_%s\n" ${!CONFIG[@]} | sort) 79348f70f48SPawel Wodkowski exit 1 79448f70f48SPawel Wodkowskifi 79548f70f48SPawel Wodkowski 79685bc2bbeSPawel Wodkowskiecho -n "Creating mk/config.mk..." 797e62a3c65SSeth Howellcp -f $rootdir/CONFIG $rootdir/mk/config.mk 798577df16aSPawel Wodkowskifor key in ${!CONFIG[@]}; do 799e62a3c65SSeth Howell sed -i.bak -r "s#^\s*CONFIG_${key}=.*#CONFIG_${key}\?=${CONFIG[$key]}#g" $rootdir/mk/config.mk 800577df16aSPawel Wodkowskidone 801577df16aSPawel Wodkowski# On FreeBSD sed -i 'SUFFIX' - SUFFIX is mandatory. So no way but to delete the backed file. 802e62a3c65SSeth Howellrm -f $rootdir/mk/config.mk.bak 803baa6eac0SDarek Stojaczykecho "done." 8049dd998cdSBen Walker 80508ec96ebSDaniel Verkamp# Environment variables 806baa6eac0SDarek Stojaczykecho -n "Creating mk/cc.flags.mk..." 807e62a3c65SSeth Howellrm -f $rootdir/mk/cc.flags.mk 808e62a3c65SSeth Howell[ -n "$CFLAGS" ] && echo "CFLAGS?=$CFLAGS" > $rootdir/mk/cc.flags.mk 809e62a3c65SSeth Howell[ -n "$CXXFLAGS" ] && echo "CXXFLAGS?=$CXXFLAGS" >> $rootdir/mk/cc.flags.mk 810e62a3c65SSeth Howell[ -n "$LDFLAGS" ] && echo "LDFLAGS?=$LDFLAGS" >> $rootdir/mk/cc.flags.mk 811e62a3c65SSeth Howell[ -n "$DESTDIR" ] && echo "DESTDIR?=$DESTDIR" >> $rootdir/mk/cc.flags.mk 8120b56a5b4SJim Harrisecho "done." 81385bc2bbeSPawel Wodkowski 814*5a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 815870ce250SPaul Luse echo "Type 'gmake' to build." 816870ce250SPaul Luseelse 8170b56a5b4SJim Harris echo "Type 'make' to build." 818870ce250SPaul Lusefi 8199dd998cdSBen Walker 8209dd998cdSBen Walkerexit 0 821