19dd998cdSBen Walker#!/usr/bin/env bash 29dd998cdSBen Walker 39dd998cdSBen Walkerset -e 49dd998cdSBen Walker 514bbde7bSPawel Wodkowskitrap 'echo -e "\n\nConfiguration failed\n\n" >&2' ERR 614bbde7bSPawel Wodkowski 7e62a3c65SSeth Howellrootdir=$(readlink -f $(dirname $0)) 865ed6034SMichal Bergersource "$rootdir/scripts/common.sh" 9e62a3c65SSeth Howell 105ccabc8fSMichal Bergerfunction usage() { 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" 25e8863cb7SMichal Berger echo " --libdir=path Configure installation path for the libraries (default: \$prefix/lib)" 263def834cSAmelia Blachuciak echo "" 279dd998cdSBen Walker echo " --enable-debug Configure for debug builds" 289dd998cdSBen Walker echo " --enable-werror Treat compiler warnings as errors" 299dd998cdSBen Walker echo " --enable-asan Enable address sanitizer" 309dd998cdSBen Walker echo " --enable-ubsan Enable undefined behavior sanitizer" 319dd998cdSBen Walker echo " --enable-coverage Enable code coverage tracking" 326d6d1161SDaniel Verkamp echo " --enable-lto Enable link-time optimization" 33995d60f4SBen Walker echo " --enable-pgo-capture Enable generation of profile guided optimization data" 34995d60f4SBen Walker echo " --enable-pgo-use Use previously captured profile guided optimization data" 3591e42257SJim Harris echo " --enable-cet Enable Intel Control-flow Enforcement Technology (CET)" 369fcb1cb0STomasz Zawadzki echo " --disable-tests Disable building of functional tests" 379fcb1cb0STomasz Zawadzki echo " --disable-unit-tests Disable building of unit tests" 389b2c6452SJacek Kalwas echo " --disable-examples Disable building of examples" 39119158cdSRajarshi Chowdhury echo " --disable-apps Disable building of apps" 409dd998cdSBen Walker echo "" 419dd998cdSBen Walker echo "Specifying Dependencies:" 429dd998cdSBen Walker echo "--with-DEPENDENCY[=path] Use the given dependency. Optionally, provide the" 439dd998cdSBen Walker echo " path." 449dd998cdSBen Walker echo "--without-DEPENDENCY Do not link to the given dependency. This may" 459dd998cdSBen Walker echo " disable features and components." 469dd998cdSBen Walker echo "" 479dd998cdSBen Walker echo "Valid dependencies are listed below." 482bc71094SMichal Berger echo " --with-dpdk[=DIR] Build against a custom dpdk version. By default, the dpdk" 492bc71094SMichal Berger echo " --without-dpdk submodule in spdk tree will be used." 509dd998cdSBen Walker echo " example: /usr/share/dpdk/x86_64-default-linuxapp-gcc" 512bc71094SMichal Berger echo " --with-env=DIR Use an alternate environment implementation instead of DPDK." 5206cc8045SBen Walker echo " Implies --without-dpdk." 532bc71094SMichal Berger echo " --with-idxd Build the IDXD library and accel framework plug-in module." 542bc71094SMichal Berger echo " --without-idxd Disabled while experimental. Only built for x86 when enabled." 552bc71094SMichal Berger echo " --with-crypto Build vbdev crypto module." 562bc71094SMichal Berger echo " --without-crypto No path required." 572bc71094SMichal Berger echo " --with-fio[=DIR] Build fio_plugin." 582bc71094SMichal Berger echo " --without-fio default: /usr/src/fio" 592bc71094SMichal Berger echo " --with-vhost Build vhost target. Enabled by default." 602bc71094SMichal Berger echo " --without-vhost No path required." 612bc71094SMichal Berger echo " --with-virtio Build vhost initiator and virtio-pci bdev modules." 622bc71094SMichal Berger echo " --without-virtio No path required." 632bc71094SMichal Berger echo " --with-vfio-user[=DIR] Build custom vfio-user transport for NVMf target and NVMe initiator." 642bc71094SMichal Berger echo " --without-vfio-user example: /usr/src/libvfio-user" 65ebf077cbSyidong0635 echo " --with-pmdk[=DIR] Build persistent memory bdev. 66ebf077cbSyidong0635 example: /usr/share/pmdk" 67ebf077cbSyidong0635 echo " --without-pmdk No path required." 682bc71094SMichal Berger echo " --with-reduce Build vbdev compression module." 692bc71094SMichal Berger echo " --without-reduce No path required." 702bc71094SMichal Berger echo " --with-rbd Build Ceph RBD bdev module." 712bc71094SMichal Berger echo " --without-rbd No path required." 722bc71094SMichal Berger echo " --with-rdma[=DIR] Build RDMA transport for NVMf target and initiator." 732bc71094SMichal Berger echo " --without-rdma Accepts optional RDMA provider name. Can be \"verbs\" or \"mlx5_dv\"." 74daee62a0SAlexey Marchuk echo " If no provider specified, \"verbs\" provider is used by default." 752bc71094SMichal Berger echo " --with-fc[=DIR] Build FC transport for NVMf target." 762bc71094SMichal Berger echo " --without-fc If an argument is provided, it is considered a directory containing" 77ed56a3d4SAnil Veerabhadrappa echo " libufc.a and fc_lld.h. Otherwise the regular system paths will" 78ed56a3d4SAnil Veerabhadrappa echo " be searched." 792bc71094SMichal Berger echo " --with-shared Build spdk shared libraries." 802bc71094SMichal Berger echo " --without-shared No path required." 812bc71094SMichal Berger echo " --with-iscsi-initiator Build with iscsi bdev module." 822bc71094SMichal Berger echo " --without-iscsi-initiator No path required." 832bc71094SMichal Berger echo " --with-vtune=DIR Required to profile I/O under Intel VTune Amplifier XE." 842bc71094SMichal Berger echo " --without-vtune example: /opt/intel/vtune_amplifier_xe_version" 852bc71094SMichal Berger echo " --with-ocf[=DIR] Build OCF library and bdev module." 862bc71094SMichal Berger echo " --without-ocf If argument is directory, interpret it as root of OCF repo" 87d1fee489SVitaliy Mysak echo " If argument is file, interpret it as compiled OCF lib" 8898d60de6SPiotr Pelplinski echo " If no argument is specified, OCF git submodule is used by default" 89d1fee489SVitaliy Mysak echo " example: /usr/src/ocf/" 902bc71094SMichal Berger echo " --with-isal Build with ISA-L. Enabled by default on x86 and aarch64 architectures." 912bc71094SMichal Berger echo " --without-isal No path required." 922bc71094SMichal Berger echo " --with-uring[=DIR] Build I/O uring bdev or socket module." 932bc71094SMichal Berger echo " --without-uring If an argument is provided, it is considered a directory containing" 94161c88a0SDarek Stojaczyk echo " liburing.a and io_uring.h. Otherwise the regular system paths will" 95161c88a0SDarek Stojaczyk echo " be searched." 9634192459SBoris Glimcher echo " --with-openssl[=DIR] Build OPENSSL with custom path. Otherwise the regular system paths will" 9734192459SBoris Glimcher echo " be searched." 982bc71094SMichal Berger echo " --with-fuse Build FUSE components for mounting a blobfs filesystem." 992bc71094SMichal Berger echo " --without-fuse No path required." 1002bc71094SMichal Berger echo " --with-nvme-cuse Build NVMe driver with support for CUSE-based character devices." 1012bc71094SMichal Berger echo " --without-nvme-cuse No path required." 1022bc71094SMichal Berger echo " --with-raid5 Build with bdev_raid module RAID5 support." 1032bc71094SMichal Berger echo " --without-raid5 No path required." 1042bc71094SMichal Berger echo " --with-wpdk=DIR Build using WPDK to provide support for Windows (experimental)." 1052bc71094SMichal Berger echo " --without-wpdk The argument must be a directory containing lib and include." 1062bc71094SMichal Berger echo " --with-usdt Build with userspace DTrace probes enabled." 1072bc71094SMichal Berger echo " --without-usdt No path required." 108050565e5SJim Harris echo " --with-fuzzer Build with LLVM fuzzing enabled." 109050565e5SJim Harris echo " Path to clang_rt.fuzzer_no_main library required." 110050565e5SJim Harris echo " Requires setting CC and CXX to clang." 111050565e5SJim Harris echo " (Typically /usr/lib/llvm-VER/lib/clang/VER/lib/linux/libclang_rt.fuzzer_no_main-ARCH.a)" 112509241ceSKonrad Sztyber echo " --with-sma Generate Storage Management Agent's protobuf interface" 113509241ceSKonrad Sztyber echo " --without-sma No path required." 1149dd998cdSBen Walker echo "" 11508ec96ebSDaniel Verkamp echo "Environment variables:" 11608ec96ebSDaniel Verkamp echo "" 11773439e6fSBen Walker echo "CC C compiler" 11808ec96ebSDaniel Verkamp echo "CFLAGS C compiler flags" 11973439e6fSBen Walker echo "CXX C++ compiler" 12008ec96ebSDaniel Verkamp echo "CXXFLAGS C++ compiler flags" 12173439e6fSBen Walker echo "LD Linker" 12208ec96ebSDaniel Verkamp echo "LDFLAGS Linker flags" 12308ec96ebSDaniel Verkamp echo "DESTDIR Destination for 'make install'" 12408ec96ebSDaniel Verkamp echo "" 1259dd998cdSBen Walker} 1269dd998cdSBen Walker 127577df16aSPawel Wodkowski# Load default values 128ff238359SJosh Soref# Convert config to sourceable configuration file 129e62a3c65SSeth Howellsed -r 's/CONFIG_([[:alnum:]_]+)=(.*)/CONFIG[\1]=\2/g' $rootdir/CONFIG > $rootdir/CONFIG.sh 130577df16aSPawel Wodkowskideclare -A CONFIG 131e62a3c65SSeth Howellsource $rootdir/CONFIG.sh 132e62a3c65SSeth Howellrm $rootdir/CONFIG.sh 133577df16aSPawel Wodkowski 13411a5716dSMichal Berger# Try to expand literal ~ that might have been passed as an option via --long-opt=~/dir. 13511a5716dSMichal Bergerset -- "${@//\~/~}" 13611a5716dSMichal Berger 1374d2e26d8STomasz Zawadzkifor i in "$@"; do 1384d2e26d8STomasz Zawadzki case "$i" in 1394d2e26d8STomasz Zawadzki --cross-prefix=*) 1404d2e26d8STomasz Zawadzki CONFIG[CROSS_PREFIX]="${i#*=}" 1414d2e26d8STomasz Zawadzki ;; 1424d2e26d8STomasz Zawadzki --enable-lto) 1434d2e26d8STomasz Zawadzki CONFIG[LTO]=y 1444d2e26d8STomasz Zawadzki ;; 1454d2e26d8STomasz Zawadzki --disable-lto) 1464d2e26d8STomasz Zawadzki CONFIG[LTO]=n 1474d2e26d8STomasz Zawadzki ;; 1484d2e26d8STomasz Zawadzki esac 1494d2e26d8STomasz Zawadzkidone 1504d2e26d8STomasz Zawadzki 151873c8748STomasz Kulasek# Detect the compiler toolchain 152873c8748STomasz Kulasek$rootdir/scripts/detect_cc.sh --cc="$CC" --cxx="$CXX" --lto="${CONFIG[LTO]}" --ld="$LD" --cross-prefix="${CONFIG[CROSS_PREFIX]}" > $rootdir/mk/cc.mk 153873c8748STomasz Kulasek 154bb0f78a2SMichal BergerCC=$(grep "DEFAULT_CC=" "$rootdir/mk/cc.mk" | sed s/DEFAULT_CC=//) 155bb0f78a2SMichal BergerCC_TYPE=$(grep "CC_TYPE=" "$rootdir/mk/cc.mk" | cut -d "=" -f 2) 156873c8748STomasz Kulasek 157873c8748STomasz Kulasekarch=$($CC -dumpmachine) 1585a764955SMichal Bergersys_name=$(uname -s) 159873c8748STomasz Kulasek 1609854c138SNick Connollyif [[ $arch == *mingw* ]] || [[ $arch == *windows* ]]; then 1619854c138SNick Connolly sys_name=Windows 1629854c138SNick Connollyfi 1639854c138SNick Connolly 164873c8748STomasz Kulasek# Sanitize default configuration. All parameters set by user explicit should fail 165873c8748STomasz Kulasek# Force no ISA-L if non-x86 or non-aarch64 architecture 166873c8748STomasz Kulasekif [[ "${CONFIG[ISAL]}" = "y" ]]; then 167873c8748STomasz Kulasek if [[ $arch != x86_64* ]] && [[ $arch != aarch64* ]]; then 168873c8748STomasz Kulasek CONFIG[ISAL]=n 169873c8748STomasz Kulasek echo "Notice: ISA-L not supported for ${arch}. Turning off default feature." 170873c8748STomasz Kulasek fi 171873c8748STomasz Kulasekfi 172873c8748STomasz Kulasek 1732a0c2a2dSNick Connollyif [[ $sys_name != "Linux" ]]; then 174873c8748STomasz Kulasek # Vhost, rte_vhost library and virtio are only supported on Linux. 175873c8748STomasz Kulasek CONFIG[VHOST]="n" 176873c8748STomasz Kulasek CONFIG[VIRTIO]="n" 177873c8748STomasz Kulasek echo "Notice: Vhost, rte_vhost library and virtio are only supported on Linux. Turning off default feature." 178873c8748STomasz Kulasekfi 179873c8748STomasz Kulasek 180325010bfSRichael Zhuang#check nasm only on x86 181325010bfSRichael Zhuangif [[ $arch == x86_64* ]]; then 182d172854aSZiye Yang ver=$(nasm -v 2> /dev/null | awk '{print $3}' | awk -Fr '{print $1}') 18365ed6034SMichal Berger if lt "$ver" 2.14; then 18435e54647STomasz Zawadzki # ISA-L, compression & crypto require NASM version 2.14 or newer. 185873c8748STomasz Kulasek CONFIG[ISAL]=n 186873c8748STomasz Kulasek CONFIG[CRYPTO]=n 187873c8748STomasz Kulasek CONFIG[IPSEC_MB]=n 188873c8748STomasz Kulasek CONFIG[REDUCE]=n 189873c8748STomasz Kulasek HAVE_NASM=n 19035e54647STomasz Zawadzki echo "Notice: ISA-L, compression & crypto require NASM version 2.14 or newer. Turning off default ISA-L and crypto features." 191873c8748STomasz Kulasek else 192873c8748STomasz Kulasek HAVE_NASM=y 193873c8748STomasz Kulasek fi 194325010bfSRichael Zhuangfi 195873c8748STomasz Kulasek 1961723a800SGangCaofunction check_dir() { 1971723a800SGangCao arg="$1" 1981723a800SGangCao dir="${arg#*=}" 1991723a800SGangCao if [ ! -d "$dir" ]; then 2001723a800SGangCao echo "$arg: directory not found" 2011723a800SGangCao exit 1 2021723a800SGangCao fi 2031723a800SGangCao} 2041723a800SGangCao 2057b04eb72SYuriy Umanets# On x86_64 'clang -dumpmachine' produces x86_64-pc-linux-gnu 2067b04eb72SYuriy Umanets# whereas the dpdk might be built with gcc and its libs lie in 2077b04eb72SYuriy Umanets# x86_64-linux-gnu. Let's find the right libdir for dpdkd libs. 2087b04eb72SYuriy Umanetsfunction find_dpdk_arch_libdir() { 2097b04eb72SYuriy Umanets local dpdk_dir=$1 2107b04eb72SYuriy Umanets 2117b04eb72SYuriy Umanets # Checking first what we have with $arch, then clang 2127b04eb72SYuriy Umanets # variant of arch. 2137b04eb72SYuriy Umanets arches=("$arch" "$(echo $arch | sed 's/-pc//g')") 2147b04eb72SYuriy Umanets for a in "${arches[@]}"; do 2157b04eb72SYuriy Umanets local libdir="$dpdk_dir/lib/$a" 2167b04eb72SYuriy Umanets if [[ -d $libdir ]]; then 2177b04eb72SYuriy Umanets echo $libdir 2187b04eb72SYuriy Umanets return 2197b04eb72SYuriy Umanets fi 2207b04eb72SYuriy Umanets done 2217b04eb72SYuriy Umanets 2227b04eb72SYuriy Umanets # Fallback to the libdir without arch component 2237b04eb72SYuriy Umanets echo "$dpdk_dir/lib" 2247b04eb72SYuriy Umanets} 2257b04eb72SYuriy Umanets 226f1980244SYuriy Umanetsfunction check_IPSec_mb() { 227f1980244SYuriy Umanets local mode=$1 228f1980244SYuriy Umanets local dpdk_libdir=$2 229f1980244SYuriy Umanets local dpdk_incdir=$3 230f1980244SYuriy Umanets local have_ipsec_mb=n 231f1980244SYuriy Umanets 232f1980244SYuriy Umanets if [[ $mode = "pkg-config" ]]; then 233f1980244SYuriy Umanets local dpdk_libs 234f1980244SYuriy Umanets 235f1980244SYuriy Umanets # Request libdpdk pkg-config settings to figure out if the IPSec_MB is used 236f1980244SYuriy Umanets # as a dependency. 237f1980244SYuriy Umanets # Due to some reason pkg-config shows -lIPSec_MB only with --static option 238f13ec525SKarol Latecki dpdk_libs=$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --libs --static libdpdk) 239f1980244SYuriy Umanets if echo "$dpdk_libs" | grep "\-lIPSec_MB" > /dev/null 2>&1; then 240f1980244SYuriy Umanets have_ipsec_mb=y 241f1980244SYuriy Umanets fi 242f1980244SYuriy Umanets elif [[ $mode = "build-config" ]]; then 243f1980244SYuriy Umanets # Use dpdk build config header to check if the IPSec_MB was used. 244f1980244SYuriy Umanets if grep -F "define RTE_CRYPTO_IPSEC_MB 1" "$dpdk_incdir/rte_build_config.h" > /dev/null 2>&1; then 245f1980244SYuriy Umanets have_ipsec_mb=y 246f1980244SYuriy Umanets fi 247f1980244SYuriy Umanets else 248f1980244SYuriy Umanets echo "ERROR: Invalid IPSec_MB checking mode $mode." 249f1980244SYuriy Umanets echo "ERROR: Only \"pkg-config\" and \"build-config\" available." 250f1980244SYuriy Umanets exit 1 251f1980244SYuriy Umanets fi 252f1980244SYuriy Umanets if [[ $have_ipsec_mb = "n" ]]; then 253f1980244SYuriy Umanets CONFIG[IPSEC_MB]=n 254f1980244SYuriy Umanets return 255f1980244SYuriy Umanets fi 256f1980244SYuriy Umanets 257f1980244SYuriy Umanets # Since we don't know the library path where the IPSec_MB is located 258f1980244SYuriy Umanets # let's find it out with the ldd utility. This can be a standard location 259f1980244SYuriy Umanets # or a custom build. 260f1980244SYuriy Umanets local librte_crypto_ipsec_mb="$dpdk_libdir/librte_crypto_ipsec_mb.so" 261f1980244SYuriy Umanets if [[ -f "$librte_crypto_ipsec_mb" ]]; then 262f1980244SYuriy Umanets local ipsec_mb_libdir 263f1980244SYuriy Umanets 264f1980244SYuriy Umanets ipsec_mb_libdir=$(ldd "$librte_crypto_ipsec_mb" | grep "libIPSec_MB.so" \ 265f1980244SYuriy Umanets | sed -e 's/\s*libIPSec_MB.so.*=>\s//' -e 's/\/libIPSec_MB.so.*$//') 266f1980244SYuriy Umanets if [[ -d $ipsec_mb_libdir ]]; then 267f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 268f1980244SYuriy Umanets CONFIG[IPSEC_MB_DIR]="$ipsec_mb_libdir" 269f1980244SYuriy Umanets elif [[ $ipsec_mb_libdir = "not found" ]]; then 270f1980244SYuriy Umanets # ldconfig cache is broken, old build with refs to non-existing libs, etc. 271f1980244SYuriy Umanets echo "ERROR: Invalid IPSec_MB installation. Library is not found and/or ldconfig cache is broken!" 272f1980244SYuriy Umanets exit 1 273f1980244SYuriy Umanets else 274f1980244SYuriy Umanets # Failed to check for IPSec_MB lib path. Let's just assume it is lives 275f1980244SYuriy Umanets # in one of the standard locations (/usr/lib, etc.). 276f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 277f1980244SYuriy Umanets fi 278f1980244SYuriy Umanets else 279f1980244SYuriy Umanets # pkg-config says there is IPSec_mb and dpdk lib does not have it. Let's just 280f1980244SYuriy Umanets # assume it is installed in the system in one of the standard locations. 281f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 282f1980244SYuriy Umanets fi 283f1980244SYuriy Umanets} 284f1980244SYuriy Umanets 2859dd998cdSBen Walkerfor i in "$@"; do 2869dd998cdSBen Walker case "$i" in 2879dd998cdSBen Walker -h | --help) 2889dd998cdSBen Walker usage 2899dd998cdSBen Walker exit 0 2909dd998cdSBen Walker ;; 2914d2e26d8STomasz Zawadzki --cross-prefix=*) ;& 2924d2e26d8STomasz Zawadzki --enable-lto) ;& 2934d2e26d8STomasz Zawadzki --disable-lto) 2944d2e26d8STomasz Zawadzki # Options handled before detecting CC. 2954d2e26d8STomasz Zawadzki ;; 2962e7fe8e8SDaniel Verkamp --prefix=*) 297577df16aSPawel Wodkowski CONFIG[PREFIX]="${i#*=}" 2982e7fe8e8SDaniel Verkamp ;; 2990e6ddfd6SBen Walker --target-arch=*) 3000e6ddfd6SBen Walker CONFIG[ARCH]="${i#*=}" 3010e6ddfd6SBen Walker ;; 302e8863cb7SMichal Berger --libdir=*) 303e8863cb7SMichal Berger CONFIG[LIBDIR]="${i#*=}" 304e8863cb7SMichal Berger ;; 3059dd998cdSBen Walker --enable-debug) 306577df16aSPawel Wodkowski CONFIG[DEBUG]=y 3079dd998cdSBen Walker ;; 3089dd998cdSBen Walker --disable-debug) 309577df16aSPawel Wodkowski CONFIG[DEBUG]=n 3109dd998cdSBen Walker ;; 3119dd998cdSBen Walker --enable-asan) 312577df16aSPawel Wodkowski CONFIG[ASAN]=y 3139dd998cdSBen Walker ;; 3149dd998cdSBen Walker --disable-asan) 315577df16aSPawel Wodkowski CONFIG[ASAN]=n 3169dd998cdSBen Walker ;; 3179dd998cdSBen Walker --enable-ubsan) 318577df16aSPawel Wodkowski CONFIG[UBSAN]=y 3199dd998cdSBen Walker ;; 3209dd998cdSBen Walker --disable-ubsan) 321577df16aSPawel Wodkowski CONFIG[UBSAN]=n 3229dd998cdSBen Walker ;; 323830912e2SBen Walker --enable-tsan) 324577df16aSPawel Wodkowski CONFIG[TSAN]=y 325830912e2SBen Walker ;; 326830912e2SBen Walker --disable-tsan) 327577df16aSPawel Wodkowski CONFIG[TSAN]=n 328830912e2SBen Walker ;; 3299dd998cdSBen Walker --enable-coverage) 330577df16aSPawel Wodkowski CONFIG[COVERAGE]=y 3319dd998cdSBen Walker ;; 3329dd998cdSBen Walker --disable-coverage) 333577df16aSPawel Wodkowski CONFIG[COVERAGE]=n 3349dd998cdSBen Walker ;; 335995d60f4SBen Walker --enable-pgo-capture) 336995d60f4SBen Walker CONFIG[PGO_CAPTURE]=y 337995d60f4SBen Walker ;; 338995d60f4SBen Walker --disable-pgo-capture) 339995d60f4SBen Walker CONFIG[PGO_CAPTURE]=n 340995d60f4SBen Walker ;; 341995d60f4SBen Walker --enable-pgo-use) 342995d60f4SBen Walker CONFIG[PGO_USE]=y 343995d60f4SBen Walker ;; 344995d60f4SBen Walker --disable-pgo-use) 345995d60f4SBen Walker CONFIG[PGO_USE]=n 346995d60f4SBen Walker ;; 3479022a59eSDaniel Verkamp --enable-tests) 348577df16aSPawel Wodkowski CONFIG[TESTS]=y 3499022a59eSDaniel Verkamp ;; 3509022a59eSDaniel Verkamp --disable-tests) 351577df16aSPawel Wodkowski CONFIG[TESTS]=n 3529022a59eSDaniel Verkamp ;; 3539fcb1cb0STomasz Zawadzki --enable-unit-tests) 3549fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=y 3559fcb1cb0STomasz Zawadzki ;; 3569fcb1cb0STomasz Zawadzki --disable-unit-tests) 3579fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=n 3589fcb1cb0STomasz Zawadzki ;; 3599b2c6452SJacek Kalwas --enable-examples) 3609b2c6452SJacek Kalwas CONFIG[EXAMPLES]=y 3619b2c6452SJacek Kalwas ;; 3629b2c6452SJacek Kalwas --disable-examples) 3639b2c6452SJacek Kalwas CONFIG[EXAMPLES]=n 3649b2c6452SJacek Kalwas ;; 365119158cdSRajarshi Chowdhury --enable-apps) 366119158cdSRajarshi Chowdhury CONFIG[APPS]=y 367119158cdSRajarshi Chowdhury ;; 368119158cdSRajarshi Chowdhury --disable-apps) 369119158cdSRajarshi Chowdhury CONFIG[APPS]=N 370119158cdSRajarshi Chowdhury ;; 3719dd998cdSBen Walker --enable-werror) 372577df16aSPawel Wodkowski CONFIG[WERROR]=y 3739dd998cdSBen Walker ;; 3749dd998cdSBen Walker --disable-werror) 375577df16aSPawel Wodkowski CONFIG[WERROR]=n 3769dd998cdSBen Walker ;; 37791e42257SJim Harris --enable-cet) 37891e42257SJim Harris CONFIG[CET]=y 37991e42257SJim Harris ;; 38091e42257SJim Harris --disable-cet) 38191e42257SJim Harris CONFIG[CET]=n 38291e42257SJim Harris ;; 3837232c450SMichal Berger --with-dpdk) 3847b04eb72SYuriy Umanets # Can we use pkg-config? 3857b04eb72SYuriy Umanets if command -v "pkg-config" > /dev/null 2>&1 && pkg-config --exists libdpdk; then 3867b04eb72SYuriy Umanets dpdk_libdir=$(pkg-config --variable=libdir libdpdk) 3877b04eb72SYuriy Umanets dpdk_libdir=$(readlink -f $dpdk_libdir) 3887b04eb72SYuriy Umanets dpdk_incdir=$(pkg-config --variable=includedir libdpdk) 3897b04eb72SYuriy Umanets echo "Using DPDK lib dir $dpdk_libdir" 3907b04eb72SYuriy Umanets CONFIG[DPDK_LIB_DIR]=$dpdk_libdir 3917b04eb72SYuriy Umanets CONFIG[DPDK_INC_DIR]=$dpdk_incdir 3927232c450SMichal Berger CONFIG[DPDK_PKG_CONFIG]=y 3933e3fbf91SYuriy Umanets if pkg-config --print-requires libdpdk | grep "libbsd" > /dev/null 2>&1; then 3943e3fbf91SYuriy Umanets CONFIG[HAVE_LIBBSD]=y 3953e3fbf91SYuriy Umanets fi 3967232c450SMichal Berger CFLAGS="${CFLAGS:+$CFLAGS }$(pkg-config --cflags libdpdk)" 397f1980244SYuriy Umanets check_IPSec_mb "pkg-config" "$dpdk_libdir" "$dpdk_incdir" 3987232c450SMichal Berger else 3997232c450SMichal Berger echo "libdpdk.pc not found, aborting" 4007232c450SMichal Berger exit 1 4017232c450SMichal Berger fi 4027232c450SMichal Berger ;; 40306cc8045SBen Walker --with-dpdk=*) 40406cc8045SBen Walker check_dir "$i" 4057b04eb72SYuriy Umanets dpdk_dir=$(readlink -f ${i#*=}) 4067b04eb72SYuriy Umanets dpdk_libdir=$(find_dpdk_arch_libdir $dpdk_dir) 4077b04eb72SYuriy Umanets dpdk_incdir="$dpdk_dir/include" 4087b04eb72SYuriy Umanets 4097b04eb72SYuriy Umanets # Can we use pkg-config? 410f13ec525SKarol Latecki if command -v "pkg-config" > /dev/null 2>&1 && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --exists libdpdk; then 4117b04eb72SYuriy Umanets echo "Using $dpdk_libdir/pkgconfig for additional libs..." 4121e6db5fbSTomasz Zawadzki sysroot_dir=$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=pc_sysrootdir libdpdk) 413f13ec525SKarol Latecki dpdk_libdir=$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=libdir libdpdk) 4141e6db5fbSTomasz Zawadzki dpdk_libdir=$(readlink -f "${sysroot_dir}$dpdk_libdir") 4157b04eb72SYuriy Umanets if ! echo $dpdk_libdir | grep $dpdk_dir > /dev/null 2>&1; then 4167b04eb72SYuriy Umanets echo "ERROR: pkg-config reported DPDK libdir $dpdk_libdir is out of the directory specified with --with-dpdk=" 4177b04eb72SYuriy Umanets echo "ERROR: do you have another DPDK installed in the system?" 4187b04eb72SYuriy Umanets exit 1 4197b04eb72SYuriy Umanets fi 420f13ec525SKarol Latecki dpdk_reqs=$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --print-requires libdpdk) 4213e3fbf91SYuriy Umanets if echo $dpdk_reqs | grep "libbsd" > /dev/null 2>&1; then 4223e3fbf91SYuriy Umanets CONFIG[HAVE_LIBBSD]=y 4233e3fbf91SYuriy Umanets fi 424f13ec525SKarol Latecki CFLAGS="${CFLAGS:+$CFLAGS }$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --cflags libdpdk)" 4251e6db5fbSTomasz Zawadzki dpdk_incdir="${sysroot_dir}$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=includedir libdpdk)" 426f1980244SYuriy Umanets check_IPSec_mb "pkg-config" "$dpdk_libdir" "$dpdk_incdir" 4273e3fbf91SYuriy Umanets else 4283e3fbf91SYuriy Umanets echo "Using $dpdk_incdir/rte_build_config.h for additional libs..." 4293e3fbf91SYuriy Umanets 4303e3fbf91SYuriy Umanets if grep -F "define RTE_USE_LIBBSD 1" $dpdk_incdir/rte_build_config.h > /dev/null 2>&1; then 4313e3fbf91SYuriy Umanets CONFIG[HAVE_LIBBSD]=y 4323e3fbf91SYuriy Umanets fi 433f1980244SYuriy Umanets check_IPSec_mb "build-config" "$dpdk_libdir" "$dpdk_incdir" 4347b04eb72SYuriy Umanets fi 4357b04eb72SYuriy Umanets echo "DPDK libraries: $dpdk_libdir" 4367b04eb72SYuriy Umanets echo "DPDK includes: $dpdk_incdir" 4377b04eb72SYuriy Umanets CONFIG[DPDK_DIR]=$dpdk_dir 4387b04eb72SYuriy Umanets CONFIG[DPDK_LIB_DIR]="$dpdk_libdir" 4397b04eb72SYuriy Umanets CONFIG[DPDK_INC_DIR]="$dpdk_incdir" 4407b04eb72SYuriy Umanets CONFIG[DPDK_PKG_CONFIG]=n 44106cc8045SBen Walker ;; 44206cc8045SBen Walker --without-dpdk) 44306cc8045SBen Walker CONFIG[DPDK_DIR]= 44406cc8045SBen Walker ;; 4459854c138SNick Connolly --with-wpdk=*) 4469854c138SNick Connolly check_dir "$i" 4479854c138SNick Connolly CONFIG[WPDK_DIR]=$(readlink -f ${i#*=}) 4489854c138SNick Connolly ;; 4492bc71094SMichal Berger --without-wpdk) 4502bc71094SMichal Berger CONFIG[WPDK_DIR]= 4512bc71094SMichal Berger ;; 4529dd998cdSBen Walker --with-env=*) 453577df16aSPawel Wodkowski CONFIG[ENV]="${i#*=}" 4549dd998cdSBen Walker ;; 4559dd998cdSBen Walker --with-rbd) 456577df16aSPawel Wodkowski CONFIG[RBD]=y 4579dd998cdSBen Walker ;; 4589dd998cdSBen Walker --without-rbd) 459577df16aSPawel Wodkowski CONFIG[RBD]=n 4609dd998cdSBen Walker ;; 461daee62a0SAlexey Marchuk --with-rdma=*) 462daee62a0SAlexey Marchuk CONFIG[RDMA]=y 463daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]=${i#*=} 464daee62a0SAlexey Marchuk ;; 4659dd998cdSBen Walker --with-rdma) 466577df16aSPawel Wodkowski CONFIG[RDMA]=y 467daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]="verbs" 4689dd998cdSBen Walker ;; 4699dd998cdSBen Walker --without-rdma) 470577df16aSPawel Wodkowski CONFIG[RDMA]=n 4719dd998cdSBen Walker ;; 472ed56a3d4SAnil Veerabhadrappa --with-fc=*) 473ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 474ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]=$(readlink -f ${i#*=}) 475ed56a3d4SAnil Veerabhadrappa ;; 476ed56a3d4SAnil Veerabhadrappa --with-fc) 477ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 478ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 479ed56a3d4SAnil Veerabhadrappa ;; 480ed56a3d4SAnil Veerabhadrappa --without-fc) 481ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=n 482ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 483ed56a3d4SAnil Veerabhadrappa ;; 4840923734cSLance Hartmann --with-shared) 485577df16aSPawel Wodkowski CONFIG[SHARED]=y 4860923734cSLance Hartmann ;; 4870923734cSLance Hartmann --without-shared) 488577df16aSPawel Wodkowski CONFIG[SHARED]=n 4890923734cSLance Hartmann ;; 4902af15344SJim Harris --with-iscsi-initiator) 491577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=y 4922af15344SJim Harris ;; 4932af15344SJim Harris --without-iscsi-initiator) 494577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=n 4952af15344SJim Harris ;; 4966118b853SDaniel Verkamp --with-crypto) 497577df16aSPawel Wodkowski CONFIG[CRYPTO]=y 4986118b853SDaniel Verkamp ;; 4996118b853SDaniel Verkamp --without-crypto) 500577df16aSPawel Wodkowski CONFIG[CRYPTO]=n 5016118b853SDaniel Verkamp ;; 50235260f2bSDaniel Verkamp --with-vhost) 503577df16aSPawel Wodkowski CONFIG[VHOST]=y 50435260f2bSDaniel Verkamp ;; 50535260f2bSDaniel Verkamp --without-vhost) 506577df16aSPawel Wodkowski CONFIG[VHOST]=n 50735260f2bSDaniel Verkamp ;; 5087dee96ceSDariusz Stojaczyk --with-virtio) 509577df16aSPawel Wodkowski CONFIG[VIRTIO]=y 5107dee96ceSDariusz Stojaczyk ;; 5117dee96ceSDariusz Stojaczyk --without-virtio) 512577df16aSPawel Wodkowski CONFIG[VIRTIO]=n 5137dee96ceSDariusz Stojaczyk ;; 514b30d57cdSChangpeng Liu --with-vfio-user) 515b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=y 516d0b2448bSChangpeng Liu CONFIG[VFIO_USER_DIR]="" 517d0b2448bSChangpeng Liu ;; 518d0b2448bSChangpeng Liu --with-vfio-user=*) 519d0b2448bSChangpeng Liu CONFIG[VFIO_USER]=y 520d0b2448bSChangpeng Liu check_dir "$i" 521d0b2448bSChangpeng Liu CONFIG[VFIO_USER_DIR]=$(readlink -f ${i#*=}) 522b30d57cdSChangpeng Liu ;; 523b30d57cdSChangpeng Liu --without-vfio-user) 524b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=n 525b30d57cdSChangpeng Liu ;; 526218dcd84SJim Harris --with-pmdk) 527577df16aSPawel Wodkowski CONFIG[PMDK]=y 528577df16aSPawel Wodkowski CONFIG[PMDK_DIR]="" 529fca11f15SPiotr Pelplinski ;; 530218dcd84SJim Harris --with-pmdk=*) 531577df16aSPawel Wodkowski CONFIG[PMDK]=y 5321723a800SGangCao check_dir "$i" 533577df16aSPawel Wodkowski CONFIG[PMDK_DIR]=$(readlink -f ${i#*=}) 534fca11f15SPiotr Pelplinski ;; 535218dcd84SJim Harris --without-pmdk) 536577df16aSPawel Wodkowski CONFIG[PMDK]=n 537fca11f15SPiotr Pelplinski ;; 53897022803SJim Harris --with-reduce) 53997022803SJim Harris CONFIG[REDUCE]=y 54097022803SJim Harris ;; 54197022803SJim Harris --without-reduce) 54297022803SJim Harris CONFIG[REDUCE]=n 54397022803SJim Harris ;; 544c3329b52SMichal Berger --with-fio) ;& 5459dd998cdSBen Walker --with-fio=*) 546c3329b52SMichal Berger if [[ ${i#*=} != "$i" ]]; then 54711a5716dSMichal Berger CONFIG[FIO_SOURCE_DIR]=${i#*=} 548c3329b52SMichal Berger fi 549c3329b52SMichal Berger check_dir "--with-fio=${CONFIG[FIO_SOURCE_DIR]}" 55011a5716dSMichal Berger CONFIG[FIO_SOURCE_DIR]=$(readlink -f "${CONFIG[FIO_SOURCE_DIR]}") 551577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=y 5529dd998cdSBen Walker ;; 5539dd998cdSBen Walker --without-fio) 554577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=n 5559dd998cdSBen Walker ;; 5565712088aSRoman Sudarikov --with-vtune=*) 5571723a800SGangCao check_dir "$i" 558577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]="${i#*=}" 559577df16aSPawel Wodkowski CONFIG[VTUNE]=y 5605712088aSRoman Sudarikov ;; 5615712088aSRoman Sudarikov --without-vtune) 562577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]= 563577df16aSPawel Wodkowski CONFIG[VTUNE]=n 5645712088aSRoman Sudarikov ;; 56598d60de6SPiotr Pelplinski --with-ocf) 56698d60de6SPiotr Pelplinski CONFIG[OCF]=y 56798d60de6SPiotr Pelplinski CONFIG[OCF_PATH]=$(readlink -f "./ocf") 56898d60de6SPiotr Pelplinski ;; 569d1fee489SVitaliy Mysak --with-ocf=*) 570d1fee489SVitaliy Mysak CONFIG[OCF]=y 571d1fee489SVitaliy Mysak CONFIG[OCF_PATH]=$(readlink -f ${i#*=}) 572d1fee489SVitaliy Mysak ;; 573d1fee489SVitaliy Mysak --without-ocf) 574d1fee489SVitaliy Mysak CONFIG[OCF]=n 575d1fee489SVitaliy Mysak CONFIG[OCF_PATH]= 576d1fee489SVitaliy Mysak ;; 577552e21ccSZiye Yang --with-isal) 578552e21ccSZiye Yang CONFIG[ISAL]=y 579552e21ccSZiye Yang ;; 580552e21ccSZiye Yang --without-isal) 581552e21ccSZiye Yang CONFIG[ISAL]=n 582552e21ccSZiye Yang ;; 5838165bf71SBen Walker --with-uring=*) 5848165bf71SBen Walker CONFIG[URING]=y 5858165bf71SBen Walker CONFIG[URING_PATH]=$(readlink -f ${i#*=}) 5868165bf71SBen Walker ;; 5878165bf71SBen Walker --with-uring) 5888165bf71SBen Walker CONFIG[URING]=y 5898165bf71SBen Walker CONFIG[URING_PATH]= 5908165bf71SBen Walker ;; 5918165bf71SBen Walker --without-uring) 5928165bf71SBen Walker CONFIG[URING]=n 5938165bf71SBen Walker CONFIG[URING_PATH]= 5948165bf71SBen Walker ;; 59534192459SBoris Glimcher --with-openssl=*) 59634192459SBoris Glimcher check_dir "$i" 59734192459SBoris Glimcher CONFIG[OPENSSL_PATH]=$(readlink -f ${i#*=}) 59834192459SBoris Glimcher ;; 5997fa15e28SXiaodong Liu --with-fuse) 6007fa15e28SXiaodong Liu CONFIG[FUSE]=y 6017fa15e28SXiaodong Liu ;; 6027fa15e28SXiaodong Liu --without-fuse) 6037fa15e28SXiaodong Liu CONFIG[FUSE]=n 6047fa15e28SXiaodong Liu ;; 605805d9942STomasz Kulasek --with-nvme-cuse) 606805d9942STomasz Kulasek CONFIG[NVME_CUSE]=y 607805d9942STomasz Kulasek ;; 608805d9942STomasz Kulasek --without-nvme-cuse) 609805d9942STomasz Kulasek CONFIG[NVME_CUSE]=n 610805d9942STomasz Kulasek ;; 61173763d40SArtur Paszkiewicz --with-raid5) 61273763d40SArtur Paszkiewicz CONFIG[RAID5]=y 61373763d40SArtur Paszkiewicz ;; 61473763d40SArtur Paszkiewicz --without-raid5) 61573763d40SArtur Paszkiewicz CONFIG[RAID5]=n 61673763d40SArtur Paszkiewicz ;; 617e58e9fbdSpaul luse --with-idxd) 618e58e9fbdSpaul luse CONFIG[IDXD]=y 6192ed914f8SZiye Yang CONFIG[IDXD_KERNEL]=n 620e58e9fbdSpaul luse ;; 621e58e9fbdSpaul luse --without-idxd) 622e58e9fbdSpaul luse CONFIG[IDXD]=n 623e58e9fbdSpaul luse ;; 6245a1c74bfSJim Harris --with-usdt) 6255a1c74bfSJim Harris CONFIG[USDT]=y 6265a1c74bfSJim Harris ;; 6275a1c74bfSJim Harris --without-usdt) 6285a1c74bfSJim Harris CONFIG[USDT]=n 6295a1c74bfSJim Harris ;; 630050565e5SJim Harris --with-fuzzer) 631050565e5SJim Harris echo "Must specify fuzzer library path with --with-fuzzer" 632050565e5SJim Harris usage 633050565e5SJim Harris exit 1 634050565e5SJim Harris ;; 635050565e5SJim Harris --with-fuzzer=*) 636050565e5SJim Harris CONFIG[FUZZER]=y 637050565e5SJim Harris CONFIG[FUZZER_LIB]=$(readlink -f ${i#*=}) 638050565e5SJim Harris ;; 639050565e5SJim Harris --without-fuzzer) 640050565e5SJim Harris CONFIG[FUZZER]=n 641050565e5SJim Harris CONFIG[FUZZER_LIB]= 642050565e5SJim Harris ;; 643509241ceSKonrad Sztyber --with-sma) 644509241ceSKonrad Sztyber CONFIG[SMA]=y 645509241ceSKonrad Sztyber ;; 646509241ceSKonrad Sztyber --without-sma) 647509241ceSKonrad Sztyber CONFIG[SMA]=n 648509241ceSKonrad Sztyber ;; 6499dd998cdSBen Walker --) 6509dd998cdSBen Walker break 6519dd998cdSBen Walker ;; 6529dd998cdSBen Walker *) 6539dd998cdSBen Walker echo "Unrecognized option $i" 6549dd998cdSBen Walker usage 6559dd998cdSBen Walker exit 1 6565ccabc8fSMichal Berger ;; 6579dd998cdSBen Walker esac 6589dd998cdSBen Walkerdone 6599dd998cdSBen Walker 660131c9aadSAlexey Marchukif [[ $arch == x86_64* ]]; then 66110e1c615SFélix Piédallu BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS "-march=native") 662131c9aadSAlexey Marchukelse 66310e1c615SFélix Piédallu BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS) 664131c9aadSAlexey Marchukfi 6656c23a6f4SMichal BergerBUILD_CMD+=(-I/usr/local/include -L/usr/local/lib) 66673439e6fSBen Walker 667b30d57cdSChangpeng Liuif [[ "${CONFIG[VFIO_USER]}" = "y" ]]; then 668*421368c0SGreg Inozemtsev if ! echo -e '#include <json-c/json.h>' \ 669*421368c0SGreg Inozemtsev | "${BUILD_CMD[@]}" -E - 2> /dev/null; then 6703b673b84SChangpeng Liu echo "ERROR: --with-vfio-user requires json-c-devel" 6713b673b84SChangpeng Liu echo "Please install then re-run this script" 6723b673b84SChangpeng Liu exit 1 6733b673b84SChangpeng Liu fi 674*421368c0SGreg Inozemtsev if ! echo -e '#include <cmocka.h>' \ 675*421368c0SGreg Inozemtsev | "${BUILD_CMD[@]}" -E - 2> /dev/null; then 6763b673b84SChangpeng Liu echo "ERROR: --with-vfio-user requires libcmocka-devel" 6773b673b84SChangpeng Liu echo "Please install then re-run this script" 6783b673b84SChangpeng Liu exit 1 679b30d57cdSChangpeng Liu fi 680b30d57cdSChangpeng Liufi 681b30d57cdSChangpeng Liu 682e58e9fbdSpaul luse# IDXD uses Intel specific instructions. 683e58e9fbdSpaul luseif [[ "${CONFIG[IDXD]}" = "y" ]]; then 6842755fbdfSpaul luse if [ $(uname -s) == "FreeBSD" ]; then 6852755fbdfSpaul luse intel="hw.model: Intel" 6862755fbdfSpaul luse cpu_vendor=$(sysctl -a | grep hw.model | cut -c 1-15) 6872755fbdfSpaul luse else 688e58e9fbdSpaul luse intel="GenuineIntel" 689e58e9fbdSpaul luse cpu_vendor=$(grep -i 'vendor' /proc/cpuinfo --max-count=1) 6902755fbdfSpaul luse fi 691e58e9fbdSpaul luse if [[ "$cpu_vendor" != *"$intel"* ]]; then 692ff238359SJosh Soref echo "ERROR: IDXD cannot be used due to CPU incompatibility." 693e58e9fbdSpaul luse exit 1 694e58e9fbdSpaul luse fi 6952ed914f8SZiye Yang if [ -e /usr/include/accel-config/libaccel_config.h ]; then 6962ed914f8SZiye Yang CONFIG[IDXD_KERNEL]=y 6972ed914f8SZiye Yang fi 6982ed914f8SZiye Yang 699e58e9fbdSpaul lusefi 700e58e9fbdSpaul luse 7018cad9cc1SRichael Zhuang# Detect architecture and force no ISA-L if non-x86 or non-aarch64 architecture 702c510bd88SBen Walkerif [[ "${CONFIG[ISAL]}" = "y" ]]; then 7038cad9cc1SRichael Zhuang if [[ $arch != x86_64* ]] && [[ $arch != aarch64* ]]; then 704ff238359SJosh Soref echo "ERROR: ISA-L cannot be used due to CPU incompatibility." 705873c8748STomasz Kulasek exit 1 706552e21ccSZiye Yang fi 707c510bd88SBen Walkerfi 708552e21ccSZiye Yang 709d9d4e40dSpaul luseif [[ "${CONFIG[ISAL]}" = "n" ]] && [[ "${CONFIG[REDUCE]}" = "y" ]]; then 710d9d4e40dSpaul luse echo "ERROR Conflicting options: --with-reduce is not compatible with --without-isal." 711d9d4e40dSpaul luse exit 1 712d9d4e40dSpaul lusefi 713d9d4e40dSpaul luse 714577df16aSPawel Wodkowskiif [ -z "${CONFIG[ENV]}" ]; then 715577df16aSPawel Wodkowski CONFIG[ENV]=$rootdir/lib/env_dpdk 716577df16aSPawel Wodkowski echo "Using default SPDK env in ${CONFIG[ENV]}" 7177232c450SMichal Berger if [[ -z "${CONFIG[DPDK_DIR]}" && "${CONFIG[DPDK_PKG_CONFIG]}" == n ]]; then 71838e26cf5STomasz Zawadzki if [ ! -f "$rootdir"/dpdk/config/meson.build ]; then 719d199eb29SDaniel Verkamp echo "DPDK not found; please specify --with-dpdk=<path> or run:" 720d199eb29SDaniel Verkamp echo 721d199eb29SDaniel Verkamp echo " git submodule update --init" 722d199eb29SDaniel Verkamp exit 1 723577df16aSPawel Wodkowski else 724577df16aSPawel Wodkowski CONFIG[DPDK_DIR]="${rootdir}/dpdk/build" 725f1980244SYuriy Umanets # Default ipsec libs 726f1980244SYuriy Umanets if [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 727f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 728f1980244SYuriy Umanets CONFIG[IPSEC_MB_DIR]="${rootdir}/intel-ipsec-mb/lib" 729f1980244SYuriy Umanets fi 730577df16aSPawel Wodkowski echo "Using default DPDK in ${CONFIG[DPDK_DIR]}" 731d199eb29SDaniel Verkamp fi 7329dd998cdSBen Walker fi 7337d2a2f52SBen Walkerelse 7347232c450SMichal Berger if [[ -n "${CONFIG[DPDK_DIR]}" || "${CONFIG[DPDK_PKG_CONFIG]}" == y ]]; then 73506cc8045SBen Walker echo "--with-env and --with-dpdk are mutually exclusive." 73606cc8045SBen Walker exit 1 73706cc8045SBen Walker fi 73806cc8045SBen Walker 739577df16aSPawel Wodkowski if [ "${CONFIG[VHOST]}" = "y" ]; then 7407d2a2f52SBen Walker echo "Vhost is only supported when using the default DPDK environment. Disabling it." 7417d2a2f52SBen Walker fi 7427d2a2f52SBen Walker # Always disable vhost, but only print the error message if the user explicitly turned it on. 743577df16aSPawel Wodkowski CONFIG[VHOST]="n" 744577df16aSPawel Wodkowski if [ "${CONFIG[VIRTIO]}" = "y" ]; then 7457d2a2f52SBen Walker echo "Virtio is only supported when using the default DPDK environment. Disabling it." 7467d2a2f52SBen Walker fi 7477d2a2f52SBen Walker # Always disable virtio, but only print the error message if the user explicitly turned it on. 748577df16aSPawel Wodkowski CONFIG[VIRTIO]="n" 7499dd998cdSBen Walkerfi 7509dd998cdSBen Walker 7517232c450SMichal Bergerif [[ "${CONFIG[DPDK_PKG_CONFIG]}" == y ]]; then 7527232c450SMichal Berger if [[ "${CONFIG[SHARED]}" == n ]]; then 7537232c450SMichal Berger # dpdk-devel doesn't provide static libs 7547232c450SMichal Berger echo "Build against packaged DPDK requested, enabling shared libraries" 7557232c450SMichal Berger CONFIG[SHARED]=y 7567232c450SMichal Berger fi 7577232c450SMichal Bergerfi 7587232c450SMichal Berger 7599854c138SNick Connollyif [[ $sys_name == "Windows" ]]; then 7609854c138SNick Connolly if [ -z "${CONFIG[WPDK_DIR]}" ]; then 7619854c138SNick Connolly if [ ! -f "$rootdir"/wpdk/Makefile ]; then 7629854c138SNick Connolly echo "WPDK not found; please specify --with-wpdk=<path>. See https://wpdk.github.io." 7639854c138SNick Connolly exit 1 7649854c138SNick Connolly else 7659854c138SNick Connolly CONFIG[WPDK_DIR]="${rootdir}/wpdk/build" 7669854c138SNick Connolly echo "Using default WPDK in ${CONFIG[WPDK_DIR]}" 7679854c138SNick Connolly fi 7689854c138SNick Connolly fi 7699854c138SNick Connollyelse 7709854c138SNick Connolly if [ -n "${CONFIG[WPDK_DIR]}" ]; then 7719854c138SNick Connolly echo "ERROR: --with-wpdk is only supported for Windows" 7729854c138SNick Connolly exit 1 7739854c138SNick Connolly fi 7749854c138SNick Connollyfi 7759854c138SNick Connolly 776577df16aSPawel Wodkowskiif [ "${CONFIG[VTUNE]}" = "y" ]; then 777577df16aSPawel Wodkowski if [ -z "${CONFIG[VTUNE_DIR]}" ]; then 7785712088aSRoman Sudarikov echo "When VTune is enabled, you must specify the VTune directory using --with-vtune=path" 7795712088aSRoman Sudarikov exit 1 7805712088aSRoman Sudarikov fi 7815712088aSRoman Sudarikovfi 7825712088aSRoman Sudarikov 783bb0f78a2SMichal Bergerif [[ "${CONFIG[ASAN]}" = "y" && "${CONFIG[TSAN]}" = "y" ]]; then 784830912e2SBen Walker echo "ERROR: ASAN and TSAN cannot be enabled at the same time." 785830912e2SBen Walker exit 1 786830912e2SBen Walkerfi 787830912e2SBen Walker 788ac5b53a5SJim Harrisif [[ "${CONFIG[FIO_PLUGIN]}" = "y" && "${CONFIG[EXAMPLES]}" = "n" ]]; then 789ac5b53a5SJim Harris echo "ERROR: --with-fio and --disable-examples are mutually exclusive." 790ac5b53a5SJim Harris exit 1 791ac5b53a5SJim Harrisfi 792ac5b53a5SJim Harris 7935a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 7945091cadcSPaul Luse # FreeBSD doesn't support all configurations 795577df16aSPawel Wodkowski if [[ "${CONFIG[COVERAGE]}" == "y" ]]; then 7965091cadcSPaul Luse echo "ERROR: CONFIG_COVERAGE not available on FreeBSD" 7975091cadcSPaul Luse exit 1 7985091cadcSPaul Luse fi 7995091cadcSPaul Lusefi 8005091cadcSPaul Luse 8012a0c2a2dSNick Connollyif [[ $sys_name != "Linux" ]]; then 80227b920a2SDarek Stojaczyk if [[ "${CONFIG[VHOST]}" == "y" ]]; then 803873c8748STomasz Kulasek echo "Vhost is only supported on Linux." 804873c8748STomasz Kulasek exit 1 80527b920a2SDarek Stojaczyk fi 80627b920a2SDarek Stojaczyk if [[ "${CONFIG[VIRTIO]}" == "y" ]]; then 807873c8748STomasz Kulasek echo "Virtio is only supported on Linux." 808873c8748STomasz Kulasek exit 1 80927b920a2SDarek Stojaczyk fi 81027b920a2SDarek Stojaczykfi 81127b920a2SDarek Stojaczyk 812577df16aSPawel Wodkowskiif [ "${CONFIG[RDMA]}" = "y" ]; then 813daee62a0SAlexey Marchuk if [[ ! "${CONFIG[RDMA_PROV]}" == "verbs" ]] && [[ ! "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]]; then 814daee62a0SAlexey Marchuk echo "Invalid RDMA provider specified, must be \"verbs\" or \"mlx5_dv\"" 815daee62a0SAlexey Marchuk exit 1 816daee62a0SAlexey Marchuk fi 817daee62a0SAlexey Marchuk 818eed0c6beSDarek Stojaczyk if ! echo -e '#include <infiniband/verbs.h>\n#include <rdma/rdma_verbs.h>\n' \ 819eed0c6beSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 820bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -libverbs -lrdmacm - 2> /dev/null; then 821bb0f78a2SMichal Berger echo "--with-rdma requires libverbs and librdmacm." 822bb0f78a2SMichal Berger echo "Please install then re-run this script." 823eed0c6beSDarek Stojaczyk exit 1 824eed0c6beSDarek Stojaczyk fi 825eed0c6beSDarek Stojaczyk 826eed0c6beSDarek Stojaczyk if echo -e '#include <infiniband/verbs.h>\n' \ 827eed0c6beSDarek Stojaczyk 'int main(void) { return !!IBV_WR_SEND_WITH_INV; }\n' \ 828bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 829577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="y" 8307671073bSSeth Howell else 831577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="n" 83217a819f8SJim Harris echo " 8337671073bSSeth Howell******************************************************************************* 8347671073bSSeth HowellWARNING: The Infiniband Verbs opcode Send With Invalidate is either not 8357671073bSSeth Howellsupported or is not functional with the current version of libibverbs installed 8367671073bSSeth Howellon this system. Please upgrade to at least version 1.1. 8377671073bSSeth Howell 8387671073bSSeth HowellBeginning with Linux kernel 4.14, the kernel NVMe-oF initiator leverages Send 8397671073bSSeth HowellWith Invalidate RDMA operations to improve performance. Failing to use the 8407671073bSSeth HowellSend With Invalidate operation on the NVMe-oF target side results in full 8417671073bSSeth Howellfunctionality, but greatly reduced performance. The SPDK NVMe-oF target will 8427671073bSSeth Howellbe unable to leverage that operation using the currently installed version 8437671073bSSeth Howellof libibverbs, so Linux kernel NVMe-oF initiators based on kernels greater 8447671073bSSeth Howellthan or equal to 4.14 will see significantly reduced performance. 84517a819f8SJim Harris*******************************************************************************" 8467671073bSSeth Howell fi 84794966468SAlexey Marchuk 84894966468SAlexey Marchuk if echo -e '#include <rdma/rdma_cma.h>\n' \ 84994966468SAlexey Marchuk 'int main(void) { return !!RDMA_OPTION_ID_ACK_TIMEOUT; }\n' \ 850bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 85194966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="y" 85294966468SAlexey Marchuk else 85394966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="n" 85494966468SAlexey Marchuk echo "RDMA_OPTION_ID_ACK_TIMEOUT is not supported" 85594966468SAlexey Marchuk fi 85694966468SAlexey Marchuk 857daee62a0SAlexey Marchuk if [ "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]; then 858daee62a0SAlexey Marchuk if ! echo -e '#include <spdk/stdinc.h>\n' \ 859daee62a0SAlexey Marchuk '#include <infiniband/mlx5dv.h>\n' \ 860daee62a0SAlexey Marchuk '#include <rdma/rdma_cma.h>\n' \ 861daee62a0SAlexey Marchuk 'int main(void) { return rdma_establish(NULL) || ' \ 862daee62a0SAlexey Marchuk '!!IBV_QP_INIT_ATTR_SEND_OPS_FLAGS || !!MLX5_OPCODE_RDMA_WRITE; }\n' \ 863bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lmlx5 -I${rootdir}/include -c - 2> /dev/null; then 864daee62a0SAlexey Marchuk echo "mlx5_dv provider is not supported" 865daee62a0SAlexey Marchuk exit 1 866daee62a0SAlexey Marchuk fi 867daee62a0SAlexey Marchuk fi 868daee62a0SAlexey Marchuk 869bb0f78a2SMichal Berger echo "Using '${CONFIG[RDMA_PROV]}' RDMA provider" 8707671073bSSeth Howellfi 8717671073bSSeth Howell 872ed56a3d4SAnil Veerabhadrappaif [[ "${CONFIG[FC]}" = "y" ]]; then 873ed56a3d4SAnil Veerabhadrappa if [[ -n "${CONFIG[FC_PATH]}" ]]; then 874ed56a3d4SAnil Veerabhadrappa if [ ! -d "${CONFIG[FC_PATH]}" ]; then 875ed56a3d4SAnil Veerabhadrappa echo "${CONFIG[FC_PATH]}: directory not found" 876ed56a3d4SAnil Veerabhadrappa exit 1 877ed56a3d4SAnil Veerabhadrappa fi 878ed56a3d4SAnil Veerabhadrappa fi 879ed56a3d4SAnil Veerabhadrappafi 880ed56a3d4SAnil Veerabhadrappa 881552e21ccSZiye Yangif [[ "${CONFIG[ISAL]}" = "y" ]] || [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 882325010bfSRichael Zhuang if [[ "${HAVE_NASM}" = "n" ]] && [[ $arch == x86_64* ]]; then 88335e54647STomasz Zawadzki echo "ERROR: ISA-L, compression & crypto require NASM version 2.14 or newer." 884873c8748STomasz Kulasek echo "Please install or upgrade them re-run this script." 885873c8748STomasz Kulasek exit 1 886552e21ccSZiye Yang fi 887552e21ccSZiye Yangfi 888552e21ccSZiye Yang 889ce711726SDarek Stojaczykif [[ "${CONFIG[PMDK]}" = "y" ]]; then 890ce711726SDarek Stojaczyk if ! echo -e '#include <libpmemblk.h>\nint main(void) { return 0; }\n' \ 891bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lpmemblk - 2> /dev/null; then 892bb0f78a2SMichal Berger echo "--with-pmdk requires libpmemblk." 893bb0f78a2SMichal Berger echo "Please install then re-run this script." 894ce711726SDarek Stojaczyk exit 1 895ce711726SDarek Stojaczyk fi 896ce711726SDarek Stojaczykfi 897ce711726SDarek Stojaczyk 8982a6ddeb8SYuriy Umanetsfunction dpdk_version() { 8992a6ddeb8SYuriy Umanets # Check DPDK version to determine if mlx5_pci driver is supported 9002a6ddeb8SYuriy Umanets local dpdk_ver="none" 9012a6ddeb8SYuriy Umanets if [[ "${CONFIG[DPDK_DIR]}" == "$rootdir/dpdk/build" ]]; then 9022a6ddeb8SYuriy Umanets # DPDK_DIR points at our submodule so ./build may not exist yet. Use 9032a6ddeb8SYuriy Umanets # absolute path to lookup the version. 9042a6ddeb8SYuriy Umanets dpdk_ver=$(< "$rootdir/dpdk/VERSION") 9052a6ddeb8SYuriy Umanets elif [[ -f "${CONFIG[DPDK_DIR]}"/../VERSION ]]; then 9062a6ddeb8SYuriy Umanets dpdk_ver=$(< "${CONFIG[DPDK_DIR]}"/../VERSION) 9072a6ddeb8SYuriy Umanets fi 9082a6ddeb8SYuriy Umanets echo $dpdk_ver 9092a6ddeb8SYuriy Umanets} 9102a6ddeb8SYuriy Umanets 9112a6ddeb8SYuriy Umanetsfunction mlx5_build() { 9122a6ddeb8SYuriy Umanets # Check if libmlx5 exists to enable mlx5_pci compress/crypto PMD 9132a6ddeb8SYuriy Umanets if ! echo -e '#include <spdk/stdinc.h>\n' \ 9142a6ddeb8SYuriy Umanets '#include <infiniband/mlx5dv.h>\n' \ 9152a6ddeb8SYuriy Umanets '#include <infiniband/verbs.h>\n' \ 9162a6ddeb8SYuriy Umanets 'int main(void) { return 0; }\n' \ 9172a6ddeb8SYuriy Umanets | "${BUILD_CMD[@]}" -lmlx5 -libverbs -I${rootdir}/include -c - 2> /dev/null; then 9182a6ddeb8SYuriy Umanets return 1 9192a6ddeb8SYuriy Umanets fi 9202a6ddeb8SYuriy Umanets return 0 9212a6ddeb8SYuriy Umanets} 9222a6ddeb8SYuriy Umanets 92397022803SJim Harrisif [[ "${CONFIG[REDUCE]}" = "y" ]]; then 924c4a3b312SDarek Stojaczyk if ! echo -e '#include <libpmem.h>\nint main(void) { return 0; }\n' \ 925bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lpmem - 2> /dev/null; then 926bb0f78a2SMichal Berger echo "--with-reduce requires libpmem." 927bb0f78a2SMichal Berger echo "Please install then re-run this script." 92897022803SJim Harris exit 1 92997022803SJim Harris fi 9302a6ddeb8SYuriy Umanets # Try to enable mlx5 compress 931e71ae467SAlexey Marchuk CONFIG[REDUCE_MLX5]="y" 9322a6ddeb8SYuriy Umanets 933e71ae467SAlexey Marchuk # Check if libmlx5 exists to enable mlx5_pci compress PMD 9342a6ddeb8SYuriy Umanets if ! mlx5_build; then 935e71ae467SAlexey Marchuk echo "libmlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 936e71ae467SAlexey Marchuk CONFIG[REDUCE_MLX5]="n" 9372a6ddeb8SYuriy Umanets else 938e71ae467SAlexey Marchuk if [[ "${CONFIG[DPDK_PKG_CONFIG]}" = "y" ]]; then 939e71ae467SAlexey Marchuk # Check if librte_compress_mlx5 exists in DPDK package 940e71ae467SAlexey Marchuk if [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_compress_mlx5.so ]; then 941e71ae467SAlexey Marchuk echo "librte_compress_mlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 942e71ae467SAlexey Marchuk CONFIG[REDUCE_MLX5]="n" 943e71ae467SAlexey Marchuk fi 944e71ae467SAlexey Marchuk else 945e71ae467SAlexey Marchuk # Check DPDK version to determine if mlx5_pci driver is supported 9462a6ddeb8SYuriy Umanets dpdk_ver=$(dpdk_version) 9472a6ddeb8SYuriy Umanets if [[ $dpdk_ver = "none" ]]; then 948c2de56b0SMichal Berger echo "Cannot get DPDK version, so disabling DPDK mlx5_pci compress PMD" 949e71ae467SAlexey Marchuk CONFIG[REDUCE_MLX5]="n" 9502a6ddeb8SYuriy Umanets elif [[ -n $dpdk_ver ]] && lt "$dpdk_ver" 21.02.0; then 9512a6ddeb8SYuriy Umanets # mlx5_pci for compress is supported by DPDK >- 21.02.0 952c2de56b0SMichal Berger echo "DPDK version ${dpdk_ver} doesn't support mlx5_pci compress PMD" 953c2de56b0SMichal Berger CONFIG[REDUCE_MLX5]="n" 9542a6ddeb8SYuriy Umanets elif [[ -n ${CONFIG[DPDK_LIB_DIR]} ]] && [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_compress_mlx5.so ]; then 9552a6ddeb8SYuriy Umanets # This is only checked when --with-dpdk or --with-dpdk=* is used 9562a6ddeb8SYuriy Umanets echo "librte_compress_mlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 9572a6ddeb8SYuriy Umanets CONFIG[REDUCE_MLX5]="n" 9582a6ddeb8SYuriy Umanets fi 9592a6ddeb8SYuriy Umanets fi 9602a6ddeb8SYuriy Umanets fi 9612a6ddeb8SYuriy Umanetsfi 9622a6ddeb8SYuriy Umanets 9632a6ddeb8SYuriy Umanetsif [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 9642a6ddeb8SYuriy Umanets # Try to enable mlx5 crypto 9652a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="y" 9662a6ddeb8SYuriy Umanets 9672a6ddeb8SYuriy Umanets # Check if libmlx5 exists to enable mlx5_pci compress PMD 9682a6ddeb8SYuriy Umanets if ! mlx5_build; then 9692a6ddeb8SYuriy Umanets echo "libmlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 9702a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9712a6ddeb8SYuriy Umanets else 9722a6ddeb8SYuriy Umanets if [[ "${CONFIG[DPDK_PKG_CONFIG]}" = "y" ]]; then 9732a6ddeb8SYuriy Umanets # Check if librte_crypto_mlx5 exists in DPDK package 9742a6ddeb8SYuriy Umanets if [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_crypto_mlx5.so ]; then 9752a6ddeb8SYuriy Umanets echo "librte_crypto_mlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 9762a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9772a6ddeb8SYuriy Umanets fi 9782a6ddeb8SYuriy Umanets else 9792a6ddeb8SYuriy Umanets # Check DPDK version to determine if mlx5_pci driver is supported 9802a6ddeb8SYuriy Umanets dpdk_ver=$(dpdk_version) 9812a6ddeb8SYuriy Umanets if [[ $dpdk_ver = "none" ]]; then 9822a6ddeb8SYuriy Umanets echo "Cannot get DPDK version, so disabling DPDK mlx5_pci crypto PMD" 9832a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9848a2fc789SYuriy Umanets elif [[ -n $dpdk_ver ]] && lt "$dpdk_ver" 21.11.0; then 9858a2fc789SYuriy Umanets # mlx5_pci for crypto is supported by DPDK >- 21.11.0 9862a6ddeb8SYuriy Umanets echo "DPDK version ${dpdk_ver} doesn't support mlx5_pci crypto PMD" 9872a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9882a6ddeb8SYuriy Umanets elif [[ -n ${CONFIG[DPDK_LIB_DIR]} ]] && [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_crypto_mlx5.so ]; then 9892a6ddeb8SYuriy Umanets # This is only checked when --with-dpdk or --with-dpdk=* is used 9902a6ddeb8SYuriy Umanets echo "librte_crypto_mlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 9912a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9922a6ddeb8SYuriy Umanets fi 993e71ae467SAlexey Marchuk fi 994e269bf4eSAlexey Marchuk fi 99597022803SJim Harrisfi 99697022803SJim Harris 997805d9942STomasz Kulasekif [[ "${CONFIG[NVME_CUSE]}" = "y" ]]; then 998805d9942STomasz 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' \ 999bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lfuse3 -D_FILE_OFFSET_BITS=64 - 2> /dev/null; then 1000bb0f78a2SMichal Berger echo "--with-cuse requires libfuse3." 1001bb0f78a2SMichal Berger echo "Please install then re-run this script." 1002805d9942STomasz Kulasek exit 1 1003805d9942STomasz Kulasek fi 1004805d9942STomasz Kulasekfi 1005805d9942STomasz Kulasek 100655bd0d3aSDarek Stojaczykif [[ "${CONFIG[RBD]}" = "y" ]]; then 100755bd0d3aSDarek Stojaczyk if ! echo -e '#include <rbd/librbd.h>\n#include <rados/librados.h>\n' \ 100855bd0d3aSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 1009bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lrados -lrbd - 2> /dev/null; then 1010bb0f78a2SMichal Berger echo "--with-rbd requires librados and librbd." 1011bb0f78a2SMichal Berger echo "Please install then re-run this script." 101255bd0d3aSDarek Stojaczyk exit 1 101355bd0d3aSDarek Stojaczyk fi 101455bd0d3aSDarek Stojaczykfi 101555bd0d3aSDarek Stojaczyk 10165cb18040SDarek Stojaczykif [[ "${CONFIG[ISCSI_INITIATOR]}" = "y" ]]; then 10175cb18040SDarek Stojaczyk # Fedora installs libiscsi to /usr/lib64/iscsi for some reason. 10185cb18040SDarek Stojaczyk if ! echo -e '#include <iscsi/iscsi.h>\n#include <iscsi/scsi-lowlevel.h>\n' \ 10195cb18040SDarek Stojaczyk '#if LIBISCSI_API_VERSION < 20150621\n' \ 10205cb18040SDarek Stojaczyk '#error\n' \ 10215cb18040SDarek Stojaczyk '#endif\n' \ 10225cb18040SDarek Stojaczyk 'int main(void) { return 0; }\n' \ 1023bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -L/usr/lib64/iscsi -liscsi - 2> /dev/null; then 1024bb0f78a2SMichal Berger echo "--with-iscsi-initiator requires libiscsi with" 1025bb0f78a2SMichal Berger echo "LIBISCSI_API_VERSION >= 20150621." 1026bb0f78a2SMichal Berger echo "Please install then re-run this script." 10275cb18040SDarek Stojaczyk exit 1 10285cb18040SDarek Stojaczyk fi 10295cb18040SDarek Stojaczykfi 10305cb18040SDarek Stojaczyk 10313674c1d3SDarek Stojaczykif [[ "${CONFIG[ASAN]}" = "y" ]]; then 10323674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1033bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=address - 2> /dev/null; then 1034bb0f78a2SMichal Berger echo "--enable-asan requires libasan." 1035bb0f78a2SMichal Berger echo "Please install then re-run this script." 10363674c1d3SDarek Stojaczyk exit 1 10373674c1d3SDarek Stojaczyk fi 10383674c1d3SDarek Stojaczykfi 10393674c1d3SDarek Stojaczyk 10403674c1d3SDarek Stojaczykif [[ "${CONFIG[UBSAN]}" = "y" ]]; then 10413674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1042bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=undefined - 2> /dev/null; then 1043bb0f78a2SMichal Berger echo "--enable-ubsan requires libubsan." 1044bb0f78a2SMichal Berger echo "Please install then re-run this script." 1045bb0f78a2SMichal Berger echo "If installed, please check that the GCC version is at least 6.4" 1046bb0f78a2SMichal Berger echo "and synchronize CC accordingly." 10473674c1d3SDarek Stojaczyk exit 1 10483674c1d3SDarek Stojaczyk fi 10493674c1d3SDarek Stojaczykfi 10503674c1d3SDarek Stojaczyk 10513674c1d3SDarek Stojaczykif [[ "${CONFIG[TSAN]}" = "y" ]]; then 10523674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1053bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=thread - 2> /dev/null; then 1054bb0f78a2SMichal Berger echo "--enable-tsan requires libtsan." 1055bb0f78a2SMichal Berger echo "Please install then re-run this script." 10563674c1d3SDarek Stojaczyk exit 1 10573674c1d3SDarek Stojaczyk fi 10583674c1d3SDarek Stojaczykfi 10593674c1d3SDarek Stojaczyk 1060d1fee489SVitaliy Mysakif [[ "${CONFIG[OCF]}" = "y" ]]; then 1061d1fee489SVitaliy Mysak # If OCF_PATH is a file, assume it is a library and use it to compile with 1062d1fee489SVitaliy Mysak if [ -f ${CONFIG[OCF_PATH]} ]; then 1063d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=y 1064d1fee489SVitaliy Mysak else 1065d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=n 1066d1fee489SVitaliy Mysak fi 1067d1fee489SVitaliy Mysakfi 1068d1fee489SVitaliy Mysak 1069995d60f4SBen Walkerif [[ "${CONFIG[PGO_CAPTURE]}" = "y" && "${CONFIG[PGO_USE]}" = "y" ]]; then 1070995d60f4SBen Walker echo "ERROR: --enable-pgo-capture and --enable-pgo-use are mutually exclusive." 1071995d60f4SBen Walker exit 1 1072954728e9SBen Walkerelif [[ "${CONFIG[PGO_USE]}" = "y" ]]; then 1073954728e9SBen Walker if [[ "$CC_TYPE" = "clang" ]]; then 1074954728e9SBen Walker # For clang we need to run an extra step on gathered profiling data. 1075954728e9SBen Walker echo "Generating suitable profile data" 1076954728e9SBen Walker llvm-profdata merge -output=build/pgo/default.profdata build/pgo 1077954728e9SBen Walker fi 1078995d60f4SBen Walkerfi 1079995d60f4SBen Walker 10808165bf71SBen Walkerif [[ "${CONFIG[URING]}" = "y" ]]; then 10818165bf71SBen Walker if [[ -n "${CONFIG[URING_PATH]}" ]]; then 10828165bf71SBen Walker if [ ! -d "${CONFIG[URING_PATH]}" ]; then 10838165bf71SBen Walker echo "${CONFIG[URING_PATH]}: directory not found" 10848165bf71SBen Walker exit 1 10858165bf71SBen Walker fi 10864ccc9ea3SJim Harris elif ! echo -e '#include <liburing.h>\nint main(void) { return 0; }\n' \ 10874ccc9ea3SJim Harris | "${BUILD_CMD[@]}" -luring - 2> /dev/null; then 10884ccc9ea3SJim Harris echo "--with-uring requires liburing." 10894ccc9ea3SJim Harris echo "Please build and install then re-run this script." 10904ccc9ea3SJim Harris exit 1 10918165bf71SBen Walker fi 10928165bf71SBen Walkerfi 1093995d60f4SBen Walker 10947fa15e28SXiaodong Liuif [[ "${CONFIG[FUSE]}" = "y" ]]; then 10957fa15e28SXiaodong Liu if [[ ! -d /usr/include/fuse3 ]] && [[ ! -d /usr/local/include/fuse3 ]]; then 10967fa15e28SXiaodong Liu echo "--with-fuse requires libfuse3." 10977fa15e28SXiaodong Liu echo "Please install then re-run this script." 10987fa15e28SXiaodong Liu exit 1 10997fa15e28SXiaodong Liu fi 11007fa15e28SXiaodong Liufi 11017fa15e28SXiaodong Liu 110291e42257SJim Harrisif [ "${CONFIG[CET]}" = "y" ]; then 1103bb0f78a2SMichal Berger if ! echo -e 'int main(void) { return 0; }\n' | "${BUILD_CMD[@]}" -fcf-protection - 2> /dev/null; then 1104bb0f78a2SMichal Berger echo "--enable-cet requires compiler/linker that supports CET." 1105bb0f78a2SMichal Berger echo "Please install then re-run this script." 110691e42257SJim Harris exit 1 110791e42257SJim Harris fi 110891e42257SJim Harrisfi 110991e42257SJim Harris 1110050565e5SJim Harrisif [[ "${CONFIG[FUZZER]}" = "y" && "$CC_TYPE" != "clang" ]]; then 1111050565e5SJim Harris echo "--with-fuzzer requires setting CC and CXX to clang." 1112050565e5SJim Harris exit 1 1113050565e5SJim Harrisfi 1114050565e5SJim Harris 11159d2f6f86SJim Harrisif [[ "${CONFIG[ISAL]}" = "y" ]]; then 11169d2f6f86SJim Harris if [ ! -f "$rootdir"/isa-l/autogen.sh ]; then 11179d2f6f86SJim Harris echo "ISA-L was not found; To install ISA-L run:" 11189d2f6f86SJim Harris echo " git submodule update --init" 11199d2f6f86SJim Harris exit 1 11209d2f6f86SJim Harris fi 11219d2f6f86SJim Harris 11229d2f6f86SJim Harris cd $rootdir/isa-l 11239d2f6f86SJim Harris ISAL_LOG=$rootdir/isa-l/spdk-isal.log 11249d2f6f86SJim Harris if [[ -n "${CONFIG[CROSS_PREFIX]}" ]]; then 11259d2f6f86SJim Harris ISAL_OPTS=("--host=${CONFIG[CROSS_PREFIX]}") 11269d2f6f86SJim Harris else 11279d2f6f86SJim Harris ISAL_OPTS=() 11289d2f6f86SJim Harris fi 11299d2f6f86SJim Harris echo -n "Configuring ISA-L (logfile: $ISAL_LOG)..." 11309d2f6f86SJim Harris ./autogen.sh &> $ISAL_LOG 11319d2f6f86SJim Harris ./configure CFLAGS="-fPIC -g -O2" "${ISAL_OPTS[@]}" --enable-shared=no >> $ISAL_LOG 2>&1 11329d2f6f86SJim Harris echo "done." 11339d2f6f86SJim Harris cd $rootdir 11349d2f6f86SJim Harrisfi 11359d2f6f86SJim Harris 1136509241ceSKonrad Sztyberif [[ "${CONFIG[SMA]}" = "y" ]]; then 1137509241ceSKonrad Sztyber if ! python3 -c 'import grpc; import grpc_tools' 2> /dev/null; then 1138509241ceSKonrad Sztyber echo "--with-sma requires grpcio and grpcio-tools python packages." 1139509241ceSKonrad Sztyber echo "Please install then re-run this script." 1140509241ceSKonrad Sztyber exit 1 1141509241ceSKonrad Sztyber fi 1142509241ceSKonrad Sztyberfi 1143509241ceSKonrad Sztyber 1144fcc38949SRui Chang# For ARM Neoverse-N1 platform, debug build needs gcc version newer than 8.4 1145fcc38949SRui Changif [[ "${CONFIG[DEBUG]}" = "y" && $arch = aarch64* && "$CC_TYPE" = "gcc" ]]; then 1146fcc38949SRui Chang GCC_VERSION=$($CC -dumpfullversion) 1147fcc38949SRui Chang PART_NUM=$(grep -i -m 1 "CPU part" /proc/cpuinfo | awk '{print $4}') 1148fcc38949SRui Chang 1149fcc38949SRui Chang if [[ "$(printf '%s\n' "8.4.0" "$GCC_VERSION" | sort -V | head -n1)" != "8.4.0" ]]; then 1150fcc38949SRui Chang if [[ $PART_NUM = 0xd0c ]]; then 1151fcc38949SRui Chang echo "WARNING: For ARM Neoverse-N1 platform, debug build needs GCC version newer than 8.4." 1152fcc38949SRui Chang echo " Will work around this by using armv8.2-a+crypto as target architecture for now." 1153fcc38949SRui Chang CONFIG[ARCH]=armv8.2-a+crypto 1154fcc38949SRui Chang fi 1155fcc38949SRui Chang fi 1156fcc38949SRui Changfi 1157fcc38949SRui Chang 115848f70f48SPawel Wodkowski# We are now ready to generate final configuration. But first do sanity 115948f70f48SPawel Wodkowski# check to see if all keys in CONFIG array have its reflection in CONFIG file. 1160bb0f78a2SMichal Bergerif (($(grep -cE "^\s*CONFIG_[[:alnum:]_]+=" "$rootdir/CONFIG") != ${#CONFIG[@]})); then 116148f70f48SPawel Wodkowski echo "" 116248f70f48SPawel Wodkowski echo "BUG: Some configuration options are not present in CONFIG file. Please update this file." 116348f70f48SPawel Wodkowski echo "Missing options in CONFIG (+) file and in current config (-): " 116448f70f48SPawel Wodkowski diff -u --label "CONFIG file" --label "CONFIG[@]" \ 1165f8d6541dSMichal Berger <(sed -r -e '/^[[:space:]]*$/d; /^[[:space:]]*#.*/d; s/(CONFIG_[[:alnum:]_]+)=.*/\1/g' CONFIG | sort) \ 1166bb0f78a2SMichal Berger <(printf "CONFIG_%s\n" "${!CONFIG[@]}" | sort) 116748f70f48SPawel Wodkowski exit 1 116848f70f48SPawel Wodkowskifi 116948f70f48SPawel Wodkowski 117085bc2bbeSPawel Wodkowskiecho -n "Creating mk/config.mk..." 1171e62a3c65SSeth Howellcp -f $rootdir/CONFIG $rootdir/mk/config.mk 1172bb0f78a2SMichal Bergerfor key in "${!CONFIG[@]}"; do 1173f8d6541dSMichal Berger sed -i.bak -r "s#[[:space:]]*CONFIG_${key}=.*#CONFIG_${key}\?=${CONFIG[$key]}#g" $rootdir/mk/config.mk 1174577df16aSPawel Wodkowskidone 1175577df16aSPawel Wodkowski# On FreeBSD sed -i 'SUFFIX' - SUFFIX is mandatory. So no way but to delete the backed file. 1176e62a3c65SSeth Howellrm -f $rootdir/mk/config.mk.bak 1177baa6eac0SDarek Stojaczykecho "done." 11789dd998cdSBen Walker 117908ec96ebSDaniel Verkamp# Environment variables 1180baa6eac0SDarek Stojaczykecho -n "Creating mk/cc.flags.mk..." 1181e62a3c65SSeth Howellrm -f $rootdir/mk/cc.flags.mk 1182e62a3c65SSeth Howell[ -n "$CFLAGS" ] && echo "CFLAGS?=$CFLAGS" > $rootdir/mk/cc.flags.mk 1183e62a3c65SSeth Howell[ -n "$CXXFLAGS" ] && echo "CXXFLAGS?=$CXXFLAGS" >> $rootdir/mk/cc.flags.mk 1184e62a3c65SSeth Howell[ -n "$LDFLAGS" ] && echo "LDFLAGS?=$LDFLAGS" >> $rootdir/mk/cc.flags.mk 1185e62a3c65SSeth Howell[ -n "$DESTDIR" ] && echo "DESTDIR?=$DESTDIR" >> $rootdir/mk/cc.flags.mk 11860b56a5b4SJim Harrisecho "done." 118785bc2bbeSPawel Wodkowski 1188db3ebfe6SMichal Berger# Create .sh with build config for easy sourcing|lookup during the tests. 1189db3ebfe6SMichal Bergerfor conf in "${!CONFIG[@]}"; do 1190db3ebfe6SMichal Berger echo "CONFIG_$conf=${CONFIG[$conf]}" 1191db3ebfe6SMichal Bergerdone > "$rootdir/test/common/build_config.sh" 1192db3ebfe6SMichal Berger 11935a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 1194870ce250SPaul Luse echo "Type 'gmake' to build." 1195870ce250SPaul Luseelse 11960b56a5b4SJim Harris echo "Type 'make' to build." 1197870ce250SPaul Lusefi 11989dd998cdSBen Walker 11999dd998cdSBen Walkerexit 0 1200