19dd998cdSBen Walker#!/usr/bin/env bash 2eb53c232Spaul luse# SPDX-License-Identifier: BSD-3-Clause 3eb53c232Spaul luse# Copyright (C) 2017 Intel Corporation 4eb53c232Spaul luse# All rights reserved. 52796687dSParameswaran Krishnamurthy# Copyright (c) 2022 Dell Inc, or its subsidiaries. 6eb53c232Spaul luse# 79dd998cdSBen Walker 89dd998cdSBen Walkerset -e 99dd998cdSBen Walker 1014bbde7bSPawel Wodkowskitrap 'echo -e "\n\nConfiguration failed\n\n" >&2' ERR 1114bbde7bSPawel Wodkowski 12e62a3c65SSeth Howellrootdir=$(readlink -f $(dirname $0)) 1365ed6034SMichal Bergersource "$rootdir/scripts/common.sh" 14e62a3c65SSeth Howell 155ccabc8fSMichal Bergerfunction usage() { 169dd998cdSBen Walker echo "'configure' configures SPDK to compile on supported platforms." 179dd998cdSBen Walker echo "" 189dd998cdSBen Walker echo "Usage: ./configure [OPTION]..." 199dd998cdSBen Walker echo "" 209dd998cdSBen Walker echo "Defaults for the options are specified in brackets." 219dd998cdSBen Walker echo "" 229dd998cdSBen Walker echo "General:" 239dd998cdSBen Walker echo " -h, --help Display this help and exit" 242e7fe8e8SDaniel Verkamp echo "" 252e7fe8e8SDaniel Verkamp echo " --prefix=path Configure installation prefix (default: /usr/local)" 260e6ddfd6SBen Walker echo " --target-arch=arch Target build architecture. Must be a valid GNU arch. Default: native" 272e7fe8e8SDaniel Verkamp echo "" 283def834cSAmelia Blachuciak echo " --cross-prefix=prefix Prefix for cross compilation (default: none)" 293def834cSAmelia Blachuciak echo " example: aarch64-linux-gnu" 30e8863cb7SMichal Berger echo " --libdir=path Configure installation path for the libraries (default: \$prefix/lib)" 3173293d73SMarcin Spiewak echo " --max-lcores=VAL DPDK configuration. VAL defines maximum number of lcores supported" 3273293d73SMarcin Spiewak echo " by EAL, or enables autodetection if set to 'detect'. When 'detect'" 3373293d73SMarcin Spiewak echo " is specified, DPDK will detect number of cores in the system during" 3473293d73SMarcin Spiewak echo " compilation, and will set maximum number of lcores to this value" 359dd998cdSBen Walker echo " --enable-debug Configure for debug builds" 369dd998cdSBen Walker echo " --enable-werror Treat compiler warnings as errors" 379dd998cdSBen Walker echo " --enable-asan Enable address sanitizer" 389dd998cdSBen Walker echo " --enable-ubsan Enable undefined behavior sanitizer" 399dd998cdSBen Walker echo " --enable-coverage Enable code coverage tracking" 406d6d1161SDaniel Verkamp echo " --enable-lto Enable link-time optimization" 41995d60f4SBen Walker echo " --enable-pgo-capture Enable generation of profile guided optimization data" 42995d60f4SBen Walker echo " --enable-pgo-use Use previously captured profile guided optimization data" 4391e42257SJim Harris echo " --enable-cet Enable Intel Control-flow Enforcement Technology (CET)" 449fcb1cb0STomasz Zawadzki echo " --disable-tests Disable building of functional tests" 459fcb1cb0STomasz Zawadzki echo " --disable-unit-tests Disable building of unit tests" 469b2c6452SJacek Kalwas echo " --disable-examples Disable building of examples" 47119158cdSRajarshi Chowdhury echo " --disable-apps Disable building of apps" 489dd998cdSBen Walker echo "" 499dd998cdSBen Walker echo "Specifying Dependencies:" 509dd998cdSBen Walker echo "--with-DEPENDENCY[=path] Use the given dependency. Optionally, provide the" 519dd998cdSBen Walker echo " path." 529dd998cdSBen Walker echo "--without-DEPENDENCY Do not link to the given dependency. This may" 539dd998cdSBen Walker echo " disable features and components." 549dd998cdSBen Walker echo "" 559dd998cdSBen Walker echo "Valid dependencies are listed below." 562bc71094SMichal Berger echo " --with-dpdk[=DIR] Build against a custom dpdk version. By default, the dpdk" 572bc71094SMichal Berger echo " --without-dpdk submodule in spdk tree will be used." 589dd998cdSBen Walker echo " example: /usr/share/dpdk/x86_64-default-linuxapp-gcc" 592bc71094SMichal Berger echo " --with-env=DIR Use an alternate environment implementation instead of DPDK." 6006cc8045SBen Walker echo " Implies --without-dpdk." 612bc71094SMichal Berger echo " --with-idxd Build the IDXD library and accel framework plug-in module." 622bc71094SMichal Berger echo " --without-idxd Disabled while experimental. Only built for x86 when enabled." 63784b9d48SAlexey Marchuk echo " --with-crypto Build isa-l-crypto and vbdev crypto module. No path required." 64784b9d48SAlexey Marchuk echo " --without-crypto Disable isa-l-crypto and vbdev crypto module." 652bc71094SMichal Berger echo " --with-fio[=DIR] Build fio_plugin." 662bc71094SMichal Berger echo " --without-fio default: /usr/src/fio" 676f338d4bSKrishna Kanth Reddy echo " --with-xnvme Build xNVMe bdev module." 686f338d4bSKrishna Kanth Reddy echo " --without-xnvme No path required." 692bc71094SMichal Berger echo " --with-vhost Build vhost target. Enabled by default." 702bc71094SMichal Berger echo " --without-vhost No path required." 712bc71094SMichal Berger echo " --with-virtio Build vhost initiator and virtio-pci bdev modules." 722bc71094SMichal Berger echo " --without-virtio No path required." 73e50ade31SChangpeng Liu echo " --with-vfio-user[=DIR] Build custom vfio-user transport for NVMf target and vfio-user target." 74e50ade31SChangpeng Liu echo " vfio-user initiator is always built-in in Linux." 752f731c63SGangCao echo " example: /usr/src/libvfio-user" 762f731c63SGangCao echo " --without-vfio-user No path required." 7719e2dc38Spaul luse echo " --with-vbdev-compress Build vbdev compression module and dependencies." 7819e2dc38Spaul luse echo " --without-vbdev-compress No path required." 79976f8b09Spaul luse echo " --with-dpdk-compressdev Build accel DPDK compression module and dependencies." 80976f8b09Spaul luse echo " --without-dpdk-compressdev No path required." 812bc71094SMichal Berger echo " --with-rbd Build Ceph RBD bdev module." 822bc71094SMichal Berger echo " --without-rbd No path required." 83ed2b53f3SYifan Bian echo " --with-ublk Build ublk library." 84ed2b53f3SYifan Bian echo " --without-ublk No path required." 852bc71094SMichal Berger echo " --with-rdma[=DIR] Build RDMA transport for NVMf target and initiator." 862bc71094SMichal Berger echo " --without-rdma Accepts optional RDMA provider name. Can be \"verbs\" or \"mlx5_dv\"." 87daee62a0SAlexey Marchuk echo " If no provider specified, \"verbs\" provider is used by default." 882bc71094SMichal Berger echo " --with-fc[=DIR] Build FC transport for NVMf target." 892bc71094SMichal Berger echo " --without-fc If an argument is provided, it is considered a directory containing" 90ed56a3d4SAnil Veerabhadrappa echo " libufc.a and fc_lld.h. Otherwise the regular system paths will" 91ed56a3d4SAnil Veerabhadrappa echo " be searched." 92044bb175SDenis Barakthanov echo " --with-daos[=DIR] Build DAOS bdev module." 932e283fcbS0xe0f echo " --without-daos No path required." 942bc71094SMichal Berger echo " --with-shared Build spdk shared libraries." 952bc71094SMichal Berger echo " --without-shared No path required." 962bc71094SMichal Berger echo " --with-iscsi-initiator Build with iscsi bdev module." 972bc71094SMichal Berger echo " --without-iscsi-initiator No path required." 986b97cccfSJim Harris echo " --with-vtune=DIR Required to profile I/O under Intel VTune Amplifier XE. (Deprecated)" 992bc71094SMichal Berger echo " --without-vtune example: /opt/intel/vtune_amplifier_xe_version" 100*b4d441fdSAmir Haroush echo " --with-ocf[=DIR] Build OCF library and bdev module." 1012bc71094SMichal Berger echo " --without-ocf If argument is directory, interpret it as root of OCF repo" 102d1fee489SVitaliy Mysak echo " If argument is file, interpret it as compiled OCF lib" 10398d60de6SPiotr Pelplinski echo " If no argument is specified, OCF git submodule is used by default" 104d1fee489SVitaliy Mysak echo " example: /usr/src/ocf/" 1052bc71094SMichal Berger echo " --with-uring[=DIR] Build I/O uring bdev or socket module." 1062bc71094SMichal Berger echo " --without-uring If an argument is provided, it is considered a directory containing" 107161c88a0SDarek Stojaczyk echo " liburing.a and io_uring.h. Otherwise the regular system paths will" 108161c88a0SDarek Stojaczyk echo " be searched." 109958d196cSIndraneel M echo " --without-uring-zns Build I/O uring module without ZNS (zoned namespaces) support." 11034192459SBoris Glimcher echo " --with-openssl[=DIR] Build OPENSSL with custom path. Otherwise the regular system paths will" 11134192459SBoris Glimcher echo " be searched." 1122bc71094SMichal Berger echo " --with-fuse Build FUSE components for mounting a blobfs filesystem." 1132bc71094SMichal Berger echo " --without-fuse No path required." 1142bc71094SMichal Berger echo " --with-nvme-cuse Build NVMe driver with support for CUSE-based character devices." 1152bc71094SMichal Berger echo " --without-nvme-cuse No path required." 11683a4b155SArtur Paszkiewicz echo " --with-raid5f Build with bdev_raid module RAID5f support." 11783a4b155SArtur Paszkiewicz echo " --without-raid5f No path required." 1182bc71094SMichal Berger echo " --with-wpdk=DIR Build using WPDK to provide support for Windows (experimental)." 1192bc71094SMichal Berger echo " --without-wpdk The argument must be a directory containing lib and include." 1202bc71094SMichal Berger echo " --with-usdt Build with userspace DTrace probes enabled." 1212bc71094SMichal Berger echo " --without-usdt No path required." 122050565e5SJim Harris echo " --with-fuzzer Build with LLVM fuzzing enabled." 123050565e5SJim Harris echo " Path to clang_rt.fuzzer_no_main library required." 124050565e5SJim Harris echo " Requires setting CC and CXX to clang." 125050565e5SJim Harris echo " (Typically /usr/lib/llvm-VER/lib/clang/VER/lib/linux/libclang_rt.fuzzer_no_main-ARCH.a)" 126509241ceSKonrad Sztyber echo " --with-sma Generate Storage Management Agent's protobuf interface" 127509241ceSKonrad Sztyber echo " --without-sma No path required." 1282796687dSParameswaran Krishnamurthy echo " --with-avahi Build with Avahi mDNS discovery client service enabled in bdev-nvme module." 1292796687dSParameswaran Krishnamurthy echo " --without-avahi No path required." 1309dd998cdSBen Walker echo "" 13108ec96ebSDaniel Verkamp echo "Environment variables:" 13208ec96ebSDaniel Verkamp echo "" 13373439e6fSBen Walker echo "CC C compiler" 13408ec96ebSDaniel Verkamp echo "CFLAGS C compiler flags" 13573439e6fSBen Walker echo "CXX C++ compiler" 13608ec96ebSDaniel Verkamp echo "CXXFLAGS C++ compiler flags" 13773439e6fSBen Walker echo "LD Linker" 13808ec96ebSDaniel Verkamp echo "LDFLAGS Linker flags" 13908ec96ebSDaniel Verkamp echo "DESTDIR Destination for 'make install'" 14008ec96ebSDaniel Verkamp echo "" 1419dd998cdSBen Walker} 1429dd998cdSBen Walker 143577df16aSPawel Wodkowski# Load default values 144ff238359SJosh Soref# Convert config to sourceable configuration file 145e62a3c65SSeth Howellsed -r 's/CONFIG_([[:alnum:]_]+)=(.*)/CONFIG[\1]=\2/g' $rootdir/CONFIG > $rootdir/CONFIG.sh 146577df16aSPawel Wodkowskideclare -A CONFIG 147e62a3c65SSeth Howellsource $rootdir/CONFIG.sh 148e62a3c65SSeth Howellrm $rootdir/CONFIG.sh 149577df16aSPawel Wodkowski 15011a5716dSMichal Berger# Try to expand literal ~ that might have been passed as an option via --long-opt=~/dir. 15111a5716dSMichal Bergerset -- "${@//\~/~}" 15211a5716dSMichal Berger 1534d2e26d8STomasz Zawadzkifor i in "$@"; do 1544d2e26d8STomasz Zawadzki case "$i" in 1554d2e26d8STomasz Zawadzki --cross-prefix=*) 1564d2e26d8STomasz Zawadzki CONFIG[CROSS_PREFIX]="${i#*=}" 1574d2e26d8STomasz Zawadzki ;; 1584d2e26d8STomasz Zawadzki --enable-lto) 1594d2e26d8STomasz Zawadzki CONFIG[LTO]=y 1604d2e26d8STomasz Zawadzki ;; 1614d2e26d8STomasz Zawadzki --disable-lto) 1624d2e26d8STomasz Zawadzki CONFIG[LTO]=n 1634d2e26d8STomasz Zawadzki ;; 1644d2e26d8STomasz Zawadzki esac 1654d2e26d8STomasz Zawadzkidone 1664d2e26d8STomasz Zawadzki 167873c8748STomasz Kulasek# Detect the compiler toolchain 168873c8748STomasz Kulasek$rootdir/scripts/detect_cc.sh --cc="$CC" --cxx="$CXX" --lto="${CONFIG[LTO]}" --ld="$LD" --cross-prefix="${CONFIG[CROSS_PREFIX]}" > $rootdir/mk/cc.mk 169873c8748STomasz Kulasek 170bb0f78a2SMichal BergerCC=$(grep "DEFAULT_CC=" "$rootdir/mk/cc.mk" | sed s/DEFAULT_CC=//) 171bb0f78a2SMichal BergerCC_TYPE=$(grep "CC_TYPE=" "$rootdir/mk/cc.mk" | cut -d "=" -f 2) 172873c8748STomasz Kulasek 173873c8748STomasz Kulasekarch=$($CC -dumpmachine) 1745a764955SMichal Bergersys_name=$(uname -s) 175873c8748STomasz Kulasek 1769854c138SNick Connollyif [[ $arch == *mingw* ]] || [[ $arch == *windows* ]]; then 1779854c138SNick Connolly sys_name=Windows 1789854c138SNick Connollyfi 1799854c138SNick Connolly 1802a0c2a2dSNick Connollyif [[ $sys_name != "Linux" ]]; then 181873c8748STomasz Kulasek # Vhost, rte_vhost library and virtio are only supported on Linux. 182873c8748STomasz Kulasek CONFIG[VHOST]="n" 183873c8748STomasz Kulasek CONFIG[VIRTIO]="n" 184873c8748STomasz Kulasek echo "Notice: Vhost, rte_vhost library and virtio are only supported on Linux. Turning off default feature." 185873c8748STomasz Kulasekfi 186873c8748STomasz Kulasek 1871723a800SGangCaofunction check_dir() { 1881723a800SGangCao arg="$1" 1891723a800SGangCao dir="${arg#*=}" 1901723a800SGangCao if [ ! -d "$dir" ]; then 1911723a800SGangCao echo "$arg: directory not found" 1921723a800SGangCao exit 1 1931723a800SGangCao fi 1941723a800SGangCao} 1951723a800SGangCao 1967b04eb72SYuriy Umanets# On x86_64 'clang -dumpmachine' produces x86_64-pc-linux-gnu 1977b04eb72SYuriy Umanets# whereas the dpdk might be built with gcc and its libs lie in 198acd2cc94STomasz Zawadzki# x86_64-linux-gnu. Let's find the right libdir for dpdk libs. 1997b04eb72SYuriy Umanetsfunction find_dpdk_arch_libdir() { 200acd2cc94STomasz Zawadzki local dpdk_libdir="$1/lib" 201acd2cc94STomasz Zawadzki 202acd2cc94STomasz Zawadzki # Use libdir with 'lib' or 'lib64' 203acd2cc94STomasz Zawadzki if [[ ! -d "$dpdk_libdir" ]]; then 204acd2cc94STomasz Zawadzki dpdk_libdir+="64" 205acd2cc94STomasz Zawadzki fi 2067b04eb72SYuriy Umanets 2077b04eb72SYuriy Umanets # Checking first what we have with $arch, then clang 2087b04eb72SYuriy Umanets # variant of arch. 2097b04eb72SYuriy Umanets arches=("$arch" "$(echo $arch | sed 's/-pc//g')") 2107b04eb72SYuriy Umanets for a in "${arches[@]}"; do 211acd2cc94STomasz Zawadzki local libdir_arch="$dpdk_libdir/$a" 212acd2cc94STomasz Zawadzki if [[ -d "$libdir_arch" ]]; then 213acd2cc94STomasz Zawadzki echo "$libdir_arch" 2147b04eb72SYuriy Umanets return 2157b04eb72SYuriy Umanets fi 2167b04eb72SYuriy Umanets done 2177b04eb72SYuriy Umanets 2187b04eb72SYuriy Umanets # Fallback to the libdir without arch component 219acd2cc94STomasz Zawadzki echo "$dpdk_libdir" 2207b04eb72SYuriy Umanets} 2217b04eb72SYuriy Umanets 222f1980244SYuriy Umanetsfunction check_IPSec_mb() { 223f1980244SYuriy Umanets local mode=$1 224f1980244SYuriy Umanets local dpdk_libdir=$2 225f1980244SYuriy Umanets local dpdk_incdir=$3 226f1980244SYuriy Umanets local have_ipsec_mb=n 227f1980244SYuriy Umanets 228f1980244SYuriy Umanets if [[ $mode = "pkg-config" ]]; then 229f1980244SYuriy Umanets local dpdk_libs 230f1980244SYuriy Umanets 231f1980244SYuriy Umanets # Request libdpdk pkg-config settings to figure out if the IPSec_MB is used 232f1980244SYuriy Umanets # as a dependency. 233f1980244SYuriy Umanets # Due to some reason pkg-config shows -lIPSec_MB only with --static option 234f13ec525SKarol Latecki dpdk_libs=$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --libs --static libdpdk) 235f1980244SYuriy Umanets if echo "$dpdk_libs" | grep "\-lIPSec_MB" > /dev/null 2>&1; then 236f1980244SYuriy Umanets have_ipsec_mb=y 237f1980244SYuriy Umanets fi 238f1980244SYuriy Umanets elif [[ $mode = "build-config" ]]; then 239f1980244SYuriy Umanets # Use dpdk build config header to check if the IPSec_MB was used. 240f1980244SYuriy Umanets if grep -F "define RTE_CRYPTO_IPSEC_MB 1" "$dpdk_incdir/rte_build_config.h" > /dev/null 2>&1; then 241f1980244SYuriy Umanets have_ipsec_mb=y 242f1980244SYuriy Umanets fi 243f1980244SYuriy Umanets else 244f1980244SYuriy Umanets echo "ERROR: Invalid IPSec_MB checking mode $mode." 245f1980244SYuriy Umanets echo "ERROR: Only \"pkg-config\" and \"build-config\" available." 246f1980244SYuriy Umanets exit 1 247f1980244SYuriy Umanets fi 248f1980244SYuriy Umanets if [[ $have_ipsec_mb = "n" ]]; then 249f1980244SYuriy Umanets CONFIG[IPSEC_MB]=n 250f1980244SYuriy Umanets return 251f1980244SYuriy Umanets fi 252f1980244SYuriy Umanets 253f1980244SYuriy Umanets # Since we don't know the library path where the IPSec_MB is located 254f1980244SYuriy Umanets # let's find it out with the ldd utility. This can be a standard location 255f1980244SYuriy Umanets # or a custom build. 256f1980244SYuriy Umanets local librte_crypto_ipsec_mb="$dpdk_libdir/librte_crypto_ipsec_mb.so" 257f1980244SYuriy Umanets if [[ -f "$librte_crypto_ipsec_mb" ]]; then 258f1980244SYuriy Umanets local ipsec_mb_libdir 259f1980244SYuriy Umanets 260f1980244SYuriy Umanets ipsec_mb_libdir=$(ldd "$librte_crypto_ipsec_mb" | grep "libIPSec_MB.so" \ 261f1980244SYuriy Umanets | sed -e 's/\s*libIPSec_MB.so.*=>\s//' -e 's/\/libIPSec_MB.so.*$//') 262f1980244SYuriy Umanets if [[ -d $ipsec_mb_libdir ]]; then 263f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 264f1980244SYuriy Umanets CONFIG[IPSEC_MB_DIR]="$ipsec_mb_libdir" 265f1980244SYuriy Umanets elif [[ $ipsec_mb_libdir = "not found" ]]; then 266f1980244SYuriy Umanets # ldconfig cache is broken, old build with refs to non-existing libs, etc. 267f1980244SYuriy Umanets echo "ERROR: Invalid IPSec_MB installation. Library is not found and/or ldconfig cache is broken!" 268f1980244SYuriy Umanets exit 1 269f1980244SYuriy Umanets else 270f1980244SYuriy Umanets # Failed to check for IPSec_MB lib path. Let's just assume it is lives 271f1980244SYuriy Umanets # in one of the standard locations (/usr/lib, etc.). 272f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 273f1980244SYuriy Umanets fi 274f1980244SYuriy Umanets else 275f1980244SYuriy Umanets # pkg-config says there is IPSec_mb and dpdk lib does not have it. Let's just 276f1980244SYuriy Umanets # assume it is installed in the system in one of the standard locations. 277f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 278f1980244SYuriy Umanets fi 279f1980244SYuriy Umanets} 280f1980244SYuriy Umanets 2819dd998cdSBen Walkerfor i in "$@"; do 2829dd998cdSBen Walker case "$i" in 2839dd998cdSBen Walker -h | --help) 2849dd998cdSBen Walker usage 2859dd998cdSBen Walker exit 0 2869dd998cdSBen Walker ;; 2874d2e26d8STomasz Zawadzki --cross-prefix=*) ;& 2884d2e26d8STomasz Zawadzki --enable-lto) ;& 2894d2e26d8STomasz Zawadzki --disable-lto) 2904d2e26d8STomasz Zawadzki # Options handled before detecting CC. 2914d2e26d8STomasz Zawadzki ;; 2922e7fe8e8SDaniel Verkamp --prefix=*) 293577df16aSPawel Wodkowski CONFIG[PREFIX]="${i#*=}" 2942e7fe8e8SDaniel Verkamp ;; 2950e6ddfd6SBen Walker --target-arch=*) 2960e6ddfd6SBen Walker CONFIG[ARCH]="${i#*=}" 2970e6ddfd6SBen Walker ;; 298e8863cb7SMichal Berger --libdir=*) 299e8863cb7SMichal Berger CONFIG[LIBDIR]="${i#*=}" 300e8863cb7SMichal Berger ;; 3019dd998cdSBen Walker --enable-debug) 302577df16aSPawel Wodkowski CONFIG[DEBUG]=y 3039dd998cdSBen Walker ;; 3049dd998cdSBen Walker --disable-debug) 305577df16aSPawel Wodkowski CONFIG[DEBUG]=n 3069dd998cdSBen Walker ;; 3079dd998cdSBen Walker --enable-asan) 308577df16aSPawel Wodkowski CONFIG[ASAN]=y 3099dd998cdSBen Walker ;; 3109dd998cdSBen Walker --disable-asan) 311577df16aSPawel Wodkowski CONFIG[ASAN]=n 3129dd998cdSBen Walker ;; 3139dd998cdSBen Walker --enable-ubsan) 314577df16aSPawel Wodkowski CONFIG[UBSAN]=y 3159dd998cdSBen Walker ;; 3169dd998cdSBen Walker --disable-ubsan) 317577df16aSPawel Wodkowski CONFIG[UBSAN]=n 3189dd998cdSBen Walker ;; 319830912e2SBen Walker --enable-tsan) 320577df16aSPawel Wodkowski CONFIG[TSAN]=y 321830912e2SBen Walker ;; 322830912e2SBen Walker --disable-tsan) 323577df16aSPawel Wodkowski CONFIG[TSAN]=n 324830912e2SBen Walker ;; 3259dd998cdSBen Walker --enable-coverage) 326577df16aSPawel Wodkowski CONFIG[COVERAGE]=y 3279dd998cdSBen Walker ;; 3289dd998cdSBen Walker --disable-coverage) 329577df16aSPawel Wodkowski CONFIG[COVERAGE]=n 3309dd998cdSBen Walker ;; 331995d60f4SBen Walker --enable-pgo-capture) 332995d60f4SBen Walker CONFIG[PGO_CAPTURE]=y 333995d60f4SBen Walker ;; 334995d60f4SBen Walker --disable-pgo-capture) 335995d60f4SBen Walker CONFIG[PGO_CAPTURE]=n 336995d60f4SBen Walker ;; 337995d60f4SBen Walker --enable-pgo-use) 338995d60f4SBen Walker CONFIG[PGO_USE]=y 339995d60f4SBen Walker ;; 340995d60f4SBen Walker --disable-pgo-use) 341995d60f4SBen Walker CONFIG[PGO_USE]=n 342995d60f4SBen Walker ;; 3439022a59eSDaniel Verkamp --enable-tests) 344577df16aSPawel Wodkowski CONFIG[TESTS]=y 3459022a59eSDaniel Verkamp ;; 3469022a59eSDaniel Verkamp --disable-tests) 347577df16aSPawel Wodkowski CONFIG[TESTS]=n 3489022a59eSDaniel Verkamp ;; 3499fcb1cb0STomasz Zawadzki --enable-unit-tests) 3509fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=y 3519fcb1cb0STomasz Zawadzki ;; 3529fcb1cb0STomasz Zawadzki --disable-unit-tests) 3539fcb1cb0STomasz Zawadzki CONFIG[UNIT_TESTS]=n 3549fcb1cb0STomasz Zawadzki ;; 3559b2c6452SJacek Kalwas --enable-examples) 3569b2c6452SJacek Kalwas CONFIG[EXAMPLES]=y 3579b2c6452SJacek Kalwas ;; 3589b2c6452SJacek Kalwas --disable-examples) 3599b2c6452SJacek Kalwas CONFIG[EXAMPLES]=n 3609b2c6452SJacek Kalwas ;; 361119158cdSRajarshi Chowdhury --enable-apps) 362119158cdSRajarshi Chowdhury CONFIG[APPS]=y 363119158cdSRajarshi Chowdhury ;; 364119158cdSRajarshi Chowdhury --disable-apps) 365119158cdSRajarshi Chowdhury CONFIG[APPS]=N 366119158cdSRajarshi Chowdhury ;; 3679dd998cdSBen Walker --enable-werror) 368577df16aSPawel Wodkowski CONFIG[WERROR]=y 3699dd998cdSBen Walker ;; 3709dd998cdSBen Walker --disable-werror) 371577df16aSPawel Wodkowski CONFIG[WERROR]=n 3729dd998cdSBen Walker ;; 37391e42257SJim Harris --enable-cet) 37491e42257SJim Harris CONFIG[CET]=y 37591e42257SJim Harris ;; 37691e42257SJim Harris --disable-cet) 37791e42257SJim Harris CONFIG[CET]=n 37891e42257SJim Harris ;; 3797232c450SMichal Berger --with-dpdk) 3807b04eb72SYuriy Umanets # Can we use pkg-config? 3817b04eb72SYuriy Umanets if command -v "pkg-config" > /dev/null 2>&1 && pkg-config --exists libdpdk; then 3827b04eb72SYuriy Umanets dpdk_libdir=$(pkg-config --variable=libdir libdpdk) 3837b04eb72SYuriy Umanets dpdk_libdir=$(readlink -f $dpdk_libdir) 3847b04eb72SYuriy Umanets dpdk_incdir=$(pkg-config --variable=includedir libdpdk) 3857b04eb72SYuriy Umanets echo "Using DPDK lib dir $dpdk_libdir" 3867b04eb72SYuriy Umanets CONFIG[DPDK_LIB_DIR]=$dpdk_libdir 3877b04eb72SYuriy Umanets CONFIG[DPDK_INC_DIR]=$dpdk_incdir 3887232c450SMichal Berger CONFIG[DPDK_PKG_CONFIG]=y 3897232c450SMichal Berger CFLAGS="${CFLAGS:+$CFLAGS }$(pkg-config --cflags libdpdk)" 390f1980244SYuriy Umanets check_IPSec_mb "pkg-config" "$dpdk_libdir" "$dpdk_incdir" 3917232c450SMichal Berger else 3927232c450SMichal Berger echo "libdpdk.pc not found, aborting" 3937232c450SMichal Berger exit 1 3947232c450SMichal Berger fi 3957232c450SMichal Berger ;; 39606cc8045SBen Walker --with-dpdk=*) 39706cc8045SBen Walker check_dir "$i" 3987b04eb72SYuriy Umanets dpdk_dir=$(readlink -f ${i#*=}) 3997b04eb72SYuriy Umanets dpdk_libdir=$(find_dpdk_arch_libdir $dpdk_dir) 4007b04eb72SYuriy Umanets dpdk_incdir="$dpdk_dir/include" 4017b04eb72SYuriy Umanets 4027b04eb72SYuriy Umanets # Can we use pkg-config? 403f13ec525SKarol Latecki if command -v "pkg-config" > /dev/null 2>&1 && PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --exists libdpdk; then 4047b04eb72SYuriy Umanets echo "Using $dpdk_libdir/pkgconfig for additional libs..." 4051e6db5fbSTomasz Zawadzki sysroot_dir=$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=pc_sysrootdir libdpdk) 406e9438453SJacek Kalwas dpdk_libdir=$(PKG_CONFIG_SYSROOT_DIR='' PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=libdir libdpdk) 4071e6db5fbSTomasz Zawadzki dpdk_libdir=$(readlink -f "${sysroot_dir}$dpdk_libdir") 4087b04eb72SYuriy Umanets if ! echo $dpdk_libdir | grep $dpdk_dir > /dev/null 2>&1; then 4097b04eb72SYuriy Umanets echo "ERROR: pkg-config reported DPDK libdir $dpdk_libdir is out of the directory specified with --with-dpdk=" 4107b04eb72SYuriy Umanets echo "ERROR: do you have another DPDK installed in the system?" 4117b04eb72SYuriy Umanets exit 1 4127b04eb72SYuriy Umanets fi 413f13ec525SKarol Latecki CFLAGS="${CFLAGS:+$CFLAGS }$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --cflags libdpdk)" 4141e6db5fbSTomasz Zawadzki dpdk_incdir="${sysroot_dir}$(PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$dpdk_libdir/pkgconfig" pkg-config --variable=includedir libdpdk)" 415f1980244SYuriy Umanets check_IPSec_mb "pkg-config" "$dpdk_libdir" "$dpdk_incdir" 4163e3fbf91SYuriy Umanets else 4173e3fbf91SYuriy Umanets echo "Using $dpdk_incdir/rte_build_config.h for additional libs..." 4183e3fbf91SYuriy Umanets 419f1980244SYuriy Umanets check_IPSec_mb "build-config" "$dpdk_libdir" "$dpdk_incdir" 4207b04eb72SYuriy Umanets fi 4217b04eb72SYuriy Umanets echo "DPDK libraries: $dpdk_libdir" 4227b04eb72SYuriy Umanets echo "DPDK includes: $dpdk_incdir" 4237b04eb72SYuriy Umanets CONFIG[DPDK_DIR]=$dpdk_dir 4247b04eb72SYuriy Umanets CONFIG[DPDK_LIB_DIR]="$dpdk_libdir" 4257b04eb72SYuriy Umanets CONFIG[DPDK_INC_DIR]="$dpdk_incdir" 4267b04eb72SYuriy Umanets CONFIG[DPDK_PKG_CONFIG]=n 42706cc8045SBen Walker ;; 42806cc8045SBen Walker --without-dpdk) 42906cc8045SBen Walker CONFIG[DPDK_DIR]= 43006cc8045SBen Walker ;; 4319854c138SNick Connolly --with-wpdk=*) 4329854c138SNick Connolly check_dir "$i" 4339854c138SNick Connolly CONFIG[WPDK_DIR]=$(readlink -f ${i#*=}) 4349854c138SNick Connolly ;; 4352bc71094SMichal Berger --without-wpdk) 4362bc71094SMichal Berger CONFIG[WPDK_DIR]= 4372bc71094SMichal Berger ;; 4389dd998cdSBen Walker --with-env=*) 439577df16aSPawel Wodkowski CONFIG[ENV]="${i#*=}" 4409dd998cdSBen Walker ;; 441ed2b53f3SYifan Bian --with-ublk) 442ed2b53f3SYifan Bian CONFIG[UBLK]=y 443ed2b53f3SYifan Bian ;; 444ed2b53f3SYifan Bian --without-ublk) 445ed2b53f3SYifan Bian CONFIG[UBLK]=n 446ed2b53f3SYifan Bian ;; 4479dd998cdSBen Walker --with-rbd) 448577df16aSPawel Wodkowski CONFIG[RBD]=y 4499dd998cdSBen Walker ;; 4509dd998cdSBen Walker --without-rbd) 451577df16aSPawel Wodkowski CONFIG[RBD]=n 4529dd998cdSBen Walker ;; 453daee62a0SAlexey Marchuk --with-rdma=*) 454daee62a0SAlexey Marchuk CONFIG[RDMA]=y 455daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]=${i#*=} 456daee62a0SAlexey Marchuk ;; 4579dd998cdSBen Walker --with-rdma) 458577df16aSPawel Wodkowski CONFIG[RDMA]=y 459daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]="verbs" 4609dd998cdSBen Walker ;; 4619dd998cdSBen Walker --without-rdma) 462577df16aSPawel Wodkowski CONFIG[RDMA]=n 4639dd998cdSBen Walker ;; 464ed56a3d4SAnil Veerabhadrappa --with-fc=*) 465ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 466ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]=$(readlink -f ${i#*=}) 467ed56a3d4SAnil Veerabhadrappa ;; 468ed56a3d4SAnil Veerabhadrappa --with-fc) 469ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 470ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 471ed56a3d4SAnil Veerabhadrappa ;; 472ed56a3d4SAnil Veerabhadrappa --without-fc) 473ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=n 474ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 475ed56a3d4SAnil Veerabhadrappa ;; 4762e283fcbS0xe0f --with-daos) 4772e283fcbS0xe0f CONFIG[DAOS]=y 478044bb175SDenis Barakthanov CONFIG[DAOS_DIR]="" 479044bb175SDenis Barakthanov ;; 480044bb175SDenis Barakthanov --with-daos=*) 481044bb175SDenis Barakthanov CONFIG[DAOS]=y 482044bb175SDenis Barakthanov check_dir "$i" 483044bb175SDenis Barakthanov CONFIG[DAOS_DIR]=$(readlink -f ${i#*=}) 4842e283fcbS0xe0f ;; 4852e283fcbS0xe0f --without-daos) 4862e283fcbS0xe0f CONFIG[DAOS]=n 4872e283fcbS0xe0f ;; 4880923734cSLance Hartmann --with-shared) 489577df16aSPawel Wodkowski CONFIG[SHARED]=y 4900923734cSLance Hartmann ;; 4910923734cSLance Hartmann --without-shared) 492577df16aSPawel Wodkowski CONFIG[SHARED]=n 4930923734cSLance Hartmann ;; 4942af15344SJim Harris --with-iscsi-initiator) 495577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=y 4962af15344SJim Harris ;; 4972af15344SJim Harris --without-iscsi-initiator) 498577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=n 4992af15344SJim Harris ;; 5006118b853SDaniel Verkamp --with-crypto) 501577df16aSPawel Wodkowski CONFIG[CRYPTO]=y 5026118b853SDaniel Verkamp ;; 5036118b853SDaniel Verkamp --without-crypto) 504577df16aSPawel Wodkowski CONFIG[CRYPTO]=n 5056118b853SDaniel Verkamp ;; 50635260f2bSDaniel Verkamp --with-vhost) 507577df16aSPawel Wodkowski CONFIG[VHOST]=y 50835260f2bSDaniel Verkamp ;; 50935260f2bSDaniel Verkamp --without-vhost) 510577df16aSPawel Wodkowski CONFIG[VHOST]=n 51135260f2bSDaniel Verkamp ;; 5127dee96ceSDariusz Stojaczyk --with-virtio) 513577df16aSPawel Wodkowski CONFIG[VIRTIO]=y 5147dee96ceSDariusz Stojaczyk ;; 5157dee96ceSDariusz Stojaczyk --without-virtio) 516577df16aSPawel Wodkowski CONFIG[VIRTIO]=n 5177dee96ceSDariusz Stojaczyk ;; 518b30d57cdSChangpeng Liu --with-vfio-user) 519b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=y 520d0b2448bSChangpeng Liu CONFIG[VFIO_USER_DIR]="" 521d0b2448bSChangpeng Liu ;; 522d0b2448bSChangpeng Liu --with-vfio-user=*) 523d0b2448bSChangpeng Liu CONFIG[VFIO_USER]=y 524d0b2448bSChangpeng Liu check_dir "$i" 525d0b2448bSChangpeng Liu CONFIG[VFIO_USER_DIR]=$(readlink -f ${i#*=}) 526b30d57cdSChangpeng Liu ;; 527b30d57cdSChangpeng Liu --without-vfio-user) 528b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=n 529b30d57cdSChangpeng Liu ;; 53019e2dc38Spaul luse --with-vbdev-compress) 53119e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=y 53297022803SJim Harris ;; 53319e2dc38Spaul luse --without-vbdev-compress) 53419e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=n 53597022803SJim Harris ;; 536976f8b09Spaul luse --with-dpdk-compressdev) 537976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=y 538976f8b09Spaul luse ;; 539976f8b09Spaul luse --without-dpdk-compressdev) 540976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=n 541976f8b09Spaul luse ;; 5426f338d4bSKrishna Kanth Reddy --with-xnvme) 5436f338d4bSKrishna Kanth Reddy CONFIG[XNVME]=y 5446f338d4bSKrishna Kanth Reddy ;; 5456f338d4bSKrishna Kanth Reddy --without-xnvme) 5466f338d4bSKrishna Kanth Reddy CONFIG[XNVME]=n 5476f338d4bSKrishna Kanth Reddy ;; 548c3329b52SMichal Berger --with-fio) ;& 5499dd998cdSBen Walker --with-fio=*) 550c3329b52SMichal Berger if [[ ${i#*=} != "$i" ]]; then 55111a5716dSMichal Berger CONFIG[FIO_SOURCE_DIR]=${i#*=} 552c3329b52SMichal Berger fi 553c3329b52SMichal Berger check_dir "--with-fio=${CONFIG[FIO_SOURCE_DIR]}" 55411a5716dSMichal Berger CONFIG[FIO_SOURCE_DIR]=$(readlink -f "${CONFIG[FIO_SOURCE_DIR]}") 555577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=y 5569dd998cdSBen Walker ;; 5579dd998cdSBen Walker --without-fio) 558577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=n 5599dd998cdSBen Walker ;; 5605712088aSRoman Sudarikov --with-vtune=*) 5611723a800SGangCao check_dir "$i" 562577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]="${i#*=}" 563577df16aSPawel Wodkowski CONFIG[VTUNE]=y 5645712088aSRoman Sudarikov ;; 5655712088aSRoman Sudarikov --without-vtune) 566577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]= 567577df16aSPawel Wodkowski CONFIG[VTUNE]=n 5685712088aSRoman Sudarikov ;; 56998d60de6SPiotr Pelplinski --with-ocf) 57098d60de6SPiotr Pelplinski CONFIG[OCF]=y 571985d6468SKamil Godzwon CONFIG[OCF_PATH]=$(readlink -f "$rootdir/ocf") 57298d60de6SPiotr Pelplinski ;; 573d1fee489SVitaliy Mysak --with-ocf=*) 574d1fee489SVitaliy Mysak CONFIG[OCF]=y 575d1fee489SVitaliy Mysak CONFIG[OCF_PATH]=$(readlink -f ${i#*=}) 576d1fee489SVitaliy Mysak ;; 577d1fee489SVitaliy Mysak --without-ocf) 578d1fee489SVitaliy Mysak CONFIG[OCF]=n 579d1fee489SVitaliy Mysak CONFIG[OCF_PATH]= 580d1fee489SVitaliy Mysak ;; 5818165bf71SBen Walker --with-uring=*) 5828165bf71SBen Walker CONFIG[URING]=y 5838165bf71SBen Walker CONFIG[URING_PATH]=$(readlink -f ${i#*=}) 5848165bf71SBen Walker ;; 5858165bf71SBen Walker --with-uring) 5868165bf71SBen Walker CONFIG[URING]=y 587958d196cSIndraneel M CONFIG[URING_ZNS]=y 5888165bf71SBen Walker CONFIG[URING_PATH]= 5898165bf71SBen Walker ;; 5908165bf71SBen Walker --without-uring) 5918165bf71SBen Walker CONFIG[URING]=n 5928165bf71SBen Walker CONFIG[URING_PATH]= 5938165bf71SBen Walker ;; 594958d196cSIndraneel M --without-uring-zns) 595958d196cSIndraneel M CONFIG[URING_ZNS]=n 5968b840195SIndraneel M ;; 59734192459SBoris Glimcher --with-openssl=*) 59834192459SBoris Glimcher check_dir "$i" 59934192459SBoris Glimcher CONFIG[OPENSSL_PATH]=$(readlink -f ${i#*=}) 60034192459SBoris Glimcher ;; 6017fa15e28SXiaodong Liu --with-fuse) 6027fa15e28SXiaodong Liu CONFIG[FUSE]=y 6037fa15e28SXiaodong Liu ;; 6047fa15e28SXiaodong Liu --without-fuse) 6057fa15e28SXiaodong Liu CONFIG[FUSE]=n 6067fa15e28SXiaodong Liu ;; 607805d9942STomasz Kulasek --with-nvme-cuse) 608805d9942STomasz Kulasek CONFIG[NVME_CUSE]=y 609805d9942STomasz Kulasek ;; 610805d9942STomasz Kulasek --without-nvme-cuse) 611805d9942STomasz Kulasek CONFIG[NVME_CUSE]=n 612805d9942STomasz Kulasek ;; 61383a4b155SArtur Paszkiewicz --with-raid5f) 61483a4b155SArtur Paszkiewicz CONFIG[RAID5F]=y 61573763d40SArtur Paszkiewicz ;; 61683a4b155SArtur Paszkiewicz --without-raid5f) 61783a4b155SArtur Paszkiewicz CONFIG[RAID5F]=n 61873763d40SArtur Paszkiewicz ;; 619e58e9fbdSpaul luse --with-idxd) 620e58e9fbdSpaul luse CONFIG[IDXD]=y 6212ed914f8SZiye Yang CONFIG[IDXD_KERNEL]=n 622e58e9fbdSpaul luse ;; 623e58e9fbdSpaul luse --without-idxd) 624e58e9fbdSpaul luse CONFIG[IDXD]=n 625e58e9fbdSpaul luse ;; 6265a1c74bfSJim Harris --with-usdt) 6275a1c74bfSJim Harris CONFIG[USDT]=y 6285a1c74bfSJim Harris ;; 6295a1c74bfSJim Harris --without-usdt) 6305a1c74bfSJim Harris CONFIG[USDT]=n 6315a1c74bfSJim Harris ;; 632050565e5SJim Harris --with-fuzzer) 633050565e5SJim Harris echo "Must specify fuzzer library path with --with-fuzzer" 634050565e5SJim Harris usage 635050565e5SJim Harris exit 1 636050565e5SJim Harris ;; 637050565e5SJim Harris --with-fuzzer=*) 638050565e5SJim Harris CONFIG[FUZZER]=y 639050565e5SJim Harris CONFIG[FUZZER_LIB]=$(readlink -f ${i#*=}) 640050565e5SJim Harris ;; 641050565e5SJim Harris --without-fuzzer) 642050565e5SJim Harris CONFIG[FUZZER]=n 643050565e5SJim Harris CONFIG[FUZZER_LIB]= 644050565e5SJim Harris ;; 645509241ceSKonrad Sztyber --with-sma) 646509241ceSKonrad Sztyber CONFIG[SMA]=y 647509241ceSKonrad Sztyber ;; 648509241ceSKonrad Sztyber --without-sma) 649509241ceSKonrad Sztyber CONFIG[SMA]=n 650509241ceSKonrad Sztyber ;; 6512796687dSParameswaran Krishnamurthy --with-avahi) 6522796687dSParameswaran Krishnamurthy CONFIG[AVAHI]=y 6532796687dSParameswaran Krishnamurthy ;; 6542796687dSParameswaran Krishnamurthy --without-avahi) 6552796687dSParameswaran Krishnamurthy CONFIG[AVAHI]=n 6562796687dSParameswaran Krishnamurthy ;; 6578247bd40SMarcin Spiewak --max-lcores='') 6588247bd40SMarcin Spiewak echo "Must specify max number of lcores for --max-lcores" 6598247bd40SMarcin Spiewak usage 6608247bd40SMarcin Spiewak exit 1 6618247bd40SMarcin Spiewak ;; 6628247bd40SMarcin Spiewak --max-lcores=*) 6638247bd40SMarcin Spiewak CONFIG[MAX_LCORES]="${i#*=}" 66473293d73SMarcin Spiewak CONFIG["MAX_LCORES"]=${CONFIG["MAX_LCORES"],,} 6658247bd40SMarcin Spiewak ;; 6669dd998cdSBen Walker --) 6679dd998cdSBen Walker break 6689dd998cdSBen Walker ;; 6699dd998cdSBen Walker *) 6709dd998cdSBen Walker echo "Unrecognized option $i" 6719dd998cdSBen Walker usage 6729dd998cdSBen Walker exit 1 6735ccabc8fSMichal Berger ;; 6749dd998cdSBen Walker esac 6759dd998cdSBen Walkerdone 6769dd998cdSBen Walker 677131c9aadSAlexey Marchukif [[ $arch == x86_64* ]]; then 67810e1c615SFélix Piédallu BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS "-march=native") 679131c9aadSAlexey Marchukelse 68010e1c615SFélix Piédallu BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS) 681131c9aadSAlexey Marchukfi 6826c23a6f4SMichal BergerBUILD_CMD+=(-I/usr/local/include -L/usr/local/lib) 68373439e6fSBen Walker 684b30d57cdSChangpeng Liuif [[ "${CONFIG[VFIO_USER]}" = "y" ]]; then 685421368c0SGreg Inozemtsev if ! echo -e '#include <json-c/json.h>' \ 686421368c0SGreg Inozemtsev | "${BUILD_CMD[@]}" -E - 2> /dev/null; then 6873b673b84SChangpeng Liu echo "ERROR: --with-vfio-user requires json-c-devel" 6883b673b84SChangpeng Liu echo "Please install then re-run this script" 6893b673b84SChangpeng Liu exit 1 6903b673b84SChangpeng Liu fi 691421368c0SGreg Inozemtsev if ! echo -e '#include <cmocka.h>' \ 692421368c0SGreg Inozemtsev | "${BUILD_CMD[@]}" -E - 2> /dev/null; then 6933b673b84SChangpeng Liu echo "ERROR: --with-vfio-user requires libcmocka-devel" 6943b673b84SChangpeng Liu echo "Please install then re-run this script" 6953b673b84SChangpeng Liu exit 1 696b30d57cdSChangpeng Liu fi 697b30d57cdSChangpeng Liufi 698b30d57cdSChangpeng Liu 699e58e9fbdSpaul luse# IDXD uses Intel specific instructions. 700e58e9fbdSpaul luseif [[ "${CONFIG[IDXD]}" = "y" ]]; then 7012755fbdfSpaul luse if [ $(uname -s) == "FreeBSD" ]; then 7022755fbdfSpaul luse intel="hw.model: Intel" 7032755fbdfSpaul luse cpu_vendor=$(sysctl -a | grep hw.model | cut -c 1-15) 7042755fbdfSpaul luse else 705e58e9fbdSpaul luse intel="GenuineIntel" 706e58e9fbdSpaul luse cpu_vendor=$(grep -i 'vendor' /proc/cpuinfo --max-count=1) 7072755fbdfSpaul luse fi 708e58e9fbdSpaul luse if [[ "$cpu_vendor" != *"$intel"* ]]; then 709ff238359SJosh Soref echo "ERROR: IDXD cannot be used due to CPU incompatibility." 710e58e9fbdSpaul luse exit 1 711e58e9fbdSpaul luse fi 7122ed914f8SZiye Yang if [ -e /usr/include/accel-config/libaccel_config.h ]; then 7132ed914f8SZiye Yang CONFIG[IDXD_KERNEL]=y 7142ed914f8SZiye Yang fi 7152ed914f8SZiye Yang 716e58e9fbdSpaul lusefi 717e58e9fbdSpaul luse 718577df16aSPawel Wodkowskiif [ -z "${CONFIG[ENV]}" ]; then 719577df16aSPawel Wodkowski CONFIG[ENV]=$rootdir/lib/env_dpdk 720577df16aSPawel Wodkowski echo "Using default SPDK env in ${CONFIG[ENV]}" 7217232c450SMichal Berger if [[ -z "${CONFIG[DPDK_DIR]}" && "${CONFIG[DPDK_PKG_CONFIG]}" == n ]]; then 72238e26cf5STomasz Zawadzki if [ ! -f "$rootdir"/dpdk/config/meson.build ]; then 723d199eb29SDaniel Verkamp echo "DPDK not found; please specify --with-dpdk=<path> or run:" 724d199eb29SDaniel Verkamp echo 725d199eb29SDaniel Verkamp echo " git submodule update --init" 726d199eb29SDaniel Verkamp exit 1 727577df16aSPawel Wodkowski else 728577df16aSPawel Wodkowski CONFIG[DPDK_DIR]="${rootdir}/dpdk/build" 729f1980244SYuriy Umanets # Default ipsec libs 73019518dfbSAleksey Marchuk if [[ "${CONFIG[CRYPTO]}" = "y" ]] && [[ $arch = x86_64* ]]; then 731f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 732f1980244SYuriy Umanets CONFIG[IPSEC_MB_DIR]="${rootdir}/intel-ipsec-mb/lib" 733f1980244SYuriy Umanets fi 734577df16aSPawel Wodkowski echo "Using default DPDK in ${CONFIG[DPDK_DIR]}" 735d199eb29SDaniel Verkamp fi 7369dd998cdSBen Walker fi 7377d2a2f52SBen Walkerelse 7387232c450SMichal Berger if [[ -n "${CONFIG[DPDK_DIR]}" || "${CONFIG[DPDK_PKG_CONFIG]}" == y ]]; then 73906cc8045SBen Walker echo "--with-env and --with-dpdk are mutually exclusive." 74006cc8045SBen Walker exit 1 74106cc8045SBen Walker fi 74206cc8045SBen Walker 743577df16aSPawel Wodkowski if [ "${CONFIG[VHOST]}" = "y" ]; then 7447d2a2f52SBen Walker echo "Vhost is only supported when using the default DPDK environment. Disabling it." 7457d2a2f52SBen Walker fi 7467d2a2f52SBen Walker # Always disable vhost, but only print the error message if the user explicitly turned it on. 747577df16aSPawel Wodkowski CONFIG[VHOST]="n" 748577df16aSPawel Wodkowski if [ "${CONFIG[VIRTIO]}" = "y" ]; then 7497d2a2f52SBen Walker echo "Virtio is only supported when using the default DPDK environment. Disabling it." 7507d2a2f52SBen Walker fi 7517d2a2f52SBen Walker # Always disable virtio, but only print the error message if the user explicitly turned it on. 752577df16aSPawel Wodkowski CONFIG[VIRTIO]="n" 7539dd998cdSBen Walkerfi 7549dd998cdSBen Walker 7557232c450SMichal Bergerif [[ "${CONFIG[DPDK_PKG_CONFIG]}" == y ]]; then 7567232c450SMichal Berger if [[ "${CONFIG[SHARED]}" == n ]]; then 7577232c450SMichal Berger # dpdk-devel doesn't provide static libs 7587232c450SMichal Berger echo "Build against packaged DPDK requested, enabling shared libraries" 7597232c450SMichal Berger CONFIG[SHARED]=y 7607232c450SMichal Berger fi 7617232c450SMichal Bergerfi 7627232c450SMichal Berger 7639854c138SNick Connollyif [[ $sys_name == "Windows" ]]; then 7649854c138SNick Connolly if [ -z "${CONFIG[WPDK_DIR]}" ]; then 7659854c138SNick Connolly if [ ! -f "$rootdir"/wpdk/Makefile ]; then 7669854c138SNick Connolly echo "WPDK not found; please specify --with-wpdk=<path>. See https://wpdk.github.io." 7679854c138SNick Connolly exit 1 7689854c138SNick Connolly else 7699854c138SNick Connolly CONFIG[WPDK_DIR]="${rootdir}/wpdk/build" 7709854c138SNick Connolly echo "Using default WPDK in ${CONFIG[WPDK_DIR]}" 7719854c138SNick Connolly fi 7729854c138SNick Connolly fi 7739854c138SNick Connollyelse 7749854c138SNick Connolly if [ -n "${CONFIG[WPDK_DIR]}" ]; then 7759854c138SNick Connolly echo "ERROR: --with-wpdk is only supported for Windows" 7769854c138SNick Connolly exit 1 7779854c138SNick Connolly fi 7789854c138SNick Connollyfi 7799854c138SNick Connolly 780577df16aSPawel Wodkowskiif [ "${CONFIG[VTUNE]}" = "y" ]; then 7816b97cccfSJim Harris echo "WARNING: VTune support is deprecated." 782577df16aSPawel Wodkowski if [ -z "${CONFIG[VTUNE_DIR]}" ]; then 7835712088aSRoman Sudarikov echo "When VTune is enabled, you must specify the VTune directory using --with-vtune=path" 7845712088aSRoman Sudarikov exit 1 7855712088aSRoman Sudarikov fi 7865712088aSRoman Sudarikovfi 7875712088aSRoman Sudarikov 788bb0f78a2SMichal Bergerif [[ "${CONFIG[ASAN]}" = "y" && "${CONFIG[TSAN]}" = "y" ]]; then 789830912e2SBen Walker echo "ERROR: ASAN and TSAN cannot be enabled at the same time." 790830912e2SBen Walker exit 1 791830912e2SBen Walkerfi 792830912e2SBen Walker 793ac5b53a5SJim Harrisif [[ "${CONFIG[FIO_PLUGIN]}" = "y" && "${CONFIG[EXAMPLES]}" = "n" ]]; then 794ac5b53a5SJim Harris echo "ERROR: --with-fio and --disable-examples are mutually exclusive." 795ac5b53a5SJim Harris exit 1 796ac5b53a5SJim Harrisfi 797ac5b53a5SJim Harris 7985a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 7995091cadcSPaul Luse # FreeBSD doesn't support all configurations 800577df16aSPawel Wodkowski if [[ "${CONFIG[COVERAGE]}" == "y" ]]; then 8015091cadcSPaul Luse echo "ERROR: CONFIG_COVERAGE not available on FreeBSD" 8025091cadcSPaul Luse exit 1 8035091cadcSPaul Luse fi 8045091cadcSPaul Lusefi 8055091cadcSPaul Luse 80625ac67f1SJim Harrisif [[ $sys_name == "Linux" ]]; then 80725ac67f1SJim Harris if pkg-config libbsd; then 80825ac67f1SJim Harris CONFIG[HAVE_LIBBSD]=y 80925ac67f1SJim Harris fi 81025ac67f1SJim Harrisfi 81125ac67f1SJim Harris 812544a8fe5SJim Harrisif pkg-config libarchive; then 813544a8fe5SJim Harris CONFIG[HAVE_LIBARCHIVE]=y 814544a8fe5SJim Harrisfi 815544a8fe5SJim Harris 8162a0c2a2dSNick Connollyif [[ $sys_name != "Linux" ]]; then 81727b920a2SDarek Stojaczyk if [[ "${CONFIG[VHOST]}" == "y" ]]; then 818873c8748STomasz Kulasek echo "Vhost is only supported on Linux." 819873c8748STomasz Kulasek exit 1 82027b920a2SDarek Stojaczyk fi 82127b920a2SDarek Stojaczyk if [[ "${CONFIG[VIRTIO]}" == "y" ]]; then 822873c8748STomasz Kulasek echo "Virtio is only supported on Linux." 823873c8748STomasz Kulasek exit 1 82427b920a2SDarek Stojaczyk fi 82527b920a2SDarek Stojaczykfi 82627b920a2SDarek Stojaczyk 827577df16aSPawel Wodkowskiif [ "${CONFIG[RDMA]}" = "y" ]; then 828daee62a0SAlexey Marchuk if [[ ! "${CONFIG[RDMA_PROV]}" == "verbs" ]] && [[ ! "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]]; then 829daee62a0SAlexey Marchuk echo "Invalid RDMA provider specified, must be \"verbs\" or \"mlx5_dv\"" 830daee62a0SAlexey Marchuk exit 1 831daee62a0SAlexey Marchuk fi 832daee62a0SAlexey Marchuk 833eed0c6beSDarek Stojaczyk if ! echo -e '#include <infiniband/verbs.h>\n#include <rdma/rdma_verbs.h>\n' \ 834eed0c6beSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 835bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -libverbs -lrdmacm - 2> /dev/null; then 836bb0f78a2SMichal Berger echo "--with-rdma requires libverbs and librdmacm." 837bb0f78a2SMichal Berger echo "Please install then re-run this script." 838eed0c6beSDarek Stojaczyk exit 1 839eed0c6beSDarek Stojaczyk fi 840eed0c6beSDarek Stojaczyk 841eed0c6beSDarek Stojaczyk if echo -e '#include <infiniband/verbs.h>\n' \ 842eed0c6beSDarek Stojaczyk 'int main(void) { return !!IBV_WR_SEND_WITH_INV; }\n' \ 843bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 844577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="y" 8457671073bSSeth Howell else 846577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="n" 84717a819f8SJim Harris echo " 8487671073bSSeth Howell******************************************************************************* 8497671073bSSeth HowellWARNING: The Infiniband Verbs opcode Send With Invalidate is either not 8507671073bSSeth Howellsupported or is not functional with the current version of libibverbs installed 8517671073bSSeth Howellon this system. Please upgrade to at least version 1.1. 8527671073bSSeth Howell 8537671073bSSeth HowellBeginning with Linux kernel 4.14, the kernel NVMe-oF initiator leverages Send 8547671073bSSeth HowellWith Invalidate RDMA operations to improve performance. Failing to use the 8557671073bSSeth HowellSend With Invalidate operation on the NVMe-oF target side results in full 8567671073bSSeth Howellfunctionality, but greatly reduced performance. The SPDK NVMe-oF target will 8577671073bSSeth Howellbe unable to leverage that operation using the currently installed version 8587671073bSSeth Howellof libibverbs, so Linux kernel NVMe-oF initiators based on kernels greater 8597671073bSSeth Howellthan or equal to 4.14 will see significantly reduced performance. 86017a819f8SJim Harris*******************************************************************************" 8617671073bSSeth Howell fi 86294966468SAlexey Marchuk 86394966468SAlexey Marchuk if echo -e '#include <rdma/rdma_cma.h>\n' \ 86494966468SAlexey Marchuk 'int main(void) { return !!RDMA_OPTION_ID_ACK_TIMEOUT; }\n' \ 865bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 86694966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="y" 86794966468SAlexey Marchuk else 86894966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="n" 86994966468SAlexey Marchuk echo "RDMA_OPTION_ID_ACK_TIMEOUT is not supported" 87094966468SAlexey Marchuk fi 87194966468SAlexey Marchuk 8727706450fSMichael Haeuptle if echo -e '#include <rdma/rdma_cma.h>\n' \ 8737706450fSMichael Haeuptle 'int main(void) { return !!RDMA_OPTION_ID_TOS; }\n' \ 8747706450fSMichael Haeuptle | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 8757706450fSMichael Haeuptle CONFIG[RDMA_SET_TOS]="y" 8767706450fSMichael Haeuptle else 8777706450fSMichael Haeuptle CONFIG[RDMA_SET_TOS]="n" 8787706450fSMichael Haeuptle echo "RDMA_OPTION_ID_TOS is not supported" 8797706450fSMichael Haeuptle fi 8807706450fSMichael Haeuptle 881daee62a0SAlexey Marchuk if [ "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]; then 882a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD=" 883a1dfa7ecSAlexey Marchuk #include <infiniband/mlx5dv.h>\n 884a1dfa7ecSAlexey Marchuk #include <rdma/rdma_cma.h>\n 885a1dfa7ecSAlexey Marchuk int main(void) { return rdma_establish(NULL) ||\n 886a1dfa7ecSAlexey Marchuk !!IBV_QP_INIT_ATTR_SEND_OPS_FLAGS || !!MLX5_OPCODE_RDMA_WRITE" 887a1dfa7ecSAlexey Marchuk if [ "${CONFIG[CRYPTO]}" = "y" ]; then 888a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD+="|| !!MLX5DV_CRYPTO_ENGINES_CAP_AES_XTS_SINGLE_BLOCK" 889a1dfa7ecSAlexey Marchuk fi 890a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD+=";}" 891a1dfa7ecSAlexey Marchuk if ! echo -e $MLX5_DV_BUILD_BUILD_CMD | "${BUILD_CMD[@]}" -lmlx5 -I${rootdir}/include -c -; then 892daee62a0SAlexey Marchuk echo "mlx5_dv provider is not supported" 893daee62a0SAlexey Marchuk exit 1 894daee62a0SAlexey Marchuk fi 895daee62a0SAlexey Marchuk fi 896daee62a0SAlexey Marchuk 897bb0f78a2SMichal Berger echo "Using '${CONFIG[RDMA_PROV]}' RDMA provider" 8987671073bSSeth Howellfi 8997671073bSSeth Howell 900ed56a3d4SAnil Veerabhadrappaif [[ "${CONFIG[FC]}" = "y" ]]; then 901ed56a3d4SAnil Veerabhadrappa if [[ -n "${CONFIG[FC_PATH]}" ]]; then 902c9b4654bSTomasz Zawadzki check_dir "${CONFIG[FC_PATH]}" 903ed56a3d4SAnil Veerabhadrappa fi 904ed56a3d4SAnil Veerabhadrappafi 905ed56a3d4SAnil Veerabhadrappa 9062a6ddeb8SYuriy Umanetsfunction dpdk_version() { 9072a6ddeb8SYuriy Umanets # Check DPDK version to determine if mlx5_pci driver is supported 9082a6ddeb8SYuriy Umanets local dpdk_ver="none" 9092a6ddeb8SYuriy Umanets if [[ "${CONFIG[DPDK_DIR]}" == "$rootdir/dpdk/build" ]]; then 9102a6ddeb8SYuriy Umanets # DPDK_DIR points at our submodule so ./build may not exist yet. Use 9112a6ddeb8SYuriy Umanets # absolute path to lookup the version. 9122a6ddeb8SYuriy Umanets dpdk_ver=$(< "$rootdir/dpdk/VERSION") 9132a6ddeb8SYuriy Umanets elif [[ -f "${CONFIG[DPDK_DIR]}"/../VERSION ]]; then 9142a6ddeb8SYuriy Umanets dpdk_ver=$(< "${CONFIG[DPDK_DIR]}"/../VERSION) 9152a6ddeb8SYuriy Umanets fi 9162a6ddeb8SYuriy Umanets echo $dpdk_ver 9172a6ddeb8SYuriy Umanets} 9182a6ddeb8SYuriy Umanets 9192a6ddeb8SYuriy Umanetsfunction mlx5_build() { 9202a6ddeb8SYuriy Umanets # Check if libmlx5 exists to enable mlx5_pci compress/crypto PMD 9212a6ddeb8SYuriy Umanets if ! echo -e '#include <spdk/stdinc.h>\n' \ 9222a6ddeb8SYuriy Umanets '#include <infiniband/mlx5dv.h>\n' \ 9232a6ddeb8SYuriy Umanets '#include <infiniband/verbs.h>\n' \ 9242a6ddeb8SYuriy Umanets 'int main(void) { return 0; }\n' \ 9252a6ddeb8SYuriy Umanets | "${BUILD_CMD[@]}" -lmlx5 -libverbs -I${rootdir}/include -c - 2> /dev/null; then 9262a6ddeb8SYuriy Umanets return 1 9272a6ddeb8SYuriy Umanets fi 9282a6ddeb8SYuriy Umanets return 0 9292a6ddeb8SYuriy Umanets} 9302a6ddeb8SYuriy Umanets 93119e2dc38Spaul luseif [[ "${CONFIG[VBDEV_COMPRESS]}" = "y" ]]; then 93223196506STomasz Zawadzki echo "WARNING: PMDK - Persistent device support with bdev_compress is deprecated." 933c4a3b312SDarek Stojaczyk if ! echo -e '#include <libpmem.h>\nint main(void) { return 0; }\n' \ 934bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lpmem - 2> /dev/null; then 93519e2dc38Spaul luse echo "--with-vbdev-compress requires libpmem." 936bb0f78a2SMichal Berger echo "Please install then re-run this script." 93797022803SJim Harris exit 1 93897022803SJim Harris fi 9392a6ddeb8SYuriy Umanets # Try to enable mlx5 compress 94019e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="y" 9412a6ddeb8SYuriy Umanets 942e71ae467SAlexey Marchuk # Check if libmlx5 exists to enable mlx5_pci compress PMD 9432a6ddeb8SYuriy Umanets if ! mlx5_build; then 944e71ae467SAlexey Marchuk echo "libmlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 94519e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9462a6ddeb8SYuriy Umanets else 947e71ae467SAlexey Marchuk if [[ "${CONFIG[DPDK_PKG_CONFIG]}" = "y" ]]; then 948e71ae467SAlexey Marchuk # Check if librte_compress_mlx5 exists in DPDK package 949e71ae467SAlexey Marchuk if [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_compress_mlx5.so ]; then 950e71ae467SAlexey Marchuk echo "librte_compress_mlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 95119e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 952e71ae467SAlexey Marchuk fi 953e71ae467SAlexey Marchuk else 954e71ae467SAlexey Marchuk # Check DPDK version to determine if mlx5_pci driver is supported 9552a6ddeb8SYuriy Umanets dpdk_ver=$(dpdk_version) 9562a6ddeb8SYuriy Umanets if [[ $dpdk_ver = "none" ]]; then 957c2de56b0SMichal Berger echo "Cannot get DPDK version, so disabling DPDK mlx5_pci compress PMD" 95819e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9592a6ddeb8SYuriy Umanets elif [[ -n $dpdk_ver ]] && lt "$dpdk_ver" 21.02.0; then 9602a6ddeb8SYuriy Umanets # mlx5_pci for compress is supported by DPDK >- 21.02.0 961c2de56b0SMichal Berger echo "DPDK version ${dpdk_ver} doesn't support mlx5_pci compress PMD" 96219e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9632a6ddeb8SYuriy Umanets elif [[ -n ${CONFIG[DPDK_LIB_DIR]} ]] && [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_compress_mlx5.so ]; then 9642a6ddeb8SYuriy Umanets # This is only checked when --with-dpdk or --with-dpdk=* is used 9652a6ddeb8SYuriy Umanets echo "librte_compress_mlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 96619e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9672a6ddeb8SYuriy Umanets fi 9682a6ddeb8SYuriy Umanets fi 9692a6ddeb8SYuriy Umanets fi 9702a6ddeb8SYuriy Umanetsfi 9712a6ddeb8SYuriy Umanets 9722a6ddeb8SYuriy Umanetsif [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 9732a6ddeb8SYuriy Umanets # Try to enable mlx5 crypto 9742a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="y" 9752a6ddeb8SYuriy Umanets 9762a6ddeb8SYuriy Umanets # Check if libmlx5 exists to enable mlx5_pci compress PMD 9772a6ddeb8SYuriy Umanets if ! mlx5_build; then 9782a6ddeb8SYuriy Umanets echo "libmlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 9792a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9802a6ddeb8SYuriy Umanets else 9812a6ddeb8SYuriy Umanets if [[ "${CONFIG[DPDK_PKG_CONFIG]}" = "y" ]]; then 9822a6ddeb8SYuriy Umanets # Check if librte_crypto_mlx5 exists in DPDK package 9832a6ddeb8SYuriy Umanets if [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_crypto_mlx5.so ]; then 9842a6ddeb8SYuriy Umanets echo "librte_crypto_mlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 9852a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9862a6ddeb8SYuriy Umanets fi 9872a6ddeb8SYuriy Umanets else 9882a6ddeb8SYuriy Umanets # Check DPDK version to determine if mlx5_pci driver is supported 9892a6ddeb8SYuriy Umanets dpdk_ver=$(dpdk_version) 9902a6ddeb8SYuriy Umanets if [[ $dpdk_ver = "none" ]]; then 9912a6ddeb8SYuriy Umanets echo "Cannot get DPDK version, so disabling DPDK mlx5_pci crypto PMD" 9922a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9938a2fc789SYuriy Umanets elif [[ -n $dpdk_ver ]] && lt "$dpdk_ver" 21.11.0; then 9948a2fc789SYuriy Umanets # mlx5_pci for crypto is supported by DPDK >- 21.11.0 9952a6ddeb8SYuriy Umanets echo "DPDK version ${dpdk_ver} doesn't support mlx5_pci crypto PMD" 9962a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9972a6ddeb8SYuriy Umanets elif [[ -n ${CONFIG[DPDK_LIB_DIR]} ]] && [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_crypto_mlx5.so ]; then 9982a6ddeb8SYuriy Umanets # This is only checked when --with-dpdk or --with-dpdk=* is used 9992a6ddeb8SYuriy Umanets echo "librte_crypto_mlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 10002a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 10012a6ddeb8SYuriy Umanets fi 1002e71ae467SAlexey Marchuk fi 1003e269bf4eSAlexey Marchuk fi 100497022803SJim Harrisfi 100597022803SJim Harris 1006805d9942STomasz Kulasekif [[ "${CONFIG[NVME_CUSE]}" = "y" ]]; then 1007805d9942STomasz 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' \ 1008bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lfuse3 -D_FILE_OFFSET_BITS=64 - 2> /dev/null; then 1009bb0f78a2SMichal Berger echo "--with-cuse requires libfuse3." 1010bb0f78a2SMichal Berger echo "Please install then re-run this script." 1011805d9942STomasz Kulasek exit 1 1012805d9942STomasz Kulasek fi 1013805d9942STomasz Kulasekfi 1014805d9942STomasz Kulasek 101555bd0d3aSDarek Stojaczykif [[ "${CONFIG[RBD]}" = "y" ]]; then 101655bd0d3aSDarek Stojaczyk if ! echo -e '#include <rbd/librbd.h>\n#include <rados/librados.h>\n' \ 101755bd0d3aSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 1018bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lrados -lrbd - 2> /dev/null; then 1019bb0f78a2SMichal Berger echo "--with-rbd requires librados and librbd." 1020bb0f78a2SMichal Berger echo "Please install then re-run this script." 102155bd0d3aSDarek Stojaczyk exit 1 102255bd0d3aSDarek Stojaczyk fi 102355bd0d3aSDarek Stojaczykfi 102455bd0d3aSDarek Stojaczyk 1025ed2b53f3SYifan Bianif [[ "${CONFIG[UBLK]}" = "y" ]]; then 1026ed2b53f3SYifan Bian if ! echo -e '#include <linux/ublk_cmd.h>\n#include <liburing.h>\n' \ 1027ed2b53f3SYifan Bian 'int main(void) { return 0; }\n' \ 1028ed2b53f3SYifan Bian | "${BUILD_CMD[@]}" -luring - 2> /dev/null; then 1029ed2b53f3SYifan Bian echo "--with-ublk requires liburing and ublk_drv." 1030ed2b53f3SYifan Bian echo "Please install then re-run this script." 1031ed2b53f3SYifan Bian exit 1 1032ed2b53f3SYifan Bian fi 1033ed2b53f3SYifan Bianfi 1034ed2b53f3SYifan Bian 10355cb18040SDarek Stojaczykif [[ "${CONFIG[ISCSI_INITIATOR]}" = "y" ]]; then 10365cb18040SDarek Stojaczyk # Fedora installs libiscsi to /usr/lib64/iscsi for some reason. 10375cb18040SDarek Stojaczyk if ! echo -e '#include <iscsi/iscsi.h>\n#include <iscsi/scsi-lowlevel.h>\n' \ 10385cb18040SDarek Stojaczyk '#if LIBISCSI_API_VERSION < 20150621\n' \ 10395cb18040SDarek Stojaczyk '#error\n' \ 10405cb18040SDarek Stojaczyk '#endif\n' \ 10415cb18040SDarek Stojaczyk 'int main(void) { return 0; }\n' \ 1042bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -L/usr/lib64/iscsi -liscsi - 2> /dev/null; then 1043bb0f78a2SMichal Berger echo "--with-iscsi-initiator requires libiscsi with" 1044bb0f78a2SMichal Berger echo "LIBISCSI_API_VERSION >= 20150621." 1045bb0f78a2SMichal Berger echo "Please install then re-run this script." 10465cb18040SDarek Stojaczyk exit 1 10475cb18040SDarek Stojaczyk fi 10485cb18040SDarek Stojaczykfi 10495cb18040SDarek Stojaczyk 10502e283fcbS0xe0fif [[ "${CONFIG[DAOS]}" = "y" ]]; then 1051044bb175SDenis Barakthanov daos_build_cmd=("${BUILD_CMD[@]}") 1052044bb175SDenis Barakthanov if [[ -n "${CONFIG[DAOS_DIR]}" ]]; then 1053044bb175SDenis Barakthanov daos_build_cmd+=(-I"${CONFIG[DAOS_DIR]}"/include -L"${CONFIG[DAOS_DIR]}"/lib64) 1054044bb175SDenis Barakthanov fi 10552e283fcbS0xe0f if ! echo -e '#include <daos.h>\n#include <daos_fs.h>\n' \ 10562e283fcbS0xe0f 'int main(void) { return 0; }\n' \ 1057044bb175SDenis Barakthanov | "${daos_build_cmd[@]}" -lgurt -ldaos -ldaos_common -ldfs - 2> /dev/null; then 10582e283fcbS0xe0f echo "--with-daos requires libdaos, libdaos_common, libdfs and libgurt" 10592e283fcbS0xe0f echo "Please install then re-run this script." 10602e283fcbS0xe0f exit 1 10612e283fcbS0xe0f fi 10622e283fcbS0xe0ffi 10632e283fcbS0xe0f 10643674c1d3SDarek Stojaczykif [[ "${CONFIG[ASAN]}" = "y" ]]; then 10653674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1066bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=address - 2> /dev/null; then 1067bb0f78a2SMichal Berger echo "--enable-asan requires libasan." 1068bb0f78a2SMichal Berger echo "Please install then re-run this script." 10693674c1d3SDarek Stojaczyk exit 1 10703674c1d3SDarek Stojaczyk fi 10713674c1d3SDarek Stojaczykfi 10723674c1d3SDarek Stojaczyk 10733674c1d3SDarek Stojaczykif [[ "${CONFIG[UBSAN]}" = "y" ]]; then 10743674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1075bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=undefined - 2> /dev/null; then 1076bb0f78a2SMichal Berger echo "--enable-ubsan requires libubsan." 1077bb0f78a2SMichal Berger echo "Please install then re-run this script." 1078bb0f78a2SMichal Berger echo "If installed, please check that the GCC version is at least 6.4" 1079bb0f78a2SMichal Berger echo "and synchronize CC accordingly." 10803674c1d3SDarek Stojaczyk exit 1 10813674c1d3SDarek Stojaczyk fi 10823674c1d3SDarek Stojaczykfi 10833674c1d3SDarek Stojaczyk 10843674c1d3SDarek Stojaczykif [[ "${CONFIG[TSAN]}" = "y" ]]; then 10853674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1086bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=thread - 2> /dev/null; then 1087bb0f78a2SMichal Berger echo "--enable-tsan requires libtsan." 1088bb0f78a2SMichal Berger echo "Please install then re-run this script." 10893674c1d3SDarek Stojaczyk exit 1 10903674c1d3SDarek Stojaczyk fi 10913674c1d3SDarek Stojaczykfi 10923674c1d3SDarek Stojaczyk 109343a3984cSJim Harrisif echo -e '#include <stdlib.h>\nint main(void) { arc4random(); return 0; }\n' \ 109443a3984cSJim Harris | "${BUILD_CMD[@]}" - 2> /dev/null; then 109543a3984cSJim Harris CONFIG[HAVE_ARC4RANDOM]="y" 109643a3984cSJim Harrisfi 109743a3984cSJim Harris 1098634ac768SKrzysztof Karasif echo -e '#include <uuid/uuid.h>\nint main(void) { uuid_generate_sha1(NULL, NULL, NULL, 0); return 0; }\n' \ 1099634ac768SKrzysztof Karas | "${BUILD_CMD[@]}" - -luuid 2> /dev/null; then 1100634ac768SKrzysztof Karas CONFIG[HAVE_UUID_GENERATE_SHA1]="y" 1101634ac768SKrzysztof Karasfi 1102634ac768SKrzysztof Karas 1103d1fee489SVitaliy Mysakif [[ "${CONFIG[OCF]}" = "y" ]]; then 1104d1fee489SVitaliy Mysak # If OCF_PATH is a file, assume it is a library and use it to compile with 1105d1fee489SVitaliy Mysak if [ -f ${CONFIG[OCF_PATH]} ]; then 1106d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=y 1107d1fee489SVitaliy Mysak else 1108d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=n 1109d1fee489SVitaliy Mysak fi 1110d1fee489SVitaliy Mysakfi 1111d1fee489SVitaliy Mysak 1112995d60f4SBen Walkerif [[ "${CONFIG[PGO_CAPTURE]}" = "y" && "${CONFIG[PGO_USE]}" = "y" ]]; then 1113995d60f4SBen Walker echo "ERROR: --enable-pgo-capture and --enable-pgo-use are mutually exclusive." 1114995d60f4SBen Walker exit 1 1115954728e9SBen Walkerelif [[ "${CONFIG[PGO_USE]}" = "y" ]]; then 1116954728e9SBen Walker if [[ "$CC_TYPE" = "clang" ]]; then 1117954728e9SBen Walker # For clang we need to run an extra step on gathered profiling data. 1118954728e9SBen Walker echo "Generating suitable profile data" 1119954728e9SBen Walker llvm-profdata merge -output=build/pgo/default.profdata build/pgo 1120954728e9SBen Walker fi 1121995d60f4SBen Walkerfi 1122995d60f4SBen Walker 112387757389SSimon A. F. Lundif [[ "${CONFIG[URING]}" = "y" || "${CONFIG[XNVME]}" = "y" ]]; then 11248165bf71SBen Walker if [[ -n "${CONFIG[URING_PATH]}" ]]; then 1125c9b4654bSTomasz Zawadzki check_dir "${CONFIG[URING_PATH]}" 11264ccc9ea3SJim Harris elif ! echo -e '#include <liburing.h>\nint main(void) { return 0; }\n' \ 11274ccc9ea3SJim Harris | "${BUILD_CMD[@]}" -luring - 2> /dev/null; then 11284ccc9ea3SJim Harris echo "--with-uring requires liburing." 11294ccc9ea3SJim Harris echo "Please build and install then re-run this script." 11304ccc9ea3SJim Harris exit 1 11318165bf71SBen Walker fi 1132958d196cSIndraneel M # Support for Zoned devices is enabled by default for Uring bdev. Check appropriate support in kernel. 11338b840195SIndraneel M if [[ "${CONFIG[URING_ZNS]}" = "y" ]]; then 11348b840195SIndraneel M if ! echo -e '#include<linux/blkzoned.h>\nint main(void) { return BLK_ZONE_REP_CAPACITY; }\n' \ 11358b840195SIndraneel M | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 1136958d196cSIndraneel M echo "Disabling Zoned NS support in Uring! Requires blkzoned.h from kernel >= linux-5.9." 1137958d196cSIndraneel M CONFIG[URING_ZNS]=n 1138958d196cSIndraneel M fi 11398b840195SIndraneel M fi 11408b840195SIndraneel Mfi 11418b840195SIndraneel M 11427fa15e28SXiaodong Liuif [[ "${CONFIG[FUSE]}" = "y" ]]; then 11437fa15e28SXiaodong Liu if [[ ! -d /usr/include/fuse3 ]] && [[ ! -d /usr/local/include/fuse3 ]]; then 11447fa15e28SXiaodong Liu echo "--with-fuse requires libfuse3." 11457fa15e28SXiaodong Liu echo "Please install then re-run this script." 11467fa15e28SXiaodong Liu exit 1 11477fa15e28SXiaodong Liu fi 11487fa15e28SXiaodong Liufi 11497fa15e28SXiaodong Liu 115091e42257SJim Harrisif [ "${CONFIG[CET]}" = "y" ]; then 1151bb0f78a2SMichal Berger if ! echo -e 'int main(void) { return 0; }\n' | "${BUILD_CMD[@]}" -fcf-protection - 2> /dev/null; then 1152bb0f78a2SMichal Berger echo "--enable-cet requires compiler/linker that supports CET." 1153bb0f78a2SMichal Berger echo "Please install then re-run this script." 115491e42257SJim Harris exit 1 115591e42257SJim Harris fi 115691e42257SJim Harrisfi 115791e42257SJim Harris 1158050565e5SJim Harrisif [[ "${CONFIG[FUZZER]}" = "y" && "$CC_TYPE" != "clang" ]]; then 1159050565e5SJim Harris echo "--with-fuzzer requires setting CC and CXX to clang." 1160050565e5SJim Harris exit 1 1161050565e5SJim Harrisfi 1162050565e5SJim Harris 1163dd2c08d2Spaul luseif [[ $arch == x86_64* ]] || [[ $arch == aarch64* ]]; then 1164dd2c08d2Spaul luse CONFIG[ISAL]=y 1165dd2c08d2Spaul luse # make sure the submodule is initialized 11669d2f6f86SJim Harris if [ ! -f "$rootdir"/isa-l/autogen.sh ]; then 1167dd2c08d2Spaul luse echo "ISA-L is required but was not found, please init the submodule with:" 11689d2f6f86SJim Harris echo " git submodule update --init" 1169dd2c08d2Spaul luse echo "and then re-run this script." 11709d2f6f86SJim Harris exit 1 11719d2f6f86SJim Harris fi 1172dd2c08d2Spaul luse # for x86 only, check the nasm version for ISA-L and IPSEC 1173dd2c08d2Spaul luse if [[ $arch == x86_64* ]]; then 1174dd2c08d2Spaul luse ver=$(nasm -v 2> /dev/null | awk '{print $3}' | awk -Fr '{print $1}') 1175dd2c08d2Spaul luse if lt "$ver" 2.14; then 1176dd2c08d2Spaul luse CONFIG[ISAL]=n 1177dd2c08d2Spaul luse # IPSEC has nasm requirement and DPDK crypto relies on IPSEC 1178dd2c08d2Spaul luse CONFIG[IPSEC_MB]=n 1179dd2c08d2Spaul luse echo "WARNING: ISA-L & DPDK crypto cannot be used as nasm ver must be 2.14 or newer." 1180dd2c08d2Spaul luse fi 1181dd2c08d2Spaul luse fi 1182784b9d48SAlexey Marchuk # check gas version on aarch64 1183784b9d48SAlexey Marchuk if [[ $arch == aarch64* ]]; then 1184784b9d48SAlexey Marchuk ver=$(as --version 2> /dev/null | awk 'NR==1{print $7}') 1185784b9d48SAlexey Marchuk if lt "$ver" 2.24; then 1186784b9d48SAlexey Marchuk # ISA-L, compression & crypto require gas version 2.24 or newer. 1187784b9d48SAlexey Marchuk CONFIG[ISAL]=n 1188784b9d48SAlexey Marchuk echo "Notice: ISA-L, compression & crypto require GAS version 2.24 or newer. Turning off default ISA-L and crypto features." 1189784b9d48SAlexey Marchuk elif lt "$ver" 2.34; then 1190784b9d48SAlexey Marchuk #For gas v2.24~v2.34, sve2 instructions are not supported. To workaround it, sve2 optimization should be disabled 1191784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--disable-sve2") 1192784b9d48SAlexey Marchuk fi 1193784b9d48SAlexey Marchuk fi 1194dd2c08d2Spaul luseelse 1195dd2c08d2Spaul luse # for PPC 1196dd2c08d2Spaul luse CONFIG[ISAL]=n 1197dd2c08d2Spaul luse echo "WARNING: ISA-L cannot be used due to architecture incompatibility." 1198dd2c08d2Spaul lusefi 11999d2f6f86SJim Harris 1200dd2c08d2Spaul luse# now either configure ISA-L or disable unavailable features 1201dd2c08d2Spaul luseif [[ "${CONFIG[ISAL]}" = "y" ]]; then 12029d2f6f86SJim Harris cd $rootdir/isa-l 12039d2f6f86SJim Harris ISAL_LOG=$rootdir/isa-l/spdk-isal.log 12049d2f6f86SJim Harris if [[ -n "${CONFIG[CROSS_PREFIX]}" ]]; then 12059d2f6f86SJim Harris ISAL_OPTS=("--host=${CONFIG[CROSS_PREFIX]}") 12069d2f6f86SJim Harris else 12079d2f6f86SJim Harris ISAL_OPTS=() 12089d2f6f86SJim Harris fi 12099d2f6f86SJim Harris echo -n "Configuring ISA-L (logfile: $ISAL_LOG)..." 12109d2f6f86SJim Harris ./autogen.sh &> $ISAL_LOG 12119d2f6f86SJim Harris ./configure CFLAGS="-fPIC -g -O2" "${ISAL_OPTS[@]}" --enable-shared=no >> $ISAL_LOG 2>&1 12129d2f6f86SJim Harris echo "done." 12139d2f6f86SJim Harris cd $rootdir 1214dd2c08d2Spaul luseelse 1215dd2c08d2Spaul luse echo "Without ISA-L, there is no software support for crypto or compression," 1216dd2c08d2Spaul luse echo "so these features will be disabled." 1217dd2c08d2Spaul luse CONFIG[CRYPTO]=n 121819e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=n 1219976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=n 12209d2f6f86SJim Harrisfi 12219d2f6f86SJim Harris 1222784b9d48SAlexey Marchuk# ISA-L-crypto complements ISA-L functionality, it is only enabled together with ISA-L 1223784b9d48SAlexey Marchukif [[ "${CONFIG[ISAL]}" = "y" ]]; then 1224784b9d48SAlexey Marchuk if [ ! -f "$rootdir"/isa-l-crypto/autogen.sh ]; then 1225784b9d48SAlexey Marchuk echo "ISA-L-crypto is required but was not found, please init the submodule with:" 1226784b9d48SAlexey Marchuk echo " git submodule update --init" 1227784b9d48SAlexey Marchuk echo "and then re-run this script." 1228784b9d48SAlexey Marchuk exit 1 1229784b9d48SAlexey Marchuk fi 1230784b9d48SAlexey Marchuk 1231784b9d48SAlexey Marchuk cd $rootdir/isa-l-crypto 1232784b9d48SAlexey Marchuk ISAL_CRYPTO_LOG=$rootdir/isa-l-crypto/spdk-isal-crypto.log 1233784b9d48SAlexey Marchuk if [[ -n "${CONFIG[CROSS_PREFIX]}" ]]; then 1234784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--host=${CONFIG[CROSS_PREFIX]}") 1235784b9d48SAlexey Marchuk fi 1236784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--enable-shared=no") 1237784b9d48SAlexey Marchuk echo -n "Configuring ISA-L-crypto (logfile: $ISAL_CRYPTO_LOG)..." 1238784b9d48SAlexey Marchuk ./autogen.sh &> $ISAL_CRYPTO_LOG 1239784b9d48SAlexey Marchuk ./configure CFLAGS="-fPIC -g -O2" "${ISAL_CRYPTO_OPTS[@]}" >> $ISAL_CRYPTO_LOG 2>&1 1240784b9d48SAlexey Marchuk echo "done." 1241784b9d48SAlexey Marchuk cd $rootdir 1242784b9d48SAlexey Marchuk CONFIG[ISAL_CRYPTO]=y 1243784b9d48SAlexey Marchukelse 1244784b9d48SAlexey Marchuk CONFIG[ISAL_CRYPTO]=n 1245784b9d48SAlexey Marchukfi 1246784b9d48SAlexey Marchuk 1247509241ceSKonrad Sztyberif [[ "${CONFIG[SMA]}" = "y" ]]; then 1248509241ceSKonrad Sztyber if ! python3 -c 'import grpc; import grpc_tools' 2> /dev/null; then 1249509241ceSKonrad Sztyber echo "--with-sma requires grpcio and grpcio-tools python packages." 1250509241ceSKonrad Sztyber echo "Please install then re-run this script." 1251509241ceSKonrad Sztyber exit 1 1252509241ceSKonrad Sztyber fi 1253509241ceSKonrad Sztyberfi 1254509241ceSKonrad Sztyber 12552796687dSParameswaran Krishnamurthyif [[ "${CONFIG[AVAHI]}" = "y" ]]; then 12562796687dSParameswaran Krishnamurthy if ! echo -e '#include <avahi-client/client.h>\n#include <avahi-common/malloc.h>\n' \ 12572796687dSParameswaran Krishnamurthy 'int main(void) { return 0; }\n' \ 12582796687dSParameswaran Krishnamurthy | "${BUILD_CMD[@]}" -lavahi-client -lavahi-common - 2> /dev/null; then 12592796687dSParameswaran Krishnamurthy echo "--with-avahi requires libavahi-client and libavahi-common." 12602796687dSParameswaran Krishnamurthy echo "Please install then re-run this script." 12612796687dSParameswaran Krishnamurthy exit 1 12622796687dSParameswaran Krishnamurthy fi 12632796687dSParameswaran Krishnamurthyfi 12642796687dSParameswaran Krishnamurthy 12658247bd40SMarcin Spiewakif [[ -n ${CONFIG[MAX_LCORES]} ]]; then 126673293d73SMarcin Spiewak if [[ ! ${CONFIG[MAX_LCORES]} =~ ^([1-9][0-9]*|detect)$ ]] || ((CONFIG[MAX_LCORES] > 1024)); then 126773293d73SMarcin Spiewak echo "ERROR: Max number of lcores must be a decimal number in range [1..1024] or 'detect' (given: ${CONFIG[MAX_LCORES]})" 12688247bd40SMarcin Spiewak exit 1 12698247bd40SMarcin Spiewak fi 12708247bd40SMarcin Spiewakfi 12718247bd40SMarcin Spiewak 1272fcc38949SRui Chang# For ARM Neoverse-N1 platform, debug build needs gcc version newer than 8.4 1273fcc38949SRui Changif [[ "${CONFIG[DEBUG]}" = "y" && $arch = aarch64* && "$CC_TYPE" = "gcc" ]]; then 1274fcc38949SRui Chang GCC_VERSION=$($CC -dumpfullversion) 1275fcc38949SRui Chang PART_NUM=$(grep -i -m 1 "CPU part" /proc/cpuinfo | awk '{print $4}') 1276fcc38949SRui Chang 1277fcc38949SRui Chang if [[ "$(printf '%s\n' "8.4.0" "$GCC_VERSION" | sort -V | head -n1)" != "8.4.0" ]]; then 1278fcc38949SRui Chang if [[ $PART_NUM = 0xd0c ]]; then 1279fcc38949SRui Chang echo "WARNING: For ARM Neoverse-N1 platform, debug build needs GCC version newer than 8.4." 1280fcc38949SRui Chang echo " Will work around this by using armv8.2-a+crypto as target architecture for now." 1281fcc38949SRui Chang CONFIG[ARCH]=armv8.2-a+crypto 1282e8f84531SSunil Shahu elif [[ $PART_NUM = 0x0b2 ]]; then 1283e8f84531SSunil Shahu echo "WARNING: For ARM octeontx2 platform, debug build needs GCC version newer than 8.4." 1284e8f84531SSunil Shahu echo " Will work around this by using armv8.2-a+crypto as target architecture for now." 1285e8f84531SSunil Shahu CONFIG[ARCH]=armv8.2-a+crypto 1286fcc38949SRui Chang fi 1287fcc38949SRui Chang fi 1288fcc38949SRui Changfi 1289fcc38949SRui Chang 129048f70f48SPawel Wodkowski# We are now ready to generate final configuration. But first do sanity 129148f70f48SPawel Wodkowski# check to see if all keys in CONFIG array have its reflection in CONFIG file. 1292bb0f78a2SMichal Bergerif (($(grep -cE "^\s*CONFIG_[[:alnum:]_]+=" "$rootdir/CONFIG") != ${#CONFIG[@]})); then 129348f70f48SPawel Wodkowski echo "" 129448f70f48SPawel Wodkowski echo "BUG: Some configuration options are not present in CONFIG file. Please update this file." 129548f70f48SPawel Wodkowski echo "Missing options in CONFIG (+) file and in current config (-): " 129648f70f48SPawel Wodkowski diff -u --label "CONFIG file" --label "CONFIG[@]" \ 1297f8d6541dSMichal Berger <(sed -r -e '/^[[:space:]]*$/d; /^[[:space:]]*#.*/d; s/(CONFIG_[[:alnum:]_]+)=.*/\1/g' CONFIG | sort) \ 1298bb0f78a2SMichal Berger <(printf "CONFIG_%s\n" "${!CONFIG[@]}" | sort) 129948f70f48SPawel Wodkowski exit 1 130048f70f48SPawel Wodkowskifi 130148f70f48SPawel Wodkowski 130285bc2bbeSPawel Wodkowskiecho -n "Creating mk/config.mk..." 1303e62a3c65SSeth Howellcp -f $rootdir/CONFIG $rootdir/mk/config.mk 130451ab849bSJim HarrisARGS=$(echo "$@" | sed 's/ /\\ /g') 130551ab849bSJim Harrissed -i.bak -r "s#__CONFIGURE_OPTIONS__#${ARGS}#g" $rootdir/mk/config.mk 1306bb0f78a2SMichal Bergerfor key in "${!CONFIG[@]}"; do 1307f8d6541dSMichal Berger sed -i.bak -r "s#[[:space:]]*CONFIG_${key}=.*#CONFIG_${key}\?=${CONFIG[$key]}#g" $rootdir/mk/config.mk 1308577df16aSPawel Wodkowskidone 1309577df16aSPawel Wodkowski# On FreeBSD sed -i 'SUFFIX' - SUFFIX is mandatory. So no way but to delete the backed file. 1310e62a3c65SSeth Howellrm -f $rootdir/mk/config.mk.bak 1311baa6eac0SDarek Stojaczykecho "done." 13129dd998cdSBen Walker 131308ec96ebSDaniel Verkamp# Environment variables 1314baa6eac0SDarek Stojaczykecho -n "Creating mk/cc.flags.mk..." 1315e62a3c65SSeth Howellrm -f $rootdir/mk/cc.flags.mk 1316e62a3c65SSeth Howell[ -n "$CFLAGS" ] && echo "CFLAGS?=$CFLAGS" > $rootdir/mk/cc.flags.mk 1317e62a3c65SSeth Howell[ -n "$CXXFLAGS" ] && echo "CXXFLAGS?=$CXXFLAGS" >> $rootdir/mk/cc.flags.mk 1318e62a3c65SSeth Howell[ -n "$LDFLAGS" ] && echo "LDFLAGS?=$LDFLAGS" >> $rootdir/mk/cc.flags.mk 1319e62a3c65SSeth Howell[ -n "$DESTDIR" ] && echo "DESTDIR?=$DESTDIR" >> $rootdir/mk/cc.flags.mk 13200b56a5b4SJim Harrisecho "done." 132185bc2bbeSPawel Wodkowski 1322db3ebfe6SMichal Berger# Create .sh with build config for easy sourcing|lookup during the tests. 1323db3ebfe6SMichal Bergerfor conf in "${!CONFIG[@]}"; do 1324db3ebfe6SMichal Berger echo "CONFIG_$conf=${CONFIG[$conf]}" 1325db3ebfe6SMichal Bergerdone > "$rootdir/test/common/build_config.sh" 1326db3ebfe6SMichal Berger 13275a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 1328870ce250SPaul Luse echo "Type 'gmake' to build." 1329870ce250SPaul Luseelse 13300b56a5b4SJim Harris echo "Type 'make' to build." 1331870ce250SPaul Lusefi 13329dd998cdSBen Walker 13339dd998cdSBen Walkerexit 0 1334