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)" 31*8247bd40SMarcin Spiewak echo " --max-lcores=VAL DPDK configuration. Maximum number of lcores supported by EAL." 323def834cSAmelia Blachuciak echo "" 339dd998cdSBen Walker echo " --enable-debug Configure for debug builds" 349dd998cdSBen Walker echo " --enable-werror Treat compiler warnings as errors" 359dd998cdSBen Walker echo " --enable-asan Enable address sanitizer" 369dd998cdSBen Walker echo " --enable-ubsan Enable undefined behavior sanitizer" 379dd998cdSBen Walker echo " --enable-coverage Enable code coverage tracking" 386d6d1161SDaniel Verkamp echo " --enable-lto Enable link-time optimization" 39995d60f4SBen Walker echo " --enable-pgo-capture Enable generation of profile guided optimization data" 40995d60f4SBen Walker echo " --enable-pgo-use Use previously captured profile guided optimization data" 4191e42257SJim Harris echo " --enable-cet Enable Intel Control-flow Enforcement Technology (CET)" 429fcb1cb0STomasz Zawadzki echo " --disable-tests Disable building of functional tests" 439fcb1cb0STomasz Zawadzki echo " --disable-unit-tests Disable building of unit tests" 449b2c6452SJacek Kalwas echo " --disable-examples Disable building of examples" 45119158cdSRajarshi Chowdhury echo " --disable-apps Disable building of apps" 469dd998cdSBen Walker echo "" 479dd998cdSBen Walker echo "Specifying Dependencies:" 489dd998cdSBen Walker echo "--with-DEPENDENCY[=path] Use the given dependency. Optionally, provide the" 499dd998cdSBen Walker echo " path." 509dd998cdSBen Walker echo "--without-DEPENDENCY Do not link to the given dependency. This may" 519dd998cdSBen Walker echo " disable features and components." 529dd998cdSBen Walker echo "" 539dd998cdSBen Walker echo "Valid dependencies are listed below." 542bc71094SMichal Berger echo " --with-dpdk[=DIR] Build against a custom dpdk version. By default, the dpdk" 552bc71094SMichal Berger echo " --without-dpdk submodule in spdk tree will be used." 569dd998cdSBen Walker echo " example: /usr/share/dpdk/x86_64-default-linuxapp-gcc" 572bc71094SMichal Berger echo " --with-env=DIR Use an alternate environment implementation instead of DPDK." 5806cc8045SBen Walker echo " Implies --without-dpdk." 592bc71094SMichal Berger echo " --with-idxd Build the IDXD library and accel framework plug-in module." 602bc71094SMichal Berger echo " --without-idxd Disabled while experimental. Only built for x86 when enabled." 61784b9d48SAlexey Marchuk echo " --with-crypto Build isa-l-crypto and vbdev crypto module. No path required." 62784b9d48SAlexey Marchuk echo " --without-crypto Disable isa-l-crypto and vbdev crypto module." 632bc71094SMichal Berger echo " --with-fio[=DIR] Build fio_plugin." 642bc71094SMichal Berger echo " --without-fio default: /usr/src/fio" 656f338d4bSKrishna Kanth Reddy echo " --with-xnvme Build xNVMe bdev module." 666f338d4bSKrishna Kanth Reddy echo " --without-xnvme No path required." 672bc71094SMichal Berger echo " --with-vhost Build vhost target. Enabled by default." 682bc71094SMichal Berger echo " --without-vhost No path required." 692bc71094SMichal Berger echo " --with-virtio Build vhost initiator and virtio-pci bdev modules." 702bc71094SMichal Berger echo " --without-virtio No path required." 71e50ade31SChangpeng Liu echo " --with-vfio-user[=DIR] Build custom vfio-user transport for NVMf target and vfio-user target." 72e50ade31SChangpeng Liu echo " vfio-user initiator is always built-in in Linux." 732f731c63SGangCao echo " example: /usr/src/libvfio-user" 742f731c63SGangCao echo " --without-vfio-user No path required." 7519e2dc38Spaul luse echo " --with-vbdev-compress Build vbdev compression module and dependencies." 7619e2dc38Spaul luse echo " --without-vbdev-compress No path required." 77976f8b09Spaul luse echo " --with-dpdk-compressdev Build accel DPDK compression module and dependencies." 78976f8b09Spaul luse echo " --without-dpdk-compressdev No path required." 792bc71094SMichal Berger echo " --with-rbd Build Ceph RBD bdev module." 802bc71094SMichal Berger echo " --without-rbd No path required." 81ed2b53f3SYifan Bian echo " --with-ublk Build ublk library." 82ed2b53f3SYifan Bian echo " --without-ublk No path required." 832bc71094SMichal Berger echo " --with-rdma[=DIR] Build RDMA transport for NVMf target and initiator." 842bc71094SMichal Berger echo " --without-rdma Accepts optional RDMA provider name. Can be \"verbs\" or \"mlx5_dv\"." 85daee62a0SAlexey Marchuk echo " If no provider specified, \"verbs\" provider is used by default." 862bc71094SMichal Berger echo " --with-fc[=DIR] Build FC transport for NVMf target." 872bc71094SMichal Berger echo " --without-fc If an argument is provided, it is considered a directory containing" 88ed56a3d4SAnil Veerabhadrappa echo " libufc.a and fc_lld.h. Otherwise the regular system paths will" 89ed56a3d4SAnil Veerabhadrappa echo " be searched." 90044bb175SDenis Barakthanov echo " --with-daos[=DIR] Build DAOS bdev module." 912e283fcbS0xe0f echo " --without-daos No path required." 922bc71094SMichal Berger echo " --with-shared Build spdk shared libraries." 932bc71094SMichal Berger echo " --without-shared No path required." 942bc71094SMichal Berger echo " --with-iscsi-initiator Build with iscsi bdev module." 952bc71094SMichal Berger echo " --without-iscsi-initiator No path required." 966b97cccfSJim Harris echo " --with-vtune=DIR Required to profile I/O under Intel VTune Amplifier XE. (Deprecated)" 972bc71094SMichal Berger echo " --without-vtune example: /opt/intel/vtune_amplifier_xe_version" 9832908cbfSTomasz Zawadzki echo " --with-ocf[=DIR] Build OCF library and bdev module. (Deprecated)" 992bc71094SMichal Berger echo " --without-ocf If argument is directory, interpret it as root of OCF repo" 100d1fee489SVitaliy Mysak echo " If argument is file, interpret it as compiled OCF lib" 10198d60de6SPiotr Pelplinski echo " If no argument is specified, OCF git submodule is used by default" 102d1fee489SVitaliy Mysak echo " example: /usr/src/ocf/" 1032bc71094SMichal Berger echo " --with-uring[=DIR] Build I/O uring bdev or socket module." 1042bc71094SMichal Berger echo " --without-uring If an argument is provided, it is considered a directory containing" 105161c88a0SDarek Stojaczyk echo " liburing.a and io_uring.h. Otherwise the regular system paths will" 106161c88a0SDarek Stojaczyk echo " be searched." 107958d196cSIndraneel M echo " --without-uring-zns Build I/O uring module without ZNS (zoned namespaces) support." 10834192459SBoris Glimcher echo " --with-openssl[=DIR] Build OPENSSL with custom path. Otherwise the regular system paths will" 10934192459SBoris Glimcher echo " be searched." 1102bc71094SMichal Berger echo " --with-fuse Build FUSE components for mounting a blobfs filesystem." 1112bc71094SMichal Berger echo " --without-fuse No path required." 1122bc71094SMichal Berger echo " --with-nvme-cuse Build NVMe driver with support for CUSE-based character devices." 1132bc71094SMichal Berger echo " --without-nvme-cuse No path required." 11483a4b155SArtur Paszkiewicz echo " --with-raid5f Build with bdev_raid module RAID5f support." 11583a4b155SArtur Paszkiewicz echo " --without-raid5f No path required." 1162bc71094SMichal Berger echo " --with-wpdk=DIR Build using WPDK to provide support for Windows (experimental)." 1172bc71094SMichal Berger echo " --without-wpdk The argument must be a directory containing lib and include." 1182bc71094SMichal Berger echo " --with-usdt Build with userspace DTrace probes enabled." 1192bc71094SMichal Berger echo " --without-usdt No path required." 120050565e5SJim Harris echo " --with-fuzzer Build with LLVM fuzzing enabled." 121050565e5SJim Harris echo " Path to clang_rt.fuzzer_no_main library required." 122050565e5SJim Harris echo " Requires setting CC and CXX to clang." 123050565e5SJim Harris echo " (Typically /usr/lib/llvm-VER/lib/clang/VER/lib/linux/libclang_rt.fuzzer_no_main-ARCH.a)" 124509241ceSKonrad Sztyber echo " --with-sma Generate Storage Management Agent's protobuf interface" 125509241ceSKonrad Sztyber echo " --without-sma No path required." 1262796687dSParameswaran Krishnamurthy echo " --with-avahi Build with Avahi mDNS discovery client service enabled in bdev-nvme module." 1272796687dSParameswaran Krishnamurthy echo " --without-avahi No path required." 1289dd998cdSBen Walker echo "" 12908ec96ebSDaniel Verkamp echo "Environment variables:" 13008ec96ebSDaniel Verkamp echo "" 13173439e6fSBen Walker echo "CC C compiler" 13208ec96ebSDaniel Verkamp echo "CFLAGS C compiler flags" 13373439e6fSBen Walker echo "CXX C++ compiler" 13408ec96ebSDaniel Verkamp echo "CXXFLAGS C++ compiler flags" 13573439e6fSBen Walker echo "LD Linker" 13608ec96ebSDaniel Verkamp echo "LDFLAGS Linker flags" 13708ec96ebSDaniel Verkamp echo "DESTDIR Destination for 'make install'" 13808ec96ebSDaniel Verkamp echo "" 1399dd998cdSBen Walker} 1409dd998cdSBen Walker 141577df16aSPawel Wodkowski# Load default values 142ff238359SJosh Soref# Convert config to sourceable configuration file 143e62a3c65SSeth Howellsed -r 's/CONFIG_([[:alnum:]_]+)=(.*)/CONFIG[\1]=\2/g' $rootdir/CONFIG > $rootdir/CONFIG.sh 144577df16aSPawel Wodkowskideclare -A CONFIG 145e62a3c65SSeth Howellsource $rootdir/CONFIG.sh 146e62a3c65SSeth Howellrm $rootdir/CONFIG.sh 147577df16aSPawel Wodkowski 14811a5716dSMichal Berger# Try to expand literal ~ that might have been passed as an option via --long-opt=~/dir. 14911a5716dSMichal Bergerset -- "${@//\~/~}" 15011a5716dSMichal Berger 1514d2e26d8STomasz Zawadzkifor i in "$@"; do 1524d2e26d8STomasz Zawadzki case "$i" in 1534d2e26d8STomasz Zawadzki --cross-prefix=*) 1544d2e26d8STomasz Zawadzki CONFIG[CROSS_PREFIX]="${i#*=}" 1554d2e26d8STomasz Zawadzki ;; 1564d2e26d8STomasz Zawadzki --enable-lto) 1574d2e26d8STomasz Zawadzki CONFIG[LTO]=y 1584d2e26d8STomasz Zawadzki ;; 1594d2e26d8STomasz Zawadzki --disable-lto) 1604d2e26d8STomasz Zawadzki CONFIG[LTO]=n 1614d2e26d8STomasz Zawadzki ;; 1624d2e26d8STomasz Zawadzki esac 1634d2e26d8STomasz Zawadzkidone 1644d2e26d8STomasz Zawadzki 165873c8748STomasz Kulasek# Detect the compiler toolchain 166873c8748STomasz Kulasek$rootdir/scripts/detect_cc.sh --cc="$CC" --cxx="$CXX" --lto="${CONFIG[LTO]}" --ld="$LD" --cross-prefix="${CONFIG[CROSS_PREFIX]}" > $rootdir/mk/cc.mk 167873c8748STomasz Kulasek 168bb0f78a2SMichal BergerCC=$(grep "DEFAULT_CC=" "$rootdir/mk/cc.mk" | sed s/DEFAULT_CC=//) 169bb0f78a2SMichal BergerCC_TYPE=$(grep "CC_TYPE=" "$rootdir/mk/cc.mk" | cut -d "=" -f 2) 170873c8748STomasz Kulasek 171873c8748STomasz Kulasekarch=$($CC -dumpmachine) 1725a764955SMichal Bergersys_name=$(uname -s) 173873c8748STomasz Kulasek 1749854c138SNick Connollyif [[ $arch == *mingw* ]] || [[ $arch == *windows* ]]; then 1759854c138SNick Connolly sys_name=Windows 1769854c138SNick Connollyfi 1779854c138SNick Connolly 1782a0c2a2dSNick Connollyif [[ $sys_name != "Linux" ]]; then 179873c8748STomasz Kulasek # Vhost, rte_vhost library and virtio are only supported on Linux. 180873c8748STomasz Kulasek CONFIG[VHOST]="n" 181873c8748STomasz Kulasek CONFIG[VIRTIO]="n" 182873c8748STomasz Kulasek echo "Notice: Vhost, rte_vhost library and virtio are only supported on Linux. Turning off default feature." 183873c8748STomasz Kulasekfi 184873c8748STomasz Kulasek 1851723a800SGangCaofunction check_dir() { 1861723a800SGangCao arg="$1" 1871723a800SGangCao dir="${arg#*=}" 1881723a800SGangCao if [ ! -d "$dir" ]; then 1891723a800SGangCao echo "$arg: directory not found" 1901723a800SGangCao exit 1 1911723a800SGangCao fi 1921723a800SGangCao} 1931723a800SGangCao 1947b04eb72SYuriy Umanets# On x86_64 'clang -dumpmachine' produces x86_64-pc-linux-gnu 1957b04eb72SYuriy Umanets# whereas the dpdk might be built with gcc and its libs lie in 196acd2cc94STomasz Zawadzki# x86_64-linux-gnu. Let's find the right libdir for dpdk libs. 1977b04eb72SYuriy Umanetsfunction find_dpdk_arch_libdir() { 198acd2cc94STomasz Zawadzki local dpdk_libdir="$1/lib" 199acd2cc94STomasz Zawadzki 200acd2cc94STomasz Zawadzki # Use libdir with 'lib' or 'lib64' 201acd2cc94STomasz Zawadzki if [[ ! -d "$dpdk_libdir" ]]; then 202acd2cc94STomasz Zawadzki dpdk_libdir+="64" 203acd2cc94STomasz Zawadzki fi 2047b04eb72SYuriy Umanets 2057b04eb72SYuriy Umanets # Checking first what we have with $arch, then clang 2067b04eb72SYuriy Umanets # variant of arch. 2077b04eb72SYuriy Umanets arches=("$arch" "$(echo $arch | sed 's/-pc//g')") 2087b04eb72SYuriy Umanets for a in "${arches[@]}"; do 209acd2cc94STomasz Zawadzki local libdir_arch="$dpdk_libdir/$a" 210acd2cc94STomasz Zawadzki if [[ -d "$libdir_arch" ]]; then 211acd2cc94STomasz Zawadzki echo "$libdir_arch" 2127b04eb72SYuriy Umanets return 2137b04eb72SYuriy Umanets fi 2147b04eb72SYuriy Umanets done 2157b04eb72SYuriy Umanets 2167b04eb72SYuriy Umanets # Fallback to the libdir without arch component 217acd2cc94STomasz Zawadzki echo "$dpdk_libdir" 2187b04eb72SYuriy Umanets} 2197b04eb72SYuriy Umanets 220f1980244SYuriy Umanetsfunction check_IPSec_mb() { 221f1980244SYuriy Umanets local mode=$1 222f1980244SYuriy Umanets local dpdk_libdir=$2 223f1980244SYuriy Umanets local dpdk_incdir=$3 224f1980244SYuriy Umanets local have_ipsec_mb=n 225f1980244SYuriy Umanets 226f1980244SYuriy Umanets if [[ $mode = "pkg-config" ]]; then 227f1980244SYuriy Umanets local dpdk_libs 228f1980244SYuriy Umanets 229f1980244SYuriy Umanets # Request libdpdk pkg-config settings to figure out if the IPSec_MB is used 230f1980244SYuriy Umanets # as a dependency. 231f1980244SYuriy Umanets # Due to some reason pkg-config shows -lIPSec_MB only with --static option 232f13ec525SKarol Latecki dpdk_libs=$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --libs --static libdpdk) 233f1980244SYuriy Umanets if echo "$dpdk_libs" | grep "\-lIPSec_MB" > /dev/null 2>&1; then 234f1980244SYuriy Umanets have_ipsec_mb=y 235f1980244SYuriy Umanets fi 236f1980244SYuriy Umanets elif [[ $mode = "build-config" ]]; then 237f1980244SYuriy Umanets # Use dpdk build config header to check if the IPSec_MB was used. 238f1980244SYuriy Umanets if grep -F "define RTE_CRYPTO_IPSEC_MB 1" "$dpdk_incdir/rte_build_config.h" > /dev/null 2>&1; then 239f1980244SYuriy Umanets have_ipsec_mb=y 240f1980244SYuriy Umanets fi 241f1980244SYuriy Umanets else 242f1980244SYuriy Umanets echo "ERROR: Invalid IPSec_MB checking mode $mode." 243f1980244SYuriy Umanets echo "ERROR: Only \"pkg-config\" and \"build-config\" available." 244f1980244SYuriy Umanets exit 1 245f1980244SYuriy Umanets fi 246f1980244SYuriy Umanets if [[ $have_ipsec_mb = "n" ]]; then 247f1980244SYuriy Umanets CONFIG[IPSEC_MB]=n 248f1980244SYuriy Umanets return 249f1980244SYuriy Umanets fi 250f1980244SYuriy Umanets 251f1980244SYuriy Umanets # Since we don't know the library path where the IPSec_MB is located 252f1980244SYuriy Umanets # let's find it out with the ldd utility. This can be a standard location 253f1980244SYuriy Umanets # or a custom build. 254f1980244SYuriy Umanets local librte_crypto_ipsec_mb="$dpdk_libdir/librte_crypto_ipsec_mb.so" 255f1980244SYuriy Umanets if [[ -f "$librte_crypto_ipsec_mb" ]]; then 256f1980244SYuriy Umanets local ipsec_mb_libdir 257f1980244SYuriy Umanets 258f1980244SYuriy Umanets ipsec_mb_libdir=$(ldd "$librte_crypto_ipsec_mb" | grep "libIPSec_MB.so" \ 259f1980244SYuriy Umanets | sed -e 's/\s*libIPSec_MB.so.*=>\s//' -e 's/\/libIPSec_MB.so.*$//') 260f1980244SYuriy Umanets if [[ -d $ipsec_mb_libdir ]]; then 261f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 262f1980244SYuriy Umanets CONFIG[IPSEC_MB_DIR]="$ipsec_mb_libdir" 263f1980244SYuriy Umanets elif [[ $ipsec_mb_libdir = "not found" ]]; then 264f1980244SYuriy Umanets # ldconfig cache is broken, old build with refs to non-existing libs, etc. 265f1980244SYuriy Umanets echo "ERROR: Invalid IPSec_MB installation. Library is not found and/or ldconfig cache is broken!" 266f1980244SYuriy Umanets exit 1 267f1980244SYuriy Umanets else 268f1980244SYuriy Umanets # Failed to check for IPSec_MB lib path. Let's just assume it is lives 269f1980244SYuriy Umanets # in one of the standard locations (/usr/lib, etc.). 270f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 271f1980244SYuriy Umanets fi 272f1980244SYuriy Umanets else 273f1980244SYuriy Umanets # pkg-config says there is IPSec_mb and dpdk lib does not have it. Let's just 274f1980244SYuriy Umanets # assume it is installed in the system in one of the standard locations. 275f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 276f1980244SYuriy Umanets fi 277f1980244SYuriy Umanets} 278f1980244SYuriy Umanets 2799dd998cdSBen Walkerfor i in "$@"; do 2809dd998cdSBen Walker case "$i" in 2819dd998cdSBen Walker -h | --help) 2829dd998cdSBen Walker usage 2839dd998cdSBen Walker exit 0 2849dd998cdSBen Walker ;; 2854d2e26d8STomasz Zawadzki --cross-prefix=*) ;& 2864d2e26d8STomasz Zawadzki --enable-lto) ;& 2874d2e26d8STomasz Zawadzki --disable-lto) 2884d2e26d8STomasz Zawadzki # Options handled before detecting CC. 2894d2e26d8STomasz Zawadzki ;; 2902e7fe8e8SDaniel Verkamp --prefix=*) 291577df16aSPawel Wodkowski CONFIG[PREFIX]="${i#*=}" 2922e7fe8e8SDaniel Verkamp ;; 2930e6ddfd6SBen Walker --target-arch=*) 2940e6ddfd6SBen Walker CONFIG[ARCH]="${i#*=}" 2950e6ddfd6SBen Walker ;; 296e8863cb7SMichal Berger --libdir=*) 297e8863cb7SMichal Berger CONFIG[LIBDIR]="${i#*=}" 298e8863cb7SMichal Berger ;; 2999dd998cdSBen Walker --enable-debug) 300577df16aSPawel Wodkowski CONFIG[DEBUG]=y 3019dd998cdSBen Walker ;; 3029dd998cdSBen Walker --disable-debug) 303577df16aSPawel Wodkowski CONFIG[DEBUG]=n 3049dd998cdSBen Walker ;; 3059dd998cdSBen Walker --enable-asan) 306577df16aSPawel Wodkowski CONFIG[ASAN]=y 3079dd998cdSBen Walker ;; 3089dd998cdSBen Walker --disable-asan) 309577df16aSPawel Wodkowski CONFIG[ASAN]=n 3109dd998cdSBen Walker ;; 3119dd998cdSBen Walker --enable-ubsan) 312577df16aSPawel Wodkowski CONFIG[UBSAN]=y 3139dd998cdSBen Walker ;; 3149dd998cdSBen Walker --disable-ubsan) 315577df16aSPawel Wodkowski CONFIG[UBSAN]=n 3169dd998cdSBen Walker ;; 317830912e2SBen Walker --enable-tsan) 318577df16aSPawel Wodkowski CONFIG[TSAN]=y 319830912e2SBen Walker ;; 320830912e2SBen Walker --disable-tsan) 321577df16aSPawel Wodkowski CONFIG[TSAN]=n 322830912e2SBen Walker ;; 3239dd998cdSBen Walker --enable-coverage) 324577df16aSPawel Wodkowski CONFIG[COVERAGE]=y 3259dd998cdSBen Walker ;; 3269dd998cdSBen Walker --disable-coverage) 327577df16aSPawel Wodkowski CONFIG[COVERAGE]=n 3289dd998cdSBen Walker ;; 329995d60f4SBen Walker --enable-pgo-capture) 330995d60f4SBen Walker CONFIG[PGO_CAPTURE]=y 331995d60f4SBen Walker ;; 332995d60f4SBen Walker --disable-pgo-capture) 333995d60f4SBen Walker CONFIG[PGO_CAPTURE]=n 334995d60f4SBen Walker ;; 335995d60f4SBen Walker --enable-pgo-use) 336995d60f4SBen Walker CONFIG[PGO_USE]=y 337995d60f4SBen Walker ;; 338995d60f4SBen Walker --disable-pgo-use) 339995d60f4SBen Walker CONFIG[PGO_USE]=n 340995d60f4SBen Walker ;; 3419022a59eSDaniel Verkamp --enable-tests) 342577df16aSPawel Wodkowski CONFIG[TESTS]=y 3439022a59eSDaniel Verkamp ;; 3449022a59eSDaniel Verkamp --disable-tests) 345577df16aSPawel Wodkowski CONFIG[TESTS]=n 3469022a59eSDaniel Verkamp ;; 3479fcb1cb0STomasz Zawadzki --enable-unit-tests) 3489fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=y 3499fcb1cb0STomasz Zawadzki ;; 3509fcb1cb0STomasz Zawadzki --disable-unit-tests) 3519fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=n 3529fcb1cb0STomasz Zawadzki ;; 3539b2c6452SJacek Kalwas --enable-examples) 3549b2c6452SJacek Kalwas CONFIG[EXAMPLES]=y 3559b2c6452SJacek Kalwas ;; 3569b2c6452SJacek Kalwas --disable-examples) 3579b2c6452SJacek Kalwas CONFIG[EXAMPLES]=n 3589b2c6452SJacek Kalwas ;; 359119158cdSRajarshi Chowdhury --enable-apps) 360119158cdSRajarshi Chowdhury CONFIG[APPS]=y 361119158cdSRajarshi Chowdhury ;; 362119158cdSRajarshi Chowdhury --disable-apps) 363119158cdSRajarshi Chowdhury CONFIG[APPS]=N 364119158cdSRajarshi Chowdhury ;; 3659dd998cdSBen Walker --enable-werror) 366577df16aSPawel Wodkowski CONFIG[WERROR]=y 3679dd998cdSBen Walker ;; 3689dd998cdSBen Walker --disable-werror) 369577df16aSPawel Wodkowski CONFIG[WERROR]=n 3709dd998cdSBen Walker ;; 37191e42257SJim Harris --enable-cet) 37291e42257SJim Harris CONFIG[CET]=y 37391e42257SJim Harris ;; 37491e42257SJim Harris --disable-cet) 37591e42257SJim Harris CONFIG[CET]=n 37691e42257SJim Harris ;; 3777232c450SMichal Berger --with-dpdk) 3787b04eb72SYuriy Umanets # Can we use pkg-config? 3797b04eb72SYuriy Umanets if command -v "pkg-config" > /dev/null 2>&1 && pkg-config --exists libdpdk; then 3807b04eb72SYuriy Umanets dpdk_libdir=$(pkg-config --variable=libdir libdpdk) 3817b04eb72SYuriy Umanets dpdk_libdir=$(readlink -f $dpdk_libdir) 3827b04eb72SYuriy Umanets dpdk_incdir=$(pkg-config --variable=includedir libdpdk) 3837b04eb72SYuriy Umanets echo "Using DPDK lib dir $dpdk_libdir" 3847b04eb72SYuriy Umanets CONFIG[DPDK_LIB_DIR]=$dpdk_libdir 3857b04eb72SYuriy Umanets CONFIG[DPDK_INC_DIR]=$dpdk_incdir 3867232c450SMichal Berger CONFIG[DPDK_PKG_CONFIG]=y 3877232c450SMichal Berger CFLAGS="${CFLAGS:+$CFLAGS }$(pkg-config --cflags libdpdk)" 388f1980244SYuriy Umanets check_IPSec_mb "pkg-config" "$dpdk_libdir" "$dpdk_incdir" 3897232c450SMichal Berger else 3907232c450SMichal Berger echo "libdpdk.pc not found, aborting" 3917232c450SMichal Berger exit 1 3927232c450SMichal Berger fi 3937232c450SMichal Berger ;; 39406cc8045SBen Walker --with-dpdk=*) 39506cc8045SBen Walker check_dir "$i" 3967b04eb72SYuriy Umanets dpdk_dir=$(readlink -f ${i#*=}) 3977b04eb72SYuriy Umanets dpdk_libdir=$(find_dpdk_arch_libdir $dpdk_dir) 3987b04eb72SYuriy Umanets dpdk_incdir="$dpdk_dir/include" 3997b04eb72SYuriy Umanets 4007b04eb72SYuriy Umanets # Can we use pkg-config? 401f13ec525SKarol Latecki if command -v "pkg-config" > /dev/null 2>&1 && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --exists libdpdk; then 4027b04eb72SYuriy Umanets echo "Using $dpdk_libdir/pkgconfig for additional libs..." 4031e6db5fbSTomasz Zawadzki sysroot_dir=$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=pc_sysrootdir libdpdk) 404e9438453SJacek Kalwas dpdk_libdir=$(PKG_CONFIG_SYSROOT_DIR='' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=libdir libdpdk) 4051e6db5fbSTomasz Zawadzki dpdk_libdir=$(readlink -f "${sysroot_dir}$dpdk_libdir") 4067b04eb72SYuriy Umanets if ! echo $dpdk_libdir | grep $dpdk_dir > /dev/null 2>&1; then 4077b04eb72SYuriy Umanets echo "ERROR: pkg-config reported DPDK libdir $dpdk_libdir is out of the directory specified with --with-dpdk=" 4087b04eb72SYuriy Umanets echo "ERROR: do you have another DPDK installed in the system?" 4097b04eb72SYuriy Umanets exit 1 4107b04eb72SYuriy Umanets fi 411f13ec525SKarol Latecki CFLAGS="${CFLAGS:+$CFLAGS }$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --cflags libdpdk)" 4121e6db5fbSTomasz Zawadzki dpdk_incdir="${sysroot_dir}$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=includedir libdpdk)" 413f1980244SYuriy Umanets check_IPSec_mb "pkg-config" "$dpdk_libdir" "$dpdk_incdir" 4143e3fbf91SYuriy Umanets else 4153e3fbf91SYuriy Umanets echo "Using $dpdk_incdir/rte_build_config.h for additional libs..." 4163e3fbf91SYuriy Umanets 417f1980244SYuriy Umanets check_IPSec_mb "build-config" "$dpdk_libdir" "$dpdk_incdir" 4187b04eb72SYuriy Umanets fi 4197b04eb72SYuriy Umanets echo "DPDK libraries: $dpdk_libdir" 4207b04eb72SYuriy Umanets echo "DPDK includes: $dpdk_incdir" 4217b04eb72SYuriy Umanets CONFIG[DPDK_DIR]=$dpdk_dir 4227b04eb72SYuriy Umanets CONFIG[DPDK_LIB_DIR]="$dpdk_libdir" 4237b04eb72SYuriy Umanets CONFIG[DPDK_INC_DIR]="$dpdk_incdir" 4247b04eb72SYuriy Umanets CONFIG[DPDK_PKG_CONFIG]=n 42506cc8045SBen Walker ;; 42606cc8045SBen Walker --without-dpdk) 42706cc8045SBen Walker CONFIG[DPDK_DIR]= 42806cc8045SBen Walker ;; 4299854c138SNick Connolly --with-wpdk=*) 4309854c138SNick Connolly check_dir "$i" 4319854c138SNick Connolly CONFIG[WPDK_DIR]=$(readlink -f ${i#*=}) 4329854c138SNick Connolly ;; 4332bc71094SMichal Berger --without-wpdk) 4342bc71094SMichal Berger CONFIG[WPDK_DIR]= 4352bc71094SMichal Berger ;; 4369dd998cdSBen Walker --with-env=*) 437577df16aSPawel Wodkowski CONFIG[ENV]="${i#*=}" 4389dd998cdSBen Walker ;; 439ed2b53f3SYifan Bian --with-ublk) 440ed2b53f3SYifan Bian CONFIG[UBLK]=y 441ed2b53f3SYifan Bian ;; 442ed2b53f3SYifan Bian --without-ublk) 443ed2b53f3SYifan Bian CONFIG[UBLK]=n 444ed2b53f3SYifan Bian ;; 4459dd998cdSBen Walker --with-rbd) 446577df16aSPawel Wodkowski CONFIG[RBD]=y 4479dd998cdSBen Walker ;; 4489dd998cdSBen Walker --without-rbd) 449577df16aSPawel Wodkowski CONFIG[RBD]=n 4509dd998cdSBen Walker ;; 451daee62a0SAlexey Marchuk --with-rdma=*) 452daee62a0SAlexey Marchuk CONFIG[RDMA]=y 453daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]=${i#*=} 454daee62a0SAlexey Marchuk ;; 4559dd998cdSBen Walker --with-rdma) 456577df16aSPawel Wodkowski CONFIG[RDMA]=y 457daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]="verbs" 4589dd998cdSBen Walker ;; 4599dd998cdSBen Walker --without-rdma) 460577df16aSPawel Wodkowski CONFIG[RDMA]=n 4619dd998cdSBen Walker ;; 462ed56a3d4SAnil Veerabhadrappa --with-fc=*) 463ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 464ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]=$(readlink -f ${i#*=}) 465ed56a3d4SAnil Veerabhadrappa ;; 466ed56a3d4SAnil Veerabhadrappa --with-fc) 467ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 468ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 469ed56a3d4SAnil Veerabhadrappa ;; 470ed56a3d4SAnil Veerabhadrappa --without-fc) 471ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=n 472ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 473ed56a3d4SAnil Veerabhadrappa ;; 4742e283fcbS0xe0f --with-daos) 4752e283fcbS0xe0f CONFIG[DAOS]=y 476044bb175SDenis Barakthanov CONFIG[DAOS_DIR]="" 477044bb175SDenis Barakthanov ;; 478044bb175SDenis Barakthanov --with-daos=*) 479044bb175SDenis Barakthanov CONFIG[DAOS]=y 480044bb175SDenis Barakthanov check_dir "$i" 481044bb175SDenis Barakthanov CONFIG[DAOS_DIR]=$(readlink -f ${i#*=}) 4822e283fcbS0xe0f ;; 4832e283fcbS0xe0f --without-daos) 4842e283fcbS0xe0f CONFIG[DAOS]=n 4852e283fcbS0xe0f ;; 4860923734cSLance Hartmann --with-shared) 487577df16aSPawel Wodkowski CONFIG[SHARED]=y 4880923734cSLance Hartmann ;; 4890923734cSLance Hartmann --without-shared) 490577df16aSPawel Wodkowski CONFIG[SHARED]=n 4910923734cSLance Hartmann ;; 4922af15344SJim Harris --with-iscsi-initiator) 493577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=y 4942af15344SJim Harris ;; 4952af15344SJim Harris --without-iscsi-initiator) 496577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=n 4972af15344SJim Harris ;; 4986118b853SDaniel Verkamp --with-crypto) 499577df16aSPawel Wodkowski CONFIG[CRYPTO]=y 5006118b853SDaniel Verkamp ;; 5016118b853SDaniel Verkamp --without-crypto) 502577df16aSPawel Wodkowski CONFIG[CRYPTO]=n 5036118b853SDaniel Verkamp ;; 50435260f2bSDaniel Verkamp --with-vhost) 505577df16aSPawel Wodkowski CONFIG[VHOST]=y 50635260f2bSDaniel Verkamp ;; 50735260f2bSDaniel Verkamp --without-vhost) 508577df16aSPawel Wodkowski CONFIG[VHOST]=n 50935260f2bSDaniel Verkamp ;; 5107dee96ceSDariusz Stojaczyk --with-virtio) 511577df16aSPawel Wodkowski CONFIG[VIRTIO]=y 5127dee96ceSDariusz Stojaczyk ;; 5137dee96ceSDariusz Stojaczyk --without-virtio) 514577df16aSPawel Wodkowski CONFIG[VIRTIO]=n 5157dee96ceSDariusz Stojaczyk ;; 516b30d57cdSChangpeng Liu --with-vfio-user) 517b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=y 518d0b2448bSChangpeng Liu CONFIG[VFIO_USER_DIR]="" 519d0b2448bSChangpeng Liu ;; 520d0b2448bSChangpeng Liu --with-vfio-user=*) 521d0b2448bSChangpeng Liu CONFIG[VFIO_USER]=y 522d0b2448bSChangpeng Liu check_dir "$i" 523d0b2448bSChangpeng Liu CONFIG[VFIO_USER_DIR]=$(readlink -f ${i#*=}) 524b30d57cdSChangpeng Liu ;; 525b30d57cdSChangpeng Liu --without-vfio-user) 526b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=n 527b30d57cdSChangpeng Liu ;; 52819e2dc38Spaul luse --with-vbdev-compress) 52919e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=y 53097022803SJim Harris ;; 53119e2dc38Spaul luse --without-vbdev-compress) 53219e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=n 53397022803SJim Harris ;; 534976f8b09Spaul luse --with-dpdk-compressdev) 535976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=y 536976f8b09Spaul luse ;; 537976f8b09Spaul luse --without-dpdk-compressdev) 538976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=n 539976f8b09Spaul luse ;; 5406f338d4bSKrishna Kanth Reddy --with-xnvme) 5416f338d4bSKrishna Kanth Reddy CONFIG[XNVME]=y 5426f338d4bSKrishna Kanth Reddy ;; 5436f338d4bSKrishna Kanth Reddy --without-xnvme) 5446f338d4bSKrishna Kanth Reddy CONFIG[XNVME]=n 5456f338d4bSKrishna Kanth Reddy ;; 546c3329b52SMichal Berger --with-fio) ;& 5479dd998cdSBen Walker --with-fio=*) 548c3329b52SMichal Berger if [[ ${i#*=} != "$i" ]]; then 54911a5716dSMichal Berger CONFIG[FIO_SOURCE_DIR]=${i#*=} 550c3329b52SMichal Berger fi 551c3329b52SMichal Berger check_dir "--with-fio=${CONFIG[FIO_SOURCE_DIR]}" 55211a5716dSMichal Berger CONFIG[FIO_SOURCE_DIR]=$(readlink -f "${CONFIG[FIO_SOURCE_DIR]}") 553577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=y 5549dd998cdSBen Walker ;; 5559dd998cdSBen Walker --without-fio) 556577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=n 5579dd998cdSBen Walker ;; 5585712088aSRoman Sudarikov --with-vtune=*) 5591723a800SGangCao check_dir "$i" 560577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]="${i#*=}" 561577df16aSPawel Wodkowski CONFIG[VTUNE]=y 5625712088aSRoman Sudarikov ;; 5635712088aSRoman Sudarikov --without-vtune) 564577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]= 565577df16aSPawel Wodkowski CONFIG[VTUNE]=n 5665712088aSRoman Sudarikov ;; 56798d60de6SPiotr Pelplinski --with-ocf) 56898d60de6SPiotr Pelplinski CONFIG[OCF]=y 569985d6468SKamil Godzwon CONFIG[OCF_PATH]=$(readlink -f "$rootdir/ocf") 57098d60de6SPiotr Pelplinski ;; 571d1fee489SVitaliy Mysak --with-ocf=*) 572d1fee489SVitaliy Mysak CONFIG[OCF]=y 573d1fee489SVitaliy Mysak CONFIG[OCF_PATH]=$(readlink -f ${i#*=}) 574d1fee489SVitaliy Mysak ;; 575d1fee489SVitaliy Mysak --without-ocf) 576d1fee489SVitaliy Mysak CONFIG[OCF]=n 577d1fee489SVitaliy Mysak CONFIG[OCF_PATH]= 578d1fee489SVitaliy Mysak ;; 5798165bf71SBen Walker --with-uring=*) 5808165bf71SBen Walker CONFIG[URING]=y 5818165bf71SBen Walker CONFIG[URING_PATH]=$(readlink -f ${i#*=}) 5828165bf71SBen Walker ;; 5838165bf71SBen Walker --with-uring) 5848165bf71SBen Walker CONFIG[URING]=y 585958d196cSIndraneel M CONFIG[URING_ZNS]=y 5868165bf71SBen Walker CONFIG[URING_PATH]= 5878165bf71SBen Walker ;; 5888165bf71SBen Walker --without-uring) 5898165bf71SBen Walker CONFIG[URING]=n 5908165bf71SBen Walker CONFIG[URING_PATH]= 5918165bf71SBen Walker ;; 592958d196cSIndraneel M --without-uring-zns) 593958d196cSIndraneel M CONFIG[URING_ZNS]=n 5948b840195SIndraneel M ;; 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 ;; 61183a4b155SArtur Paszkiewicz --with-raid5f) 61283a4b155SArtur Paszkiewicz CONFIG[RAID5F]=y 61373763d40SArtur Paszkiewicz ;; 61483a4b155SArtur Paszkiewicz --without-raid5f) 61583a4b155SArtur Paszkiewicz CONFIG[RAID5F]=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 ;; 6492796687dSParameswaran Krishnamurthy --with-avahi) 6502796687dSParameswaran Krishnamurthy CONFIG[AVAHI]=y 6512796687dSParameswaran Krishnamurthy ;; 6522796687dSParameswaran Krishnamurthy --without-avahi) 6532796687dSParameswaran Krishnamurthy CONFIG[AVAHI]=n 6542796687dSParameswaran Krishnamurthy ;; 655*8247bd40SMarcin Spiewak --max-lcores='') 656*8247bd40SMarcin Spiewak echo "Must specify max number of lcores for --max-lcores" 657*8247bd40SMarcin Spiewak usage 658*8247bd40SMarcin Spiewak exit 1 659*8247bd40SMarcin Spiewak ;; 660*8247bd40SMarcin Spiewak --max-lcores=*) 661*8247bd40SMarcin Spiewak CONFIG[MAX_LCORES]="${i#*=}" 662*8247bd40SMarcin Spiewak ;; 6639dd998cdSBen Walker --) 6649dd998cdSBen Walker break 6659dd998cdSBen Walker ;; 6669dd998cdSBen Walker *) 6679dd998cdSBen Walker echo "Unrecognized option $i" 6689dd998cdSBen Walker usage 6699dd998cdSBen Walker exit 1 6705ccabc8fSMichal Berger ;; 6719dd998cdSBen Walker esac 6729dd998cdSBen Walkerdone 6739dd998cdSBen Walker 674131c9aadSAlexey Marchukif [[ $arch == x86_64* ]]; then 67510e1c615SFélix Piédallu BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS "-march=native") 676131c9aadSAlexey Marchukelse 67710e1c615SFélix Piédallu BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS) 678131c9aadSAlexey Marchukfi 6796c23a6f4SMichal BergerBUILD_CMD+=(-I/usr/local/include -L/usr/local/lib) 68073439e6fSBen Walker 681b30d57cdSChangpeng Liuif [[ "${CONFIG[VFIO_USER]}" = "y" ]]; then 682421368c0SGreg Inozemtsev if ! echo -e '#include <json-c/json.h>' \ 683421368c0SGreg Inozemtsev | "${BUILD_CMD[@]}" -E - 2> /dev/null; then 6843b673b84SChangpeng Liu echo "ERROR: --with-vfio-user requires json-c-devel" 6853b673b84SChangpeng Liu echo "Please install then re-run this script" 6863b673b84SChangpeng Liu exit 1 6873b673b84SChangpeng Liu fi 688421368c0SGreg Inozemtsev if ! echo -e '#include <cmocka.h>' \ 689421368c0SGreg Inozemtsev | "${BUILD_CMD[@]}" -E - 2> /dev/null; then 6903b673b84SChangpeng Liu echo "ERROR: --with-vfio-user requires libcmocka-devel" 6913b673b84SChangpeng Liu echo "Please install then re-run this script" 6923b673b84SChangpeng Liu exit 1 693b30d57cdSChangpeng Liu fi 694b30d57cdSChangpeng Liufi 695b30d57cdSChangpeng Liu 696e58e9fbdSpaul luse# IDXD uses Intel specific instructions. 697e58e9fbdSpaul luseif [[ "${CONFIG[IDXD]}" = "y" ]]; then 6982755fbdfSpaul luse if [ $(uname -s) == "FreeBSD" ]; then 6992755fbdfSpaul luse intel="hw.model: Intel" 7002755fbdfSpaul luse cpu_vendor=$(sysctl -a | grep hw.model | cut -c 1-15) 7012755fbdfSpaul luse else 702e58e9fbdSpaul luse intel="GenuineIntel" 703e58e9fbdSpaul luse cpu_vendor=$(grep -i 'vendor' /proc/cpuinfo --max-count=1) 7042755fbdfSpaul luse fi 705e58e9fbdSpaul luse if [[ "$cpu_vendor" != *"$intel"* ]]; then 706ff238359SJosh Soref echo "ERROR: IDXD cannot be used due to CPU incompatibility." 707e58e9fbdSpaul luse exit 1 708e58e9fbdSpaul luse fi 7092ed914f8SZiye Yang if [ -e /usr/include/accel-config/libaccel_config.h ]; then 7102ed914f8SZiye Yang CONFIG[IDXD_KERNEL]=y 7112ed914f8SZiye Yang fi 7122ed914f8SZiye Yang 713e58e9fbdSpaul lusefi 714e58e9fbdSpaul luse 715577df16aSPawel Wodkowskiif [ -z "${CONFIG[ENV]}" ]; then 716577df16aSPawel Wodkowski CONFIG[ENV]=$rootdir/lib/env_dpdk 717577df16aSPawel Wodkowski echo "Using default SPDK env in ${CONFIG[ENV]}" 7187232c450SMichal Berger if [[ -z "${CONFIG[DPDK_DIR]}" && "${CONFIG[DPDK_PKG_CONFIG]}" == n ]]; then 71938e26cf5STomasz Zawadzki if [ ! -f "$rootdir"/dpdk/config/meson.build ]; then 720d199eb29SDaniel Verkamp echo "DPDK not found; please specify --with-dpdk=<path> or run:" 721d199eb29SDaniel Verkamp echo 722d199eb29SDaniel Verkamp echo " git submodule update --init" 723d199eb29SDaniel Verkamp exit 1 724577df16aSPawel Wodkowski else 725577df16aSPawel Wodkowski CONFIG[DPDK_DIR]="${rootdir}/dpdk/build" 726f1980244SYuriy Umanets # Default ipsec libs 72719518dfbSAleksey Marchuk if [[ "${CONFIG[CRYPTO]}" = "y" ]] && [[ $arch = x86_64* ]]; then 728f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 729f1980244SYuriy Umanets CONFIG[IPSEC_MB_DIR]="${rootdir}/intel-ipsec-mb/lib" 730f1980244SYuriy Umanets fi 731577df16aSPawel Wodkowski echo "Using default DPDK in ${CONFIG[DPDK_DIR]}" 732d199eb29SDaniel Verkamp fi 7339dd998cdSBen Walker fi 7347d2a2f52SBen Walkerelse 7357232c450SMichal Berger if [[ -n "${CONFIG[DPDK_DIR]}" || "${CONFIG[DPDK_PKG_CONFIG]}" == y ]]; then 73606cc8045SBen Walker echo "--with-env and --with-dpdk are mutually exclusive." 73706cc8045SBen Walker exit 1 73806cc8045SBen Walker fi 73906cc8045SBen Walker 740577df16aSPawel Wodkowski if [ "${CONFIG[VHOST]}" = "y" ]; then 7417d2a2f52SBen Walker echo "Vhost is only supported when using the default DPDK environment. Disabling it." 7427d2a2f52SBen Walker fi 7437d2a2f52SBen Walker # Always disable vhost, but only print the error message if the user explicitly turned it on. 744577df16aSPawel Wodkowski CONFIG[VHOST]="n" 745577df16aSPawel Wodkowski if [ "${CONFIG[VIRTIO]}" = "y" ]; then 7467d2a2f52SBen Walker echo "Virtio is only supported when using the default DPDK environment. Disabling it." 7477d2a2f52SBen Walker fi 7487d2a2f52SBen Walker # Always disable virtio, but only print the error message if the user explicitly turned it on. 749577df16aSPawel Wodkowski CONFIG[VIRTIO]="n" 7509dd998cdSBen Walkerfi 7519dd998cdSBen Walker 7527232c450SMichal Bergerif [[ "${CONFIG[DPDK_PKG_CONFIG]}" == y ]]; then 7537232c450SMichal Berger if [[ "${CONFIG[SHARED]}" == n ]]; then 7547232c450SMichal Berger # dpdk-devel doesn't provide static libs 7557232c450SMichal Berger echo "Build against packaged DPDK requested, enabling shared libraries" 7567232c450SMichal Berger CONFIG[SHARED]=y 7577232c450SMichal Berger fi 7587232c450SMichal Bergerfi 7597232c450SMichal Berger 7609854c138SNick Connollyif [[ $sys_name == "Windows" ]]; then 7619854c138SNick Connolly if [ -z "${CONFIG[WPDK_DIR]}" ]; then 7629854c138SNick Connolly if [ ! -f "$rootdir"/wpdk/Makefile ]; then 7639854c138SNick Connolly echo "WPDK not found; please specify --with-wpdk=<path>. See https://wpdk.github.io." 7649854c138SNick Connolly exit 1 7659854c138SNick Connolly else 7669854c138SNick Connolly CONFIG[WPDK_DIR]="${rootdir}/wpdk/build" 7679854c138SNick Connolly echo "Using default WPDK in ${CONFIG[WPDK_DIR]}" 7689854c138SNick Connolly fi 7699854c138SNick Connolly fi 7709854c138SNick Connollyelse 7719854c138SNick Connolly if [ -n "${CONFIG[WPDK_DIR]}" ]; then 7729854c138SNick Connolly echo "ERROR: --with-wpdk is only supported for Windows" 7739854c138SNick Connolly exit 1 7749854c138SNick Connolly fi 7759854c138SNick Connollyfi 7769854c138SNick Connolly 777577df16aSPawel Wodkowskiif [ "${CONFIG[VTUNE]}" = "y" ]; then 7786b97cccfSJim Harris echo "WARNING: VTune support is deprecated." 779577df16aSPawel Wodkowski if [ -z "${CONFIG[VTUNE_DIR]}" ]; then 7805712088aSRoman Sudarikov echo "When VTune is enabled, you must specify the VTune directory using --with-vtune=path" 7815712088aSRoman Sudarikov exit 1 7825712088aSRoman Sudarikov fi 7835712088aSRoman Sudarikovfi 7845712088aSRoman Sudarikov 785bb0f78a2SMichal Bergerif [[ "${CONFIG[ASAN]}" = "y" && "${CONFIG[TSAN]}" = "y" ]]; then 786830912e2SBen Walker echo "ERROR: ASAN and TSAN cannot be enabled at the same time." 787830912e2SBen Walker exit 1 788830912e2SBen Walkerfi 789830912e2SBen Walker 790ac5b53a5SJim Harrisif [[ "${CONFIG[FIO_PLUGIN]}" = "y" && "${CONFIG[EXAMPLES]}" = "n" ]]; then 791ac5b53a5SJim Harris echo "ERROR: --with-fio and --disable-examples are mutually exclusive." 792ac5b53a5SJim Harris exit 1 793ac5b53a5SJim Harrisfi 794ac5b53a5SJim Harris 7955a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 7965091cadcSPaul Luse # FreeBSD doesn't support all configurations 797577df16aSPawel Wodkowski if [[ "${CONFIG[COVERAGE]}" == "y" ]]; then 7985091cadcSPaul Luse echo "ERROR: CONFIG_COVERAGE not available on FreeBSD" 7995091cadcSPaul Luse exit 1 8005091cadcSPaul Luse fi 8015091cadcSPaul Lusefi 8025091cadcSPaul Luse 80325ac67f1SJim Harrisif [[ $sys_name == "Linux" ]]; then 80425ac67f1SJim Harris if pkg-config libbsd; then 80525ac67f1SJim Harris CONFIG[HAVE_LIBBSD]=y 80625ac67f1SJim Harris fi 80725ac67f1SJim Harrisfi 80825ac67f1SJim Harris 809544a8fe5SJim Harrisif pkg-config libarchive; then 810544a8fe5SJim Harris CONFIG[HAVE_LIBARCHIVE]=y 811544a8fe5SJim Harrisfi 812544a8fe5SJim Harris 8132a0c2a2dSNick Connollyif [[ $sys_name != "Linux" ]]; then 81427b920a2SDarek Stojaczyk if [[ "${CONFIG[VHOST]}" == "y" ]]; then 815873c8748STomasz Kulasek echo "Vhost is only supported on Linux." 816873c8748STomasz Kulasek exit 1 81727b920a2SDarek Stojaczyk fi 81827b920a2SDarek Stojaczyk if [[ "${CONFIG[VIRTIO]}" == "y" ]]; then 819873c8748STomasz Kulasek echo "Virtio is only supported on Linux." 820873c8748STomasz Kulasek exit 1 82127b920a2SDarek Stojaczyk fi 82227b920a2SDarek Stojaczykfi 82327b920a2SDarek Stojaczyk 824577df16aSPawel Wodkowskiif [ "${CONFIG[RDMA]}" = "y" ]; then 825daee62a0SAlexey Marchuk if [[ ! "${CONFIG[RDMA_PROV]}" == "verbs" ]] && [[ ! "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]]; then 826daee62a0SAlexey Marchuk echo "Invalid RDMA provider specified, must be \"verbs\" or \"mlx5_dv\"" 827daee62a0SAlexey Marchuk exit 1 828daee62a0SAlexey Marchuk fi 829daee62a0SAlexey Marchuk 830eed0c6beSDarek Stojaczyk if ! echo -e '#include <infiniband/verbs.h>\n#include <rdma/rdma_verbs.h>\n' \ 831eed0c6beSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 832bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -libverbs -lrdmacm - 2> /dev/null; then 833bb0f78a2SMichal Berger echo "--with-rdma requires libverbs and librdmacm." 834bb0f78a2SMichal Berger echo "Please install then re-run this script." 835eed0c6beSDarek Stojaczyk exit 1 836eed0c6beSDarek Stojaczyk fi 837eed0c6beSDarek Stojaczyk 838eed0c6beSDarek Stojaczyk if echo -e '#include <infiniband/verbs.h>\n' \ 839eed0c6beSDarek Stojaczyk 'int main(void) { return !!IBV_WR_SEND_WITH_INV; }\n' \ 840bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 841577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="y" 8427671073bSSeth Howell else 843577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="n" 84417a819f8SJim Harris echo " 8457671073bSSeth Howell******************************************************************************* 8467671073bSSeth HowellWARNING: The Infiniband Verbs opcode Send With Invalidate is either not 8477671073bSSeth Howellsupported or is not functional with the current version of libibverbs installed 8487671073bSSeth Howellon this system. Please upgrade to at least version 1.1. 8497671073bSSeth Howell 8507671073bSSeth HowellBeginning with Linux kernel 4.14, the kernel NVMe-oF initiator leverages Send 8517671073bSSeth HowellWith Invalidate RDMA operations to improve performance. Failing to use the 8527671073bSSeth HowellSend With Invalidate operation on the NVMe-oF target side results in full 8537671073bSSeth Howellfunctionality, but greatly reduced performance. The SPDK NVMe-oF target will 8547671073bSSeth Howellbe unable to leverage that operation using the currently installed version 8557671073bSSeth Howellof libibverbs, so Linux kernel NVMe-oF initiators based on kernels greater 8567671073bSSeth Howellthan or equal to 4.14 will see significantly reduced performance. 85717a819f8SJim Harris*******************************************************************************" 8587671073bSSeth Howell fi 85994966468SAlexey Marchuk 86094966468SAlexey Marchuk if echo -e '#include <rdma/rdma_cma.h>\n' \ 86194966468SAlexey Marchuk 'int main(void) { return !!RDMA_OPTION_ID_ACK_TIMEOUT; }\n' \ 862bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 86394966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="y" 86494966468SAlexey Marchuk else 86594966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="n" 86694966468SAlexey Marchuk echo "RDMA_OPTION_ID_ACK_TIMEOUT is not supported" 86794966468SAlexey Marchuk fi 86894966468SAlexey Marchuk 8697706450fSMichael Haeuptle if echo -e '#include <rdma/rdma_cma.h>\n' \ 8707706450fSMichael Haeuptle 'int main(void) { return !!RDMA_OPTION_ID_TOS; }\n' \ 8717706450fSMichael Haeuptle | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 8727706450fSMichael Haeuptle CONFIG[RDMA_SET_TOS]="y" 8737706450fSMichael Haeuptle else 8747706450fSMichael Haeuptle CONFIG[RDMA_SET_TOS]="n" 8757706450fSMichael Haeuptle echo "RDMA_OPTION_ID_TOS is not supported" 8767706450fSMichael Haeuptle fi 8777706450fSMichael Haeuptle 878daee62a0SAlexey Marchuk if [ "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]; then 879a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD=" 880a1dfa7ecSAlexey Marchuk #include <infiniband/mlx5dv.h>\n 881a1dfa7ecSAlexey Marchuk #include <rdma/rdma_cma.h>\n 882a1dfa7ecSAlexey Marchuk int main(void) { return rdma_establish(NULL) ||\n 883a1dfa7ecSAlexey Marchuk !!IBV_QP_INIT_ATTR_SEND_OPS_FLAGS || !!MLX5_OPCODE_RDMA_WRITE" 884a1dfa7ecSAlexey Marchuk if [ "${CONFIG[CRYPTO]}" = "y" ]; then 885a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD+="|| !!MLX5DV_CRYPTO_ENGINES_CAP_AES_XTS_SINGLE_BLOCK" 886a1dfa7ecSAlexey Marchuk fi 887a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD+=";}" 888a1dfa7ecSAlexey Marchuk if ! echo -e $MLX5_DV_BUILD_BUILD_CMD | "${BUILD_CMD[@]}" -lmlx5 -I${rootdir}/include -c -; then 889daee62a0SAlexey Marchuk echo "mlx5_dv provider is not supported" 890daee62a0SAlexey Marchuk exit 1 891daee62a0SAlexey Marchuk fi 892daee62a0SAlexey Marchuk fi 893daee62a0SAlexey Marchuk 894bb0f78a2SMichal Berger echo "Using '${CONFIG[RDMA_PROV]}' RDMA provider" 8957671073bSSeth Howellfi 8967671073bSSeth Howell 897ed56a3d4SAnil Veerabhadrappaif [[ "${CONFIG[FC]}" = "y" ]]; then 898ed56a3d4SAnil Veerabhadrappa if [[ -n "${CONFIG[FC_PATH]}" ]]; then 899c9b4654bSTomasz Zawadzki check_dir "${CONFIG[FC_PATH]}" 900ed56a3d4SAnil Veerabhadrappa fi 901ed56a3d4SAnil Veerabhadrappafi 902ed56a3d4SAnil Veerabhadrappa 9032a6ddeb8SYuriy Umanetsfunction dpdk_version() { 9042a6ddeb8SYuriy Umanets # Check DPDK version to determine if mlx5_pci driver is supported 9052a6ddeb8SYuriy Umanets local dpdk_ver="none" 9062a6ddeb8SYuriy Umanets if [[ "${CONFIG[DPDK_DIR]}" == "$rootdir/dpdk/build" ]]; then 9072a6ddeb8SYuriy Umanets # DPDK_DIR points at our submodule so ./build may not exist yet. Use 9082a6ddeb8SYuriy Umanets # absolute path to lookup the version. 9092a6ddeb8SYuriy Umanets dpdk_ver=$(< "$rootdir/dpdk/VERSION") 9102a6ddeb8SYuriy Umanets elif [[ -f "${CONFIG[DPDK_DIR]}"/../VERSION ]]; then 9112a6ddeb8SYuriy Umanets dpdk_ver=$(< "${CONFIG[DPDK_DIR]}"/../VERSION) 9122a6ddeb8SYuriy Umanets fi 9132a6ddeb8SYuriy Umanets echo $dpdk_ver 9142a6ddeb8SYuriy Umanets} 9152a6ddeb8SYuriy Umanets 9162a6ddeb8SYuriy Umanetsfunction mlx5_build() { 9172a6ddeb8SYuriy Umanets # Check if libmlx5 exists to enable mlx5_pci compress/crypto PMD 9182a6ddeb8SYuriy Umanets if ! echo -e '#include <spdk/stdinc.h>\n' \ 9192a6ddeb8SYuriy Umanets '#include <infiniband/mlx5dv.h>\n' \ 9202a6ddeb8SYuriy Umanets '#include <infiniband/verbs.h>\n' \ 9212a6ddeb8SYuriy Umanets 'int main(void) { return 0; }\n' \ 9222a6ddeb8SYuriy Umanets | "${BUILD_CMD[@]}" -lmlx5 -libverbs -I${rootdir}/include -c - 2> /dev/null; then 9232a6ddeb8SYuriy Umanets return 1 9242a6ddeb8SYuriy Umanets fi 9252a6ddeb8SYuriy Umanets return 0 9262a6ddeb8SYuriy Umanets} 9272a6ddeb8SYuriy Umanets 92819e2dc38Spaul luseif [[ "${CONFIG[VBDEV_COMPRESS]}" = "y" ]]; then 92923196506STomasz Zawadzki echo "WARNING: PMDK - Persistent device support with bdev_compress is deprecated." 930c4a3b312SDarek Stojaczyk if ! echo -e '#include <libpmem.h>\nint main(void) { return 0; }\n' \ 931bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lpmem - 2> /dev/null; then 93219e2dc38Spaul luse echo "--with-vbdev-compress requires libpmem." 933bb0f78a2SMichal Berger echo "Please install then re-run this script." 93497022803SJim Harris exit 1 93597022803SJim Harris fi 9362a6ddeb8SYuriy Umanets # Try to enable mlx5 compress 93719e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="y" 9382a6ddeb8SYuriy Umanets 939e71ae467SAlexey Marchuk # Check if libmlx5 exists to enable mlx5_pci compress PMD 9402a6ddeb8SYuriy Umanets if ! mlx5_build; then 941e71ae467SAlexey Marchuk echo "libmlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 94219e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9432a6ddeb8SYuriy Umanets else 944e71ae467SAlexey Marchuk if [[ "${CONFIG[DPDK_PKG_CONFIG]}" = "y" ]]; then 945e71ae467SAlexey Marchuk # Check if librte_compress_mlx5 exists in DPDK package 946e71ae467SAlexey Marchuk if [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_compress_mlx5.so ]; then 947e71ae467SAlexey Marchuk echo "librte_compress_mlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 94819e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 949e71ae467SAlexey Marchuk fi 950e71ae467SAlexey Marchuk else 951e71ae467SAlexey Marchuk # Check DPDK version to determine if mlx5_pci driver is supported 9522a6ddeb8SYuriy Umanets dpdk_ver=$(dpdk_version) 9532a6ddeb8SYuriy Umanets if [[ $dpdk_ver = "none" ]]; then 954c2de56b0SMichal Berger echo "Cannot get DPDK version, so disabling DPDK mlx5_pci compress PMD" 95519e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9562a6ddeb8SYuriy Umanets elif [[ -n $dpdk_ver ]] && lt "$dpdk_ver" 21.02.0; then 9572a6ddeb8SYuriy Umanets # mlx5_pci for compress is supported by DPDK >- 21.02.0 958c2de56b0SMichal Berger echo "DPDK version ${dpdk_ver} doesn't support mlx5_pci compress PMD" 95919e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9602a6ddeb8SYuriy Umanets elif [[ -n ${CONFIG[DPDK_LIB_DIR]} ]] && [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_compress_mlx5.so ]; then 9612a6ddeb8SYuriy Umanets # This is only checked when --with-dpdk or --with-dpdk=* is used 9622a6ddeb8SYuriy Umanets echo "librte_compress_mlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 96319e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9642a6ddeb8SYuriy Umanets fi 9652a6ddeb8SYuriy Umanets fi 9662a6ddeb8SYuriy Umanets fi 9672a6ddeb8SYuriy Umanetsfi 9682a6ddeb8SYuriy Umanets 9692a6ddeb8SYuriy Umanetsif [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 9702a6ddeb8SYuriy Umanets # Try to enable mlx5 crypto 9712a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="y" 9722a6ddeb8SYuriy Umanets 9732a6ddeb8SYuriy Umanets # Check if libmlx5 exists to enable mlx5_pci compress PMD 9742a6ddeb8SYuriy Umanets if ! mlx5_build; then 9752a6ddeb8SYuriy Umanets echo "libmlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 9762a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9772a6ddeb8SYuriy Umanets else 9782a6ddeb8SYuriy Umanets if [[ "${CONFIG[DPDK_PKG_CONFIG]}" = "y" ]]; then 9792a6ddeb8SYuriy Umanets # Check if librte_crypto_mlx5 exists in DPDK package 9802a6ddeb8SYuriy Umanets if [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_crypto_mlx5.so ]; then 9812a6ddeb8SYuriy Umanets echo "librte_crypto_mlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 9822a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9832a6ddeb8SYuriy Umanets fi 9842a6ddeb8SYuriy Umanets else 9852a6ddeb8SYuriy Umanets # Check DPDK version to determine if mlx5_pci driver is supported 9862a6ddeb8SYuriy Umanets dpdk_ver=$(dpdk_version) 9872a6ddeb8SYuriy Umanets if [[ $dpdk_ver = "none" ]]; then 9882a6ddeb8SYuriy Umanets echo "Cannot get DPDK version, so disabling DPDK mlx5_pci crypto PMD" 9892a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9908a2fc789SYuriy Umanets elif [[ -n $dpdk_ver ]] && lt "$dpdk_ver" 21.11.0; then 9918a2fc789SYuriy Umanets # mlx5_pci for crypto is supported by DPDK >- 21.11.0 9922a6ddeb8SYuriy Umanets echo "DPDK version ${dpdk_ver} doesn't support mlx5_pci crypto PMD" 9932a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9942a6ddeb8SYuriy Umanets elif [[ -n ${CONFIG[DPDK_LIB_DIR]} ]] && [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_crypto_mlx5.so ]; then 9952a6ddeb8SYuriy Umanets # This is only checked when --with-dpdk or --with-dpdk=* is used 9962a6ddeb8SYuriy Umanets echo "librte_crypto_mlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 9972a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9982a6ddeb8SYuriy Umanets fi 999e71ae467SAlexey Marchuk fi 1000e269bf4eSAlexey Marchuk fi 100197022803SJim Harrisfi 100297022803SJim Harris 1003805d9942STomasz Kulasekif [[ "${CONFIG[NVME_CUSE]}" = "y" ]]; then 1004805d9942STomasz 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' \ 1005bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lfuse3 -D_FILE_OFFSET_BITS=64 - 2> /dev/null; then 1006bb0f78a2SMichal Berger echo "--with-cuse requires libfuse3." 1007bb0f78a2SMichal Berger echo "Please install then re-run this script." 1008805d9942STomasz Kulasek exit 1 1009805d9942STomasz Kulasek fi 1010805d9942STomasz Kulasekfi 1011805d9942STomasz Kulasek 101255bd0d3aSDarek Stojaczykif [[ "${CONFIG[RBD]}" = "y" ]]; then 101355bd0d3aSDarek Stojaczyk if ! echo -e '#include <rbd/librbd.h>\n#include <rados/librados.h>\n' \ 101455bd0d3aSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 1015bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lrados -lrbd - 2> /dev/null; then 1016bb0f78a2SMichal Berger echo "--with-rbd requires librados and librbd." 1017bb0f78a2SMichal Berger echo "Please install then re-run this script." 101855bd0d3aSDarek Stojaczyk exit 1 101955bd0d3aSDarek Stojaczyk fi 102055bd0d3aSDarek Stojaczykfi 102155bd0d3aSDarek Stojaczyk 1022ed2b53f3SYifan Bianif [[ "${CONFIG[UBLK]}" = "y" ]]; then 1023ed2b53f3SYifan Bian if ! echo -e '#include <linux/ublk_cmd.h>\n#include <liburing.h>\n' \ 1024ed2b53f3SYifan Bian 'int main(void) { return 0; }\n' \ 1025ed2b53f3SYifan Bian | "${BUILD_CMD[@]}" -luring - 2> /dev/null; then 1026ed2b53f3SYifan Bian echo "--with-ublk requires liburing and ublk_drv." 1027ed2b53f3SYifan Bian echo "Please install then re-run this script." 1028ed2b53f3SYifan Bian exit 1 1029ed2b53f3SYifan Bian fi 1030ed2b53f3SYifan Bianfi 1031ed2b53f3SYifan Bian 10325cb18040SDarek Stojaczykif [[ "${CONFIG[ISCSI_INITIATOR]}" = "y" ]]; then 10335cb18040SDarek Stojaczyk # Fedora installs libiscsi to /usr/lib64/iscsi for some reason. 10345cb18040SDarek Stojaczyk if ! echo -e '#include <iscsi/iscsi.h>\n#include <iscsi/scsi-lowlevel.h>\n' \ 10355cb18040SDarek Stojaczyk '#if LIBISCSI_API_VERSION < 20150621\n' \ 10365cb18040SDarek Stojaczyk '#error\n' \ 10375cb18040SDarek Stojaczyk '#endif\n' \ 10385cb18040SDarek Stojaczyk 'int main(void) { return 0; }\n' \ 1039bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -L/usr/lib64/iscsi -liscsi - 2> /dev/null; then 1040bb0f78a2SMichal Berger echo "--with-iscsi-initiator requires libiscsi with" 1041bb0f78a2SMichal Berger echo "LIBISCSI_API_VERSION >= 20150621." 1042bb0f78a2SMichal Berger echo "Please install then re-run this script." 10435cb18040SDarek Stojaczyk exit 1 10445cb18040SDarek Stojaczyk fi 10455cb18040SDarek Stojaczykfi 10465cb18040SDarek Stojaczyk 10472e283fcbS0xe0fif [[ "${CONFIG[DAOS]}" = "y" ]]; then 1048044bb175SDenis Barakthanov daos_build_cmd=("${BUILD_CMD[@]}") 1049044bb175SDenis Barakthanov if [[ -n "${CONFIG[DAOS_DIR]}" ]]; then 1050044bb175SDenis Barakthanov daos_build_cmd+=(-I"${CONFIG[DAOS_DIR]}"/include -L"${CONFIG[DAOS_DIR]}"/lib64) 1051044bb175SDenis Barakthanov fi 10522e283fcbS0xe0f if ! echo -e '#include <daos.h>\n#include <daos_fs.h>\n' \ 10532e283fcbS0xe0f 'int main(void) { return 0; }\n' \ 1054044bb175SDenis Barakthanov | "${daos_build_cmd[@]}" -lgurt -ldaos -ldaos_common -ldfs - 2> /dev/null; then 10552e283fcbS0xe0f echo "--with-daos requires libdaos, libdaos_common, libdfs and libgurt" 10562e283fcbS0xe0f echo "Please install then re-run this script." 10572e283fcbS0xe0f exit 1 10582e283fcbS0xe0f fi 10592e283fcbS0xe0ffi 10602e283fcbS0xe0f 10613674c1d3SDarek Stojaczykif [[ "${CONFIG[ASAN]}" = "y" ]]; then 10623674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1063bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=address - 2> /dev/null; then 1064bb0f78a2SMichal Berger echo "--enable-asan requires libasan." 1065bb0f78a2SMichal Berger echo "Please install then re-run this script." 10663674c1d3SDarek Stojaczyk exit 1 10673674c1d3SDarek Stojaczyk fi 10683674c1d3SDarek Stojaczykfi 10693674c1d3SDarek Stojaczyk 10703674c1d3SDarek Stojaczykif [[ "${CONFIG[UBSAN]}" = "y" ]]; then 10713674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1072bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=undefined - 2> /dev/null; then 1073bb0f78a2SMichal Berger echo "--enable-ubsan requires libubsan." 1074bb0f78a2SMichal Berger echo "Please install then re-run this script." 1075bb0f78a2SMichal Berger echo "If installed, please check that the GCC version is at least 6.4" 1076bb0f78a2SMichal Berger echo "and synchronize CC accordingly." 10773674c1d3SDarek Stojaczyk exit 1 10783674c1d3SDarek Stojaczyk fi 10793674c1d3SDarek Stojaczykfi 10803674c1d3SDarek Stojaczyk 10813674c1d3SDarek Stojaczykif [[ "${CONFIG[TSAN]}" = "y" ]]; then 10823674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1083bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=thread - 2> /dev/null; then 1084bb0f78a2SMichal Berger echo "--enable-tsan requires libtsan." 1085bb0f78a2SMichal Berger echo "Please install then re-run this script." 10863674c1d3SDarek Stojaczyk exit 1 10873674c1d3SDarek Stojaczyk fi 10883674c1d3SDarek Stojaczykfi 10893674c1d3SDarek Stojaczyk 109043a3984cSJim Harrisif echo -e '#include <stdlib.h>\nint main(void) { arc4random(); return 0; }\n' \ 109143a3984cSJim Harris | "${BUILD_CMD[@]}" - 2> /dev/null; then 109243a3984cSJim Harris CONFIG[HAVE_ARC4RANDOM]="y" 109343a3984cSJim Harrisfi 109443a3984cSJim Harris 1095634ac768SKrzysztof Karasif echo -e '#include <uuid/uuid.h>\nint main(void) { uuid_generate_sha1(NULL, NULL, NULL, 0); return 0; }\n' \ 1096634ac768SKrzysztof Karas | "${BUILD_CMD[@]}" - -luuid 2> /dev/null; then 1097634ac768SKrzysztof Karas CONFIG[HAVE_UUID_GENERATE_SHA1]="y" 1098634ac768SKrzysztof Karasfi 1099634ac768SKrzysztof Karas 1100d1fee489SVitaliy Mysakif [[ "${CONFIG[OCF]}" = "y" ]]; then 1101d1fee489SVitaliy Mysak # If OCF_PATH is a file, assume it is a library and use it to compile with 1102d1fee489SVitaliy Mysak if [ -f ${CONFIG[OCF_PATH]} ]; then 1103d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=y 1104d1fee489SVitaliy Mysak else 1105d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=n 1106d1fee489SVitaliy Mysak fi 1107d1fee489SVitaliy Mysakfi 1108d1fee489SVitaliy Mysak 1109995d60f4SBen Walkerif [[ "${CONFIG[PGO_CAPTURE]}" = "y" && "${CONFIG[PGO_USE]}" = "y" ]]; then 1110995d60f4SBen Walker echo "ERROR: --enable-pgo-capture and --enable-pgo-use are mutually exclusive." 1111995d60f4SBen Walker exit 1 1112954728e9SBen Walkerelif [[ "${CONFIG[PGO_USE]}" = "y" ]]; then 1113954728e9SBen Walker if [[ "$CC_TYPE" = "clang" ]]; then 1114954728e9SBen Walker # For clang we need to run an extra step on gathered profiling data. 1115954728e9SBen Walker echo "Generating suitable profile data" 1116954728e9SBen Walker llvm-profdata merge -output=build/pgo/default.profdata build/pgo 1117954728e9SBen Walker fi 1118995d60f4SBen Walkerfi 1119995d60f4SBen Walker 112087757389SSimon A. F. Lundif [[ "${CONFIG[URING]}" = "y" || "${CONFIG[XNVME]}" = "y" ]]; then 11218165bf71SBen Walker if [[ -n "${CONFIG[URING_PATH]}" ]]; then 1122c9b4654bSTomasz Zawadzki check_dir "${CONFIG[URING_PATH]}" 11234ccc9ea3SJim Harris elif ! echo -e '#include <liburing.h>\nint main(void) { return 0; }\n' \ 11244ccc9ea3SJim Harris | "${BUILD_CMD[@]}" -luring - 2> /dev/null; then 11254ccc9ea3SJim Harris echo "--with-uring requires liburing." 11264ccc9ea3SJim Harris echo "Please build and install then re-run this script." 11274ccc9ea3SJim Harris exit 1 11288165bf71SBen Walker fi 1129958d196cSIndraneel M # Support for Zoned devices is enabled by default for Uring bdev. Check appropriate support in kernel. 11308b840195SIndraneel M if [[ "${CONFIG[URING_ZNS]}" = "y" ]]; then 11318b840195SIndraneel M if ! echo -e '#include<linux/blkzoned.h>\nint main(void) { return BLK_ZONE_REP_CAPACITY; }\n' \ 11328b840195SIndraneel M | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 1133958d196cSIndraneel M echo "Disabling Zoned NS support in Uring! Requires blkzoned.h from kernel >= linux-5.9." 1134958d196cSIndraneel M CONFIG[URING_ZNS]=n 1135958d196cSIndraneel M fi 11368b840195SIndraneel M fi 11378b840195SIndraneel Mfi 11388b840195SIndraneel M 11397fa15e28SXiaodong Liuif [[ "${CONFIG[FUSE]}" = "y" ]]; then 11407fa15e28SXiaodong Liu if [[ ! -d /usr/include/fuse3 ]] && [[ ! -d /usr/local/include/fuse3 ]]; then 11417fa15e28SXiaodong Liu echo "--with-fuse requires libfuse3." 11427fa15e28SXiaodong Liu echo "Please install then re-run this script." 11437fa15e28SXiaodong Liu exit 1 11447fa15e28SXiaodong Liu fi 11457fa15e28SXiaodong Liufi 11467fa15e28SXiaodong Liu 114791e42257SJim Harrisif [ "${CONFIG[CET]}" = "y" ]; then 1148bb0f78a2SMichal Berger if ! echo -e 'int main(void) { return 0; }\n' | "${BUILD_CMD[@]}" -fcf-protection - 2> /dev/null; then 1149bb0f78a2SMichal Berger echo "--enable-cet requires compiler/linker that supports CET." 1150bb0f78a2SMichal Berger echo "Please install then re-run this script." 115191e42257SJim Harris exit 1 115291e42257SJim Harris fi 115391e42257SJim Harrisfi 115491e42257SJim Harris 1155050565e5SJim Harrisif [[ "${CONFIG[FUZZER]}" = "y" && "$CC_TYPE" != "clang" ]]; then 1156050565e5SJim Harris echo "--with-fuzzer requires setting CC and CXX to clang." 1157050565e5SJim Harris exit 1 1158050565e5SJim Harrisfi 1159050565e5SJim Harris 1160dd2c08d2Spaul luseif [[ $arch == x86_64* ]] || [[ $arch == aarch64* ]]; then 1161dd2c08d2Spaul luse CONFIG[ISAL]=y 1162dd2c08d2Spaul luse # make sure the submodule is initialized 11639d2f6f86SJim Harris if [ ! -f "$rootdir"/isa-l/autogen.sh ]; then 1164dd2c08d2Spaul luse echo "ISA-L is required but was not found, please init the submodule with:" 11659d2f6f86SJim Harris echo " git submodule update --init" 1166dd2c08d2Spaul luse echo "and then re-run this script." 11679d2f6f86SJim Harris exit 1 11689d2f6f86SJim Harris fi 1169dd2c08d2Spaul luse # for x86 only, check the nasm version for ISA-L and IPSEC 1170dd2c08d2Spaul luse if [[ $arch == x86_64* ]]; then 1171dd2c08d2Spaul luse ver=$(nasm -v 2> /dev/null | awk '{print $3}' | awk -Fr '{print $1}') 1172dd2c08d2Spaul luse if lt "$ver" 2.14; then 1173dd2c08d2Spaul luse CONFIG[ISAL]=n 1174dd2c08d2Spaul luse # IPSEC has nasm requirement and DPDK crypto relies on IPSEC 1175dd2c08d2Spaul luse CONFIG[IPSEC_MB]=n 1176dd2c08d2Spaul luse echo "WARNING: ISA-L & DPDK crypto cannot be used as nasm ver must be 2.14 or newer." 1177dd2c08d2Spaul luse fi 1178dd2c08d2Spaul luse fi 1179784b9d48SAlexey Marchuk # check gas version on aarch64 1180784b9d48SAlexey Marchuk if [[ $arch == aarch64* ]]; then 1181784b9d48SAlexey Marchuk ver=$(as --version 2> /dev/null | awk 'NR==1{print $7}') 1182784b9d48SAlexey Marchuk if lt "$ver" 2.24; then 1183784b9d48SAlexey Marchuk # ISA-L, compression & crypto require gas version 2.24 or newer. 1184784b9d48SAlexey Marchuk CONFIG[ISAL]=n 1185784b9d48SAlexey Marchuk echo "Notice: ISA-L, compression & crypto require GAS version 2.24 or newer. Turning off default ISA-L and crypto features." 1186784b9d48SAlexey Marchuk elif lt "$ver" 2.34; then 1187784b9d48SAlexey Marchuk #For gas v2.24~v2.34, sve2 instructions are not supported. To workaround it, sve2 optimization should be disabled 1188784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--disable-sve2") 1189784b9d48SAlexey Marchuk fi 1190784b9d48SAlexey Marchuk fi 1191dd2c08d2Spaul luseelse 1192dd2c08d2Spaul luse # for PPC 1193dd2c08d2Spaul luse CONFIG[ISAL]=n 1194dd2c08d2Spaul luse echo "WARNING: ISA-L cannot be used due to architecture incompatibility." 1195dd2c08d2Spaul lusefi 11969d2f6f86SJim Harris 1197dd2c08d2Spaul luse# now either configure ISA-L or disable unavailable features 1198dd2c08d2Spaul luseif [[ "${CONFIG[ISAL]}" = "y" ]]; then 11999d2f6f86SJim Harris cd $rootdir/isa-l 12009d2f6f86SJim Harris ISAL_LOG=$rootdir/isa-l/spdk-isal.log 12019d2f6f86SJim Harris if [[ -n "${CONFIG[CROSS_PREFIX]}" ]]; then 12029d2f6f86SJim Harris ISAL_OPTS=("--host=${CONFIG[CROSS_PREFIX]}") 12039d2f6f86SJim Harris else 12049d2f6f86SJim Harris ISAL_OPTS=() 12059d2f6f86SJim Harris fi 12069d2f6f86SJim Harris echo -n "Configuring ISA-L (logfile: $ISAL_LOG)..." 12079d2f6f86SJim Harris ./autogen.sh &> $ISAL_LOG 12089d2f6f86SJim Harris ./configure CFLAGS="-fPIC -g -O2" "${ISAL_OPTS[@]}" --enable-shared=no >> $ISAL_LOG 2>&1 12099d2f6f86SJim Harris echo "done." 12109d2f6f86SJim Harris cd $rootdir 1211dd2c08d2Spaul luseelse 1212dd2c08d2Spaul luse echo "Without ISA-L, there is no software support for crypto or compression," 1213dd2c08d2Spaul luse echo "so these features will be disabled." 1214dd2c08d2Spaul luse CONFIG[CRYPTO]=n 121519e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=n 1216976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=n 12179d2f6f86SJim Harrisfi 12189d2f6f86SJim Harris 1219784b9d48SAlexey Marchuk# ISA-L-crypto complements ISA-L functionality, it is only enabled together with ISA-L 1220784b9d48SAlexey Marchukif [[ "${CONFIG[ISAL]}" = "y" ]]; then 1221784b9d48SAlexey Marchuk if [ ! -f "$rootdir"/isa-l-crypto/autogen.sh ]; then 1222784b9d48SAlexey Marchuk echo "ISA-L-crypto is required but was not found, please init the submodule with:" 1223784b9d48SAlexey Marchuk echo " git submodule update --init" 1224784b9d48SAlexey Marchuk echo "and then re-run this script." 1225784b9d48SAlexey Marchuk exit 1 1226784b9d48SAlexey Marchuk fi 1227784b9d48SAlexey Marchuk 1228784b9d48SAlexey Marchuk cd $rootdir/isa-l-crypto 1229784b9d48SAlexey Marchuk ISAL_CRYPTO_LOG=$rootdir/isa-l-crypto/spdk-isal-crypto.log 1230784b9d48SAlexey Marchuk if [[ -n "${CONFIG[CROSS_PREFIX]}" ]]; then 1231784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--host=${CONFIG[CROSS_PREFIX]}") 1232784b9d48SAlexey Marchuk fi 1233784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--enable-shared=no") 1234784b9d48SAlexey Marchuk echo -n "Configuring ISA-L-crypto (logfile: $ISAL_CRYPTO_LOG)..." 1235784b9d48SAlexey Marchuk ./autogen.sh &> $ISAL_CRYPTO_LOG 1236784b9d48SAlexey Marchuk ./configure CFLAGS="-fPIC -g -O2" "${ISAL_CRYPTO_OPTS[@]}" >> $ISAL_CRYPTO_LOG 2>&1 1237784b9d48SAlexey Marchuk echo "done." 1238784b9d48SAlexey Marchuk cd $rootdir 1239784b9d48SAlexey Marchuk CONFIG[ISAL_CRYPTO]=y 1240784b9d48SAlexey Marchukelse 1241784b9d48SAlexey Marchuk CONFIG[ISAL_CRYPTO]=n 1242784b9d48SAlexey Marchukfi 1243784b9d48SAlexey Marchuk 1244509241ceSKonrad Sztyberif [[ "${CONFIG[SMA]}" = "y" ]]; then 1245509241ceSKonrad Sztyber if ! python3 -c 'import grpc; import grpc_tools' 2> /dev/null; then 1246509241ceSKonrad Sztyber echo "--with-sma requires grpcio and grpcio-tools python packages." 1247509241ceSKonrad Sztyber echo "Please install then re-run this script." 1248509241ceSKonrad Sztyber exit 1 1249509241ceSKonrad Sztyber fi 1250509241ceSKonrad Sztyberfi 1251509241ceSKonrad Sztyber 12522796687dSParameswaran Krishnamurthyif [[ "${CONFIG[AVAHI]}" = "y" ]]; then 12532796687dSParameswaran Krishnamurthy if ! echo -e '#include <avahi-client/client.h>\n#include <avahi-common/malloc.h>\n' \ 12542796687dSParameswaran Krishnamurthy 'int main(void) { return 0; }\n' \ 12552796687dSParameswaran Krishnamurthy | "${BUILD_CMD[@]}" -lavahi-client -lavahi-common - 2> /dev/null; then 12562796687dSParameswaran Krishnamurthy echo "--with-avahi requires libavahi-client and libavahi-common." 12572796687dSParameswaran Krishnamurthy echo "Please install then re-run this script." 12582796687dSParameswaran Krishnamurthy exit 1 12592796687dSParameswaran Krishnamurthy fi 12602796687dSParameswaran Krishnamurthyfi 12612796687dSParameswaran Krishnamurthy 1262*8247bd40SMarcin Spiewakif [[ -n ${CONFIG[MAX_LCORES]} ]]; then 1263*8247bd40SMarcin Spiewak if [[ ! ${CONFIG[MAX_LCORES]} =~ ^[1-9][0-9]*$ ]] || ((CONFIG[MAX_LCORES] > 1024)); then 1264*8247bd40SMarcin Spiewak echo "ERROR: Max number of lcores must be a decimal number in range [1..1024] (given: ${CONFIG[MAX_LCORES]})" 1265*8247bd40SMarcin Spiewak exit 1 1266*8247bd40SMarcin Spiewak fi 1267*8247bd40SMarcin Spiewakfi 1268*8247bd40SMarcin Spiewak 1269fcc38949SRui Chang# For ARM Neoverse-N1 platform, debug build needs gcc version newer than 8.4 1270fcc38949SRui Changif [[ "${CONFIG[DEBUG]}" = "y" && $arch = aarch64* && "$CC_TYPE" = "gcc" ]]; then 1271fcc38949SRui Chang GCC_VERSION=$($CC -dumpfullversion) 1272fcc38949SRui Chang PART_NUM=$(grep -i -m 1 "CPU part" /proc/cpuinfo | awk '{print $4}') 1273fcc38949SRui Chang 1274fcc38949SRui Chang if [[ "$(printf '%s\n' "8.4.0" "$GCC_VERSION" | sort -V | head -n1)" != "8.4.0" ]]; then 1275fcc38949SRui Chang if [[ $PART_NUM = 0xd0c ]]; then 1276fcc38949SRui Chang echo "WARNING: For ARM Neoverse-N1 platform, debug build needs GCC version newer than 8.4." 1277fcc38949SRui Chang echo " Will work around this by using armv8.2-a+crypto as target architecture for now." 1278fcc38949SRui Chang CONFIG[ARCH]=armv8.2-a+crypto 1279e8f84531SSunil Shahu elif [[ $PART_NUM = 0x0b2 ]]; then 1280e8f84531SSunil Shahu echo "WARNING: For ARM octeontx2 platform, debug build needs GCC version newer than 8.4." 1281e8f84531SSunil Shahu echo " Will work around this by using armv8.2-a+crypto as target architecture for now." 1282e8f84531SSunil Shahu CONFIG[ARCH]=armv8.2-a+crypto 1283fcc38949SRui Chang fi 1284fcc38949SRui Chang fi 1285fcc38949SRui Changfi 1286fcc38949SRui Chang 128748f70f48SPawel Wodkowski# We are now ready to generate final configuration. But first do sanity 128848f70f48SPawel Wodkowski# check to see if all keys in CONFIG array have its reflection in CONFIG file. 1289bb0f78a2SMichal Bergerif (($(grep -cE "^\s*CONFIG_[[:alnum:]_]+=" "$rootdir/CONFIG") != ${#CONFIG[@]})); then 129048f70f48SPawel Wodkowski echo "" 129148f70f48SPawel Wodkowski echo "BUG: Some configuration options are not present in CONFIG file. Please update this file." 129248f70f48SPawel Wodkowski echo "Missing options in CONFIG (+) file and in current config (-): " 129348f70f48SPawel Wodkowski diff -u --label "CONFIG file" --label "CONFIG[@]" \ 1294f8d6541dSMichal Berger <(sed -r -e '/^[[:space:]]*$/d; /^[[:space:]]*#.*/d; s/(CONFIG_[[:alnum:]_]+)=.*/\1/g' CONFIG | sort) \ 1295bb0f78a2SMichal Berger <(printf "CONFIG_%s\n" "${!CONFIG[@]}" | sort) 129648f70f48SPawel Wodkowski exit 1 129748f70f48SPawel Wodkowskifi 129848f70f48SPawel Wodkowski 129985bc2bbeSPawel Wodkowskiecho -n "Creating mk/config.mk..." 1300e62a3c65SSeth Howellcp -f $rootdir/CONFIG $rootdir/mk/config.mk 130151ab849bSJim HarrisARGS=$(echo "$@" | sed 's/ /\\ /g') 130251ab849bSJim Harrissed -i.bak -r "s#__CONFIGURE_OPTIONS__#${ARGS}#g" $rootdir/mk/config.mk 1303bb0f78a2SMichal Bergerfor key in "${!CONFIG[@]}"; do 1304f8d6541dSMichal Berger sed -i.bak -r "s#[[:space:]]*CONFIG_${key}=.*#CONFIG_${key}\?=${CONFIG[$key]}#g" $rootdir/mk/config.mk 1305577df16aSPawel Wodkowskidone 1306577df16aSPawel Wodkowski# On FreeBSD sed -i 'SUFFIX' - SUFFIX is mandatory. So no way but to delete the backed file. 1307e62a3c65SSeth Howellrm -f $rootdir/mk/config.mk.bak 1308baa6eac0SDarek Stojaczykecho "done." 13099dd998cdSBen Walker 131008ec96ebSDaniel Verkamp# Environment variables 1311baa6eac0SDarek Stojaczykecho -n "Creating mk/cc.flags.mk..." 1312e62a3c65SSeth Howellrm -f $rootdir/mk/cc.flags.mk 1313e62a3c65SSeth Howell[ -n "$CFLAGS" ] && echo "CFLAGS?=$CFLAGS" > $rootdir/mk/cc.flags.mk 1314e62a3c65SSeth Howell[ -n "$CXXFLAGS" ] && echo "CXXFLAGS?=$CXXFLAGS" >> $rootdir/mk/cc.flags.mk 1315e62a3c65SSeth Howell[ -n "$LDFLAGS" ] && echo "LDFLAGS?=$LDFLAGS" >> $rootdir/mk/cc.flags.mk 1316e62a3c65SSeth Howell[ -n "$DESTDIR" ] && echo "DESTDIR?=$DESTDIR" >> $rootdir/mk/cc.flags.mk 13170b56a5b4SJim Harrisecho "done." 131885bc2bbeSPawel Wodkowski 1319db3ebfe6SMichal Berger# Create .sh with build config for easy sourcing|lookup during the tests. 1320db3ebfe6SMichal Bergerfor conf in "${!CONFIG[@]}"; do 1321db3ebfe6SMichal Berger echo "CONFIG_$conf=${CONFIG[$conf]}" 1322db3ebfe6SMichal Bergerdone > "$rootdir/test/common/build_config.sh" 1323db3ebfe6SMichal Berger 13245a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 1325870ce250SPaul Luse echo "Type 'gmake' to build." 1326870ce250SPaul Luseelse 13270b56a5b4SJim Harris echo "Type 'make' to build." 1328870ce250SPaul Lusefi 13299dd998cdSBen Walker 13309dd998cdSBen Walkerexit 0 1331