19dd998cdSBen Walker#!/usr/bin/env bash 2eb53c232Spaul luse# SPDX-License-Identifier: BSD-3-Clause 3eb53c232Spaul luse# Copyright (C) 2017 Intel Corporation 4eb53c232Spaul luse# All rights reserved. 52796687dSParameswaran Krishnamurthy# Copyright (c) 2022 Dell Inc, or its subsidiaries. 6eb53c232Spaul luse# 79dd998cdSBen Walker 89dd998cdSBen Walkerset -e 99dd998cdSBen Walker 1014bbde7bSPawel Wodkowskitrap 'echo -e "\n\nConfiguration failed\n\n" >&2' ERR 1114bbde7bSPawel Wodkowski 12e62a3c65SSeth Howellrootdir=$(readlink -f $(dirname $0)) 1365ed6034SMichal Bergersource "$rootdir/scripts/common.sh" 14e62a3c65SSeth Howell 155ccabc8fSMichal Bergerfunction usage() { 169dd998cdSBen Walker echo "'configure' configures SPDK to compile on supported platforms." 179dd998cdSBen Walker echo "" 189dd998cdSBen Walker echo "Usage: ./configure [OPTION]..." 199dd998cdSBen Walker echo "" 209dd998cdSBen Walker echo "Defaults for the options are specified in brackets." 219dd998cdSBen Walker echo "" 229dd998cdSBen Walker echo "General:" 239dd998cdSBen Walker echo " -h, --help Display this help and exit" 242e7fe8e8SDaniel Verkamp echo "" 252e7fe8e8SDaniel Verkamp echo " --prefix=path Configure installation prefix (default: /usr/local)" 260e6ddfd6SBen Walker echo " --target-arch=arch Target build architecture. Must be a valid GNU arch. Default: native" 272e7fe8e8SDaniel Verkamp echo "" 283def834cSAmelia Blachuciak echo " --cross-prefix=prefix Prefix for cross compilation (default: none)" 293def834cSAmelia Blachuciak echo " example: aarch64-linux-gnu" 30e8863cb7SMichal Berger echo " --libdir=path Configure installation path for the libraries (default: \$prefix/lib)" 3173293d73SMarcin Spiewak echo " --max-lcores=VAL DPDK configuration. VAL defines maximum number of lcores supported" 3273293d73SMarcin Spiewak echo " by EAL, or enables autodetection if set to 'detect'. When 'detect'" 3373293d73SMarcin Spiewak echo " is specified, DPDK will detect number of cores in the system during" 3473293d73SMarcin Spiewak echo " compilation, and will set maximum number of lcores to this value" 35*081f8addSJim Harris echo " --max-numa-nodes=VAL VAL defines maximum number of NUMA nodes supported for iobuf" 36*081f8addSJim Harris echo " buffer pools." 379dd998cdSBen Walker echo " --enable-debug Configure for debug builds" 389dd998cdSBen Walker echo " --enable-werror Treat compiler warnings as errors" 399dd998cdSBen Walker echo " --enable-asan Enable address sanitizer" 409dd998cdSBen Walker echo " --enable-ubsan Enable undefined behavior sanitizer" 419dd998cdSBen Walker echo " --enable-coverage Enable code coverage tracking" 426d6d1161SDaniel Verkamp echo " --enable-lto Enable link-time optimization" 43db5f3612SBen Walker echo " --enable-pgo-capture[=PATH] Enable generation of profile guided optimization data" 44db5f3612SBen Walker echo " --enable-pgo-use[=PATH] Use previously captured profile guided optimization data" 4591e42257SJim Harris echo " --enable-cet Enable Intel Control-flow Enforcement Technology (CET)" 469fcb1cb0STomasz Zawadzki echo " --disable-tests Disable building of functional tests" 479fcb1cb0STomasz Zawadzki echo " --disable-unit-tests Disable building of unit tests" 489b2c6452SJacek Kalwas echo " --disable-examples Disable building of examples" 49119158cdSRajarshi Chowdhury echo " --disable-apps Disable building of apps" 509dd998cdSBen Walker echo "" 519dd998cdSBen Walker echo "Specifying Dependencies:" 529dd998cdSBen Walker echo "--with-DEPENDENCY[=path] Use the given dependency. Optionally, provide the" 539dd998cdSBen Walker echo " path." 549dd998cdSBen Walker echo "--without-DEPENDENCY Do not link to the given dependency. This may" 559dd998cdSBen Walker echo " disable features and components." 569dd998cdSBen Walker echo "" 579dd998cdSBen Walker echo "Valid dependencies are listed below." 582bc71094SMichal Berger echo " --with-dpdk[=DIR] Build against a custom dpdk version. By default, the dpdk" 592bc71094SMichal Berger echo " --without-dpdk submodule in spdk tree will be used." 609dd998cdSBen Walker echo " example: /usr/share/dpdk/x86_64-default-linuxapp-gcc" 612bc71094SMichal Berger echo " --with-env=DIR Use an alternate environment implementation instead of DPDK." 6206cc8045SBen Walker echo " Implies --without-dpdk." 632bc71094SMichal Berger echo " --with-idxd Build the IDXD library and accel framework plug-in module." 642bc71094SMichal Berger echo " --without-idxd Disabled while experimental. Only built for x86 when enabled." 65784b9d48SAlexey Marchuk echo " --with-crypto Build isa-l-crypto and vbdev crypto module. No path required." 66784b9d48SAlexey Marchuk echo " --without-crypto Disable isa-l-crypto and vbdev crypto module." 672bc71094SMichal Berger echo " --with-fio[=DIR] Build fio_plugin." 682bc71094SMichal Berger echo " --without-fio default: /usr/src/fio" 696f338d4bSKrishna Kanth Reddy echo " --with-xnvme Build xNVMe bdev module." 706f338d4bSKrishna Kanth Reddy echo " --without-xnvme No path required." 712bc71094SMichal Berger echo " --with-vhost Build vhost target. Enabled by default." 722bc71094SMichal Berger echo " --without-vhost No path required." 732bc71094SMichal Berger echo " --with-virtio Build vhost initiator and virtio-pci bdev modules." 742bc71094SMichal Berger echo " --without-virtio No path required." 75e50ade31SChangpeng Liu echo " --with-vfio-user[=DIR] Build custom vfio-user transport for NVMf target and vfio-user target." 76e50ade31SChangpeng Liu echo " vfio-user initiator is always built-in in Linux." 772f731c63SGangCao echo " example: /usr/src/libvfio-user" 782f731c63SGangCao echo " --without-vfio-user No path required." 7919e2dc38Spaul luse echo " --with-vbdev-compress Build vbdev compression module and dependencies." 8019e2dc38Spaul luse echo " --without-vbdev-compress No path required." 81976f8b09Spaul luse echo " --with-dpdk-compressdev Build accel DPDK compression module and dependencies." 82976f8b09Spaul luse echo " --without-dpdk-compressdev No path required." 832bc71094SMichal Berger echo " --with-rbd Build Ceph RBD bdev module." 842bc71094SMichal Berger echo " --without-rbd No path required." 85ed2b53f3SYifan Bian echo " --with-ublk Build ublk library." 86ed2b53f3SYifan Bian echo " --without-ublk No path required." 87ef6f8577SJim Harris echo " --with-rdma[=PROVIDER] Build RDMA transport for NVMf target and initiator." 882bc71094SMichal Berger echo " --without-rdma Accepts optional RDMA provider name. Can be \"verbs\" or \"mlx5_dv\"." 89daee62a0SAlexey Marchuk echo " If no provider specified, \"verbs\" provider is used by default." 902bc71094SMichal Berger echo " --with-fc[=DIR] Build FC transport for NVMf target." 912bc71094SMichal Berger echo " --without-fc If an argument is provided, it is considered a directory containing" 92ed56a3d4SAnil Veerabhadrappa echo " libufc.a and fc_lld.h. Otherwise the regular system paths will" 93ed56a3d4SAnil Veerabhadrappa echo " be searched." 94044bb175SDenis Barakthanov echo " --with-daos[=DIR] Build DAOS bdev module." 952e283fcbS0xe0f echo " --without-daos No path required." 962bc71094SMichal Berger echo " --with-shared Build spdk shared libraries." 972bc71094SMichal Berger echo " --without-shared No path required." 982bc71094SMichal Berger echo " --with-iscsi-initiator Build with iscsi bdev module." 992bc71094SMichal Berger echo " --without-iscsi-initiator No path required." 1006a2ba2d8SMichal Berger echo " --with-vtune=DIR Required to profile I/O under Intel VTune Profiler." 1016a2ba2d8SMichal Berger echo " example: /opt/intel/oneapi/vtune/version" 1026a2ba2d8SMichal Berger echo " --without-vtune Support for Intel VTune Profiler will not be provided." 103b4d441fdSAmir Haroush echo " --with-ocf[=DIR] Build OCF library and bdev module." 1042bc71094SMichal Berger echo " --without-ocf If argument is directory, interpret it as root of OCF repo" 105d1fee489SVitaliy Mysak echo " If argument is file, interpret it as compiled OCF lib" 10698d60de6SPiotr Pelplinski echo " If no argument is specified, OCF git submodule is used by default" 107d1fee489SVitaliy Mysak echo " example: /usr/src/ocf/" 1082bc71094SMichal Berger echo " --with-uring[=DIR] Build I/O uring bdev or socket module." 1092bc71094SMichal Berger echo " --without-uring If an argument is provided, it is considered a directory containing" 110161c88a0SDarek Stojaczyk echo " liburing.a and io_uring.h. Otherwise the regular system paths will" 111161c88a0SDarek Stojaczyk echo " be searched." 11213603217SZhangfei Gao echo " --with-dpdk-uadk Build uadk DPDK module. No path required." 11313603217SZhangfei Gao echo " --without-dpdk-uadk Disable uadk DPDK module." 114958d196cSIndraneel M echo " --without-uring-zns Build I/O uring module without ZNS (zoned namespaces) support." 11534192459SBoris Glimcher echo " --with-openssl[=DIR] Build OPENSSL with custom path. Otherwise the regular system paths will" 11634192459SBoris Glimcher echo " be searched." 1172bc71094SMichal Berger echo " --with-fuse Build FUSE components for mounting a blobfs filesystem." 1182bc71094SMichal Berger echo " --without-fuse No path required." 1192bc71094SMichal Berger echo " --with-nvme-cuse Build NVMe driver with support for CUSE-based character devices." 1202bc71094SMichal Berger echo " --without-nvme-cuse No path required." 12183a4b155SArtur Paszkiewicz echo " --with-raid5f Build with bdev_raid module RAID5f support." 12283a4b155SArtur Paszkiewicz echo " --without-raid5f No path required." 1232bc71094SMichal Berger echo " --with-wpdk=DIR Build using WPDK to provide support for Windows (experimental)." 1242bc71094SMichal Berger echo " --without-wpdk The argument must be a directory containing lib and include." 1252bc71094SMichal Berger echo " --with-usdt Build with userspace DTrace probes enabled." 1262bc71094SMichal Berger echo " --without-usdt No path required." 127050565e5SJim Harris echo " --with-fuzzer Build with LLVM fuzzing enabled." 128050565e5SJim Harris echo " Path to clang_rt.fuzzer_no_main library required." 129050565e5SJim Harris echo " Requires setting CC and CXX to clang." 130050565e5SJim Harris echo " (Typically /usr/lib/llvm-VER/lib/clang/VER/lib/linux/libclang_rt.fuzzer_no_main-ARCH.a)" 131509241ceSKonrad Sztyber echo " --with-sma Generate Storage Management Agent's protobuf interface" 132509241ceSKonrad Sztyber echo " --without-sma No path required." 1332796687dSParameswaran Krishnamurthy echo " --with-avahi Build with Avahi mDNS discovery client service enabled in bdev-nvme module." 1342796687dSParameswaran Krishnamurthy echo " --without-avahi No path required." 1351e46e023SMaciej Mis echo " --with-golang Build with components written in Go" 1361e46e023SMaciej Mis echo " --without-golang No path required." 137e21c39aaSAnton Nayshtut echo " --with-aio-fsdev Build aio FSDEV component." 138e21c39aaSAnton Nayshtut echo " --without-aio-fsdev No path required." 1399dd998cdSBen Walker echo "" 14008ec96ebSDaniel Verkamp echo "Environment variables:" 14108ec96ebSDaniel Verkamp echo "" 14273439e6fSBen Walker echo "CC C compiler" 14308ec96ebSDaniel Verkamp echo "CFLAGS C compiler flags" 14473439e6fSBen Walker echo "CXX C++ compiler" 14508ec96ebSDaniel Verkamp echo "CXXFLAGS C++ compiler flags" 14673439e6fSBen Walker echo "LD Linker" 14708ec96ebSDaniel Verkamp echo "LDFLAGS Linker flags" 14808ec96ebSDaniel Verkamp echo "DESTDIR Destination for 'make install'" 14908ec96ebSDaniel Verkamp echo "" 1509dd998cdSBen Walker} 1519dd998cdSBen Walker 152577df16aSPawel Wodkowski# Load default values 153ff238359SJosh Soref# Convert config to sourceable configuration file 154e62a3c65SSeth Howellsed -r 's/CONFIG_([[:alnum:]_]+)=(.*)/CONFIG[\1]=\2/g' $rootdir/CONFIG > $rootdir/CONFIG.sh 155577df16aSPawel Wodkowskideclare -A CONFIG 156e62a3c65SSeth Howellsource $rootdir/CONFIG.sh 157e62a3c65SSeth Howellrm $rootdir/CONFIG.sh 158577df16aSPawel Wodkowski 15911a5716dSMichal Berger# Try to expand literal ~ that might have been passed as an option via --long-opt=~/dir. 16011a5716dSMichal Bergerset -- "${@//\~/~}" 16111a5716dSMichal Berger 1624d2e26d8STomasz Zawadzkifor i in "$@"; do 1634d2e26d8STomasz Zawadzki case "$i" in 1644d2e26d8STomasz Zawadzki --cross-prefix=*) 1654d2e26d8STomasz Zawadzki CONFIG[CROSS_PREFIX]="${i#*=}" 1664d2e26d8STomasz Zawadzki ;; 1674d2e26d8STomasz Zawadzki --enable-lto) 1684d2e26d8STomasz Zawadzki CONFIG[LTO]=y 1694d2e26d8STomasz Zawadzki ;; 1704d2e26d8STomasz Zawadzki --disable-lto) 1714d2e26d8STomasz Zawadzki CONFIG[LTO]=n 1724d2e26d8STomasz Zawadzki ;; 1734d2e26d8STomasz Zawadzki esac 1744d2e26d8STomasz Zawadzkidone 1754d2e26d8STomasz Zawadzki 176873c8748STomasz Kulasek# Detect the compiler toolchain 177873c8748STomasz Kulasek$rootdir/scripts/detect_cc.sh --cc="$CC" --cxx="$CXX" --lto="${CONFIG[LTO]}" --ld="$LD" --cross-prefix="${CONFIG[CROSS_PREFIX]}" > $rootdir/mk/cc.mk 178873c8748STomasz Kulasek 179a32086acSMichal Bergermapfile -t cc < <(grep "=" "$rootdir/mk/cc.mk") 180a32086acSMichal Bergersource <(printf '%q\n' "${cc[@]}") 1817a186735SMichal BergerCC=$DEFAULT_CC 182873c8748STomasz Kulasek 183873c8748STomasz Kulasekarch=$($CC -dumpmachine) 1845a764955SMichal Bergersys_name=$(uname -s) 185873c8748STomasz Kulasek 1869854c138SNick Connollyif [[ $arch == *mingw* ]] || [[ $arch == *windows* ]]; then 1879854c138SNick Connolly sys_name=Windows 1889854c138SNick Connollyfi 1899854c138SNick Connolly 1902a0c2a2dSNick Connollyif [[ $sys_name != "Linux" ]]; then 191873c8748STomasz Kulasek # Vhost, rte_vhost library and virtio are only supported on Linux. 192873c8748STomasz Kulasek CONFIG[VHOST]="n" 193873c8748STomasz Kulasek CONFIG[VIRTIO]="n" 19468b467b7SJim Harris CONFIG[NVME_CUSE]="n" 19568b467b7SJim Harris echo "Notice: Vhost, rte_vhost library, virtio, and fuse" 19668b467b7SJim Harris echo "are only supported on Linux. Turning off default feature." 197873c8748STomasz Kulasekfi 198873c8748STomasz Kulasek 1991723a800SGangCaofunction check_dir() { 2001723a800SGangCao arg="$1" 2011723a800SGangCao dir="${arg#*=}" 2021723a800SGangCao if [ ! -d "$dir" ]; then 2031723a800SGangCao echo "$arg: directory not found" 2041723a800SGangCao exit 1 2051723a800SGangCao fi 2061723a800SGangCao} 2071723a800SGangCao 2087b04eb72SYuriy Umanets# On x86_64 'clang -dumpmachine' produces x86_64-pc-linux-gnu 2097b04eb72SYuriy Umanets# whereas the dpdk might be built with gcc and its libs lie in 210acd2cc94STomasz Zawadzki# x86_64-linux-gnu. Let's find the right libdir for dpdk libs. 2117b04eb72SYuriy Umanetsfunction find_dpdk_arch_libdir() { 212acd2cc94STomasz Zawadzki local dpdk_libdir="$1/lib" 213acd2cc94STomasz Zawadzki 214acd2cc94STomasz Zawadzki # Use libdir with 'lib' or 'lib64' 215acd2cc94STomasz Zawadzki if [[ ! -d "$dpdk_libdir" ]]; then 216acd2cc94STomasz Zawadzki dpdk_libdir+="64" 217acd2cc94STomasz Zawadzki fi 2187b04eb72SYuriy Umanets 2197b04eb72SYuriy Umanets # Checking first what we have with $arch, then clang 2207b04eb72SYuriy Umanets # variant of arch. 2217b04eb72SYuriy Umanets arches=("$arch" "$(echo $arch | sed 's/-pc//g')") 2227b04eb72SYuriy Umanets for a in "${arches[@]}"; do 223acd2cc94STomasz Zawadzki local libdir_arch="$dpdk_libdir/$a" 224acd2cc94STomasz Zawadzki if [[ -d "$libdir_arch" ]]; then 225acd2cc94STomasz Zawadzki echo "$libdir_arch" 2267b04eb72SYuriy Umanets return 2277b04eb72SYuriy Umanets fi 2287b04eb72SYuriy Umanets done 2297b04eb72SYuriy Umanets 2307b04eb72SYuriy Umanets # Fallback to the libdir without arch component 231acd2cc94STomasz Zawadzki echo "$dpdk_libdir" 2327b04eb72SYuriy Umanets} 2337b04eb72SYuriy Umanets 234f1980244SYuriy Umanetsfunction check_IPSec_mb() { 235f1980244SYuriy Umanets local mode=$1 236f1980244SYuriy Umanets local dpdk_libdir=$2 237f1980244SYuriy Umanets local dpdk_incdir=$3 238f1980244SYuriy Umanets local have_ipsec_mb=n 239f1980244SYuriy Umanets 240f1980244SYuriy Umanets if [[ $mode = "pkg-config" ]]; then 241f1980244SYuriy Umanets local dpdk_libs 242f1980244SYuriy Umanets 243f1980244SYuriy Umanets # Request libdpdk pkg-config settings to figure out if the IPSec_MB is used 244f1980244SYuriy Umanets # as a dependency. 245f1980244SYuriy Umanets # Due to some reason pkg-config shows -lIPSec_MB only with --static option 246f13ec525SKarol Latecki dpdk_libs=$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --libs --static libdpdk) 247f1980244SYuriy Umanets if echo "$dpdk_libs" | grep "\-lIPSec_MB" > /dev/null 2>&1; then 248f1980244SYuriy Umanets have_ipsec_mb=y 249f1980244SYuriy Umanets fi 250f1980244SYuriy Umanets elif [[ $mode = "build-config" ]]; then 251f1980244SYuriy Umanets # Use dpdk build config header to check if the IPSec_MB was used. 252f1980244SYuriy Umanets if grep -F "define RTE_CRYPTO_IPSEC_MB 1" "$dpdk_incdir/rte_build_config.h" > /dev/null 2>&1; then 253f1980244SYuriy Umanets have_ipsec_mb=y 254f1980244SYuriy Umanets fi 255f1980244SYuriy Umanets else 256f1980244SYuriy Umanets echo "ERROR: Invalid IPSec_MB checking mode $mode." 257f1980244SYuriy Umanets echo "ERROR: Only \"pkg-config\" and \"build-config\" available." 258f1980244SYuriy Umanets exit 1 259f1980244SYuriy Umanets fi 260f1980244SYuriy Umanets if [[ $have_ipsec_mb = "n" ]]; then 261f1980244SYuriy Umanets CONFIG[IPSEC_MB]=n 262f1980244SYuriy Umanets return 263f1980244SYuriy Umanets fi 264f1980244SYuriy Umanets 265f1980244SYuriy Umanets # Since we don't know the library path where the IPSec_MB is located 266f1980244SYuriy Umanets # let's find it out with the ldd utility. This can be a standard location 267f1980244SYuriy Umanets # or a custom build. 268f1980244SYuriy Umanets local librte_crypto_ipsec_mb="$dpdk_libdir/librte_crypto_ipsec_mb.so" 269f1980244SYuriy Umanets if [[ -f "$librte_crypto_ipsec_mb" ]]; then 270f1980244SYuriy Umanets local ipsec_mb_libdir 271f1980244SYuriy Umanets 272f1980244SYuriy Umanets ipsec_mb_libdir=$(ldd "$librte_crypto_ipsec_mb" | grep "libIPSec_MB.so" \ 273f1980244SYuriy Umanets | sed -e 's/\s*libIPSec_MB.so.*=>\s//' -e 's/\/libIPSec_MB.so.*$//') 274f1980244SYuriy Umanets if [[ -d $ipsec_mb_libdir ]]; then 275f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 276f1980244SYuriy Umanets CONFIG[IPSEC_MB_DIR]="$ipsec_mb_libdir" 277f1980244SYuriy Umanets elif [[ $ipsec_mb_libdir = "not found" ]]; then 278f1980244SYuriy Umanets # ldconfig cache is broken, old build with refs to non-existing libs, etc. 279f1980244SYuriy Umanets echo "ERROR: Invalid IPSec_MB installation. Library is not found and/or ldconfig cache is broken!" 280f1980244SYuriy Umanets exit 1 281f1980244SYuriy Umanets else 282f1980244SYuriy Umanets # Failed to check for IPSec_MB lib path. Let's just assume it is lives 283f1980244SYuriy Umanets # in one of the standard locations (/usr/lib, etc.). 284f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 285f1980244SYuriy Umanets fi 286f1980244SYuriy Umanets else 287f1980244SYuriy Umanets # pkg-config says there is IPSec_mb and dpdk lib does not have it. Let's just 288f1980244SYuriy Umanets # assume it is installed in the system in one of the standard locations. 289f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 290f1980244SYuriy Umanets fi 291f1980244SYuriy Umanets} 292f1980244SYuriy Umanets 2939dd998cdSBen Walkerfor i in "$@"; do 2949dd998cdSBen Walker case "$i" in 2959dd998cdSBen Walker -h | --help) 2969dd998cdSBen Walker usage 2979dd998cdSBen Walker exit 0 2989dd998cdSBen Walker ;; 2994d2e26d8STomasz Zawadzki --cross-prefix=*) ;& 3004d2e26d8STomasz Zawadzki --enable-lto) ;& 3014d2e26d8STomasz Zawadzki --disable-lto) 3024d2e26d8STomasz Zawadzki # Options handled before detecting CC. 3034d2e26d8STomasz Zawadzki ;; 3042e7fe8e8SDaniel Verkamp --prefix=*) 305577df16aSPawel Wodkowski CONFIG[PREFIX]="${i#*=}" 3062e7fe8e8SDaniel Verkamp ;; 3070e6ddfd6SBen Walker --target-arch=*) 3080e6ddfd6SBen Walker CONFIG[ARCH]="${i#*=}" 3090e6ddfd6SBen Walker ;; 310e8863cb7SMichal Berger --libdir=*) 311e8863cb7SMichal Berger CONFIG[LIBDIR]="${i#*=}" 312e8863cb7SMichal Berger ;; 3139dd998cdSBen Walker --enable-debug) 314577df16aSPawel Wodkowski CONFIG[DEBUG]=y 3159dd998cdSBen Walker ;; 3169dd998cdSBen Walker --disable-debug) 317577df16aSPawel Wodkowski CONFIG[DEBUG]=n 3189dd998cdSBen Walker ;; 3199dd998cdSBen Walker --enable-asan) 320577df16aSPawel Wodkowski CONFIG[ASAN]=y 3219dd998cdSBen Walker ;; 3229dd998cdSBen Walker --disable-asan) 323577df16aSPawel Wodkowski CONFIG[ASAN]=n 3249dd998cdSBen Walker ;; 3259dd998cdSBen Walker --enable-ubsan) 326577df16aSPawel Wodkowski CONFIG[UBSAN]=y 3279dd998cdSBen Walker ;; 3289dd998cdSBen Walker --disable-ubsan) 329577df16aSPawel Wodkowski CONFIG[UBSAN]=n 3309dd998cdSBen Walker ;; 331830912e2SBen Walker --enable-tsan) 332577df16aSPawel Wodkowski CONFIG[TSAN]=y 333830912e2SBen Walker ;; 334830912e2SBen Walker --disable-tsan) 335577df16aSPawel Wodkowski CONFIG[TSAN]=n 336830912e2SBen Walker ;; 3379dd998cdSBen Walker --enable-coverage) 338577df16aSPawel Wodkowski CONFIG[COVERAGE]=y 3399dd998cdSBen Walker ;; 3409dd998cdSBen Walker --disable-coverage) 341577df16aSPawel Wodkowski CONFIG[COVERAGE]=n 3429dd998cdSBen Walker ;; 343995d60f4SBen Walker --enable-pgo-capture) 344995d60f4SBen Walker CONFIG[PGO_CAPTURE]=y 345995d60f4SBen Walker ;; 346db5f3612SBen Walker --enable-pgo-capture=*) 347db5f3612SBen Walker CONFIG[PGO_CAPTURE]=y 348db5f3612SBen Walker CONFIG[PGO_DIR]="${i#*=}" 349db5f3612SBen Walker ;; 350995d60f4SBen Walker --disable-pgo-capture) 351995d60f4SBen Walker CONFIG[PGO_CAPTURE]=n 352995d60f4SBen Walker ;; 353995d60f4SBen Walker --enable-pgo-use) 354995d60f4SBen Walker CONFIG[PGO_USE]=y 355995d60f4SBen Walker ;; 356db5f3612SBen Walker --enable-pgo-use=*) 357db5f3612SBen Walker CONFIG[PGO_USE]=y 358db5f3612SBen Walker CONFIG[PGO_DIR]="${i#*=}" 359db5f3612SBen Walker ;; 360995d60f4SBen Walker --disable-pgo-use) 361995d60f4SBen Walker CONFIG[PGO_USE]=n 362995d60f4SBen Walker ;; 3639022a59eSDaniel Verkamp --enable-tests) 364577df16aSPawel Wodkowski CONFIG[TESTS]=y 3659022a59eSDaniel Verkamp ;; 3669022a59eSDaniel Verkamp --disable-tests) 367577df16aSPawel Wodkowski CONFIG[TESTS]=n 3689022a59eSDaniel Verkamp ;; 3699fcb1cb0STomasz Zawadzki --enable-unit-tests) 3709fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=y 3719fcb1cb0STomasz Zawadzki ;; 3729fcb1cb0STomasz Zawadzki --disable-unit-tests) 3739fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=n 3749fcb1cb0STomasz Zawadzki ;; 3759b2c6452SJacek Kalwas --enable-examples) 3769b2c6452SJacek Kalwas CONFIG[EXAMPLES]=y 3779b2c6452SJacek Kalwas ;; 3789b2c6452SJacek Kalwas --disable-examples) 3799b2c6452SJacek Kalwas CONFIG[EXAMPLES]=n 3809b2c6452SJacek Kalwas ;; 381119158cdSRajarshi Chowdhury --enable-apps) 382119158cdSRajarshi Chowdhury CONFIG[APPS]=y 383119158cdSRajarshi Chowdhury ;; 384119158cdSRajarshi Chowdhury --disable-apps) 385119158cdSRajarshi Chowdhury CONFIG[APPS]=N 386119158cdSRajarshi Chowdhury ;; 3879dd998cdSBen Walker --enable-werror) 388577df16aSPawel Wodkowski CONFIG[WERROR]=y 3899dd998cdSBen Walker ;; 3909dd998cdSBen Walker --disable-werror) 391577df16aSPawel Wodkowski CONFIG[WERROR]=n 3929dd998cdSBen Walker ;; 39391e42257SJim Harris --enable-cet) 39491e42257SJim Harris CONFIG[CET]=y 39591e42257SJim Harris ;; 39691e42257SJim Harris --disable-cet) 39791e42257SJim Harris CONFIG[CET]=n 39891e42257SJim Harris ;; 3997232c450SMichal Berger --with-dpdk) 4007b04eb72SYuriy Umanets # Can we use pkg-config? 4017b04eb72SYuriy Umanets if command -v "pkg-config" > /dev/null 2>&1 && pkg-config --exists libdpdk; then 4027b04eb72SYuriy Umanets dpdk_libdir=$(pkg-config --variable=libdir libdpdk) 4037b04eb72SYuriy Umanets dpdk_libdir=$(readlink -f $dpdk_libdir) 4047b04eb72SYuriy Umanets dpdk_incdir=$(pkg-config --variable=includedir libdpdk) 4057b04eb72SYuriy Umanets echo "Using DPDK lib dir $dpdk_libdir" 4067b04eb72SYuriy Umanets CONFIG[DPDK_LIB_DIR]=$dpdk_libdir 4077b04eb72SYuriy Umanets CONFIG[DPDK_INC_DIR]=$dpdk_incdir 4087232c450SMichal Berger CONFIG[DPDK_PKG_CONFIG]=y 4097232c450SMichal Berger CFLAGS="${CFLAGS:+$CFLAGS }$(pkg-config --cflags libdpdk)" 410f1980244SYuriy Umanets check_IPSec_mb "pkg-config" "$dpdk_libdir" "$dpdk_incdir" 4117232c450SMichal Berger else 4127232c450SMichal Berger echo "libdpdk.pc not found, aborting" 4137232c450SMichal Berger exit 1 4147232c450SMichal Berger fi 4157232c450SMichal Berger ;; 41606cc8045SBen Walker --with-dpdk=*) 41706cc8045SBen Walker check_dir "$i" 4187b04eb72SYuriy Umanets dpdk_dir=$(readlink -f ${i#*=}) 4197b04eb72SYuriy Umanets dpdk_libdir=$(find_dpdk_arch_libdir $dpdk_dir) 4207b04eb72SYuriy Umanets dpdk_incdir="$dpdk_dir/include" 4217b04eb72SYuriy Umanets 4227b04eb72SYuriy Umanets # Can we use pkg-config? 423f13ec525SKarol Latecki if command -v "pkg-config" > /dev/null 2>&1 && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --exists libdpdk; then 4247b04eb72SYuriy Umanets echo "Using $dpdk_libdir/pkgconfig for additional libs..." 4251e6db5fbSTomasz Zawadzki sysroot_dir=$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=pc_sysrootdir libdpdk) 426e9438453SJacek Kalwas dpdk_libdir=$(PKG_CONFIG_SYSROOT_DIR='' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=libdir libdpdk) 4271e6db5fbSTomasz Zawadzki dpdk_libdir=$(readlink -f "${sysroot_dir}$dpdk_libdir") 4287b04eb72SYuriy Umanets if ! echo $dpdk_libdir | grep $dpdk_dir > /dev/null 2>&1; then 4297b04eb72SYuriy Umanets echo "ERROR: pkg-config reported DPDK libdir $dpdk_libdir is out of the directory specified with --with-dpdk=" 4307b04eb72SYuriy Umanets echo "ERROR: do you have another DPDK installed in the system?" 4317b04eb72SYuriy Umanets exit 1 4327b04eb72SYuriy Umanets fi 433f13ec525SKarol Latecki CFLAGS="${CFLAGS:+$CFLAGS }$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --cflags libdpdk)" 4341e6db5fbSTomasz Zawadzki dpdk_incdir="${sysroot_dir}$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=includedir libdpdk)" 435f1980244SYuriy Umanets check_IPSec_mb "pkg-config" "$dpdk_libdir" "$dpdk_incdir" 4363e3fbf91SYuriy Umanets else 4373e3fbf91SYuriy Umanets echo "Using $dpdk_incdir/rte_build_config.h for additional libs..." 4383e3fbf91SYuriy Umanets 439f1980244SYuriy Umanets check_IPSec_mb "build-config" "$dpdk_libdir" "$dpdk_incdir" 4407b04eb72SYuriy Umanets fi 4417b04eb72SYuriy Umanets echo "DPDK libraries: $dpdk_libdir" 4427b04eb72SYuriy Umanets echo "DPDK includes: $dpdk_incdir" 4437b04eb72SYuriy Umanets CONFIG[DPDK_DIR]=$dpdk_dir 4447b04eb72SYuriy Umanets CONFIG[DPDK_LIB_DIR]="$dpdk_libdir" 4457b04eb72SYuriy Umanets CONFIG[DPDK_INC_DIR]="$dpdk_incdir" 4467b04eb72SYuriy Umanets CONFIG[DPDK_PKG_CONFIG]=n 44706cc8045SBen Walker ;; 44806cc8045SBen Walker --without-dpdk) 44906cc8045SBen Walker CONFIG[DPDK_DIR]= 45006cc8045SBen Walker ;; 4519854c138SNick Connolly --with-wpdk=*) 4529854c138SNick Connolly check_dir "$i" 4539854c138SNick Connolly CONFIG[WPDK_DIR]=$(readlink -f ${i#*=}) 4549854c138SNick Connolly ;; 4552bc71094SMichal Berger --without-wpdk) 4562bc71094SMichal Berger CONFIG[WPDK_DIR]= 4572bc71094SMichal Berger ;; 4589dd998cdSBen Walker --with-env=*) 459577df16aSPawel Wodkowski CONFIG[ENV]="${i#*=}" 4609dd998cdSBen Walker ;; 461ed2b53f3SYifan Bian --with-ublk) 462ed2b53f3SYifan Bian CONFIG[UBLK]=y 463ed2b53f3SYifan Bian ;; 464ed2b53f3SYifan Bian --without-ublk) 465ed2b53f3SYifan Bian CONFIG[UBLK]=n 466ed2b53f3SYifan Bian ;; 4679dd998cdSBen Walker --with-rbd) 468577df16aSPawel Wodkowski CONFIG[RBD]=y 4699dd998cdSBen Walker ;; 4709dd998cdSBen Walker --without-rbd) 471577df16aSPawel Wodkowski CONFIG[RBD]=n 4729dd998cdSBen Walker ;; 473daee62a0SAlexey Marchuk --with-rdma=*) 474daee62a0SAlexey Marchuk CONFIG[RDMA]=y 475daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]=${i#*=} 476daee62a0SAlexey Marchuk ;; 4779dd998cdSBen Walker --with-rdma) 478577df16aSPawel Wodkowski CONFIG[RDMA]=y 479daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]="verbs" 4809dd998cdSBen Walker ;; 4819dd998cdSBen Walker --without-rdma) 482577df16aSPawel Wodkowski CONFIG[RDMA]=n 4839dd998cdSBen Walker ;; 484ed56a3d4SAnil Veerabhadrappa --with-fc=*) 485ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 486ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]=$(readlink -f ${i#*=}) 487ed56a3d4SAnil Veerabhadrappa ;; 488ed56a3d4SAnil Veerabhadrappa --with-fc) 489ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 490ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 491ed56a3d4SAnil Veerabhadrappa ;; 492ed56a3d4SAnil Veerabhadrappa --without-fc) 493ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=n 494ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 495ed56a3d4SAnil Veerabhadrappa ;; 4962e283fcbS0xe0f --with-daos) 4972e283fcbS0xe0f CONFIG[DAOS]=y 498044bb175SDenis Barakthanov CONFIG[DAOS_DIR]="" 499044bb175SDenis Barakthanov ;; 500044bb175SDenis Barakthanov --with-daos=*) 501044bb175SDenis Barakthanov CONFIG[DAOS]=y 502044bb175SDenis Barakthanov check_dir "$i" 503044bb175SDenis Barakthanov CONFIG[DAOS_DIR]=$(readlink -f ${i#*=}) 5042e283fcbS0xe0f ;; 5052e283fcbS0xe0f --without-daos) 5062e283fcbS0xe0f CONFIG[DAOS]=n 5072e283fcbS0xe0f ;; 5080923734cSLance Hartmann --with-shared) 509577df16aSPawel Wodkowski CONFIG[SHARED]=y 5100923734cSLance Hartmann ;; 5110923734cSLance Hartmann --without-shared) 512577df16aSPawel Wodkowski CONFIG[SHARED]=n 5130923734cSLance Hartmann ;; 5142af15344SJim Harris --with-iscsi-initiator) 515577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=y 5162af15344SJim Harris ;; 5172af15344SJim Harris --without-iscsi-initiator) 518577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=n 5192af15344SJim Harris ;; 5206118b853SDaniel Verkamp --with-crypto) 521577df16aSPawel Wodkowski CONFIG[CRYPTO]=y 5226118b853SDaniel Verkamp ;; 5236118b853SDaniel Verkamp --without-crypto) 524577df16aSPawel Wodkowski CONFIG[CRYPTO]=n 5256118b853SDaniel Verkamp ;; 52613603217SZhangfei Gao --with-dpdk-uadk) 52713603217SZhangfei Gao CONFIG[DPDK_UADK]=y 52813603217SZhangfei Gao ;; 52913603217SZhangfei Gao --without-dpdk-uadk) 53013603217SZhangfei Gao CONFIG[DPDK_UADK]=n 53113603217SZhangfei Gao ;; 53235260f2bSDaniel Verkamp --with-vhost) 533577df16aSPawel Wodkowski CONFIG[VHOST]=y 53435260f2bSDaniel Verkamp ;; 53535260f2bSDaniel Verkamp --without-vhost) 536577df16aSPawel Wodkowski CONFIG[VHOST]=n 53735260f2bSDaniel Verkamp ;; 5387dee96ceSDariusz Stojaczyk --with-virtio) 539577df16aSPawel Wodkowski CONFIG[VIRTIO]=y 5407dee96ceSDariusz Stojaczyk ;; 5417dee96ceSDariusz Stojaczyk --without-virtio) 542577df16aSPawel Wodkowski CONFIG[VIRTIO]=n 5437dee96ceSDariusz Stojaczyk ;; 544b30d57cdSChangpeng Liu --with-vfio-user) 545b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=y 546d0b2448bSChangpeng Liu CONFIG[VFIO_USER_DIR]="" 547d0b2448bSChangpeng Liu ;; 548d0b2448bSChangpeng Liu --with-vfio-user=*) 549d0b2448bSChangpeng Liu CONFIG[VFIO_USER]=y 550d0b2448bSChangpeng Liu check_dir "$i" 551d0b2448bSChangpeng Liu CONFIG[VFIO_USER_DIR]=$(readlink -f ${i#*=}) 552b30d57cdSChangpeng Liu ;; 553b30d57cdSChangpeng Liu --without-vfio-user) 554b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=n 555b30d57cdSChangpeng Liu ;; 55619e2dc38Spaul luse --with-vbdev-compress) 55719e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=y 55897022803SJim Harris ;; 55919e2dc38Spaul luse --without-vbdev-compress) 56019e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=n 56197022803SJim Harris ;; 562976f8b09Spaul luse --with-dpdk-compressdev) 563976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=y 564976f8b09Spaul luse ;; 565976f8b09Spaul luse --without-dpdk-compressdev) 566976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=n 567976f8b09Spaul luse ;; 5686f338d4bSKrishna Kanth Reddy --with-xnvme) 5696f338d4bSKrishna Kanth Reddy CONFIG[XNVME]=y 5706f338d4bSKrishna Kanth Reddy ;; 5716f338d4bSKrishna Kanth Reddy --without-xnvme) 5726f338d4bSKrishna Kanth Reddy CONFIG[XNVME]=n 5736f338d4bSKrishna Kanth Reddy ;; 574c3329b52SMichal Berger --with-fio) ;& 5759dd998cdSBen Walker --with-fio=*) 576c3329b52SMichal Berger if [[ ${i#*=} != "$i" ]]; then 57711a5716dSMichal Berger CONFIG[FIO_SOURCE_DIR]=${i#*=} 578c3329b52SMichal Berger fi 579c3329b52SMichal Berger check_dir "--with-fio=${CONFIG[FIO_SOURCE_DIR]}" 58011a5716dSMichal Berger CONFIG[FIO_SOURCE_DIR]=$(readlink -f "${CONFIG[FIO_SOURCE_DIR]}") 581577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=y 5829dd998cdSBen Walker ;; 5839dd998cdSBen Walker --without-fio) 584577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=n 5859dd998cdSBen Walker ;; 5865712088aSRoman Sudarikov --with-vtune=*) 5871723a800SGangCao check_dir "$i" 588577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]="${i#*=}" 589577df16aSPawel Wodkowski CONFIG[VTUNE]=y 5905712088aSRoman Sudarikov ;; 5915712088aSRoman Sudarikov --without-vtune) 592577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]= 593577df16aSPawel Wodkowski CONFIG[VTUNE]=n 5945712088aSRoman Sudarikov ;; 59598d60de6SPiotr Pelplinski --with-ocf) 59698d60de6SPiotr Pelplinski CONFIG[OCF]=y 597985d6468SKamil Godzwon CONFIG[OCF_PATH]=$(readlink -f "$rootdir/ocf") 59898d60de6SPiotr Pelplinski ;; 599d1fee489SVitaliy Mysak --with-ocf=*) 600d1fee489SVitaliy Mysak CONFIG[OCF]=y 601d1fee489SVitaliy Mysak CONFIG[OCF_PATH]=$(readlink -f ${i#*=}) 602d1fee489SVitaliy Mysak ;; 603d1fee489SVitaliy Mysak --without-ocf) 604d1fee489SVitaliy Mysak CONFIG[OCF]=n 605d1fee489SVitaliy Mysak CONFIG[OCF_PATH]= 606d1fee489SVitaliy Mysak ;; 6078165bf71SBen Walker --with-uring=*) 6088165bf71SBen Walker CONFIG[URING]=y 6098165bf71SBen Walker CONFIG[URING_PATH]=$(readlink -f ${i#*=}) 6108165bf71SBen Walker ;; 6118165bf71SBen Walker --with-uring) 6128165bf71SBen Walker CONFIG[URING]=y 613958d196cSIndraneel M CONFIG[URING_ZNS]=y 6148165bf71SBen Walker CONFIG[URING_PATH]= 6158165bf71SBen Walker ;; 6168165bf71SBen Walker --without-uring) 6178165bf71SBen Walker CONFIG[URING]=n 6188165bf71SBen Walker CONFIG[URING_PATH]= 6198165bf71SBen Walker ;; 620958d196cSIndraneel M --without-uring-zns) 621958d196cSIndraneel M CONFIG[URING_ZNS]=n 6228b840195SIndraneel M ;; 62334192459SBoris Glimcher --with-openssl=*) 62434192459SBoris Glimcher check_dir "$i" 62534192459SBoris Glimcher CONFIG[OPENSSL_PATH]=$(readlink -f ${i#*=}) 62634192459SBoris Glimcher ;; 6277fa15e28SXiaodong Liu --with-fuse) 6287fa15e28SXiaodong Liu CONFIG[FUSE]=y 6297fa15e28SXiaodong Liu ;; 6307fa15e28SXiaodong Liu --without-fuse) 6317fa15e28SXiaodong Liu CONFIG[FUSE]=n 6327fa15e28SXiaodong Liu ;; 633805d9942STomasz Kulasek --with-nvme-cuse) 634805d9942STomasz Kulasek CONFIG[NVME_CUSE]=y 635805d9942STomasz Kulasek ;; 636805d9942STomasz Kulasek --without-nvme-cuse) 637805d9942STomasz Kulasek CONFIG[NVME_CUSE]=n 638805d9942STomasz Kulasek ;; 63983a4b155SArtur Paszkiewicz --with-raid5f) 64083a4b155SArtur Paszkiewicz CONFIG[RAID5F]=y 64173763d40SArtur Paszkiewicz ;; 64283a4b155SArtur Paszkiewicz --without-raid5f) 64383a4b155SArtur Paszkiewicz CONFIG[RAID5F]=n 64473763d40SArtur Paszkiewicz ;; 645e58e9fbdSpaul luse --with-idxd) 646e58e9fbdSpaul luse CONFIG[IDXD]=y 6472ed914f8SZiye Yang CONFIG[IDXD_KERNEL]=n 648e58e9fbdSpaul luse ;; 649e58e9fbdSpaul luse --without-idxd) 650e58e9fbdSpaul luse CONFIG[IDXD]=n 651e58e9fbdSpaul luse ;; 6525a1c74bfSJim Harris --with-usdt) 6535a1c74bfSJim Harris CONFIG[USDT]=y 6545a1c74bfSJim Harris ;; 6555a1c74bfSJim Harris --without-usdt) 6565a1c74bfSJim Harris CONFIG[USDT]=n 6575a1c74bfSJim Harris ;; 658050565e5SJim Harris --with-fuzzer) 659050565e5SJim Harris echo "Must specify fuzzer library path with --with-fuzzer" 660050565e5SJim Harris usage 661050565e5SJim Harris exit 1 662050565e5SJim Harris ;; 663050565e5SJim Harris --with-fuzzer=*) 664050565e5SJim Harris CONFIG[FUZZER]=y 665050565e5SJim Harris CONFIG[FUZZER_LIB]=$(readlink -f ${i#*=}) 666050565e5SJim Harris ;; 667050565e5SJim Harris --without-fuzzer) 668050565e5SJim Harris CONFIG[FUZZER]=n 669050565e5SJim Harris CONFIG[FUZZER_LIB]= 670050565e5SJim Harris ;; 671509241ceSKonrad Sztyber --with-sma) 672509241ceSKonrad Sztyber CONFIG[SMA]=y 673509241ceSKonrad Sztyber ;; 674509241ceSKonrad Sztyber --without-sma) 675509241ceSKonrad Sztyber CONFIG[SMA]=n 676509241ceSKonrad Sztyber ;; 6772796687dSParameswaran Krishnamurthy --with-avahi) 6782796687dSParameswaran Krishnamurthy CONFIG[AVAHI]=y 6792796687dSParameswaran Krishnamurthy ;; 6802796687dSParameswaran Krishnamurthy --without-avahi) 6812796687dSParameswaran Krishnamurthy CONFIG[AVAHI]=n 6822796687dSParameswaran Krishnamurthy ;; 6831e46e023SMaciej Mis --with-golang) 6841e46e023SMaciej Mis CONFIG[GOLANG]=y 6851e46e023SMaciej Mis ;; 6861e46e023SMaciej Mis --without-golang) 6871e46e023SMaciej Mis CONFIG[GOLANG]=n 6881e46e023SMaciej Mis ;; 6898247bd40SMarcin Spiewak --max-lcores='') 6908247bd40SMarcin Spiewak echo "Must specify max number of lcores for --max-lcores" 6918247bd40SMarcin Spiewak usage 6928247bd40SMarcin Spiewak exit 1 6938247bd40SMarcin Spiewak ;; 6948247bd40SMarcin Spiewak --max-lcores=*) 6958247bd40SMarcin Spiewak CONFIG[MAX_LCORES]="${i#*=}" 69673293d73SMarcin Spiewak CONFIG["MAX_LCORES"]=${CONFIG["MAX_LCORES"],,} 6978247bd40SMarcin Spiewak ;; 698*081f8addSJim Harris --max-numa-nodes='') 699*081f8addSJim Harris echo "Must specify max number of nodes for --max-numa-nodes" 700*081f8addSJim Harris usage 701*081f8addSJim Harris exit 1 702*081f8addSJim Harris ;; 703*081f8addSJim Harris --max-numa-nodes=*) 704*081f8addSJim Harris CONFIG[MAX_NUMA_NODES]="${i#*=}" 705*081f8addSJim Harris CONFIG["MAX_NUMA_NODES"]=${CONFIG["MAX_NUMA_NODES"],,} 706*081f8addSJim Harris ;; 707e21c39aaSAnton Nayshtut --with-aio-fsdev) 708e21c39aaSAnton Nayshtut CONFIG[AIO_FSDEV]=y 709e21c39aaSAnton Nayshtut AIO_FSDEV_REQUIRED=y 710e21c39aaSAnton Nayshtut ;; 711e21c39aaSAnton Nayshtut --without-aio-fsdev) 712e21c39aaSAnton Nayshtut CONFIG[AIO_FSDEV]=n 713e21c39aaSAnton Nayshtut ;; 7149dd998cdSBen Walker --) 7159dd998cdSBen Walker break 7169dd998cdSBen Walker ;; 7179dd998cdSBen Walker *) 7189dd998cdSBen Walker echo "Unrecognized option $i" 7199dd998cdSBen Walker usage 7209dd998cdSBen Walker exit 1 7215ccabc8fSMichal Berger ;; 7229dd998cdSBen Walker esac 7239dd998cdSBen Walkerdone 7249dd998cdSBen Walker 725131c9aadSAlexey Marchukif [[ $arch == x86_64* ]]; then 72610e1c615SFélix Piédallu BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS "-march=native") 727131c9aadSAlexey Marchukelse 72810e1c615SFélix Piédallu BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS) 729131c9aadSAlexey Marchukfi 7306c23a6f4SMichal BergerBUILD_CMD+=(-I/usr/local/include -L/usr/local/lib) 731d0f57d15SMichal BergerBUILD_CMD+=("-fuse-ld=$LD_TYPE") 732fc8dece0SKonrad Sztyberif [[ -n "${CONFIG[OPENSSL_PATH]}" ]]; then 733fc8dece0SKonrad Sztyber BUILD_CMD+=("-I${CONFIG[OPENSSL_PATH]}/include" "-L${CONFIG[OPENSSL_PATH]}") 734fc8dece0SKonrad Sztyberfi 73573439e6fSBen Walker 736b30d57cdSChangpeng Liuif [[ "${CONFIG[VFIO_USER]}" = "y" ]]; then 737421368c0SGreg Inozemtsev if ! echo -e '#include <json-c/json.h>' \ 738421368c0SGreg Inozemtsev | "${BUILD_CMD[@]}" -E - 2> /dev/null; then 7393b673b84SChangpeng Liu echo "ERROR: --with-vfio-user requires json-c-devel" 7403b673b84SChangpeng Liu echo "Please install then re-run this script" 7413b673b84SChangpeng Liu exit 1 7423b673b84SChangpeng Liu fi 743421368c0SGreg Inozemtsev if ! echo -e '#include <cmocka.h>' \ 744421368c0SGreg Inozemtsev | "${BUILD_CMD[@]}" -E - 2> /dev/null; then 7453b673b84SChangpeng Liu echo "ERROR: --with-vfio-user requires libcmocka-devel" 7463b673b84SChangpeng Liu echo "Please install then re-run this script" 7473b673b84SChangpeng Liu exit 1 748b30d57cdSChangpeng Liu fi 749b30d57cdSChangpeng Liufi 750b30d57cdSChangpeng Liu 751e58e9fbdSpaul luse# IDXD uses Intel specific instructions. 752e58e9fbdSpaul luseif [[ "${CONFIG[IDXD]}" = "y" ]]; then 7532755fbdfSpaul luse if [ $(uname -s) == "FreeBSD" ]; then 7542755fbdfSpaul luse intel="hw.model: Intel" 7552755fbdfSpaul luse cpu_vendor=$(sysctl -a | grep hw.model | cut -c 1-15) 7562755fbdfSpaul luse else 757e58e9fbdSpaul luse intel="GenuineIntel" 758e58e9fbdSpaul luse cpu_vendor=$(grep -i 'vendor' /proc/cpuinfo --max-count=1) 7592755fbdfSpaul luse fi 760e58e9fbdSpaul luse if [[ "$cpu_vendor" != *"$intel"* ]]; then 76150222f81SYin Congmin echo "WARNING: IDXD cannot be used due to CPU incompatibility." 762e58e9fbdSpaul luse fi 7632ed914f8SZiye Yang if [ -e /usr/include/accel-config/libaccel_config.h ]; then 7642ed914f8SZiye Yang CONFIG[IDXD_KERNEL]=y 7652ed914f8SZiye Yang fi 7662ed914f8SZiye Yang 767e58e9fbdSpaul lusefi 768e58e9fbdSpaul luse 769577df16aSPawel Wodkowskiif [ -z "${CONFIG[ENV]}" ]; then 770577df16aSPawel Wodkowski CONFIG[ENV]=$rootdir/lib/env_dpdk 771577df16aSPawel Wodkowski echo "Using default SPDK env in ${CONFIG[ENV]}" 7727232c450SMichal Berger if [[ -z "${CONFIG[DPDK_DIR]}" && "${CONFIG[DPDK_PKG_CONFIG]}" == n ]]; then 77338e26cf5STomasz Zawadzki if [ ! -f "$rootdir"/dpdk/config/meson.build ]; then 774d199eb29SDaniel Verkamp echo "DPDK not found; please specify --with-dpdk=<path> or run:" 775d199eb29SDaniel Verkamp echo 776d199eb29SDaniel Verkamp echo " git submodule update --init" 777d199eb29SDaniel Verkamp exit 1 778577df16aSPawel Wodkowski else 779577df16aSPawel Wodkowski CONFIG[DPDK_DIR]="${rootdir}/dpdk/build" 780f1980244SYuriy Umanets # Default ipsec libs 78119518dfbSAleksey Marchuk if [[ "${CONFIG[CRYPTO]}" = "y" ]] && [[ $arch = x86_64* ]]; then 782f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 783f1980244SYuriy Umanets CONFIG[IPSEC_MB_DIR]="${rootdir}/intel-ipsec-mb/lib" 784f1980244SYuriy Umanets fi 785577df16aSPawel Wodkowski echo "Using default DPDK in ${CONFIG[DPDK_DIR]}" 786d199eb29SDaniel Verkamp fi 7879dd998cdSBen Walker fi 7887d2a2f52SBen Walkerelse 7897232c450SMichal Berger if [[ -n "${CONFIG[DPDK_DIR]}" || "${CONFIG[DPDK_PKG_CONFIG]}" == y ]]; then 79006cc8045SBen Walker echo "--with-env and --with-dpdk are mutually exclusive." 79106cc8045SBen Walker exit 1 79206cc8045SBen Walker fi 79306cc8045SBen Walker 794577df16aSPawel Wodkowski if [ "${CONFIG[VHOST]}" = "y" ]; then 7957d2a2f52SBen Walker echo "Vhost is only supported when using the default DPDK environment. Disabling it." 7967d2a2f52SBen Walker fi 7977d2a2f52SBen Walker # Always disable vhost, but only print the error message if the user explicitly turned it on. 798577df16aSPawel Wodkowski CONFIG[VHOST]="n" 799577df16aSPawel Wodkowski if [ "${CONFIG[VIRTIO]}" = "y" ]; then 8007d2a2f52SBen Walker echo "Virtio is only supported when using the default DPDK environment. Disabling it." 8017d2a2f52SBen Walker fi 8027d2a2f52SBen Walker # Always disable virtio, but only print the error message if the user explicitly turned it on. 803577df16aSPawel Wodkowski CONFIG[VIRTIO]="n" 8049dd998cdSBen Walkerfi 8059dd998cdSBen Walker 8067232c450SMichal Bergerif [[ "${CONFIG[DPDK_PKG_CONFIG]}" == y ]]; then 8077232c450SMichal Berger if [[ "${CONFIG[SHARED]}" == n ]]; then 8087232c450SMichal Berger # dpdk-devel doesn't provide static libs 8097232c450SMichal Berger echo "Build against packaged DPDK requested, enabling shared libraries" 8107232c450SMichal Berger CONFIG[SHARED]=y 8117232c450SMichal Berger fi 8127232c450SMichal Bergerfi 8137232c450SMichal Berger 8149854c138SNick Connollyif [[ $sys_name == "Windows" ]]; then 8159854c138SNick Connolly if [ -z "${CONFIG[WPDK_DIR]}" ]; then 8169854c138SNick Connolly if [ ! -f "$rootdir"/wpdk/Makefile ]; then 8179854c138SNick Connolly echo "WPDK not found; please specify --with-wpdk=<path>. See https://wpdk.github.io." 8189854c138SNick Connolly exit 1 8199854c138SNick Connolly else 8209854c138SNick Connolly CONFIG[WPDK_DIR]="${rootdir}/wpdk/build" 8219854c138SNick Connolly echo "Using default WPDK in ${CONFIG[WPDK_DIR]}" 8229854c138SNick Connolly fi 8239854c138SNick Connolly fi 8249854c138SNick Connollyelse 8259854c138SNick Connolly if [ -n "${CONFIG[WPDK_DIR]}" ]; then 8269854c138SNick Connolly echo "ERROR: --with-wpdk is only supported for Windows" 8279854c138SNick Connolly exit 1 8289854c138SNick Connolly fi 8299854c138SNick Connollyfi 8309854c138SNick Connolly 831577df16aSPawel Wodkowskiif [ "${CONFIG[VTUNE]}" = "y" ]; then 832577df16aSPawel Wodkowski if [ -z "${CONFIG[VTUNE_DIR]}" ]; then 8335712088aSRoman Sudarikov echo "When VTune is enabled, you must specify the VTune directory using --with-vtune=path" 8345712088aSRoman Sudarikov exit 1 8355712088aSRoman Sudarikov fi 8365712088aSRoman Sudarikovfi 8375712088aSRoman Sudarikov 838bb0f78a2SMichal Bergerif [[ "${CONFIG[ASAN]}" = "y" && "${CONFIG[TSAN]}" = "y" ]]; then 839830912e2SBen Walker echo "ERROR: ASAN and TSAN cannot be enabled at the same time." 840830912e2SBen Walker exit 1 841830912e2SBen Walkerfi 842830912e2SBen Walker 843ac5b53a5SJim Harrisif [[ "${CONFIG[FIO_PLUGIN]}" = "y" && "${CONFIG[EXAMPLES]}" = "n" ]]; then 844ac5b53a5SJim Harris echo "ERROR: --with-fio and --disable-examples are mutually exclusive." 845ac5b53a5SJim Harris exit 1 846ac5b53a5SJim Harrisfi 847ac5b53a5SJim Harris 8485a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 8495091cadcSPaul Luse # FreeBSD doesn't support all configurations 850bf30e09aSAnton Nayshtut CONFIG[FSDEV]=n 8515091cadcSPaul Lusefi 8525091cadcSPaul Luse 85325ac67f1SJim Harrisif [[ $sys_name == "Linux" ]]; then 85425ac67f1SJim Harris if pkg-config libbsd; then 85525ac67f1SJim Harris CONFIG[HAVE_LIBBSD]=y 85625ac67f1SJim Harris fi 85725ac67f1SJim Harrisfi 85825ac67f1SJim Harris 859544a8fe5SJim Harrisif pkg-config libarchive; then 860544a8fe5SJim Harris CONFIG[HAVE_LIBARCHIVE]=y 861544a8fe5SJim Harrisfi 862544a8fe5SJim Harris 8632a0c2a2dSNick Connollyif [[ $sys_name != "Linux" ]]; then 86427b920a2SDarek Stojaczyk if [[ "${CONFIG[VHOST]}" == "y" ]]; then 865873c8748STomasz Kulasek echo "Vhost is only supported on Linux." 866873c8748STomasz Kulasek exit 1 86727b920a2SDarek Stojaczyk fi 86827b920a2SDarek Stojaczyk if [[ "${CONFIG[VIRTIO]}" == "y" ]]; then 869873c8748STomasz Kulasek echo "Virtio is only supported on Linux." 870873c8748STomasz Kulasek exit 1 87127b920a2SDarek Stojaczyk fi 87227b920a2SDarek Stojaczykfi 87327b920a2SDarek Stojaczyk 874577df16aSPawel Wodkowskiif [ "${CONFIG[RDMA]}" = "y" ]; then 875daee62a0SAlexey Marchuk if [[ ! "${CONFIG[RDMA_PROV]}" == "verbs" ]] && [[ ! "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]]; then 876daee62a0SAlexey Marchuk echo "Invalid RDMA provider specified, must be \"verbs\" or \"mlx5_dv\"" 877daee62a0SAlexey Marchuk exit 1 878daee62a0SAlexey Marchuk fi 879daee62a0SAlexey Marchuk 880eed0c6beSDarek Stojaczyk if ! echo -e '#include <infiniband/verbs.h>\n#include <rdma/rdma_verbs.h>\n' \ 881eed0c6beSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 882bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -libverbs -lrdmacm - 2> /dev/null; then 883bb0f78a2SMichal Berger echo "--with-rdma requires libverbs and librdmacm." 884bb0f78a2SMichal Berger echo "Please install then re-run this script." 885eed0c6beSDarek Stojaczyk exit 1 886eed0c6beSDarek Stojaczyk fi 887eed0c6beSDarek Stojaczyk 888eed0c6beSDarek Stojaczyk if echo -e '#include <infiniband/verbs.h>\n' \ 889eed0c6beSDarek Stojaczyk 'int main(void) { return !!IBV_WR_SEND_WITH_INV; }\n' \ 890bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 891577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="y" 8927671073bSSeth Howell else 893577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="n" 89417a819f8SJim Harris echo " 8957671073bSSeth Howell******************************************************************************* 8967671073bSSeth HowellWARNING: The Infiniband Verbs opcode Send With Invalidate is either not 8977671073bSSeth Howellsupported or is not functional with the current version of libibverbs installed 8987671073bSSeth Howellon this system. Please upgrade to at least version 1.1. 8997671073bSSeth Howell 9007671073bSSeth HowellBeginning with Linux kernel 4.14, the kernel NVMe-oF initiator leverages Send 9017671073bSSeth HowellWith Invalidate RDMA operations to improve performance. Failing to use the 9027671073bSSeth HowellSend With Invalidate operation on the NVMe-oF target side results in full 9037671073bSSeth Howellfunctionality, but greatly reduced performance. The SPDK NVMe-oF target will 9047671073bSSeth Howellbe unable to leverage that operation using the currently installed version 9057671073bSSeth Howellof libibverbs, so Linux kernel NVMe-oF initiators based on kernels greater 9067671073bSSeth Howellthan or equal to 4.14 will see significantly reduced performance. 90717a819f8SJim Harris*******************************************************************************" 9087671073bSSeth Howell fi 90994966468SAlexey Marchuk 91094966468SAlexey Marchuk if echo -e '#include <rdma/rdma_cma.h>\n' \ 91194966468SAlexey Marchuk 'int main(void) { return !!RDMA_OPTION_ID_ACK_TIMEOUT; }\n' \ 912bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 91394966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="y" 91494966468SAlexey Marchuk else 91594966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="n" 91694966468SAlexey Marchuk echo "RDMA_OPTION_ID_ACK_TIMEOUT is not supported" 91794966468SAlexey Marchuk fi 91894966468SAlexey Marchuk 9197706450fSMichael Haeuptle if echo -e '#include <rdma/rdma_cma.h>\n' \ 9207706450fSMichael Haeuptle 'int main(void) { return !!RDMA_OPTION_ID_TOS; }\n' \ 9217706450fSMichael Haeuptle | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 9227706450fSMichael Haeuptle CONFIG[RDMA_SET_TOS]="y" 9237706450fSMichael Haeuptle else 9247706450fSMichael Haeuptle CONFIG[RDMA_SET_TOS]="n" 9257706450fSMichael Haeuptle echo "RDMA_OPTION_ID_TOS is not supported" 9267706450fSMichael Haeuptle fi 9277706450fSMichael Haeuptle 928daee62a0SAlexey Marchuk if [ "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]; then 929a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD=" 930a1dfa7ecSAlexey Marchuk #include <infiniband/mlx5dv.h>\n 931a1dfa7ecSAlexey Marchuk #include <rdma/rdma_cma.h>\n 932a1dfa7ecSAlexey Marchuk int main(void) { return rdma_establish(NULL) ||\n 933a1dfa7ecSAlexey Marchuk !!IBV_QP_INIT_ATTR_SEND_OPS_FLAGS || !!MLX5_OPCODE_RDMA_WRITE" 934a1dfa7ecSAlexey Marchuk if [ "${CONFIG[CRYPTO]}" = "y" ]; then 935a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD+="|| !!MLX5DV_CRYPTO_ENGINES_CAP_AES_XTS_SINGLE_BLOCK" 936a1dfa7ecSAlexey Marchuk fi 937a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD+=";}" 938a1dfa7ecSAlexey Marchuk if ! echo -e $MLX5_DV_BUILD_BUILD_CMD | "${BUILD_CMD[@]}" -lmlx5 -I${rootdir}/include -c -; then 939daee62a0SAlexey Marchuk echo "mlx5_dv provider is not supported" 940daee62a0SAlexey Marchuk exit 1 941daee62a0SAlexey Marchuk fi 942daee62a0SAlexey Marchuk fi 943daee62a0SAlexey Marchuk 944bb0f78a2SMichal Berger echo "Using '${CONFIG[RDMA_PROV]}' RDMA provider" 9457671073bSSeth Howellfi 9467671073bSSeth Howell 947ed56a3d4SAnil Veerabhadrappaif [[ "${CONFIG[FC]}" = "y" ]]; then 948ed56a3d4SAnil Veerabhadrappa if [[ -n "${CONFIG[FC_PATH]}" ]]; then 949c9b4654bSTomasz Zawadzki check_dir "${CONFIG[FC_PATH]}" 950ed56a3d4SAnil Veerabhadrappa fi 951ed56a3d4SAnil Veerabhadrappafi 952ed56a3d4SAnil Veerabhadrappa 9532a6ddeb8SYuriy Umanetsfunction dpdk_version() { 9542a6ddeb8SYuriy Umanets # Check DPDK version to determine if mlx5_pci driver is supported 9552a6ddeb8SYuriy Umanets local dpdk_ver="none" 9562a6ddeb8SYuriy Umanets if [[ "${CONFIG[DPDK_DIR]}" == "$rootdir/dpdk/build" ]]; then 9572a6ddeb8SYuriy Umanets # DPDK_DIR points at our submodule so ./build may not exist yet. Use 9582a6ddeb8SYuriy Umanets # absolute path to lookup the version. 9592a6ddeb8SYuriy Umanets dpdk_ver=$(< "$rootdir/dpdk/VERSION") 9602a6ddeb8SYuriy Umanets elif [[ -f "${CONFIG[DPDK_DIR]}"/../VERSION ]]; then 9612a6ddeb8SYuriy Umanets dpdk_ver=$(< "${CONFIG[DPDK_DIR]}"/../VERSION) 9622a6ddeb8SYuriy Umanets fi 9632a6ddeb8SYuriy Umanets echo $dpdk_ver 9642a6ddeb8SYuriy Umanets} 9652a6ddeb8SYuriy Umanets 9662a6ddeb8SYuriy Umanetsfunction mlx5_build() { 9672a6ddeb8SYuriy Umanets # Check if libmlx5 exists to enable mlx5_pci compress/crypto PMD 9682a6ddeb8SYuriy Umanets if ! echo -e '#include <spdk/stdinc.h>\n' \ 9692a6ddeb8SYuriy Umanets '#include <infiniband/mlx5dv.h>\n' \ 9702a6ddeb8SYuriy Umanets '#include <infiniband/verbs.h>\n' \ 9712a6ddeb8SYuriy Umanets 'int main(void) { return 0; }\n' \ 9722a6ddeb8SYuriy Umanets | "${BUILD_CMD[@]}" -lmlx5 -libverbs -I${rootdir}/include -c - 2> /dev/null; then 9732a6ddeb8SYuriy Umanets return 1 9742a6ddeb8SYuriy Umanets fi 9752a6ddeb8SYuriy Umanets return 0 9762a6ddeb8SYuriy Umanets} 9772a6ddeb8SYuriy Umanets 97819e2dc38Spaul luseif [[ "${CONFIG[VBDEV_COMPRESS]}" = "y" ]]; then 979c4a3b312SDarek Stojaczyk if ! echo -e '#include <libpmem.h>\nint main(void) { return 0; }\n' \ 980bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lpmem - 2> /dev/null; then 98119e2dc38Spaul luse echo "--with-vbdev-compress requires libpmem." 982bb0f78a2SMichal Berger echo "Please install then re-run this script." 98397022803SJim Harris exit 1 98497022803SJim Harris fi 9852a6ddeb8SYuriy Umanets # Try to enable mlx5 compress 98619e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="y" 9872a6ddeb8SYuriy Umanets 988e71ae467SAlexey Marchuk # Check if libmlx5 exists to enable mlx5_pci compress PMD 9892a6ddeb8SYuriy Umanets if ! mlx5_build; then 990e71ae467SAlexey Marchuk echo "libmlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 99119e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9922a6ddeb8SYuriy Umanets else 993e71ae467SAlexey Marchuk if [[ "${CONFIG[DPDK_PKG_CONFIG]}" = "y" ]]; then 994e71ae467SAlexey Marchuk # Check if librte_compress_mlx5 exists in DPDK package 995e71ae467SAlexey Marchuk if [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_compress_mlx5.so ]; then 996e71ae467SAlexey Marchuk echo "librte_compress_mlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 99719e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 998e71ae467SAlexey Marchuk fi 999e71ae467SAlexey Marchuk else 1000e71ae467SAlexey Marchuk # Check DPDK version to determine if mlx5_pci driver is supported 10012a6ddeb8SYuriy Umanets dpdk_ver=$(dpdk_version) 10022a6ddeb8SYuriy Umanets if [[ $dpdk_ver = "none" ]]; then 1003c2de56b0SMichal Berger echo "Cannot get DPDK version, so disabling DPDK mlx5_pci compress PMD" 100419e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 10052a6ddeb8SYuriy Umanets elif [[ -n $dpdk_ver ]] && lt "$dpdk_ver" 21.02.0; then 10062a6ddeb8SYuriy Umanets # mlx5_pci for compress is supported by DPDK >- 21.02.0 1007c2de56b0SMichal Berger echo "DPDK version ${dpdk_ver} doesn't support mlx5_pci compress PMD" 100819e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 10092a6ddeb8SYuriy Umanets elif [[ -n ${CONFIG[DPDK_LIB_DIR]} ]] && [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_compress_mlx5.so ]; then 10102a6ddeb8SYuriy Umanets # This is only checked when --with-dpdk or --with-dpdk=* is used 10112a6ddeb8SYuriy Umanets echo "librte_compress_mlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 101219e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 10132a6ddeb8SYuriy Umanets fi 10142a6ddeb8SYuriy Umanets fi 10152a6ddeb8SYuriy Umanets fi 10162a6ddeb8SYuriy Umanetsfi 10172a6ddeb8SYuriy Umanets 10182a6ddeb8SYuriy Umanetsif [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 10192a6ddeb8SYuriy Umanets # Try to enable mlx5 crypto 10202a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="y" 10212a6ddeb8SYuriy Umanets 10222a6ddeb8SYuriy Umanets # Check if libmlx5 exists to enable mlx5_pci compress PMD 10232a6ddeb8SYuriy Umanets if ! mlx5_build; then 10242a6ddeb8SYuriy Umanets echo "libmlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 10252a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 10262a6ddeb8SYuriy Umanets else 10272a6ddeb8SYuriy Umanets if [[ "${CONFIG[DPDK_PKG_CONFIG]}" = "y" ]]; then 10282a6ddeb8SYuriy Umanets # Check if librte_crypto_mlx5 exists in DPDK package 10292a6ddeb8SYuriy Umanets if [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_crypto_mlx5.so ]; then 10302a6ddeb8SYuriy Umanets echo "librte_crypto_mlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 10312a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 10322a6ddeb8SYuriy Umanets fi 10332a6ddeb8SYuriy Umanets else 10342a6ddeb8SYuriy Umanets # Check DPDK version to determine if mlx5_pci driver is supported 10352a6ddeb8SYuriy Umanets dpdk_ver=$(dpdk_version) 10362a6ddeb8SYuriy Umanets if [[ $dpdk_ver = "none" ]]; then 10372a6ddeb8SYuriy Umanets echo "Cannot get DPDK version, so disabling DPDK mlx5_pci crypto PMD" 10382a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 10398a2fc789SYuriy Umanets elif [[ -n $dpdk_ver ]] && lt "$dpdk_ver" 21.11.0; then 10408a2fc789SYuriy Umanets # mlx5_pci for crypto is supported by DPDK >- 21.11.0 10412a6ddeb8SYuriy Umanets echo "DPDK version ${dpdk_ver} doesn't support mlx5_pci crypto PMD" 10422a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 10432a6ddeb8SYuriy Umanets elif [[ -n ${CONFIG[DPDK_LIB_DIR]} ]] && [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_crypto_mlx5.so ]; then 10442a6ddeb8SYuriy Umanets # This is only checked when --with-dpdk or --with-dpdk=* is used 10452a6ddeb8SYuriy Umanets echo "librte_crypto_mlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 10462a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 10472a6ddeb8SYuriy Umanets fi 1048e71ae467SAlexey Marchuk fi 1049e269bf4eSAlexey Marchuk fi 105097022803SJim Harrisfi 105197022803SJim Harris 1052805d9942STomasz Kulasekif [[ "${CONFIG[NVME_CUSE]}" = "y" ]]; then 1053805d9942STomasz 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' \ 1054bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lfuse3 -D_FILE_OFFSET_BITS=64 - 2> /dev/null; then 105593211307SKarol Latecki echo "--with-nvme-cuse requires libfuse3." 1056bb0f78a2SMichal Berger echo "Please install then re-run this script." 1057805d9942STomasz Kulasek exit 1 1058805d9942STomasz Kulasek fi 1059805d9942STomasz Kulasekfi 1060805d9942STomasz Kulasek 106155bd0d3aSDarek Stojaczykif [[ "${CONFIG[RBD]}" = "y" ]]; then 106255bd0d3aSDarek Stojaczyk if ! echo -e '#include <rbd/librbd.h>\n#include <rados/librados.h>\n' \ 106355bd0d3aSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 1064bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lrados -lrbd - 2> /dev/null; then 1065bb0f78a2SMichal Berger echo "--with-rbd requires librados and librbd." 1066bb0f78a2SMichal Berger echo "Please install then re-run this script." 106755bd0d3aSDarek Stojaczyk exit 1 106855bd0d3aSDarek Stojaczyk fi 106955bd0d3aSDarek Stojaczykfi 107055bd0d3aSDarek Stojaczyk 1071ed2b53f3SYifan Bianif [[ "${CONFIG[UBLK]}" = "y" ]]; then 1072ed2b53f3SYifan Bian if ! echo -e '#include <linux/ublk_cmd.h>\n#include <liburing.h>\n' \ 1073ed2b53f3SYifan Bian 'int main(void) { return 0; }\n' \ 1074ed2b53f3SYifan Bian | "${BUILD_CMD[@]}" -luring - 2> /dev/null; then 1075ed2b53f3SYifan Bian echo "--with-ublk requires liburing and ublk_drv." 1076ed2b53f3SYifan Bian echo "Please install then re-run this script." 1077ed2b53f3SYifan Bian exit 1 1078ed2b53f3SYifan Bian fi 1079ed2b53f3SYifan Bianfi 1080ed2b53f3SYifan Bian 108113603217SZhangfei Gaoif [[ "${CONFIG[DPDK_UADK]}" = "y" ]]; then 108213603217SZhangfei Gao if ! pkg-config --exists libwd; then 108313603217SZhangfei Gao echo "--with-dpdk-uadk requires uadk library." 108413603217SZhangfei Gao echo "Please install then re-run this script." 108513603217SZhangfei Gao exit 1 108613603217SZhangfei Gao fi 108713603217SZhangfei Gaofi 108813603217SZhangfei Gao 10895cb18040SDarek Stojaczykif [[ "${CONFIG[ISCSI_INITIATOR]}" = "y" ]]; then 10905cb18040SDarek Stojaczyk # Fedora installs libiscsi to /usr/lib64/iscsi for some reason. 10915cb18040SDarek Stojaczyk if ! echo -e '#include <iscsi/iscsi.h>\n#include <iscsi/scsi-lowlevel.h>\n' \ 10925cb18040SDarek Stojaczyk '#if LIBISCSI_API_VERSION < 20150621\n' \ 10935cb18040SDarek Stojaczyk '#error\n' \ 10945cb18040SDarek Stojaczyk '#endif\n' \ 10955cb18040SDarek Stojaczyk 'int main(void) { return 0; }\n' \ 1096bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -L/usr/lib64/iscsi -liscsi - 2> /dev/null; then 1097bb0f78a2SMichal Berger echo "--with-iscsi-initiator requires libiscsi with" 1098bb0f78a2SMichal Berger echo "LIBISCSI_API_VERSION >= 20150621." 1099bb0f78a2SMichal Berger echo "Please install then re-run this script." 11005cb18040SDarek Stojaczyk exit 1 11015cb18040SDarek Stojaczyk fi 11025cb18040SDarek Stojaczykfi 11035cb18040SDarek Stojaczyk 11042e283fcbS0xe0fif [[ "${CONFIG[DAOS]}" = "y" ]]; then 1105044bb175SDenis Barakthanov daos_build_cmd=("${BUILD_CMD[@]}") 1106044bb175SDenis Barakthanov if [[ -n "${CONFIG[DAOS_DIR]}" ]]; then 1107044bb175SDenis Barakthanov daos_build_cmd+=(-I"${CONFIG[DAOS_DIR]}"/include -L"${CONFIG[DAOS_DIR]}"/lib64) 1108044bb175SDenis Barakthanov fi 11092e283fcbS0xe0f if ! echo -e '#include <daos.h>\n#include <daos_fs.h>\n' \ 11102e283fcbS0xe0f 'int main(void) { return 0; }\n' \ 1111044bb175SDenis Barakthanov | "${daos_build_cmd[@]}" -lgurt -ldaos -ldaos_common -ldfs - 2> /dev/null; then 11122e283fcbS0xe0f echo "--with-daos requires libdaos, libdaos_common, libdfs and libgurt" 11132e283fcbS0xe0f echo "Please install then re-run this script." 11142e283fcbS0xe0f exit 1 11152e283fcbS0xe0f fi 11162e283fcbS0xe0ffi 11172e283fcbS0xe0f 11183674c1d3SDarek Stojaczykif [[ "${CONFIG[ASAN]}" = "y" ]]; then 11193674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1120bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=address - 2> /dev/null; then 1121bb0f78a2SMichal Berger echo "--enable-asan requires libasan." 1122bb0f78a2SMichal Berger echo "Please install then re-run this script." 11233674c1d3SDarek Stojaczyk exit 1 11243674c1d3SDarek Stojaczyk fi 11253674c1d3SDarek Stojaczykfi 11263674c1d3SDarek Stojaczyk 11273674c1d3SDarek Stojaczykif [[ "${CONFIG[UBSAN]}" = "y" ]]; then 11283674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1129bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=undefined - 2> /dev/null; then 1130bb0f78a2SMichal Berger echo "--enable-ubsan requires libubsan." 1131bb0f78a2SMichal Berger echo "Please install then re-run this script." 1132bb0f78a2SMichal Berger echo "If installed, please check that the GCC version is at least 6.4" 1133bb0f78a2SMichal Berger echo "and synchronize CC accordingly." 11343674c1d3SDarek Stojaczyk exit 1 11353674c1d3SDarek Stojaczyk fi 11363674c1d3SDarek Stojaczykfi 11373674c1d3SDarek Stojaczyk 11383674c1d3SDarek Stojaczykif [[ "${CONFIG[TSAN]}" = "y" ]]; then 11393674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1140bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=thread - 2> /dev/null; then 1141bb0f78a2SMichal Berger echo "--enable-tsan requires libtsan." 1142bb0f78a2SMichal Berger echo "Please install then re-run this script." 11433674c1d3SDarek Stojaczyk exit 1 11443674c1d3SDarek Stojaczyk fi 11453674c1d3SDarek Stojaczykfi 11463674c1d3SDarek Stojaczyk 114743a3984cSJim Harrisif echo -e '#include <stdlib.h>\nint main(void) { arc4random(); return 0; }\n' \ 114843a3984cSJim Harris | "${BUILD_CMD[@]}" - 2> /dev/null; then 114943a3984cSJim Harris CONFIG[HAVE_ARC4RANDOM]="y" 115043a3984cSJim Harrisfi 115143a3984cSJim Harris 1152634ac768SKrzysztof Karasif echo -e '#include <uuid/uuid.h>\nint main(void) { uuid_generate_sha1(NULL, NULL, NULL, 0); return 0; }\n' \ 1153634ac768SKrzysztof Karas | "${BUILD_CMD[@]}" - -luuid 2> /dev/null; then 1154634ac768SKrzysztof Karas CONFIG[HAVE_UUID_GENERATE_SHA1]="y" 1155634ac768SKrzysztof Karasfi 1156634ac768SKrzysztof Karas 115701452b1bSDuncan Bellamyif echo -e '#include <execinfo.h>' | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 115801452b1bSDuncan Bellamy CONFIG[HAVE_EXECINFO_H]=y 115901452b1bSDuncan Bellamyfi 116001452b1bSDuncan Bellamy 11616610b3e4SKonrad Sztyberif echo -e '#include <keyutils.h>\nint main(void) { request_key(0, 0, 0, -1); return 0; }' \ 11626610b3e4SKonrad Sztyber | "${BUILD_CMD[@]}" - -lkeyutils 2> /dev/null; then 11636610b3e4SKonrad Sztyber CONFIG[HAVE_KEYUTILS]=y 11646610b3e4SKonrad Sztyberfi 11656610b3e4SKonrad Sztyber 1166fc8dece0SKonrad Sztyberif echo -e '#include <openssl/evp.h>\nint main(void) { EVP_MAC *m = EVP_MAC_fetch(0, 0, 0); return 0; }' \ 1167fc8dece0SKonrad Sztyber | "${BUILD_CMD[@]}" - -lcrypto 2> /dev/null; then 1168fc8dece0SKonrad Sztyber CONFIG[HAVE_EVP_MAC]=y 1169fc8dece0SKonrad Sztyberfi 1170fc8dece0SKonrad Sztyber 117148b83bb7SYankun Liif echo -e '#include <lz4.h>\nint main(void) { return 0; }\n' \ 117248b83bb7SYankun Li | "${BUILD_CMD[@]}" -llz4 - 2> /dev/null; then 117348b83bb7SYankun Li CONFIG[HAVE_LZ4]="y" 117448b83bb7SYankun Lifi 117548b83bb7SYankun Li 1176d1fee489SVitaliy Mysakif [[ "${CONFIG[OCF]}" = "y" ]]; then 1177d1fee489SVitaliy Mysak # If OCF_PATH is a file, assume it is a library and use it to compile with 1178d1fee489SVitaliy Mysak if [ -f ${CONFIG[OCF_PATH]} ]; then 1179d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=y 1180d1fee489SVitaliy Mysak else 1181d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=n 1182d1fee489SVitaliy Mysak fi 1183d1fee489SVitaliy Mysakfi 1184d1fee489SVitaliy Mysak 1185995d60f4SBen Walkerif [[ "${CONFIG[PGO_CAPTURE]}" = "y" && "${CONFIG[PGO_USE]}" = "y" ]]; then 1186995d60f4SBen Walker echo "ERROR: --enable-pgo-capture and --enable-pgo-use are mutually exclusive." 1187995d60f4SBen Walker exit 1 1188db5f3612SBen Walkerelif [[ "${CONFIG[PGO_CAPTURE]}" = "y" || "${CONFI[PGO_USE]}" = "y" ]]; then 1189db5f3612SBen Walker if [[ -z "${CONFIG[PGO_DIR]}" ]]; then 1190db5f3612SBen Walker CONFIG[PGO_DIR]=$(realpath $rootdir/build/pgo) 1191db5f3612SBen Walker fi 1192db5f3612SBen Walkerfi 1193db5f3612SBen Walker 1194db5f3612SBen Walkerif [[ "${CONFIG[PGO_USE]}" = "y" ]]; then 1195954728e9SBen Walker if [[ "$CC_TYPE" = "clang" ]]; then 1196954728e9SBen Walker # For clang we need to run an extra step on gathered profiling data. 1197954728e9SBen Walker echo "Generating suitable profile data" 1198db5f3612SBen Walker llvm-profdata merge -output=${CONFIG[PGO_DIR]}/default.profdata ${CONFIG[PGO_DIR]} 1199954728e9SBen Walker fi 1200995d60f4SBen Walkerfi 1201995d60f4SBen Walker 120287757389SSimon A. F. Lundif [[ "${CONFIG[URING]}" = "y" || "${CONFIG[XNVME]}" = "y" ]]; then 12038165bf71SBen Walker if [[ -n "${CONFIG[URING_PATH]}" ]]; then 1204c9b4654bSTomasz Zawadzki check_dir "${CONFIG[URING_PATH]}" 12054ccc9ea3SJim Harris elif ! echo -e '#include <liburing.h>\nint main(void) { return 0; }\n' \ 12064ccc9ea3SJim Harris | "${BUILD_CMD[@]}" -luring - 2> /dev/null; then 12074ccc9ea3SJim Harris echo "--with-uring requires liburing." 12084ccc9ea3SJim Harris echo "Please build and install then re-run this script." 12094ccc9ea3SJim Harris exit 1 12108165bf71SBen Walker fi 1211958d196cSIndraneel M # Support for Zoned devices is enabled by default for Uring bdev. Check appropriate support in kernel. 12128b840195SIndraneel M if [[ "${CONFIG[URING_ZNS]}" = "y" ]]; then 12138b840195SIndraneel M if ! echo -e '#include<linux/blkzoned.h>\nint main(void) { return BLK_ZONE_REP_CAPACITY; }\n' \ 12148b840195SIndraneel M | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 1215958d196cSIndraneel M echo "Disabling Zoned NS support in Uring! Requires blkzoned.h from kernel >= linux-5.9." 1216958d196cSIndraneel M CONFIG[URING_ZNS]=n 1217958d196cSIndraneel M fi 12188b840195SIndraneel M fi 12198b840195SIndraneel Mfi 12208b840195SIndraneel M 12217fa15e28SXiaodong Liuif [[ "${CONFIG[FUSE]}" = "y" ]]; then 12227fa15e28SXiaodong Liu if [[ ! -d /usr/include/fuse3 ]] && [[ ! -d /usr/local/include/fuse3 ]]; then 12237fa15e28SXiaodong Liu echo "--with-fuse requires libfuse3." 12247fa15e28SXiaodong Liu echo "Please install then re-run this script." 12257fa15e28SXiaodong Liu exit 1 12267fa15e28SXiaodong Liu fi 12277fa15e28SXiaodong Liufi 12287fa15e28SXiaodong Liu 122991e42257SJim Harrisif [ "${CONFIG[CET]}" = "y" ]; then 1230bb0f78a2SMichal Berger if ! echo -e 'int main(void) { return 0; }\n' | "${BUILD_CMD[@]}" -fcf-protection - 2> /dev/null; then 1231bb0f78a2SMichal Berger echo "--enable-cet requires compiler/linker that supports CET." 1232bb0f78a2SMichal Berger echo "Please install then re-run this script." 123391e42257SJim Harris exit 1 123491e42257SJim Harris fi 123591e42257SJim Harrisfi 123691e42257SJim Harris 1237050565e5SJim Harrisif [[ "${CONFIG[FUZZER]}" = "y" && "$CC_TYPE" != "clang" ]]; then 1238050565e5SJim Harris echo "--with-fuzzer requires setting CC and CXX to clang." 1239050565e5SJim Harris exit 1 1240050565e5SJim Harrisfi 1241050565e5SJim Harris 1242dd2c08d2Spaul luseif [[ $arch == x86_64* ]] || [[ $arch == aarch64* ]]; then 1243dd2c08d2Spaul luse CONFIG[ISAL]=y 1244dd2c08d2Spaul luse # make sure the submodule is initialized 12459d2f6f86SJim Harris if [ ! -f "$rootdir"/isa-l/autogen.sh ]; then 1246dd2c08d2Spaul luse echo "ISA-L is required but was not found, please init the submodule with:" 12479d2f6f86SJim Harris echo " git submodule update --init" 1248dd2c08d2Spaul luse echo "and then re-run this script." 12499d2f6f86SJim Harris exit 1 12509d2f6f86SJim Harris fi 1251dd2c08d2Spaul luse # for x86 only, check the nasm version for ISA-L and IPSEC 1252dd2c08d2Spaul luse if [[ $arch == x86_64* ]]; then 1253dd2c08d2Spaul luse ver=$(nasm -v 2> /dev/null | awk '{print $3}' | awk -Fr '{print $1}') 1254dd2c08d2Spaul luse if lt "$ver" 2.14; then 1255dd2c08d2Spaul luse CONFIG[ISAL]=n 1256dd2c08d2Spaul luse # IPSEC has nasm requirement and DPDK crypto relies on IPSEC 1257dd2c08d2Spaul luse CONFIG[IPSEC_MB]=n 1258dd2c08d2Spaul luse echo "WARNING: ISA-L & DPDK crypto cannot be used as nasm ver must be 2.14 or newer." 1259dd2c08d2Spaul luse fi 1260dd2c08d2Spaul luse fi 1261784b9d48SAlexey Marchuk # check gas version on aarch64 1262784b9d48SAlexey Marchuk if [[ $arch == aarch64* ]]; then 12632d41d8aeSMichal Berger ver=$(as --version 2> /dev/null | awk '/GNU assembler/{print $NF}') 1264784b9d48SAlexey Marchuk if lt "$ver" 2.24; then 1265784b9d48SAlexey Marchuk # ISA-L, compression & crypto require gas version 2.24 or newer. 1266784b9d48SAlexey Marchuk CONFIG[ISAL]=n 1267784b9d48SAlexey Marchuk echo "Notice: ISA-L, compression & crypto require GAS version 2.24 or newer. Turning off default ISA-L and crypto features." 1268784b9d48SAlexey Marchuk elif lt "$ver" 2.34; then 1269784b9d48SAlexey Marchuk #For gas v2.24~v2.34, sve2 instructions are not supported. To workaround it, sve2 optimization should be disabled 1270784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--disable-sve2") 1271784b9d48SAlexey Marchuk fi 1272784b9d48SAlexey Marchuk fi 1273dd2c08d2Spaul luseelse 1274dd2c08d2Spaul luse # for PPC 1275dd2c08d2Spaul luse CONFIG[ISAL]=n 1276dd2c08d2Spaul luse echo "WARNING: ISA-L cannot be used due to architecture incompatibility." 1277dd2c08d2Spaul lusefi 12789d2f6f86SJim Harris 1279dd2c08d2Spaul luse# now either configure ISA-L or disable unavailable features 1280dd2c08d2Spaul luseif [[ "${CONFIG[ISAL]}" = "y" ]]; then 12819d2f6f86SJim Harris cd $rootdir/isa-l 1282d965bc4dSKonrad Sztyber ISAL_LOG=$rootdir/.spdk-isal.log 12839d2f6f86SJim Harris if [[ -n "${CONFIG[CROSS_PREFIX]}" ]]; then 12849d2f6f86SJim Harris ISAL_OPTS=("--host=${CONFIG[CROSS_PREFIX]}") 12859d2f6f86SJim Harris else 12869d2f6f86SJim Harris ISAL_OPTS=() 12879d2f6f86SJim Harris fi 1288d3d3c0a8SMichal Berger if [[ "${CONFIG[SHARED]}" = "y" ]]; then 12896c6c42fcSBen Walker ISAL_OPTS+=("--enable-shared=yes") 12906c6c42fcSBen Walker else 12916c6c42fcSBen Walker ISAL_OPTS+=("--enable-shared=no") 12926c6c42fcSBen Walker fi 1293b02581a8SBen Walker ISAL_OPTS+=("--prefix=${CONFIG[PREFIX]}") 12949d2f6f86SJim Harris echo -n "Configuring ISA-L (logfile: $ISAL_LOG)..." 12959d2f6f86SJim Harris ./autogen.sh &> $ISAL_LOG 1296d0f57d15SMichal Berger ./configure CFLAGS="-fPIC -g -O2 -fuse-ld=$LD_TYPE -Wno-unused-command-line-argument" "${ISAL_OPTS[@]}" --enable-shared=no >> $ISAL_LOG 2>&1 12979d2f6f86SJim Harris echo "done." 12989d2f6f86SJim Harris cd $rootdir 1299dd2c08d2Spaul luseelse 1300dd2c08d2Spaul luse echo "Without ISA-L, there is no software support for crypto or compression," 1301dd2c08d2Spaul luse echo "so these features will be disabled." 1302dd2c08d2Spaul luse CONFIG[CRYPTO]=n 130319e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=n 1304976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=n 13059d2f6f86SJim Harrisfi 13069d2f6f86SJim Harris 1307784b9d48SAlexey Marchuk# ISA-L-crypto complements ISA-L functionality, it is only enabled together with ISA-L 1308784b9d48SAlexey Marchukif [[ "${CONFIG[ISAL]}" = "y" ]]; then 1309784b9d48SAlexey Marchuk if [ ! -f "$rootdir"/isa-l-crypto/autogen.sh ]; then 1310784b9d48SAlexey Marchuk echo "ISA-L-crypto is required but was not found, please init the submodule with:" 1311784b9d48SAlexey Marchuk echo " git submodule update --init" 1312784b9d48SAlexey Marchuk echo "and then re-run this script." 1313784b9d48SAlexey Marchuk exit 1 1314784b9d48SAlexey Marchuk fi 1315784b9d48SAlexey Marchuk 1316784b9d48SAlexey Marchuk cd $rootdir/isa-l-crypto 1317d965bc4dSKonrad Sztyber ISAL_CRYPTO_LOG=$rootdir/.spdk-isal-crypto.log 1318784b9d48SAlexey Marchuk if [[ -n "${CONFIG[CROSS_PREFIX]}" ]]; then 1319784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--host=${CONFIG[CROSS_PREFIX]}") 1320784b9d48SAlexey Marchuk fi 1321d3d3c0a8SMichal Berger if [[ "${CONFIG[SHARED]}" = "y" ]]; then 13226c6c42fcSBen Walker ISAL_CRYPTO_OPTS+=("--enable-shared=yes") 13236c6c42fcSBen Walker else 1324784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--enable-shared=no") 13256c6c42fcSBen Walker fi 1326b02581a8SBen Walker ISAL_CRYPTO_OPTS+=("--prefix=${CONFIG[PREFIX]}") 1327784b9d48SAlexey Marchuk echo -n "Configuring ISA-L-crypto (logfile: $ISAL_CRYPTO_LOG)..." 1328784b9d48SAlexey Marchuk ./autogen.sh &> $ISAL_CRYPTO_LOG 1329d0f57d15SMichal Berger ./configure CFLAGS="-fPIC -g -O2 -fuse-ld=$LD_TYPE -Wno-unused-command-line-argument" "${ISAL_CRYPTO_OPTS[@]}" >> $ISAL_CRYPTO_LOG 2>&1 1330784b9d48SAlexey Marchuk echo "done." 1331784b9d48SAlexey Marchuk cd $rootdir 1332784b9d48SAlexey Marchuk CONFIG[ISAL_CRYPTO]=y 1333784b9d48SAlexey Marchukelse 1334784b9d48SAlexey Marchuk CONFIG[ISAL_CRYPTO]=n 1335784b9d48SAlexey Marchukfi 1336784b9d48SAlexey Marchuk 1337509241ceSKonrad Sztyberif [[ "${CONFIG[SMA]}" = "y" ]]; then 1338509241ceSKonrad Sztyber if ! python3 -c 'import grpc; import grpc_tools' 2> /dev/null; then 1339509241ceSKonrad Sztyber echo "--with-sma requires grpcio and grpcio-tools python packages." 1340509241ceSKonrad Sztyber echo "Please install then re-run this script." 1341509241ceSKonrad Sztyber exit 1 1342509241ceSKonrad Sztyber fi 1343509241ceSKonrad Sztyberfi 1344509241ceSKonrad Sztyber 13452796687dSParameswaran Krishnamurthyif [[ "${CONFIG[AVAHI]}" = "y" ]]; then 13462796687dSParameswaran Krishnamurthy if ! echo -e '#include <avahi-client/client.h>\n#include <avahi-common/malloc.h>\n' \ 13472796687dSParameswaran Krishnamurthy 'int main(void) { return 0; }\n' \ 13482796687dSParameswaran Krishnamurthy | "${BUILD_CMD[@]}" -lavahi-client -lavahi-common - 2> /dev/null; then 13492796687dSParameswaran Krishnamurthy echo "--with-avahi requires libavahi-client and libavahi-common." 13502796687dSParameswaran Krishnamurthy echo "Please install then re-run this script." 13512796687dSParameswaran Krishnamurthy exit 1 13522796687dSParameswaran Krishnamurthy fi 13532796687dSParameswaran Krishnamurthyfi 13542796687dSParameswaran Krishnamurthy 13551e46e023SMaciej Misif [[ "${CONFIG[GOLANG]}" = "y" ]]; then 13561e46e023SMaciej Mis if ! go version 2> /dev/null; then 13571e46e023SMaciej Mis echo "--with-golang requires Go installation." 13581e46e023SMaciej Mis echo "Please install then re-run this script." 13591e46e023SMaciej Mis exit 1 13601e46e023SMaciej Mis fi 13611e46e023SMaciej Misfi 13621e46e023SMaciej Mis 13638247bd40SMarcin Spiewakif [[ -n ${CONFIG[MAX_LCORES]} ]]; then 136473293d73SMarcin Spiewak if [[ ! ${CONFIG[MAX_LCORES]} =~ ^([1-9][0-9]*|detect)$ ]] || ((CONFIG[MAX_LCORES] > 1024)); then 136573293d73SMarcin Spiewak echo "ERROR: Max number of lcores must be a decimal number in range [1..1024] or 'detect' (given: ${CONFIG[MAX_LCORES]})" 13668247bd40SMarcin Spiewak exit 1 13678247bd40SMarcin Spiewak fi 13688247bd40SMarcin Spiewakfi 13698247bd40SMarcin Spiewak 1370*081f8addSJim Harrisif [[ -n ${CONFIG[MAX_NUMA_NODES]} ]]; then 1371*081f8addSJim Harris if [[ ! ${CONFIG[MAX_NUMA_NODES]} =~ ^([1-9][0-9]*)$ ]] || ((CONFIG[MAX_NUMA_NODES] > 16)); then 1372*081f8addSJim Harris echo "ERROR: Max number of lcores must be a decimal number in range [1..16] (given: ${CONFIG[MAX_LCORES]})" 1373*081f8addSJim Harris exit 1 1374*081f8addSJim Harris fi 1375*081f8addSJim Harrisfi 1376*081f8addSJim Harris 1377e21c39aaSAnton Nayshtutif [[ "${CONFIG[FSDEV]}" = "n" ]]; then 1378e21c39aaSAnton Nayshtut if [[ "$AIO_FSDEV_REQUIRED" = "y" ]]; then 1379e21c39aaSAnton Nayshtut echo "ERROR: --with-aio-fsdev cannot be specified as fsdev is disabled." 1380e21c39aaSAnton Nayshtut exit 1 1381e21c39aaSAnton Nayshtut fi 1382e21c39aaSAnton Nayshtut 1383e21c39aaSAnton Nayshtut # if AIO_FSDEV is not explicitly required by user, we just silently disable it 1384e21c39aaSAnton Nayshtut CONFIG[AIO_FSDEV]=n 1385e21c39aaSAnton Nayshtutfi 1386e21c39aaSAnton Nayshtut 1387e21c39aaSAnton Nayshtutif [[ "${CONFIG[AIO_FSDEV]}" = "y" ]]; then 1388e21c39aaSAnton Nayshtut if echo -e '#define _GNU_SOURCE\n#include <unistd.h>\n' \ 1389e21c39aaSAnton Nayshtut 'int main(void) { return copy_file_range(0, 0, 0, 0, 0, 0); }\n' \ 1390e21c39aaSAnton Nayshtut | "${BUILD_CMD[@]}" - 2> /dev/null; then 1391e21c39aaSAnton Nayshtut CONFIG[COPY_FILE_RANGE]=y 1392e21c39aaSAnton Nayshtut else 1393e21c39aaSAnton Nayshtut CONFIG[COPY_FILE_RANGE]=n 1394e21c39aaSAnton Nayshtut fi 1395e21c39aaSAnton Nayshtut if echo -e '#include <sys/stat.h>\n' \ 1396e21c39aaSAnton Nayshtut 'int main(void) { struct stat s; s.st_atime = s.st_atime; return 0 ;}\n' \ 1397e21c39aaSAnton Nayshtut | "${BUILD_CMD[@]}" - 2> /dev/null; then 1398e21c39aaSAnton Nayshtut CONFIG[HAVE_STRUCT_STAT_ST_ATIM]=y 1399e21c39aaSAnton Nayshtut CONFIG[HAVE_STRUCT_STAT_ST_ATIMESPEC]=n 1400e21c39aaSAnton Nayshtut elif echo -e '#include <sys/stat.h>\n' \ 1401e21c39aaSAnton Nayshtut 'int main(void) { struct stat s; s.st_atimespec = s.st_atimespec; return 0; }\n' \ 1402e21c39aaSAnton Nayshtut | "${BUILD_CMD[@]}" - 2> /dev/null; then 1403e21c39aaSAnton Nayshtut CONFIG[HAVE_STRUCT_STAT_ST_ATIM]=n 1404e21c39aaSAnton Nayshtut CONFIG[HAVE_STRUCT_STAT_ST_ATIMESPEC]=y 1405e21c39aaSAnton Nayshtut else 1406e21c39aaSAnton Nayshtut CONFIG[HAVE_STRUCT_STAT_ST_ATIM]=n 1407e21c39aaSAnton Nayshtut CONFIG[HAVE_STRUCT_STAT_ST_ATIMESPEC]=n 1408e21c39aaSAnton Nayshtut fi 1409e21c39aaSAnton Nayshtutfi 1410e21c39aaSAnton Nayshtut 1411fcc38949SRui Chang# For ARM Neoverse-N1 platform, debug build needs gcc version newer than 8.4 1412fcc38949SRui Changif [[ "${CONFIG[DEBUG]}" = "y" && $arch = aarch64* && "$CC_TYPE" = "gcc" ]]; then 1413fcc38949SRui Chang GCC_VERSION=$($CC -dumpfullversion) 1414fcc38949SRui Chang PART_NUM=$(grep -i -m 1 "CPU part" /proc/cpuinfo | awk '{print $4}') 1415fcc38949SRui Chang 1416fcc38949SRui Chang if [[ "$(printf '%s\n' "8.4.0" "$GCC_VERSION" | sort -V | head -n1)" != "8.4.0" ]]; then 1417fcc38949SRui Chang if [[ $PART_NUM = 0xd0c ]]; then 1418fcc38949SRui Chang echo "WARNING: For ARM Neoverse-N1 platform, debug build needs GCC version newer than 8.4." 1419fcc38949SRui Chang echo " Will work around this by using armv8.2-a+crypto as target architecture for now." 1420fcc38949SRui Chang CONFIG[ARCH]=armv8.2-a+crypto 1421e8f84531SSunil Shahu elif [[ $PART_NUM = 0x0b2 ]]; then 1422e8f84531SSunil Shahu echo "WARNING: For ARM octeontx2 platform, debug build needs GCC version newer than 8.4." 1423e8f84531SSunil Shahu echo " Will work around this by using armv8.2-a+crypto as target architecture for now." 1424e8f84531SSunil Shahu CONFIG[ARCH]=armv8.2-a+crypto 1425fcc38949SRui Chang fi 1426fcc38949SRui Chang fi 1427fcc38949SRui Changfi 1428fcc38949SRui Chang 142948f70f48SPawel Wodkowski# We are now ready to generate final configuration. But first do sanity 143048f70f48SPawel Wodkowski# check to see if all keys in CONFIG array have its reflection in CONFIG file. 1431bb0f78a2SMichal Bergerif (($(grep -cE "^\s*CONFIG_[[:alnum:]_]+=" "$rootdir/CONFIG") != ${#CONFIG[@]})); then 143248f70f48SPawel Wodkowski echo "" 143348f70f48SPawel Wodkowski echo "BUG: Some configuration options are not present in CONFIG file. Please update this file." 143448f70f48SPawel Wodkowski echo "Missing options in CONFIG (+) file and in current config (-): " 143548f70f48SPawel Wodkowski diff -u --label "CONFIG file" --label "CONFIG[@]" \ 1436f8d6541dSMichal Berger <(sed -r -e '/^[[:space:]]*$/d; /^[[:space:]]*#.*/d; s/(CONFIG_[[:alnum:]_]+)=.*/\1/g' CONFIG | sort) \ 1437bb0f78a2SMichal Berger <(printf "CONFIG_%s\n" "${!CONFIG[@]}" | sort) 143848f70f48SPawel Wodkowski exit 1 143948f70f48SPawel Wodkowskifi 144048f70f48SPawel Wodkowski 144185bc2bbeSPawel Wodkowskiecho -n "Creating mk/config.mk..." 1442e62a3c65SSeth Howellcp -f $rootdir/CONFIG $rootdir/mk/config.mk 144351ab849bSJim HarrisARGS=$(echo "$@" | sed 's/ /\\ /g') 144451ab849bSJim Harrissed -i.bak -r "s#__CONFIGURE_OPTIONS__#${ARGS}#g" $rootdir/mk/config.mk 1445bb0f78a2SMichal Bergerfor key in "${!CONFIG[@]}"; do 1446f8d6541dSMichal Berger sed -i.bak -r "s#[[:space:]]*CONFIG_${key}=.*#CONFIG_${key}\?=${CONFIG[$key]}#g" $rootdir/mk/config.mk 1447577df16aSPawel Wodkowskidone 1448577df16aSPawel Wodkowski# On FreeBSD sed -i 'SUFFIX' - SUFFIX is mandatory. So no way but to delete the backed file. 1449e62a3c65SSeth Howellrm -f $rootdir/mk/config.mk.bak 1450baa6eac0SDarek Stojaczykecho "done." 14519dd998cdSBen Walker 145208ec96ebSDaniel Verkamp# Environment variables 1453baa6eac0SDarek Stojaczykecho -n "Creating mk/cc.flags.mk..." 1454e62a3c65SSeth Howellrm -f $rootdir/mk/cc.flags.mk 1455e62a3c65SSeth Howell[ -n "$CFLAGS" ] && echo "CFLAGS?=$CFLAGS" > $rootdir/mk/cc.flags.mk 1456e62a3c65SSeth Howell[ -n "$CXXFLAGS" ] && echo "CXXFLAGS?=$CXXFLAGS" >> $rootdir/mk/cc.flags.mk 1457e62a3c65SSeth Howell[ -n "$LDFLAGS" ] && echo "LDFLAGS?=$LDFLAGS" >> $rootdir/mk/cc.flags.mk 1458e62a3c65SSeth Howell[ -n "$DESTDIR" ] && echo "DESTDIR?=$DESTDIR" >> $rootdir/mk/cc.flags.mk 14590b56a5b4SJim Harrisecho "done." 146085bc2bbeSPawel Wodkowski 1461db3ebfe6SMichal Berger# Create .sh with build config for easy sourcing|lookup during the tests. 1462db3ebfe6SMichal Bergerfor conf in "${!CONFIG[@]}"; do 1463db3ebfe6SMichal Berger echo "CONFIG_$conf=${CONFIG[$conf]}" 1464db3ebfe6SMichal Bergerdone > "$rootdir/test/common/build_config.sh" 1465db3ebfe6SMichal Berger 14665a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 1467870ce250SPaul Luse echo "Type 'gmake' to build." 1468870ce250SPaul Luseelse 14690b56a5b4SJim Harris echo "Type 'make' to build." 1470870ce250SPaul Lusefi 14719dd998cdSBen Walker 14729dd998cdSBen Walkerexit 0 1473