summaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure302
1 files changed, 232 insertions, 70 deletions
diff --git a/configure b/configure
index 84ccce04..74416fd4 100755
--- a/configure
+++ b/configure
@@ -116,6 +116,10 @@ has() {
type "$1" >/dev/null 2>&1
}
+num() {
+ echo "$1" | grep -E -q "^[0-9]+$"
+}
+
check_define() {
cat > $TMPC <<EOF
#if !defined($1)
@@ -159,7 +163,6 @@ show_help="no"
exit_val=0
gfio_check="no"
libhdfs="no"
-pmemblk="no"
devdax="no"
pmem="no"
cuda="no"
@@ -170,9 +173,12 @@ disable_native="no"
march_set="no"
libiscsi="no"
libnbd="no"
-libnfs="no"
+libnfs=""
+xnvme=""
+libblkio=""
libzbc=""
dfs=""
+seed_buckets=""
dynamic_engines="no"
prefix=/usr/local
@@ -240,14 +246,26 @@ for opt do
;;
--disable-libzbc) libzbc="no"
;;
+ --disable-xnvme) xnvme="no"
+ ;;
+ --disable-libblkio) libblkio="no"
+ ;;
--disable-tcmalloc) disable_tcmalloc="yes"
;;
- --disable-nfs) disable_nfs="yes"
+ --disable-libnfs) libnfs="no"
+ ;;
+ --enable-libnfs) libnfs="yes"
;;
--dynamic-libengines) dynamic_engines="yes"
;;
--disable-dfs) dfs="no"
;;
+ --enable-asan) asan="yes"
+ ;;
+ --seed-buckets=*) seed_buckets="$optarg"
+ ;;
+ --disable-tls) tls_check="no"
+ ;;
--help)
show_help="yes"
;;
@@ -274,10 +292,10 @@ if test "$show_help" = "yes" ; then
echo "--disable-rados Disable Rados support even if found"
echo "--disable-rbd Disable Rados Block Device even if found"
echo "--disable-http Disable HTTP support even if found"
- echo "--disable-nfs Disable userspace NFS support even if found"
echo "--disable-gfapi Disable gfapi"
echo "--enable-libhdfs Enable hdfs support"
echo "--enable-libnfs Enable nfs support"
+ echo "--disable-libnfs Disable nfs support"
echo "--disable-lex Disable use of lex/yacc for math"
echo "--disable-pmem Disable pmem based engines even if found"
echo "--enable-lex Enable use of lex/yacc for math"
@@ -289,10 +307,15 @@ if test "$show_help" = "yes" ; then
echo "--with-ime= Install path for DDN's Infinite Memory Engine"
echo "--enable-libiscsi Enable iscsi support"
echo "--enable-libnbd Enable libnbd (NBD engine) support"
+ echo "--disable-xnvme Disable xnvme support even if found"
+ echo "--disable-libblkio Disable libblkio support even if found"
echo "--disable-libzbc Disable libzbc even if found"
- echo "--disable-tcmalloc Disable tcmalloc support"
- echo "--dynamic-libengines Lib-based ioengines as dynamic libraries"
- echo "--disable-dfs Disable DAOS File System support even if found"
+ echo "--disable-tcmalloc Disable tcmalloc support"
+ echo "--dynamic-libengines Lib-based ioengines as dynamic libraries"
+ echo "--disable-dfs Disable DAOS File System support even if found"
+ echo "--enable-asan Enable address sanitizer"
+ echo "--seed-buckets= Number of seed buckets for the refill-buffer"
+ echo "--disable-tls Disable __thread local storage"
exit $exit_val
fi
@@ -476,13 +499,15 @@ elif check_define __aarch64__ ; then
cpu="aarch64"
elif check_define __hppa__ ; then
cpu="hppa"
+elif check_define __loongarch64 ; then
+ cpu="loongarch64"
else
cpu=`uname -m`
fi
# Normalise host CPU name and set ARCH.
case "$cpu" in
- ia64|ppc|ppc64|s390|s390x|sparc64)
+ ia64|ppc|ppc64|s390|s390x|sparc64|loongarch64)
cpu="$cpu"
;;
i386|i486|i586|i686|i86pc|BePC)
@@ -646,6 +671,25 @@ fi
print_config "zlib" "$zlib"
##########################################
+# fcntl(F_FULLFSYNC) support
+if test "$fcntl_sync" != "yes" ; then
+ fcntl_sync="no"
+fi
+cat > $TMPC << EOF
+#include <unistd.h>
+#include <fcntl.h>
+
+int main(int argc, char **argv)
+{
+ return fcntl(0, F_FULLFSYNC);
+}
+EOF
+if compile_prog "" "" "fcntl(F_FULLFSYNC)" ; then
+ fcntl_sync="yes"
+fi
+print_config "fcntl(F_FULLFSYNC)" "$fcntl_sync"
+
+##########################################
# linux-aio probe
if test "$libaio" != "yes" ; then
libaio="no"
@@ -955,17 +999,16 @@ print_config "rdmacm" "$rdmacm"
##########################################
# librpma probe
+# The librpma engines require librpma>=v0.11.0 with rpma_cq_get_wc().
if test "$librpma" != "yes" ; then
librpma="no"
fi
cat > $TMPC << EOF
-#include <stdio.h>
#include <librpma.h>
-int main(int argc, char **argv)
+int main(void)
{
- enum rpma_conn_event event = RPMA_CONN_REJECTED;
- (void) event; /* unused */
- rpma_log_set_threshold(RPMA_LOG_THRESHOLD, RPMA_LOG_LEVEL_INFO);
+ void *ptr = rpma_cq_get_wc;
+ (void) ptr; /* unused */
return 0;
}
EOF
@@ -1103,7 +1146,8 @@ cat > $TMPC << EOF
#include <sched.h>
int main(int argc, char **argv)
{
- cpu_set_t mask;
+ cpu_set_t mask = { };
+
return sched_setaffinity(0, sizeof(mask), &mask);
}
EOF
@@ -1114,7 +1158,8 @@ else
#include <sched.h>
int main(int argc, char **argv)
{
- cpu_set_t mask;
+ cpu_set_t mask = { };
+
return sched_setaffinity(0, &mask);
}
EOF
@@ -1135,7 +1180,9 @@ cat > $TMPC << EOF
#include <time.h>
int main(int argc, char **argv)
{
- return clock_gettime(0, NULL);
+ struct timespec ts;
+
+ return clock_gettime(0, &ts);
}
EOF
if compile_prog "" "" "clock_gettime"; then
@@ -1157,7 +1204,9 @@ if test "$clock_gettime" = "yes" ; then
#include <time.h>
int main(int argc, char **argv)
{
- return clock_gettime(CLOCK_MONOTONIC, NULL);
+ struct timespec ts;
+
+ return clock_gettime(CLOCK_MONOTONIC, &ts);
}
EOF
if compile_prog "" "$LIBS" "clock monotonic"; then
@@ -1299,6 +1348,23 @@ fi
print_config "sync_file_range" "$sync_file_range"
##########################################
+# ASharedMemory_create() probe
+if test "$ASharedMemory_create" != "yes" ; then
+ ASharedMemory_create="no"
+fi
+cat > $TMPC << EOF
+#include <android/sharedmem.h>
+int main(int argc, char **argv)
+{
+ return ASharedMemory_create("", 0);
+}
+EOF
+if compile_prog "" "" "ASharedMemory_create"; then
+ ASharedMemory_create="yes"
+fi
+print_config "ASharedMemory_create" "$ASharedMemory_create"
+
+##########################################
# ext4 move extent probe
if test "$ext4_me" != "yes" ; then
ext4_me="no"
@@ -1505,7 +1571,8 @@ print_config "socklen_t" "$socklen_t"
if test "$tls_thread" != "yes" ; then
tls_thread="no"
fi
-cat > $TMPC << EOF
+if test "$tls_check" != "no"; then
+ cat > $TMPC << EOF
#include <stdio.h>
static __thread int ret;
int main(int argc, char **argv)
@@ -1516,6 +1583,7 @@ EOF
if compile_prog "" "" "__thread"; then
tls_thread="yes"
fi
+fi
print_config "__thread" "$tls_thread"
##########################################
@@ -1596,7 +1664,8 @@ cat > $TMPC << EOF
#include <sched.h>
int main(int argc, char **argv)
{
- struct sched_param p;
+ struct sched_param p = { };
+
return sched_setscheduler(0, SCHED_IDLE, &p);
}
EOF
@@ -1718,7 +1787,9 @@ cat > $TMPC << EOF
#include <sys/uio.h>
int main(int argc, char **argv)
{
- return pwritev(0, NULL, 1, 0) + preadv(0, NULL, 1, 0);
+ struct iovec iov[1] = { };
+
+ return pwritev(0, iov, 1, 0) + preadv(0, iov, 1, 0);
}
EOF
if compile_prog "" "" "pwritev"; then
@@ -1736,7 +1807,9 @@ cat > $TMPC << EOF
#include <sys/uio.h>
int main(int argc, char **argv)
{
- return pwritev2(0, NULL, 1, 0, 0) + preadv2(0, NULL, 1, 0, 0);
+ struct iovec iov[1] = { };
+
+ return pwritev2(0, iov, 1, 0, 0) + preadv2(0, iov, 1, 0, 0);
}
EOF
if compile_prog "" "" "pwritev2"; then
@@ -1762,14 +1835,14 @@ cat > $TMPC << EOF
#include <stdio.h>
int main(int argc, char **argv)
{
- struct addrinfo hints;
- struct in6_addr addr;
+ struct addrinfo hints = { };
+ struct in6_addr addr = in6addr_any;
int ret;
ret = getaddrinfo(NULL, NULL, &hints, NULL);
freeaddrinfo(NULL);
- printf("%s\n", gai_strerror(ret));
- addr = in6addr_any;
+ printf("%s %d\n", gai_strerror(ret), addr.s6_addr[0]);
+
return 0;
}
EOF
@@ -2080,7 +2153,7 @@ if test "$libhdfs" = "yes" ; then
hdfs_conf_error=1
fi
if test "$FIO_LIBHDFS_INCLUDE" = "" ; then
- echo "configure: FIO_LIBHDFS_INCLUDE should be defined to libhdfs inlude path"
+ echo "configure: FIO_LIBHDFS_INCLUDE should be defined to libhdfs include path"
hdfs_conf_error=1
fi
if test "$FIO_LIBHDFS_LIB" = "" ; then
@@ -2130,9 +2203,7 @@ cat > $TMPC << EOF
#include <stdlib.h>
int main(int argc, char **argv)
{
- int rc;
- rc = pmem_is_pmem(NULL, 0);
- return 0;
+ return pmem_is_pmem(NULL, 0);
}
EOF
if compile_prog "" "-lpmem" "libpmem"; then
@@ -2151,7 +2222,7 @@ if test "$libpmem" = "yes"; then
#include <stdlib.h>
int main(int argc, char **argv)
{
- pmem_memcpy(NULL, NULL, NULL, NULL);
+ pmem_memcpy(NULL, NULL, 0, 0);
return 0;
}
EOF
@@ -2162,26 +2233,24 @@ fi
print_config "libpmem1_5" "$libpmem1_5"
##########################################
-# Check whether we have libpmemblk
-# libpmem is a prerequisite
-if test "$libpmemblk" != "yes" ; then
- libpmemblk="no"
+# Check whether we have libpmem2
+if test "$libpmem2" != "yes" ; then
+ libpmem2="no"
fi
-if test "$libpmem" = "yes"; then
- cat > $TMPC << EOF
-#include <libpmemblk.h>
+cat > $TMPC << EOF
+#include <libpmem2.h>
int main(int argc, char **argv)
{
- PMEMblkpool *pbp;
- pbp = pmemblk_open("", 0);
+ struct pmem2_config *cfg;
+ pmem2_config_new(&cfg);
+ pmem2_config_delete(&cfg);
return 0;
}
EOF
- if compile_prog "" "-lpmemblk" "libpmemblk"; then
- libpmemblk="yes"
- fi
+if compile_prog "" "-lpmem2" "libpmem2"; then
+ libpmem2="yes"
fi
-print_config "libpmemblk" "$libpmemblk"
+print_config "libpmem2" "$libpmem2"
# Choose libpmem-based ioengines
if test "$libpmem" = "yes" && test "$disable_pmem" = "no"; then
@@ -2189,16 +2258,9 @@ if test "$libpmem" = "yes" && test "$disable_pmem" = "no"; then
if test "$libpmem1_5" = "yes"; then
pmem="yes"
fi
- if test "$libpmemblk" = "yes"; then
- pmemblk="yes"
- fi
fi
##########################################
-# Report whether pmemblk engine is enabled
-print_config "PMDK pmemblk engine" "$pmemblk"
-
-##########################################
# Report whether dev-dax engine is enabled
print_config "PMDK dev-dax engine" "$devdax"
@@ -2284,15 +2346,16 @@ print_config "DAOS File System (dfs) Engine" "$dfs"
##########################################
# Check if we have libnfs (for userspace nfs support).
-if test "$disable_nfs" != "yes"; then
+if test "$libnfs" != "no" ; then
if $(pkg-config libnfs > /dev/null 2>&1); then
libnfs="yes"
libnfs_cflags=$(pkg-config --cflags libnfs)
libnfs_libs=$(pkg-config --libs libnfs)
else
if test "$libnfs" = "yes" ; then
- echo "libnfs" "Install libnfs"
+ feature_not_found "libnfs" "libnfs"
fi
+ libnfs="no"
fi
fi
print_config "NFS engine" "$libnfs"
@@ -2367,7 +2430,7 @@ int main(int argc, char **argv)
FILE *mtab = setmntent(NULL, "r");
struct mntent *mnt = getmntent(mtab);
endmntent(mtab);
- return 0;
+ return mnt != NULL;
}
EOF
if compile_prog "" "" "getmntent"; then
@@ -2500,7 +2563,7 @@ if compile_prog "" "" "valgrind_dev"; then
fi
print_config "Valgrind headers" "$valgrind_dev"
-if test "$targetos" = "Linux" ; then
+if test "$targetos" = "Linux" || test "$targetos" = "Android"; then
##########################################
# <linux/blkzoned.h> probe
if test "$linux_blkzoned" != "yes" ; then
@@ -2548,6 +2611,10 @@ int main(int argc, char **argv)
}
EOF
if test "$libzbc" != "no" ; then
+ if [ -e /usr/include/libzbc/libzbc ]; then
+ # SUSE Linux.
+ CFLAGS="$CFLAGS -I/usr/include/libzbc"
+ fi
if compile_prog "" "-lzbc" "libzbc"; then
libzbc="yes"
if ! check_min_lib_version libzbc 5; then
@@ -2562,22 +2629,72 @@ if test "$libzbc" != "no" ; then
fi
print_config "libzbc engine" "$libzbc"
+if test "$targetos" = "Linux" ; then
##########################################
-# check march=armv8-a+crc+crypto
-if test "$march_armv8_a_crc_crypto" != "yes" ; then
- march_armv8_a_crc_crypto="no"
+# Check NVME_URING_CMD support
+cat > $TMPC << EOF
+#include <linux/nvme_ioctl.h>
+int main(void)
+{
+ return sizeof(struct nvme_uring_cmd);
+}
+EOF
+if compile_prog "" "" "nvme uring cmd"; then
+ output_sym "CONFIG_NVME_URING_CMD"
+ nvme_uring_cmd="yes"
+else
+ nvme_uring_cmd="no"
+fi
+print_config "NVMe uring command support" "$nvme_uring_cmd"
fi
+
+##########################################
+# Check if we have xnvme
+if test "$xnvme" != "no" ; then
+ if check_min_lib_version xnvme 0.2.0; then
+ xnvme="yes"
+ xnvme_cflags=$(pkg-config --cflags xnvme)
+ xnvme_libs=$(pkg-config --libs xnvme)
+ else
+ xnvme="no"
+ fi
+fi
+print_config "xnvme engine" "$xnvme"
+
+##########################################
+# Check if we have libblkio
+if test "$libblkio" != "no" ; then
+ if check_min_lib_version blkio 1.0.0; then
+ libblkio="yes"
+ libblkio_cflags=$(pkg-config --cflags blkio)
+ libblkio_libs=$(pkg-config --libs blkio)
+ else
+ if test "$libblkio" = "yes" ; then
+ feature_not_found "libblkio" "libblkio-dev or libblkio-devel"
+ fi
+ libblkio="no"
+ fi
+fi
+print_config "libblkio engine" "$libblkio"
+
+##########################################
+# check march=armv8-a+crc+crypto
+march_armv8_a_crc_crypto="no"
if test "$cpu" = "arm64" ; then
cat > $TMPC <<EOF
+#if __linux__
#include <arm_acle.h>
#include <arm_neon.h>
#include <sys/auxv.h>
+#endif
int main(void)
{
/* Can we also do a runtime probe? */
#if __linux__
return getauxval(AT_HWCAP);
+#elif defined(__APPLE__)
+ return 0;
#else
# error "Don't know how to do runtime probe for ARM CRC32c"
#endif
@@ -2624,9 +2741,9 @@ int main(int argc, char* argv[]) {
return 0;
}
EOF
- if compile_prog "" "-lcuda -lcudart -lcufile" "libcufile"; then
+ if compile_prog "" "-lcuda -lcudart -lcufile -ldl" "libcufile"; then
libcufile="yes"
- LIBS="-lcuda -lcudart -lcufile $LIBS"
+ LIBS="-lcuda -lcudart -lcufile -ldl $LIBS"
else
if test "$libcufile" = "yes" ; then
feature_not_found "libcufile" ""
@@ -2706,6 +2823,22 @@ fi
print_config "-Wimplicit-fallthrough=2" "$fallthrough"
##########################################
+# check if the compiler has -Wno-stringop-concatenation
+no_stringop="no"
+cat > $TMPC << EOF
+#include <stdio.h>
+
+int main(int argc, char **argv)
+{
+ return printf("%s\n", argv[0]);
+}
+EOF
+if compile_prog "-Wno-stringop-truncation -Werror" "" "no_stringop"; then
+ no_stringop="yes"
+fi
+print_config "-Wno-stringop-truncation" "$no_stringop"
+
+##########################################
# check for MADV_HUGEPAGE support
if test "$thp" != "yes" ; then
thp="no"
@@ -2897,6 +3030,9 @@ fi
if test "$sync_file_range" = "yes" ; then
output_sym "CONFIG_SYNC_FILE_RANGE"
fi
+if test "$ASharedMemory_create" = "yes" ; then
+ output_sym "CONFIG_ASHAREDMEMORY_CREATE"
+fi
if test "$sfaa" = "yes" ; then
output_sym "CONFIG_SFAA"
fi
@@ -2911,11 +3047,13 @@ if test "$libverbs" = "yes" -a "$rdmacm" = "yes" ; then
fi
# librpma is supported on the 'x86_64' architecture for now
if test "$cpu" = "x86_64" -a "$libverbs" = "yes" -a "$rdmacm" = "yes" \
- -a "$librpma" = "yes" -a "$libpmem" = "yes" ; then
+ -a "$librpma" = "yes" \
+ && test "$libpmem" = "yes" -o "$libpmem2" = "yes" ; then
output_sym "CONFIG_LIBRPMA_APM"
fi
if test "$cpu" = "x86_64" -a "$libverbs" = "yes" -a "$rdmacm" = "yes" \
- -a "$librpma" = "yes" -a "$libpmem" = "yes" -a "$libprotobuf_c" = "yes" ; then
+ -a "$librpma" = "yes" -a "$libprotobuf_c" = "yes" \
+ && test "$libpmem" = "yes" -o "$libpmem2" = "yes" ; then
output_sym "CONFIG_LIBRPMA_GPSPM"
fi
if test "$clock_gettime" = "yes" ; then
@@ -3050,15 +3188,15 @@ fi
if test "$mtd" = "yes" ; then
output_sym "CONFIG_MTD"
fi
-if test "$pmemblk" = "yes" ; then
- output_sym "CONFIG_PMEMBLK"
-fi
if test "$devdax" = "yes" ; then
output_sym "CONFIG_LINUX_DEVDAX"
fi
if test "$pmem" = "yes" ; then
output_sym "CONFIG_LIBPMEM"
fi
+if test "$libpmem2" = "yes" ; then
+ output_sym "CONFIG_LIBPMEM2_INSTALLED"
+fi
if test "$libime" = "yes" ; then
output_sym "CONFIG_IME"
fi
@@ -3104,7 +3242,7 @@ if test "$libzbc" = "yes" ; then
output_sym "CONFIG_LIBZBC"
fi
if test "$zlib" = "no" ; then
- echo "Consider installing zlib-dev (zlib-devel, some fio features depend on it."
+ echo "Consider installing zlib1g-dev (zlib-devel) as some fio features depend on it."
if test "$build_static" = "yes"; then
echo "Note that some distros have separate packages for static libraries."
fi
@@ -3121,9 +3259,6 @@ fi
if test "$dfs" = "yes" ; then
output_sym "CONFIG_DFS"
fi
-if test "$libnfs" = "yes" ; then
- output_sym "CONFIG_NFS"
-fi
if test "$march_set" = "no" && test "$build_native" = "yes" ; then
output_sym "CONFIG_BUILD_NATIVE"
fi
@@ -3148,6 +3283,9 @@ fi
if test "$fallthrough" = "yes"; then
CFLAGS="$CFLAGS -Wimplicit-fallthrough"
fi
+if test "$no_stringop" = "yes"; then
+ output_sym "CONFIG_HAVE_NO_STRINGOP"
+fi
if test "$thp" = "yes" ; then
output_sym "CONFIG_HAVE_THP"
fi
@@ -3165,17 +3303,32 @@ if test "$libnbd" = "yes" ; then
fi
if test "$libnfs" = "yes" ; then
output_sym "CONFIG_LIBNFS"
- echo "CONFIG_LIBNFS=m" >> $config_host_mak
echo "LIBNFS_CFLAGS=$libnfs_cflags" >> $config_host_mak
echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
fi
+if test "$xnvme" = "yes" ; then
+ output_sym "CONFIG_LIBXNVME"
+ echo "LIBXNVME_CFLAGS=$xnvme_cflags" >> $config_host_mak
+ echo "LIBXNVME_LIBS=$xnvme_libs" >> $config_host_mak
+fi
+if test "$libblkio" = "yes" ; then
+ output_sym "CONFIG_LIBBLKIO"
+ echo "LIBBLKIO_CFLAGS=$libblkio_cflags" >> $config_host_mak
+ echo "LIBBLKIO_LIBS=$libblkio_libs" >> $config_host_mak
+fi
if test "$dynamic_engines" = "yes" ; then
output_sym "CONFIG_DYNAMIC_ENGINES"
fi
if test "$pdb" = yes; then
output_sym "CONFIG_PDB"
fi
-
+if test "$fcntl_sync" = "yes" ; then
+ output_sym "CONFIG_FCNTL_SYNC"
+fi
+if test "$asan" = "yes"; then
+ CFLAGS="$CFLAGS -fsanitize=address"
+ LDFLAGS="$LDFLAGS -fsanitize=address"
+fi
print_config "Lib-based ioengines dynamic" "$dynamic_engines"
cat > $TMPC << EOF
int main(int argc, char **argv)
@@ -3195,6 +3348,15 @@ if test "$disable_tcmalloc" != "yes"; then
fi
fi
print_config "TCMalloc support" "$tcmalloc"
+if ! num "$seed_buckets"; then
+ seed_buckets=4
+elif test "$seed_buckets" -lt 2; then
+ seed_buckets=2
+elif test "$seed_buckets" -gt 16; then
+ seed_buckets=16
+fi
+echo "#define CONFIG_SEED_BUCKETS $seed_buckets" >> $config_host_h
+print_config "seed_buckets" "$seed_buckets"
echo "LIBS+=$LIBS" >> $config_host_mak
echo "GFIO_LIBS+=$GFIO_LIBS" >> $config_host_mak