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)" 313def834cSAmelia Blachuciak echo "" 329dd998cdSBen Walker echo " --enable-debug Configure for debug builds" 339dd998cdSBen Walker echo " --enable-werror Treat compiler warnings as errors" 349dd998cdSBen Walker echo " --enable-asan Enable address sanitizer" 359dd998cdSBen Walker echo " --enable-ubsan Enable undefined behavior sanitizer" 369dd998cdSBen Walker echo " --enable-coverage Enable code coverage tracking" 376d6d1161SDaniel Verkamp echo " --enable-lto Enable link-time optimization" 38995d60f4SBen Walker echo " --enable-pgo-capture Enable generation of profile guided optimization data" 39995d60f4SBen Walker echo " --enable-pgo-use Use previously captured profile guided optimization data" 4091e42257SJim Harris echo " --enable-cet Enable Intel Control-flow Enforcement Technology (CET)" 419fcb1cb0STomasz Zawadzki echo " --disable-tests Disable building of functional tests" 429fcb1cb0STomasz Zawadzki echo " --disable-unit-tests Disable building of unit tests" 439b2c6452SJacek Kalwas echo " --disable-examples Disable building of examples" 44119158cdSRajarshi Chowdhury echo " --disable-apps Disable building of apps" 459dd998cdSBen Walker echo "" 469dd998cdSBen Walker echo "Specifying Dependencies:" 479dd998cdSBen Walker echo "--with-DEPENDENCY[=path] Use the given dependency. Optionally, provide the" 489dd998cdSBen Walker echo " path." 499dd998cdSBen Walker echo "--without-DEPENDENCY Do not link to the given dependency. This may" 509dd998cdSBen Walker echo " disable features and components." 519dd998cdSBen Walker echo "" 529dd998cdSBen Walker echo "Valid dependencies are listed below." 532bc71094SMichal Berger echo " --with-dpdk[=DIR] Build against a custom dpdk version. By default, the dpdk" 542bc71094SMichal Berger echo " --without-dpdk submodule in spdk tree will be used." 559dd998cdSBen Walker echo " example: /usr/share/dpdk/x86_64-default-linuxapp-gcc" 562bc71094SMichal Berger echo " --with-env=DIR Use an alternate environment implementation instead of DPDK." 5706cc8045SBen Walker echo " Implies --without-dpdk." 582bc71094SMichal Berger echo " --with-idxd Build the IDXD library and accel framework plug-in module." 592bc71094SMichal Berger echo " --without-idxd Disabled while experimental. Only built for x86 when enabled." 60784b9d48SAlexey Marchuk echo " --with-crypto Build isa-l-crypto and vbdev crypto module. No path required." 61784b9d48SAlexey Marchuk echo " --without-crypto Disable isa-l-crypto and vbdev crypto module." 622bc71094SMichal Berger echo " --with-fio[=DIR] Build fio_plugin." 632bc71094SMichal Berger echo " --without-fio default: /usr/src/fio" 646f338d4bSKrishna Kanth Reddy echo " --with-xnvme Build xNVMe bdev module." 656f338d4bSKrishna Kanth Reddy echo " --without-xnvme No path required." 662bc71094SMichal Berger echo " --with-vhost Build vhost target. Enabled by default." 672bc71094SMichal Berger echo " --without-vhost No path required." 682bc71094SMichal Berger echo " --with-virtio Build vhost initiator and virtio-pci bdev modules." 692bc71094SMichal Berger echo " --without-virtio No path required." 70e50ade31SChangpeng Liu echo " --with-vfio-user[=DIR] Build custom vfio-user transport for NVMf target and vfio-user target." 71e50ade31SChangpeng Liu echo " vfio-user initiator is always built-in in Linux." 722f731c63SGangCao echo " example: /usr/src/libvfio-user" 732f731c63SGangCao echo " --without-vfio-user No path required." 74ebf077cbSyidong0635 echo " --with-pmdk[=DIR] Build persistent memory bdev. 75ebf077cbSyidong0635 example: /usr/share/pmdk" 76ebf077cbSyidong0635 echo " --without-pmdk 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." 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" 982bc71094SMichal Berger echo " --with-ocf[=DIR] Build OCF library and bdev module." 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 ;; 4399dd998cdSBen Walker --with-rbd) 440577df16aSPawel Wodkowski CONFIG[RBD]=y 4419dd998cdSBen Walker ;; 4429dd998cdSBen Walker --without-rbd) 443577df16aSPawel Wodkowski CONFIG[RBD]=n 4449dd998cdSBen Walker ;; 445daee62a0SAlexey Marchuk --with-rdma=*) 446daee62a0SAlexey Marchuk CONFIG[RDMA]=y 447daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]=${i#*=} 448daee62a0SAlexey Marchuk ;; 4499dd998cdSBen Walker --with-rdma) 450577df16aSPawel Wodkowski CONFIG[RDMA]=y 451daee62a0SAlexey Marchuk CONFIG[RDMA_PROV]="verbs" 4529dd998cdSBen Walker ;; 4539dd998cdSBen Walker --without-rdma) 454577df16aSPawel Wodkowski CONFIG[RDMA]=n 4559dd998cdSBen Walker ;; 456ed56a3d4SAnil Veerabhadrappa --with-fc=*) 457ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 458ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]=$(readlink -f ${i#*=}) 459ed56a3d4SAnil Veerabhadrappa ;; 460ed56a3d4SAnil Veerabhadrappa --with-fc) 461ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=y 462ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 463ed56a3d4SAnil Veerabhadrappa ;; 464ed56a3d4SAnil Veerabhadrappa --without-fc) 465ed56a3d4SAnil Veerabhadrappa CONFIG[FC]=n 466ed56a3d4SAnil Veerabhadrappa CONFIG[FC_PATH]= 467ed56a3d4SAnil Veerabhadrappa ;; 4682e283fcbS0xe0f --with-daos) 4692e283fcbS0xe0f CONFIG[DAOS]=y 470044bb175SDenis Barakthanov CONFIG[DAOS_DIR]="" 471044bb175SDenis Barakthanov ;; 472044bb175SDenis Barakthanov --with-daos=*) 473044bb175SDenis Barakthanov CONFIG[DAOS]=y 474044bb175SDenis Barakthanov check_dir "$i" 475044bb175SDenis Barakthanov CONFIG[DAOS_DIR]=$(readlink -f ${i#*=}) 4762e283fcbS0xe0f ;; 4772e283fcbS0xe0f --without-daos) 4782e283fcbS0xe0f CONFIG[DAOS]=n 4792e283fcbS0xe0f ;; 4800923734cSLance Hartmann --with-shared) 481577df16aSPawel Wodkowski CONFIG[SHARED]=y 4820923734cSLance Hartmann ;; 4830923734cSLance Hartmann --without-shared) 484577df16aSPawel Wodkowski CONFIG[SHARED]=n 4850923734cSLance Hartmann ;; 4862af15344SJim Harris --with-iscsi-initiator) 487577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=y 4882af15344SJim Harris ;; 4892af15344SJim Harris --without-iscsi-initiator) 490577df16aSPawel Wodkowski CONFIG[ISCSI_INITIATOR]=n 4912af15344SJim Harris ;; 4926118b853SDaniel Verkamp --with-crypto) 493577df16aSPawel Wodkowski CONFIG[CRYPTO]=y 4946118b853SDaniel Verkamp ;; 4956118b853SDaniel Verkamp --without-crypto) 496577df16aSPawel Wodkowski CONFIG[CRYPTO]=n 4976118b853SDaniel Verkamp ;; 49835260f2bSDaniel Verkamp --with-vhost) 499577df16aSPawel Wodkowski CONFIG[VHOST]=y 50035260f2bSDaniel Verkamp ;; 50135260f2bSDaniel Verkamp --without-vhost) 502577df16aSPawel Wodkowski CONFIG[VHOST]=n 50335260f2bSDaniel Verkamp ;; 5047dee96ceSDariusz Stojaczyk --with-virtio) 505577df16aSPawel Wodkowski CONFIG[VIRTIO]=y 5067dee96ceSDariusz Stojaczyk ;; 5077dee96ceSDariusz Stojaczyk --without-virtio) 508577df16aSPawel Wodkowski CONFIG[VIRTIO]=n 5097dee96ceSDariusz Stojaczyk ;; 510b30d57cdSChangpeng Liu --with-vfio-user) 511b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=y 512d0b2448bSChangpeng Liu CONFIG[VFIO_USER_DIR]="" 513d0b2448bSChangpeng Liu ;; 514d0b2448bSChangpeng Liu --with-vfio-user=*) 515d0b2448bSChangpeng Liu CONFIG[VFIO_USER]=y 516d0b2448bSChangpeng Liu check_dir "$i" 517d0b2448bSChangpeng Liu CONFIG[VFIO_USER_DIR]=$(readlink -f ${i#*=}) 518b30d57cdSChangpeng Liu ;; 519b30d57cdSChangpeng Liu --without-vfio-user) 520b30d57cdSChangpeng Liu CONFIG[VFIO_USER]=n 521b30d57cdSChangpeng Liu ;; 522218dcd84SJim Harris --with-pmdk) 523577df16aSPawel Wodkowski CONFIG[PMDK]=y 524577df16aSPawel Wodkowski CONFIG[PMDK_DIR]="" 525fca11f15SPiotr Pelplinski ;; 526218dcd84SJim Harris --with-pmdk=*) 527577df16aSPawel Wodkowski CONFIG[PMDK]=y 5281723a800SGangCao check_dir "$i" 529577df16aSPawel Wodkowski CONFIG[PMDK_DIR]=$(readlink -f ${i#*=}) 530fca11f15SPiotr Pelplinski ;; 531218dcd84SJim Harris --without-pmdk) 532577df16aSPawel Wodkowski CONFIG[PMDK]=n 533fca11f15SPiotr Pelplinski ;; 53419e2dc38Spaul luse --with-vbdev-compress) 53519e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=y 53697022803SJim Harris ;; 53719e2dc38Spaul luse --without-vbdev-compress) 53819e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=n 53997022803SJim Harris ;; 540976f8b09Spaul luse --with-dpdk-compressdev) 541976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=y 542976f8b09Spaul luse ;; 543976f8b09Spaul luse --without-dpdk-compressdev) 544976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=n 545976f8b09Spaul luse ;; 5466f338d4bSKrishna Kanth Reddy --with-xnvme) 5476f338d4bSKrishna Kanth Reddy CONFIG[XNVME]=y 5486f338d4bSKrishna Kanth Reddy ;; 5496f338d4bSKrishna Kanth Reddy --without-xnvme) 5506f338d4bSKrishna Kanth Reddy CONFIG[XNVME]=n 5516f338d4bSKrishna Kanth Reddy ;; 552c3329b52SMichal Berger --with-fio) ;& 5539dd998cdSBen Walker --with-fio=*) 554c3329b52SMichal Berger if [[ ${i#*=} != "$i" ]]; then 55511a5716dSMichal Berger CONFIG[FIO_SOURCE_DIR]=${i#*=} 556c3329b52SMichal Berger fi 557c3329b52SMichal Berger check_dir "--with-fio=${CONFIG[FIO_SOURCE_DIR]}" 55811a5716dSMichal Berger CONFIG[FIO_SOURCE_DIR]=$(readlink -f "${CONFIG[FIO_SOURCE_DIR]}") 559577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=y 5609dd998cdSBen Walker ;; 5619dd998cdSBen Walker --without-fio) 562577df16aSPawel Wodkowski CONFIG[FIO_PLUGIN]=n 5639dd998cdSBen Walker ;; 5645712088aSRoman Sudarikov --with-vtune=*) 5651723a800SGangCao check_dir "$i" 566577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]="${i#*=}" 567577df16aSPawel Wodkowski CONFIG[VTUNE]=y 5685712088aSRoman Sudarikov ;; 5695712088aSRoman Sudarikov --without-vtune) 570577df16aSPawel Wodkowski CONFIG[VTUNE_DIR]= 571577df16aSPawel Wodkowski CONFIG[VTUNE]=n 5725712088aSRoman Sudarikov ;; 57398d60de6SPiotr Pelplinski --with-ocf) 57498d60de6SPiotr Pelplinski CONFIG[OCF]=y 575985d6468SKamil Godzwon CONFIG[OCF_PATH]=$(readlink -f "$rootdir/ocf") 57698d60de6SPiotr Pelplinski ;; 577d1fee489SVitaliy Mysak --with-ocf=*) 578d1fee489SVitaliy Mysak CONFIG[OCF]=y 579d1fee489SVitaliy Mysak CONFIG[OCF_PATH]=$(readlink -f ${i#*=}) 580d1fee489SVitaliy Mysak ;; 581d1fee489SVitaliy Mysak --without-ocf) 582d1fee489SVitaliy Mysak CONFIG[OCF]=n 583d1fee489SVitaliy Mysak CONFIG[OCF_PATH]= 584d1fee489SVitaliy Mysak ;; 5858165bf71SBen Walker --with-uring=*) 5868165bf71SBen Walker CONFIG[URING]=y 5878165bf71SBen Walker CONFIG[URING_PATH]=$(readlink -f ${i#*=}) 5888165bf71SBen Walker ;; 5898165bf71SBen Walker --with-uring) 5908165bf71SBen Walker CONFIG[URING]=y 591958d196cSIndraneel M CONFIG[URING_ZNS]=y 5928165bf71SBen Walker CONFIG[URING_PATH]= 5938165bf71SBen Walker ;; 5948165bf71SBen Walker --without-uring) 5958165bf71SBen Walker CONFIG[URING]=n 5968165bf71SBen Walker CONFIG[URING_PATH]= 5978165bf71SBen Walker ;; 598958d196cSIndraneel M --without-uring-zns) 599958d196cSIndraneel M CONFIG[URING_ZNS]=n 6008b840195SIndraneel M ;; 60134192459SBoris Glimcher --with-openssl=*) 60234192459SBoris Glimcher check_dir "$i" 60334192459SBoris Glimcher CONFIG[OPENSSL_PATH]=$(readlink -f ${i#*=}) 60434192459SBoris Glimcher ;; 6057fa15e28SXiaodong Liu --with-fuse) 6067fa15e28SXiaodong Liu CONFIG[FUSE]=y 6077fa15e28SXiaodong Liu ;; 6087fa15e28SXiaodong Liu --without-fuse) 6097fa15e28SXiaodong Liu CONFIG[FUSE]=n 6107fa15e28SXiaodong Liu ;; 611805d9942STomasz Kulasek --with-nvme-cuse) 612805d9942STomasz Kulasek CONFIG[NVME_CUSE]=y 613805d9942STomasz Kulasek ;; 614805d9942STomasz Kulasek --without-nvme-cuse) 615805d9942STomasz Kulasek CONFIG[NVME_CUSE]=n 616805d9942STomasz Kulasek ;; 61783a4b155SArtur Paszkiewicz --with-raid5f) 61883a4b155SArtur Paszkiewicz CONFIG[RAID5F]=y 61973763d40SArtur Paszkiewicz ;; 62083a4b155SArtur Paszkiewicz --without-raid5f) 62183a4b155SArtur Paszkiewicz CONFIG[RAID5F]=n 62273763d40SArtur Paszkiewicz ;; 623e58e9fbdSpaul luse --with-idxd) 624e58e9fbdSpaul luse CONFIG[IDXD]=y 6252ed914f8SZiye Yang CONFIG[IDXD_KERNEL]=n 626e58e9fbdSpaul luse ;; 627e58e9fbdSpaul luse --without-idxd) 628e58e9fbdSpaul luse CONFIG[IDXD]=n 629e58e9fbdSpaul luse ;; 6305a1c74bfSJim Harris --with-usdt) 6315a1c74bfSJim Harris CONFIG[USDT]=y 6325a1c74bfSJim Harris ;; 6335a1c74bfSJim Harris --without-usdt) 6345a1c74bfSJim Harris CONFIG[USDT]=n 6355a1c74bfSJim Harris ;; 636050565e5SJim Harris --with-fuzzer) 637050565e5SJim Harris echo "Must specify fuzzer library path with --with-fuzzer" 638050565e5SJim Harris usage 639050565e5SJim Harris exit 1 640050565e5SJim Harris ;; 641050565e5SJim Harris --with-fuzzer=*) 642050565e5SJim Harris CONFIG[FUZZER]=y 643050565e5SJim Harris CONFIG[FUZZER_LIB]=$(readlink -f ${i#*=}) 644050565e5SJim Harris ;; 645050565e5SJim Harris --without-fuzzer) 646050565e5SJim Harris CONFIG[FUZZER]=n 647050565e5SJim Harris CONFIG[FUZZER_LIB]= 648050565e5SJim Harris ;; 649509241ceSKonrad Sztyber --with-sma) 650509241ceSKonrad Sztyber CONFIG[SMA]=y 651509241ceSKonrad Sztyber ;; 652509241ceSKonrad Sztyber --without-sma) 653509241ceSKonrad Sztyber CONFIG[SMA]=n 654509241ceSKonrad Sztyber ;; 6552796687dSParameswaran Krishnamurthy --with-avahi) 6562796687dSParameswaran Krishnamurthy CONFIG[AVAHI]=y 6572796687dSParameswaran Krishnamurthy ;; 6582796687dSParameswaran Krishnamurthy --without-avahi) 6592796687dSParameswaran Krishnamurthy CONFIG[AVAHI]=n 6602796687dSParameswaran Krishnamurthy ;; 6619dd998cdSBen Walker --) 6629dd998cdSBen Walker break 6639dd998cdSBen Walker ;; 6649dd998cdSBen Walker *) 6659dd998cdSBen Walker echo "Unrecognized option $i" 6669dd998cdSBen Walker usage 6679dd998cdSBen Walker exit 1 6685ccabc8fSMichal Berger ;; 6699dd998cdSBen Walker esac 6709dd998cdSBen Walkerdone 6719dd998cdSBen Walker 672131c9aadSAlexey Marchukif [[ $arch == x86_64* ]]; then 67310e1c615SFélix Piédallu BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS "-march=native") 674131c9aadSAlexey Marchukelse 67510e1c615SFélix Piédallu BUILD_CMD=($CC -o /dev/null -x c $CPPFLAGS $CFLAGS $LDFLAGS) 676131c9aadSAlexey Marchukfi 6776c23a6f4SMichal BergerBUILD_CMD+=(-I/usr/local/include -L/usr/local/lib) 67873439e6fSBen Walker 679b30d57cdSChangpeng Liuif [[ "${CONFIG[VFIO_USER]}" = "y" ]]; then 680421368c0SGreg Inozemtsev if ! echo -e '#include <json-c/json.h>' \ 681421368c0SGreg Inozemtsev | "${BUILD_CMD[@]}" -E - 2> /dev/null; then 6823b673b84SChangpeng Liu echo "ERROR: --with-vfio-user requires json-c-devel" 6833b673b84SChangpeng Liu echo "Please install then re-run this script" 6843b673b84SChangpeng Liu exit 1 6853b673b84SChangpeng Liu fi 686421368c0SGreg Inozemtsev if ! echo -e '#include <cmocka.h>' \ 687421368c0SGreg Inozemtsev | "${BUILD_CMD[@]}" -E - 2> /dev/null; then 6883b673b84SChangpeng Liu echo "ERROR: --with-vfio-user requires libcmocka-devel" 6893b673b84SChangpeng Liu echo "Please install then re-run this script" 6903b673b84SChangpeng Liu exit 1 691b30d57cdSChangpeng Liu fi 692b30d57cdSChangpeng Liufi 693b30d57cdSChangpeng Liu 694e58e9fbdSpaul luse# IDXD uses Intel specific instructions. 695e58e9fbdSpaul luseif [[ "${CONFIG[IDXD]}" = "y" ]]; then 6962755fbdfSpaul luse if [ $(uname -s) == "FreeBSD" ]; then 6972755fbdfSpaul luse intel="hw.model: Intel" 6982755fbdfSpaul luse cpu_vendor=$(sysctl -a | grep hw.model | cut -c 1-15) 6992755fbdfSpaul luse else 700e58e9fbdSpaul luse intel="GenuineIntel" 701e58e9fbdSpaul luse cpu_vendor=$(grep -i 'vendor' /proc/cpuinfo --max-count=1) 7022755fbdfSpaul luse fi 703e58e9fbdSpaul luse if [[ "$cpu_vendor" != *"$intel"* ]]; then 704ff238359SJosh Soref echo "ERROR: IDXD cannot be used due to CPU incompatibility." 705e58e9fbdSpaul luse exit 1 706e58e9fbdSpaul luse fi 7072ed914f8SZiye Yang if [ -e /usr/include/accel-config/libaccel_config.h ]; then 7082ed914f8SZiye Yang CONFIG[IDXD_KERNEL]=y 7092ed914f8SZiye Yang fi 7102ed914f8SZiye Yang 711e58e9fbdSpaul lusefi 712e58e9fbdSpaul luse 713577df16aSPawel Wodkowskiif [ -z "${CONFIG[ENV]}" ]; then 714577df16aSPawel Wodkowski CONFIG[ENV]=$rootdir/lib/env_dpdk 715577df16aSPawel Wodkowski echo "Using default SPDK env in ${CONFIG[ENV]}" 7167232c450SMichal Berger if [[ -z "${CONFIG[DPDK_DIR]}" && "${CONFIG[DPDK_PKG_CONFIG]}" == n ]]; then 71738e26cf5STomasz Zawadzki if [ ! -f "$rootdir"/dpdk/config/meson.build ]; then 718d199eb29SDaniel Verkamp echo "DPDK not found; please specify --with-dpdk=<path> or run:" 719d199eb29SDaniel Verkamp echo 720d199eb29SDaniel Verkamp echo " git submodule update --init" 721d199eb29SDaniel Verkamp exit 1 722577df16aSPawel Wodkowski else 723577df16aSPawel Wodkowski CONFIG[DPDK_DIR]="${rootdir}/dpdk/build" 724f1980244SYuriy Umanets # Default ipsec libs 72519518dfbSAleksey Marchuk if [[ "${CONFIG[CRYPTO]}" = "y" ]] && [[ $arch = x86_64* ]]; then 726f1980244SYuriy Umanets CONFIG[IPSEC_MB]=y 727f1980244SYuriy Umanets CONFIG[IPSEC_MB_DIR]="${rootdir}/intel-ipsec-mb/lib" 728f1980244SYuriy Umanets fi 729577df16aSPawel Wodkowski echo "Using default DPDK in ${CONFIG[DPDK_DIR]}" 730d199eb29SDaniel Verkamp fi 7319dd998cdSBen Walker fi 7327d2a2f52SBen Walkerelse 7337232c450SMichal Berger if [[ -n "${CONFIG[DPDK_DIR]}" || "${CONFIG[DPDK_PKG_CONFIG]}" == y ]]; then 73406cc8045SBen Walker echo "--with-env and --with-dpdk are mutually exclusive." 73506cc8045SBen Walker exit 1 73606cc8045SBen Walker fi 73706cc8045SBen Walker 738577df16aSPawel Wodkowski if [ "${CONFIG[VHOST]}" = "y" ]; then 7397d2a2f52SBen Walker echo "Vhost is only supported when using the default DPDK environment. Disabling it." 7407d2a2f52SBen Walker fi 7417d2a2f52SBen Walker # Always disable vhost, but only print the error message if the user explicitly turned it on. 742577df16aSPawel Wodkowski CONFIG[VHOST]="n" 743577df16aSPawel Wodkowski if [ "${CONFIG[VIRTIO]}" = "y" ]; then 7447d2a2f52SBen Walker echo "Virtio is only supported when using the default DPDK environment. Disabling it." 7457d2a2f52SBen Walker fi 7467d2a2f52SBen Walker # Always disable virtio, but only print the error message if the user explicitly turned it on. 747577df16aSPawel Wodkowski CONFIG[VIRTIO]="n" 7489dd998cdSBen Walkerfi 7499dd998cdSBen Walker 7507232c450SMichal Bergerif [[ "${CONFIG[DPDK_PKG_CONFIG]}" == y ]]; then 7517232c450SMichal Berger if [[ "${CONFIG[SHARED]}" == n ]]; then 7527232c450SMichal Berger # dpdk-devel doesn't provide static libs 7537232c450SMichal Berger echo "Build against packaged DPDK requested, enabling shared libraries" 7547232c450SMichal Berger CONFIG[SHARED]=y 7557232c450SMichal Berger fi 7567232c450SMichal Bergerfi 7577232c450SMichal Berger 7589854c138SNick Connollyif [[ $sys_name == "Windows" ]]; then 7599854c138SNick Connolly if [ -z "${CONFIG[WPDK_DIR]}" ]; then 7609854c138SNick Connolly if [ ! -f "$rootdir"/wpdk/Makefile ]; then 7619854c138SNick Connolly echo "WPDK not found; please specify --with-wpdk=<path>. See https://wpdk.github.io." 7629854c138SNick Connolly exit 1 7639854c138SNick Connolly else 7649854c138SNick Connolly CONFIG[WPDK_DIR]="${rootdir}/wpdk/build" 7659854c138SNick Connolly echo "Using default WPDK in ${CONFIG[WPDK_DIR]}" 7669854c138SNick Connolly fi 7679854c138SNick Connolly fi 7689854c138SNick Connollyelse 7699854c138SNick Connolly if [ -n "${CONFIG[WPDK_DIR]}" ]; then 7709854c138SNick Connolly echo "ERROR: --with-wpdk is only supported for Windows" 7719854c138SNick Connolly exit 1 7729854c138SNick Connolly fi 7739854c138SNick Connollyfi 7749854c138SNick Connolly 775577df16aSPawel Wodkowskiif [ "${CONFIG[VTUNE]}" = "y" ]; then 7766b97cccfSJim Harris echo "WARNING: VTune support is deprecated." 777577df16aSPawel Wodkowski if [ -z "${CONFIG[VTUNE_DIR]}" ]; then 7785712088aSRoman Sudarikov echo "When VTune is enabled, you must specify the VTune directory using --with-vtune=path" 7795712088aSRoman Sudarikov exit 1 7805712088aSRoman Sudarikov fi 7815712088aSRoman Sudarikovfi 7825712088aSRoman Sudarikov 783bb0f78a2SMichal Bergerif [[ "${CONFIG[ASAN]}" = "y" && "${CONFIG[TSAN]}" = "y" ]]; then 784830912e2SBen Walker echo "ERROR: ASAN and TSAN cannot be enabled at the same time." 785830912e2SBen Walker exit 1 786830912e2SBen Walkerfi 787830912e2SBen Walker 788ac5b53a5SJim Harrisif [[ "${CONFIG[FIO_PLUGIN]}" = "y" && "${CONFIG[EXAMPLES]}" = "n" ]]; then 789ac5b53a5SJim Harris echo "ERROR: --with-fio and --disable-examples are mutually exclusive." 790ac5b53a5SJim Harris exit 1 791ac5b53a5SJim Harrisfi 792ac5b53a5SJim Harris 7935a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 7945091cadcSPaul Luse # FreeBSD doesn't support all configurations 795577df16aSPawel Wodkowski if [[ "${CONFIG[COVERAGE]}" == "y" ]]; then 7965091cadcSPaul Luse echo "ERROR: CONFIG_COVERAGE not available on FreeBSD" 7975091cadcSPaul Luse exit 1 7985091cadcSPaul Luse fi 7995091cadcSPaul Lusefi 8005091cadcSPaul Luse 80125ac67f1SJim Harrisif [[ $sys_name == "Linux" ]]; then 80225ac67f1SJim Harris if pkg-config libbsd; then 80325ac67f1SJim Harris CONFIG[HAVE_LIBBSD]=y 80425ac67f1SJim Harris fi 80525ac67f1SJim Harrisfi 80625ac67f1SJim Harris 807544a8fe5SJim Harrisif pkg-config libarchive; then 808544a8fe5SJim Harris CONFIG[HAVE_LIBARCHIVE]=y 809544a8fe5SJim Harrisfi 810544a8fe5SJim Harris 8112a0c2a2dSNick Connollyif [[ $sys_name != "Linux" ]]; then 81227b920a2SDarek Stojaczyk if [[ "${CONFIG[VHOST]}" == "y" ]]; then 813873c8748STomasz Kulasek echo "Vhost is only supported on Linux." 814873c8748STomasz Kulasek exit 1 81527b920a2SDarek Stojaczyk fi 81627b920a2SDarek Stojaczyk if [[ "${CONFIG[VIRTIO]}" == "y" ]]; then 817873c8748STomasz Kulasek echo "Virtio is only supported on Linux." 818873c8748STomasz Kulasek exit 1 81927b920a2SDarek Stojaczyk fi 82027b920a2SDarek Stojaczykfi 82127b920a2SDarek Stojaczyk 822577df16aSPawel Wodkowskiif [ "${CONFIG[RDMA]}" = "y" ]; then 823daee62a0SAlexey Marchuk if [[ ! "${CONFIG[RDMA_PROV]}" == "verbs" ]] && [[ ! "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]]; then 824daee62a0SAlexey Marchuk echo "Invalid RDMA provider specified, must be \"verbs\" or \"mlx5_dv\"" 825daee62a0SAlexey Marchuk exit 1 826daee62a0SAlexey Marchuk fi 827daee62a0SAlexey Marchuk 828eed0c6beSDarek Stojaczyk if ! echo -e '#include <infiniband/verbs.h>\n#include <rdma/rdma_verbs.h>\n' \ 829eed0c6beSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 830bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -libverbs -lrdmacm - 2> /dev/null; then 831bb0f78a2SMichal Berger echo "--with-rdma requires libverbs and librdmacm." 832bb0f78a2SMichal Berger echo "Please install then re-run this script." 833eed0c6beSDarek Stojaczyk exit 1 834eed0c6beSDarek Stojaczyk fi 835eed0c6beSDarek Stojaczyk 836eed0c6beSDarek Stojaczyk if echo -e '#include <infiniband/verbs.h>\n' \ 837eed0c6beSDarek Stojaczyk 'int main(void) { return !!IBV_WR_SEND_WITH_INV; }\n' \ 838bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 839577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="y" 8407671073bSSeth Howell else 841577df16aSPawel Wodkowski CONFIG[RDMA_SEND_WITH_INVAL]="n" 84217a819f8SJim Harris echo " 8437671073bSSeth Howell******************************************************************************* 8447671073bSSeth HowellWARNING: The Infiniband Verbs opcode Send With Invalidate is either not 8457671073bSSeth Howellsupported or is not functional with the current version of libibverbs installed 8467671073bSSeth Howellon this system. Please upgrade to at least version 1.1. 8477671073bSSeth Howell 8487671073bSSeth HowellBeginning with Linux kernel 4.14, the kernel NVMe-oF initiator leverages Send 8497671073bSSeth HowellWith Invalidate RDMA operations to improve performance. Failing to use the 8507671073bSSeth HowellSend With Invalidate operation on the NVMe-oF target side results in full 8517671073bSSeth Howellfunctionality, but greatly reduced performance. The SPDK NVMe-oF target will 8527671073bSSeth Howellbe unable to leverage that operation using the currently installed version 8537671073bSSeth Howellof libibverbs, so Linux kernel NVMe-oF initiators based on kernels greater 8547671073bSSeth Howellthan or equal to 4.14 will see significantly reduced performance. 85517a819f8SJim Harris*******************************************************************************" 8567671073bSSeth Howell fi 85794966468SAlexey Marchuk 85894966468SAlexey Marchuk if echo -e '#include <rdma/rdma_cma.h>\n' \ 85994966468SAlexey Marchuk 'int main(void) { return !!RDMA_OPTION_ID_ACK_TIMEOUT; }\n' \ 860bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 86194966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="y" 86294966468SAlexey Marchuk else 86394966468SAlexey Marchuk CONFIG[RDMA_SET_ACK_TIMEOUT]="n" 86494966468SAlexey Marchuk echo "RDMA_OPTION_ID_ACK_TIMEOUT is not supported" 86594966468SAlexey Marchuk fi 86694966468SAlexey Marchuk 8677706450fSMichael Haeuptle if echo -e '#include <rdma/rdma_cma.h>\n' \ 8687706450fSMichael Haeuptle 'int main(void) { return !!RDMA_OPTION_ID_TOS; }\n' \ 8697706450fSMichael Haeuptle | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 8707706450fSMichael Haeuptle CONFIG[RDMA_SET_TOS]="y" 8717706450fSMichael Haeuptle else 8727706450fSMichael Haeuptle CONFIG[RDMA_SET_TOS]="n" 8737706450fSMichael Haeuptle echo "RDMA_OPTION_ID_TOS is not supported" 8747706450fSMichael Haeuptle fi 8757706450fSMichael Haeuptle 876daee62a0SAlexey Marchuk if [ "${CONFIG[RDMA_PROV]}" == "mlx5_dv" ]; then 877*a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD=" 878*a1dfa7ecSAlexey Marchuk #include <infiniband/mlx5dv.h>\n 879*a1dfa7ecSAlexey Marchuk #include <rdma/rdma_cma.h>\n 880*a1dfa7ecSAlexey Marchuk int main(void) { return rdma_establish(NULL) ||\n 881*a1dfa7ecSAlexey Marchuk !!IBV_QP_INIT_ATTR_SEND_OPS_FLAGS || !!MLX5_OPCODE_RDMA_WRITE" 882*a1dfa7ecSAlexey Marchuk if [ "${CONFIG[CRYPTO]}" = "y" ]; then 883*a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD+="|| !!MLX5DV_CRYPTO_ENGINES_CAP_AES_XTS_SINGLE_BLOCK" 884*a1dfa7ecSAlexey Marchuk fi 885*a1dfa7ecSAlexey Marchuk MLX5_DV_BUILD_BUILD_CMD+=";}" 886*a1dfa7ecSAlexey Marchuk if ! echo -e $MLX5_DV_BUILD_BUILD_CMD | "${BUILD_CMD[@]}" -lmlx5 -I${rootdir}/include -c -; then 887daee62a0SAlexey Marchuk echo "mlx5_dv provider is not supported" 888daee62a0SAlexey Marchuk exit 1 889daee62a0SAlexey Marchuk fi 890daee62a0SAlexey Marchuk fi 891daee62a0SAlexey Marchuk 892bb0f78a2SMichal Berger echo "Using '${CONFIG[RDMA_PROV]}' RDMA provider" 8937671073bSSeth Howellfi 8947671073bSSeth Howell 895ed56a3d4SAnil Veerabhadrappaif [[ "${CONFIG[FC]}" = "y" ]]; then 896ed56a3d4SAnil Veerabhadrappa if [[ -n "${CONFIG[FC_PATH]}" ]]; then 897c9b4654bSTomasz Zawadzki check_dir "${CONFIG[FC_PATH]}" 898ed56a3d4SAnil Veerabhadrappa fi 899ed56a3d4SAnil Veerabhadrappafi 900ed56a3d4SAnil Veerabhadrappa 901ce711726SDarek Stojaczykif [[ "${CONFIG[PMDK]}" = "y" ]]; then 902ce711726SDarek Stojaczyk if ! echo -e '#include <libpmemblk.h>\nint main(void) { return 0; }\n' \ 903bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lpmemblk - 2> /dev/null; then 904bb0f78a2SMichal Berger echo "--with-pmdk requires libpmemblk." 905bb0f78a2SMichal Berger echo "Please install then re-run this script." 906ce711726SDarek Stojaczyk exit 1 907ce711726SDarek Stojaczyk fi 908ce711726SDarek Stojaczykfi 909ce711726SDarek Stojaczyk 9102a6ddeb8SYuriy Umanetsfunction dpdk_version() { 9112a6ddeb8SYuriy Umanets # Check DPDK version to determine if mlx5_pci driver is supported 9122a6ddeb8SYuriy Umanets local dpdk_ver="none" 9132a6ddeb8SYuriy Umanets if [[ "${CONFIG[DPDK_DIR]}" == "$rootdir/dpdk/build" ]]; then 9142a6ddeb8SYuriy Umanets # DPDK_DIR points at our submodule so ./build may not exist yet. Use 9152a6ddeb8SYuriy Umanets # absolute path to lookup the version. 9162a6ddeb8SYuriy Umanets dpdk_ver=$(< "$rootdir/dpdk/VERSION") 9172a6ddeb8SYuriy Umanets elif [[ -f "${CONFIG[DPDK_DIR]}"/../VERSION ]]; then 9182a6ddeb8SYuriy Umanets dpdk_ver=$(< "${CONFIG[DPDK_DIR]}"/../VERSION) 9192a6ddeb8SYuriy Umanets fi 9202a6ddeb8SYuriy Umanets echo $dpdk_ver 9212a6ddeb8SYuriy Umanets} 9222a6ddeb8SYuriy Umanets 9232a6ddeb8SYuriy Umanetsfunction mlx5_build() { 9242a6ddeb8SYuriy Umanets # Check if libmlx5 exists to enable mlx5_pci compress/crypto PMD 9252a6ddeb8SYuriy Umanets if ! echo -e '#include <spdk/stdinc.h>\n' \ 9262a6ddeb8SYuriy Umanets '#include <infiniband/mlx5dv.h>\n' \ 9272a6ddeb8SYuriy Umanets '#include <infiniband/verbs.h>\n' \ 9282a6ddeb8SYuriy Umanets 'int main(void) { return 0; }\n' \ 9292a6ddeb8SYuriy Umanets | "${BUILD_CMD[@]}" -lmlx5 -libverbs -I${rootdir}/include -c - 2> /dev/null; then 9302a6ddeb8SYuriy Umanets return 1 9312a6ddeb8SYuriy Umanets fi 9322a6ddeb8SYuriy Umanets return 0 9332a6ddeb8SYuriy Umanets} 9342a6ddeb8SYuriy Umanets 93519e2dc38Spaul luseif [[ "${CONFIG[VBDEV_COMPRESS]}" = "y" ]]; then 936c4a3b312SDarek Stojaczyk if ! echo -e '#include <libpmem.h>\nint main(void) { return 0; }\n' \ 937bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lpmem - 2> /dev/null; then 93819e2dc38Spaul luse echo "--with-vbdev-compress requires libpmem." 939bb0f78a2SMichal Berger echo "Please install then re-run this script." 94097022803SJim Harris exit 1 94197022803SJim Harris fi 9422a6ddeb8SYuriy Umanets # Try to enable mlx5 compress 94319e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="y" 9442a6ddeb8SYuriy Umanets 945e71ae467SAlexey Marchuk # Check if libmlx5 exists to enable mlx5_pci compress PMD 9462a6ddeb8SYuriy Umanets if ! mlx5_build; then 947e71ae467SAlexey Marchuk echo "libmlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 94819e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9492a6ddeb8SYuriy Umanets else 950e71ae467SAlexey Marchuk if [[ "${CONFIG[DPDK_PKG_CONFIG]}" = "y" ]]; then 951e71ae467SAlexey Marchuk # Check if librte_compress_mlx5 exists in DPDK package 952e71ae467SAlexey Marchuk if [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_compress_mlx5.so ]; then 953e71ae467SAlexey Marchuk echo "librte_compress_mlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 95419e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 955e71ae467SAlexey Marchuk fi 956e71ae467SAlexey Marchuk else 957e71ae467SAlexey Marchuk # Check DPDK version to determine if mlx5_pci driver is supported 9582a6ddeb8SYuriy Umanets dpdk_ver=$(dpdk_version) 9592a6ddeb8SYuriy Umanets if [[ $dpdk_ver = "none" ]]; then 960c2de56b0SMichal Berger echo "Cannot get DPDK version, so disabling DPDK mlx5_pci compress PMD" 96119e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9622a6ddeb8SYuriy Umanets elif [[ -n $dpdk_ver ]] && lt "$dpdk_ver" 21.02.0; then 9632a6ddeb8SYuriy Umanets # mlx5_pci for compress is supported by DPDK >- 21.02.0 964c2de56b0SMichal Berger echo "DPDK version ${dpdk_ver} doesn't support mlx5_pci compress PMD" 96519e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9662a6ddeb8SYuriy Umanets elif [[ -n ${CONFIG[DPDK_LIB_DIR]} ]] && [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_compress_mlx5.so ]; then 9672a6ddeb8SYuriy Umanets # This is only checked when --with-dpdk or --with-dpdk=* is used 9682a6ddeb8SYuriy Umanets echo "librte_compress_mlx5 is not found, so disabling DPDK mlx5_pci compress PMD" 96919e2dc38Spaul luse CONFIG[VBDEV_COMPRESS_MLX5]="n" 9702a6ddeb8SYuriy Umanets fi 9712a6ddeb8SYuriy Umanets fi 9722a6ddeb8SYuriy Umanets fi 9732a6ddeb8SYuriy Umanetsfi 9742a6ddeb8SYuriy Umanets 9752a6ddeb8SYuriy Umanetsif [[ "${CONFIG[CRYPTO]}" = "y" ]]; then 9762a6ddeb8SYuriy Umanets # Try to enable mlx5 crypto 9772a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="y" 9782a6ddeb8SYuriy Umanets 9792a6ddeb8SYuriy Umanets # Check if libmlx5 exists to enable mlx5_pci compress PMD 9802a6ddeb8SYuriy Umanets if ! mlx5_build; then 9812a6ddeb8SYuriy Umanets echo "libmlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 9822a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9832a6ddeb8SYuriy Umanets else 9842a6ddeb8SYuriy Umanets if [[ "${CONFIG[DPDK_PKG_CONFIG]}" = "y" ]]; then 9852a6ddeb8SYuriy Umanets # Check if librte_crypto_mlx5 exists in DPDK package 9862a6ddeb8SYuriy Umanets if [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_crypto_mlx5.so ]; then 9872a6ddeb8SYuriy Umanets echo "librte_crypto_mlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 9882a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9892a6ddeb8SYuriy Umanets fi 9902a6ddeb8SYuriy Umanets else 9912a6ddeb8SYuriy Umanets # Check DPDK version to determine if mlx5_pci driver is supported 9922a6ddeb8SYuriy Umanets dpdk_ver=$(dpdk_version) 9932a6ddeb8SYuriy Umanets if [[ $dpdk_ver = "none" ]]; then 9942a6ddeb8SYuriy Umanets echo "Cannot get DPDK version, so disabling DPDK mlx5_pci crypto PMD" 9952a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 9968a2fc789SYuriy Umanets elif [[ -n $dpdk_ver ]] && lt "$dpdk_ver" 21.11.0; then 9978a2fc789SYuriy Umanets # mlx5_pci for crypto is supported by DPDK >- 21.11.0 9982a6ddeb8SYuriy Umanets echo "DPDK version ${dpdk_ver} doesn't support mlx5_pci crypto PMD" 9992a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 10002a6ddeb8SYuriy Umanets elif [[ -n ${CONFIG[DPDK_LIB_DIR]} ]] && [ ! -f "${CONFIG[DPDK_LIB_DIR]}"/librte_crypto_mlx5.so ]; then 10012a6ddeb8SYuriy Umanets # This is only checked when --with-dpdk or --with-dpdk=* is used 10022a6ddeb8SYuriy Umanets echo "librte_crypto_mlx5 is not found, so disabling DPDK mlx5_pci crypto PMD" 10032a6ddeb8SYuriy Umanets CONFIG[CRYPTO_MLX5]="n" 10042a6ddeb8SYuriy Umanets fi 1005e71ae467SAlexey Marchuk fi 1006e269bf4eSAlexey Marchuk fi 100797022803SJim Harrisfi 100897022803SJim Harris 1009805d9942STomasz Kulasekif [[ "${CONFIG[NVME_CUSE]}" = "y" ]]; then 1010805d9942STomasz 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' \ 1011bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lfuse3 -D_FILE_OFFSET_BITS=64 - 2> /dev/null; then 1012bb0f78a2SMichal Berger echo "--with-cuse requires libfuse3." 1013bb0f78a2SMichal Berger echo "Please install then re-run this script." 1014805d9942STomasz Kulasek exit 1 1015805d9942STomasz Kulasek fi 1016805d9942STomasz Kulasekfi 1017805d9942STomasz Kulasek 101855bd0d3aSDarek Stojaczykif [[ "${CONFIG[RBD]}" = "y" ]]; then 101955bd0d3aSDarek Stojaczyk if ! echo -e '#include <rbd/librbd.h>\n#include <rados/librados.h>\n' \ 102055bd0d3aSDarek Stojaczyk 'int main(void) { return 0; }\n' \ 1021bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -lrados -lrbd - 2> /dev/null; then 1022bb0f78a2SMichal Berger echo "--with-rbd requires librados and librbd." 1023bb0f78a2SMichal Berger echo "Please install then re-run this script." 102455bd0d3aSDarek Stojaczyk exit 1 102555bd0d3aSDarek Stojaczyk fi 102655bd0d3aSDarek Stojaczykfi 102755bd0d3aSDarek Stojaczyk 10285cb18040SDarek Stojaczykif [[ "${CONFIG[ISCSI_INITIATOR]}" = "y" ]]; then 10295cb18040SDarek Stojaczyk # Fedora installs libiscsi to /usr/lib64/iscsi for some reason. 10305cb18040SDarek Stojaczyk if ! echo -e '#include <iscsi/iscsi.h>\n#include <iscsi/scsi-lowlevel.h>\n' \ 10315cb18040SDarek Stojaczyk '#if LIBISCSI_API_VERSION < 20150621\n' \ 10325cb18040SDarek Stojaczyk '#error\n' \ 10335cb18040SDarek Stojaczyk '#endif\n' \ 10345cb18040SDarek Stojaczyk 'int main(void) { return 0; }\n' \ 1035bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -L/usr/lib64/iscsi -liscsi - 2> /dev/null; then 1036bb0f78a2SMichal Berger echo "--with-iscsi-initiator requires libiscsi with" 1037bb0f78a2SMichal Berger echo "LIBISCSI_API_VERSION >= 20150621." 1038bb0f78a2SMichal Berger echo "Please install then re-run this script." 10395cb18040SDarek Stojaczyk exit 1 10405cb18040SDarek Stojaczyk fi 10415cb18040SDarek Stojaczykfi 10425cb18040SDarek Stojaczyk 10432e283fcbS0xe0fif [[ "${CONFIG[DAOS]}" = "y" ]]; then 1044044bb175SDenis Barakthanov daos_build_cmd=("${BUILD_CMD[@]}") 1045044bb175SDenis Barakthanov if [[ -n "${CONFIG[DAOS_DIR]}" ]]; then 1046044bb175SDenis Barakthanov daos_build_cmd+=(-I"${CONFIG[DAOS_DIR]}"/include -L"${CONFIG[DAOS_DIR]}"/lib64) 1047044bb175SDenis Barakthanov fi 10482e283fcbS0xe0f if ! echo -e '#include <daos.h>\n#include <daos_fs.h>\n' \ 10492e283fcbS0xe0f 'int main(void) { return 0; }\n' \ 1050044bb175SDenis Barakthanov | "${daos_build_cmd[@]}" -lgurt -ldaos -ldaos_common -ldfs - 2> /dev/null; then 10512e283fcbS0xe0f echo "--with-daos requires libdaos, libdaos_common, libdfs and libgurt" 10522e283fcbS0xe0f echo "Please install then re-run this script." 10532e283fcbS0xe0f exit 1 10542e283fcbS0xe0f fi 10552e283fcbS0xe0ffi 10562e283fcbS0xe0f 10573674c1d3SDarek Stojaczykif [[ "${CONFIG[ASAN]}" = "y" ]]; then 10583674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1059bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=address - 2> /dev/null; then 1060bb0f78a2SMichal Berger echo "--enable-asan requires libasan." 1061bb0f78a2SMichal Berger echo "Please install then re-run this script." 10623674c1d3SDarek Stojaczyk exit 1 10633674c1d3SDarek Stojaczyk fi 10643674c1d3SDarek Stojaczykfi 10653674c1d3SDarek Stojaczyk 10663674c1d3SDarek Stojaczykif [[ "${CONFIG[UBSAN]}" = "y" ]]; then 10673674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1068bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=undefined - 2> /dev/null; then 1069bb0f78a2SMichal Berger echo "--enable-ubsan requires libubsan." 1070bb0f78a2SMichal Berger echo "Please install then re-run this script." 1071bb0f78a2SMichal Berger echo "If installed, please check that the GCC version is at least 6.4" 1072bb0f78a2SMichal Berger echo "and synchronize CC accordingly." 10733674c1d3SDarek Stojaczyk exit 1 10743674c1d3SDarek Stojaczyk fi 10753674c1d3SDarek Stojaczykfi 10763674c1d3SDarek Stojaczyk 10773674c1d3SDarek Stojaczykif [[ "${CONFIG[TSAN]}" = "y" ]]; then 10783674c1d3SDarek Stojaczyk if ! echo -e 'int main(void) { return 0; }\n' \ 1079bb0f78a2SMichal Berger | "${BUILD_CMD[@]}" -fsanitize=thread - 2> /dev/null; then 1080bb0f78a2SMichal Berger echo "--enable-tsan requires libtsan." 1081bb0f78a2SMichal Berger echo "Please install then re-run this script." 10823674c1d3SDarek Stojaczyk exit 1 10833674c1d3SDarek Stojaczyk fi 10843674c1d3SDarek Stojaczykfi 10853674c1d3SDarek Stojaczyk 108643a3984cSJim Harrisif echo -e '#include <stdlib.h>\nint main(void) { arc4random(); return 0; }\n' \ 108743a3984cSJim Harris | "${BUILD_CMD[@]}" - 2> /dev/null; then 108843a3984cSJim Harris CONFIG[HAVE_ARC4RANDOM]="y" 108943a3984cSJim Harrisfi 109043a3984cSJim Harris 1091d1fee489SVitaliy Mysakif [[ "${CONFIG[OCF]}" = "y" ]]; then 1092d1fee489SVitaliy Mysak # If OCF_PATH is a file, assume it is a library and use it to compile with 1093d1fee489SVitaliy Mysak if [ -f ${CONFIG[OCF_PATH]} ]; then 1094d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=y 1095d1fee489SVitaliy Mysak else 1096d1fee489SVitaliy Mysak CONFIG[CUSTOMOCF]=n 1097d1fee489SVitaliy Mysak fi 1098d1fee489SVitaliy Mysakfi 1099d1fee489SVitaliy Mysak 1100995d60f4SBen Walkerif [[ "${CONFIG[PGO_CAPTURE]}" = "y" && "${CONFIG[PGO_USE]}" = "y" ]]; then 1101995d60f4SBen Walker echo "ERROR: --enable-pgo-capture and --enable-pgo-use are mutually exclusive." 1102995d60f4SBen Walker exit 1 1103954728e9SBen Walkerelif [[ "${CONFIG[PGO_USE]}" = "y" ]]; then 1104954728e9SBen Walker if [[ "$CC_TYPE" = "clang" ]]; then 1105954728e9SBen Walker # For clang we need to run an extra step on gathered profiling data. 1106954728e9SBen Walker echo "Generating suitable profile data" 1107954728e9SBen Walker llvm-profdata merge -output=build/pgo/default.profdata build/pgo 1108954728e9SBen Walker fi 1109995d60f4SBen Walkerfi 1110995d60f4SBen Walker 111187757389SSimon A. F. Lundif [[ "${CONFIG[URING]}" = "y" || "${CONFIG[XNVME]}" = "y" ]]; then 11128165bf71SBen Walker if [[ -n "${CONFIG[URING_PATH]}" ]]; then 1113c9b4654bSTomasz Zawadzki check_dir "${CONFIG[URING_PATH]}" 11144ccc9ea3SJim Harris elif ! echo -e '#include <liburing.h>\nint main(void) { return 0; }\n' \ 11154ccc9ea3SJim Harris | "${BUILD_CMD[@]}" -luring - 2> /dev/null; then 11164ccc9ea3SJim Harris echo "--with-uring requires liburing." 11174ccc9ea3SJim Harris echo "Please build and install then re-run this script." 11184ccc9ea3SJim Harris exit 1 11198165bf71SBen Walker fi 1120958d196cSIndraneel M # Support for Zoned devices is enabled by default for Uring bdev. Check appropriate support in kernel. 11218b840195SIndraneel M if [[ "${CONFIG[URING_ZNS]}" = "y" ]]; then 11228b840195SIndraneel M if ! echo -e '#include<linux/blkzoned.h>\nint main(void) { return BLK_ZONE_REP_CAPACITY; }\n' \ 11238b840195SIndraneel M | "${BUILD_CMD[@]}" -c - 2> /dev/null; then 1124958d196cSIndraneel M echo "Disabling Zoned NS support in Uring! Requires blkzoned.h from kernel >= linux-5.9." 1125958d196cSIndraneel M CONFIG[URING_ZNS]=n 1126958d196cSIndraneel M fi 11278b840195SIndraneel M fi 11288b840195SIndraneel Mfi 11298b840195SIndraneel M 11307fa15e28SXiaodong Liuif [[ "${CONFIG[FUSE]}" = "y" ]]; then 11317fa15e28SXiaodong Liu if [[ ! -d /usr/include/fuse3 ]] && [[ ! -d /usr/local/include/fuse3 ]]; then 11327fa15e28SXiaodong Liu echo "--with-fuse requires libfuse3." 11337fa15e28SXiaodong Liu echo "Please install then re-run this script." 11347fa15e28SXiaodong Liu exit 1 11357fa15e28SXiaodong Liu fi 11367fa15e28SXiaodong Liufi 11377fa15e28SXiaodong Liu 113891e42257SJim Harrisif [ "${CONFIG[CET]}" = "y" ]; then 1139bb0f78a2SMichal Berger if ! echo -e 'int main(void) { return 0; }\n' | "${BUILD_CMD[@]}" -fcf-protection - 2> /dev/null; then 1140bb0f78a2SMichal Berger echo "--enable-cet requires compiler/linker that supports CET." 1141bb0f78a2SMichal Berger echo "Please install then re-run this script." 114291e42257SJim Harris exit 1 114391e42257SJim Harris fi 114491e42257SJim Harrisfi 114591e42257SJim Harris 1146050565e5SJim Harrisif [[ "${CONFIG[FUZZER]}" = "y" && "$CC_TYPE" != "clang" ]]; then 1147050565e5SJim Harris echo "--with-fuzzer requires setting CC and CXX to clang." 1148050565e5SJim Harris exit 1 1149050565e5SJim Harrisfi 1150050565e5SJim Harris 1151dd2c08d2Spaul luseif [[ $arch == x86_64* ]] || [[ $arch == aarch64* ]]; then 1152dd2c08d2Spaul luse CONFIG[ISAL]=y 1153dd2c08d2Spaul luse # make sure the submodule is initialized 11549d2f6f86SJim Harris if [ ! -f "$rootdir"/isa-l/autogen.sh ]; then 1155dd2c08d2Spaul luse echo "ISA-L is required but was not found, please init the submodule with:" 11569d2f6f86SJim Harris echo " git submodule update --init" 1157dd2c08d2Spaul luse echo "and then re-run this script." 11589d2f6f86SJim Harris exit 1 11599d2f6f86SJim Harris fi 1160dd2c08d2Spaul luse # for x86 only, check the nasm version for ISA-L and IPSEC 1161dd2c08d2Spaul luse if [[ $arch == x86_64* ]]; then 1162dd2c08d2Spaul luse ver=$(nasm -v 2> /dev/null | awk '{print $3}' | awk -Fr '{print $1}') 1163dd2c08d2Spaul luse if lt "$ver" 2.14; then 1164dd2c08d2Spaul luse CONFIG[ISAL]=n 1165dd2c08d2Spaul luse # IPSEC has nasm requirement and DPDK crypto relies on IPSEC 1166dd2c08d2Spaul luse CONFIG[IPSEC_MB]=n 1167dd2c08d2Spaul luse echo "WARNING: ISA-L & DPDK crypto cannot be used as nasm ver must be 2.14 or newer." 1168dd2c08d2Spaul luse fi 1169dd2c08d2Spaul luse fi 1170784b9d48SAlexey Marchuk # check gas version on aarch64 1171784b9d48SAlexey Marchuk if [[ $arch == aarch64* ]]; then 1172784b9d48SAlexey Marchuk ver=$(as --version 2> /dev/null | awk 'NR==1{print $7}') 1173784b9d48SAlexey Marchuk if lt "$ver" 2.24; then 1174784b9d48SAlexey Marchuk # ISA-L, compression & crypto require gas version 2.24 or newer. 1175784b9d48SAlexey Marchuk CONFIG[ISAL]=n 1176784b9d48SAlexey Marchuk echo "Notice: ISA-L, compression & crypto require GAS version 2.24 or newer. Turning off default ISA-L and crypto features." 1177784b9d48SAlexey Marchuk elif lt "$ver" 2.34; then 1178784b9d48SAlexey Marchuk #For gas v2.24~v2.34, sve2 instructions are not supported. To workaround it, sve2 optimization should be disabled 1179784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--disable-sve2") 1180784b9d48SAlexey Marchuk fi 1181784b9d48SAlexey Marchuk fi 1182dd2c08d2Spaul luseelse 1183dd2c08d2Spaul luse # for PPC 1184dd2c08d2Spaul luse CONFIG[ISAL]=n 1185dd2c08d2Spaul luse echo "WARNING: ISA-L cannot be used due to architecture incompatibility." 1186dd2c08d2Spaul lusefi 11879d2f6f86SJim Harris 1188dd2c08d2Spaul luse# now either configure ISA-L or disable unavailable features 1189dd2c08d2Spaul luseif [[ "${CONFIG[ISAL]}" = "y" ]]; then 11909d2f6f86SJim Harris cd $rootdir/isa-l 11919d2f6f86SJim Harris ISAL_LOG=$rootdir/isa-l/spdk-isal.log 11929d2f6f86SJim Harris if [[ -n "${CONFIG[CROSS_PREFIX]}" ]]; then 11939d2f6f86SJim Harris ISAL_OPTS=("--host=${CONFIG[CROSS_PREFIX]}") 11949d2f6f86SJim Harris else 11959d2f6f86SJim Harris ISAL_OPTS=() 11969d2f6f86SJim Harris fi 11979d2f6f86SJim Harris echo -n "Configuring ISA-L (logfile: $ISAL_LOG)..." 11989d2f6f86SJim Harris ./autogen.sh &> $ISAL_LOG 11999d2f6f86SJim Harris ./configure CFLAGS="-fPIC -g -O2" "${ISAL_OPTS[@]}" --enable-shared=no >> $ISAL_LOG 2>&1 12009d2f6f86SJim Harris echo "done." 12019d2f6f86SJim Harris cd $rootdir 1202dd2c08d2Spaul luseelse 1203dd2c08d2Spaul luse echo "Without ISA-L, there is no software support for crypto or compression," 1204dd2c08d2Spaul luse echo "so these features will be disabled." 1205dd2c08d2Spaul luse CONFIG[CRYPTO]=n 120619e2dc38Spaul luse CONFIG[VBDEV_COMPRESS]=n 1207976f8b09Spaul luse CONFIG[DPDK_COMPRESSDEV]=n 12089d2f6f86SJim Harrisfi 12099d2f6f86SJim Harris 1210784b9d48SAlexey Marchuk# ISA-L-crypto complements ISA-L functionality, it is only enabled together with ISA-L 1211784b9d48SAlexey Marchukif [[ "${CONFIG[ISAL]}" = "y" ]]; then 1212784b9d48SAlexey Marchuk if [ ! -f "$rootdir"/isa-l-crypto/autogen.sh ]; then 1213784b9d48SAlexey Marchuk echo "ISA-L-crypto is required but was not found, please init the submodule with:" 1214784b9d48SAlexey Marchuk echo " git submodule update --init" 1215784b9d48SAlexey Marchuk echo "and then re-run this script." 1216784b9d48SAlexey Marchuk exit 1 1217784b9d48SAlexey Marchuk fi 1218784b9d48SAlexey Marchuk 1219784b9d48SAlexey Marchuk cd $rootdir/isa-l-crypto 1220784b9d48SAlexey Marchuk ISAL_CRYPTO_LOG=$rootdir/isa-l-crypto/spdk-isal-crypto.log 1221784b9d48SAlexey Marchuk if [[ -n "${CONFIG[CROSS_PREFIX]}" ]]; then 1222784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--host=${CONFIG[CROSS_PREFIX]}") 1223784b9d48SAlexey Marchuk fi 1224784b9d48SAlexey Marchuk ISAL_CRYPTO_OPTS+=("--enable-shared=no") 1225784b9d48SAlexey Marchuk echo -n "Configuring ISA-L-crypto (logfile: $ISAL_CRYPTO_LOG)..." 1226784b9d48SAlexey Marchuk ./autogen.sh &> $ISAL_CRYPTO_LOG 1227784b9d48SAlexey Marchuk ./configure CFLAGS="-fPIC -g -O2" "${ISAL_CRYPTO_OPTS[@]}" >> $ISAL_CRYPTO_LOG 2>&1 1228784b9d48SAlexey Marchuk echo "done." 1229784b9d48SAlexey Marchuk cd $rootdir 1230784b9d48SAlexey Marchuk CONFIG[ISAL_CRYPTO]=y 1231784b9d48SAlexey Marchukelse 1232784b9d48SAlexey Marchuk CONFIG[ISAL_CRYPTO]=n 1233784b9d48SAlexey Marchukfi 1234784b9d48SAlexey Marchuk 1235509241ceSKonrad Sztyberif [[ "${CONFIG[SMA]}" = "y" ]]; then 1236509241ceSKonrad Sztyber if ! python3 -c 'import grpc; import grpc_tools' 2> /dev/null; then 1237509241ceSKonrad Sztyber echo "--with-sma requires grpcio and grpcio-tools python packages." 1238509241ceSKonrad Sztyber echo "Please install then re-run this script." 1239509241ceSKonrad Sztyber exit 1 1240509241ceSKonrad Sztyber fi 1241509241ceSKonrad Sztyberfi 1242509241ceSKonrad Sztyber 12432796687dSParameswaran Krishnamurthyif [[ "${CONFIG[AVAHI]}" = "y" ]]; then 12442796687dSParameswaran Krishnamurthy if ! echo -e '#include <avahi-client/client.h>\n#include <avahi-common/malloc.h>\n' \ 12452796687dSParameswaran Krishnamurthy 'int main(void) { return 0; }\n' \ 12462796687dSParameswaran Krishnamurthy | "${BUILD_CMD[@]}" -lavahi-client -lavahi-common - 2> /dev/null; then 12472796687dSParameswaran Krishnamurthy echo "--with-avahi requires libavahi-client and libavahi-common." 12482796687dSParameswaran Krishnamurthy echo "Please install then re-run this script." 12492796687dSParameswaran Krishnamurthy exit 1 12502796687dSParameswaran Krishnamurthy fi 12512796687dSParameswaran Krishnamurthyfi 12522796687dSParameswaran Krishnamurthy 1253fcc38949SRui Chang# For ARM Neoverse-N1 platform, debug build needs gcc version newer than 8.4 1254fcc38949SRui Changif [[ "${CONFIG[DEBUG]}" = "y" && $arch = aarch64* && "$CC_TYPE" = "gcc" ]]; then 1255fcc38949SRui Chang GCC_VERSION=$($CC -dumpfullversion) 1256fcc38949SRui Chang PART_NUM=$(grep -i -m 1 "CPU part" /proc/cpuinfo | awk '{print $4}') 1257fcc38949SRui Chang 1258fcc38949SRui Chang if [[ "$(printf '%s\n' "8.4.0" "$GCC_VERSION" | sort -V | head -n1)" != "8.4.0" ]]; then 1259fcc38949SRui Chang if [[ $PART_NUM = 0xd0c ]]; then 1260fcc38949SRui Chang echo "WARNING: For ARM Neoverse-N1 platform, debug build needs GCC version newer than 8.4." 1261fcc38949SRui Chang echo " Will work around this by using armv8.2-a+crypto as target architecture for now." 1262fcc38949SRui Chang CONFIG[ARCH]=armv8.2-a+crypto 1263e8f84531SSunil Shahu elif [[ $PART_NUM = 0x0b2 ]]; then 1264e8f84531SSunil Shahu echo "WARNING: For ARM octeontx2 platform, debug build needs GCC version newer than 8.4." 1265e8f84531SSunil Shahu echo " Will work around this by using armv8.2-a+crypto as target architecture for now." 1266e8f84531SSunil Shahu CONFIG[ARCH]=armv8.2-a+crypto 1267fcc38949SRui Chang fi 1268fcc38949SRui Chang fi 1269fcc38949SRui Changfi 1270fcc38949SRui Chang 127148f70f48SPawel Wodkowski# We are now ready to generate final configuration. But first do sanity 127248f70f48SPawel Wodkowski# check to see if all keys in CONFIG array have its reflection in CONFIG file. 1273bb0f78a2SMichal Bergerif (($(grep -cE "^\s*CONFIG_[[:alnum:]_]+=" "$rootdir/CONFIG") != ${#CONFIG[@]})); then 127448f70f48SPawel Wodkowski echo "" 127548f70f48SPawel Wodkowski echo "BUG: Some configuration options are not present in CONFIG file. Please update this file." 127648f70f48SPawel Wodkowski echo "Missing options in CONFIG (+) file and in current config (-): " 127748f70f48SPawel Wodkowski diff -u --label "CONFIG file" --label "CONFIG[@]" \ 1278f8d6541dSMichal Berger <(sed -r -e '/^[[:space:]]*$/d; /^[[:space:]]*#.*/d; s/(CONFIG_[[:alnum:]_]+)=.*/\1/g' CONFIG | sort) \ 1279bb0f78a2SMichal Berger <(printf "CONFIG_%s\n" "${!CONFIG[@]}" | sort) 128048f70f48SPawel Wodkowski exit 1 128148f70f48SPawel Wodkowskifi 128248f70f48SPawel Wodkowski 128385bc2bbeSPawel Wodkowskiecho -n "Creating mk/config.mk..." 1284e62a3c65SSeth Howellcp -f $rootdir/CONFIG $rootdir/mk/config.mk 128551ab849bSJim HarrisARGS=$(echo "$@" | sed 's/ /\\ /g') 128651ab849bSJim Harrissed -i.bak -r "s#__CONFIGURE_OPTIONS__#${ARGS}#g" $rootdir/mk/config.mk 1287bb0f78a2SMichal Bergerfor key in "${!CONFIG[@]}"; do 1288f8d6541dSMichal Berger sed -i.bak -r "s#[[:space:]]*CONFIG_${key}=.*#CONFIG_${key}\?=${CONFIG[$key]}#g" $rootdir/mk/config.mk 1289577df16aSPawel Wodkowskidone 1290577df16aSPawel Wodkowski# On FreeBSD sed -i 'SUFFIX' - SUFFIX is mandatory. So no way but to delete the backed file. 1291e62a3c65SSeth Howellrm -f $rootdir/mk/config.mk.bak 1292baa6eac0SDarek Stojaczykecho "done." 12939dd998cdSBen Walker 129408ec96ebSDaniel Verkamp# Environment variables 1295baa6eac0SDarek Stojaczykecho -n "Creating mk/cc.flags.mk..." 1296e62a3c65SSeth Howellrm -f $rootdir/mk/cc.flags.mk 1297e62a3c65SSeth Howell[ -n "$CFLAGS" ] && echo "CFLAGS?=$CFLAGS" > $rootdir/mk/cc.flags.mk 1298e62a3c65SSeth Howell[ -n "$CXXFLAGS" ] && echo "CXXFLAGS?=$CXXFLAGS" >> $rootdir/mk/cc.flags.mk 1299e62a3c65SSeth Howell[ -n "$LDFLAGS" ] && echo "LDFLAGS?=$LDFLAGS" >> $rootdir/mk/cc.flags.mk 1300e62a3c65SSeth Howell[ -n "$DESTDIR" ] && echo "DESTDIR?=$DESTDIR" >> $rootdir/mk/cc.flags.mk 13010b56a5b4SJim Harrisecho "done." 130285bc2bbeSPawel Wodkowski 1303db3ebfe6SMichal Berger# Create .sh with build config for easy sourcing|lookup during the tests. 1304db3ebfe6SMichal Bergerfor conf in "${!CONFIG[@]}"; do 1305db3ebfe6SMichal Berger echo "CONFIG_$conf=${CONFIG[$conf]}" 1306db3ebfe6SMichal Bergerdone > "$rootdir/test/common/build_config.sh" 1307db3ebfe6SMichal Berger 13085a764955SMichal Bergerif [[ $sys_name == "FreeBSD" ]]; then 1309870ce250SPaul Luse echo "Type 'gmake' to build." 1310870ce250SPaul Luseelse 13110b56a5b4SJim Harris echo "Type 'make' to build." 1312870ce250SPaul Lusefi 13139dd998cdSBen Walker 13149dd998cdSBen Walkerexit 0 1315