xref: /spdk/configure (revision a1dfa7ec92a6c49538482c8bb73f0b1ce040441f)
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