X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=configure;h=a2b9bd4cc8f4bba04de60a207f4b8913614f0b2c;hp=5cf863796f3af75c0ae41f9e2558fbc94597de94;hb=9dc528b1638b625b5e167983a74de4e85c5859ea;hpb=b6a1e63a1ff607692a3caf3c2db2c3d575ba2320 diff --git a/configure b/configure index 5cf86379..a2b9bd4c 100755 --- a/configure +++ b/configure @@ -116,6 +116,10 @@ has() { type "$1" >/dev/null 2>&1 } +num() { + echo "$1" | grep -P -q "^[0-9]+$" +} + check_define() { cat > $TMPC < /dev/null 2>&1; then - if eval "echo \$$_feature" = "yes" ; then + if test "$(eval echo \"\$$_feature\")" = "yes" ; then feature_not_found "$_feature" "$1 >= $2" fi else @@ -170,7 +174,11 @@ disable_native="no" march_set="no" libiscsi="no" libnbd="no" +libnfs="" +xnvme="" libzbc="" +dfs="" +seed_buckets="" dynamic_engines="no" prefix=/usr/local @@ -238,10 +246,22 @@ for opt do ;; --disable-libzbc) libzbc="no" ;; + --disable-xnvme) xnvme="no" + ;; --disable-tcmalloc) disable_tcmalloc="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" + ;; --help) show_help="yes" ;; @@ -258,7 +278,7 @@ if test "$show_help" = "yes" ; then echo "--cc= Specify compiler to use" echo "--extra-cflags= Specify extra CFLAGS to pass to compiler" echo "--build-32bit-win Enable 32-bit build on Windows" - echo "--target-win-ver= Minimum version of Windows to target (XP or 7)" + echo "--target-win-ver= Minimum version of Windows to target (only accepts 7)" echo "--enable-pdb Enable Windows PDB symbols generation (needs clang/lld)" echo "--build-static Build a static fio" echo "--esx Configure build options for esx" @@ -270,6 +290,8 @@ if test "$show_help" = "yes" ; then echo "--disable-http Disable HTTP 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" @@ -281,9 +303,13 @@ 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-libzbc Disable libzbc even if found" - echo "--disable-tcmalloc Disable tcmalloc support" - echo "--dynamic-libengines Lib-based ioengines as dynamic libraries" + 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" exit $exit_val fi @@ -395,11 +421,7 @@ CYGWIN*) # Default Windows API target target_win_ver="7" fi - if test "$target_win_ver" = "XP"; then - output_sym "CONFIG_WINDOWS_XP" - # Technically the below is targeting 2003 - CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0502" - elif test "$target_win_ver" = "7"; then + if test "$target_win_ver" = "7"; then output_sym "CONFIG_WINDOWS_7" CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0601" else @@ -417,6 +439,8 @@ CYGWIN*) clock_gettime="yes" # clock_monotonic probe has dependency on this clock_monotonic="yes" sched_idle="yes" + pthread_condattr_setclock="no" + pthread_affinity="no" ;; esac @@ -638,6 +662,25 @@ if compile_prog "" "-lz" "zlib" ; then fi print_config "zlib" "$zlib" +########################################## +# fcntl(F_FULLFSYNC) support +if test "$fcntl_sync" != "yes" ; then + fcntl_sync="no" +fi +cat > $TMPC << EOF +#include +#include + +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 @@ -762,10 +805,8 @@ print_config "POSIX pshared support" "$posix_pshared" ########################################## # POSIX pthread_condattr_setclock() probe -if test "$pthread_condattr_setclock" != "yes" ; then - pthread_condattr_setclock="no" -fi -cat > $TMPC < $TMPC < int main(void) { @@ -774,11 +815,12 @@ int main(void) return 0; } EOF -if compile_prog "" "$LIBS" "pthread_condattr_setclock" ; then - pthread_condattr_setclock=yes -elif compile_prog "" "$LIBS -lpthread" "pthread_condattr_setclock" ; then - pthread_condattr_setclock=yes - LIBS="$LIBS -lpthread" + if compile_prog "" "$LIBS" "pthread_condattr_setclock" ; then + pthread_condattr_setclock=yes + elif compile_prog "" "$LIBS -lpthread" "pthread_condattr_setclock" ; then + pthread_condattr_setclock=yes + LIBS="$LIBS -lpthread" + fi fi print_config "pthread_condattr_setclock()" "$pthread_condattr_setclock" @@ -803,6 +845,29 @@ elif compile_prog "" "$LIBS -lpthread" "pthread_sigmask" ; then fi print_config "pthread_sigmask()" "$pthread_sigmask" +########################################## +# pthread_getaffinity_np() probe +if test "$pthread_getaffinity" != "yes" ; then + pthread_getaffinity="no" +fi +cat > $TMPC < /* NULL */ +#include /* pthread_sigmask() */ +#include +int main(void) +{ + cpu_set_t set; + return pthread_getaffinity_np(pthread_self(), sizeof(set), &set); +} +EOF +if compile_prog "" "$LIBS" "pthread_getaffinity" ; then + pthread_getaffinity="yes" +elif compile_prog "" "$LIBS -lpthread" "pthread_getaffinity" ; then + pthread_getaffinity="yes" + LIBS="$LIBS -lpthread" +fi +print_config "pthread_getaffinity_np()" "$pthread_getaffinity" + ########################################## # solaris aio probe if test "$solaris_aio" != "yes" ; then @@ -924,6 +989,48 @@ if test "$disable_rdma" != "yes" && compile_prog "" "-lrdmacm" "rdma"; then fi 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 +int main(void) +{ + void *ptr = rpma_cq_get_wc; + (void) ptr; /* unused */ + return 0; +} +EOF +if test "$disable_rdma" != "yes" && compile_prog "" "-lrpma" "rpma"; then + librpma="yes" +fi +print_config "librpma" "$librpma" + +########################################## +# libprotobuf-c probe +if test "$libprotobuf_c" != "yes" ; then + libprotobuf_c="no" +fi +cat > $TMPC << EOF +#include +#include +#if !defined(PROTOBUF_C_VERSION_NUMBER) +# error PROTOBUF_C_VERSION_NUMBER is not defined! +#endif +int main(int argc, char **argv) +{ + (void)protobuf_c_message_check(NULL); + return 0; +} +EOF +if compile_prog "" "-lprotobuf-c" "protobuf_c"; then + libprotobuf_c="yes" +fi +print_config "libprotobuf_c" "$libprotobuf_c" + ########################################## # asprintf() and vasprintf() probes if test "$have_asprintf" != "yes" ; then @@ -1031,7 +1138,8 @@ cat > $TMPC << EOF #include int main(int argc, char **argv) { - cpu_set_t mask; + cpu_set_t mask = { }; + return sched_setaffinity(0, sizeof(mask), &mask); } EOF @@ -1042,7 +1150,8 @@ else #include int main(int argc, char **argv) { - cpu_set_t mask; + cpu_set_t mask = { }; + return sched_setaffinity(0, &mask); } EOF @@ -1524,7 +1633,8 @@ cat > $TMPC << EOF #include int main(int argc, char **argv) { - struct sched_param p; + struct sched_param p = { }; + return sched_setscheduler(0, SCHED_IDLE, &p); } EOF @@ -1646,7 +1756,9 @@ cat > $TMPC << EOF #include 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 @@ -1664,7 +1776,9 @@ cat > $TMPC << EOF #include 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 @@ -1690,14 +1804,14 @@ cat > $TMPC << EOF #include 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 @@ -2008,7 +2122,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 @@ -2058,9 +2172,7 @@ cat > $TMPC << EOF #include int main(int argc, char **argv) { - int rc; - rc = pmem_is_pmem(NULL, NULL); - return 0; + return pmem_is_pmem(NULL, 0); } EOF if compile_prog "" "-lpmem" "libpmem"; then @@ -2079,7 +2191,7 @@ if test "$libpmem" = "yes"; then #include int main(int argc, char **argv) { - pmem_memcpy(NULL, NULL, NULL, NULL); + pmem_memcpy(NULL, NULL, 0, 0); return 0; } EOF @@ -2183,6 +2295,49 @@ if test "$libnbd" != "no" ; then fi print_config "NBD engine" "$libnbd" +########################################## +# check for dfs (DAOS File System) +if test "$dfs" != "no" ; then + cat > $TMPC << EOF +#include +#include +#include + +int main(int argc, char **argv) +{ + daos_handle_t poh; + daos_handle_t coh; + dfs_t *dfs; + + (void) dfs_mount(poh, coh, O_RDWR, &dfs); + + return 0; +} +EOF + if compile_prog "" "-luuid -ldfs -ldaos" "dfs"; then + dfs="yes" + else + dfs="no" + fi +fi +print_config "DAOS File System (dfs) Engine" "$dfs" + +########################################## +# Check if we have libnfs (for userspace nfs support). +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 + feature_not_found "libnfs" "libnfs" + fi + libnfs="no" + fi +fi +print_config "NFS engine" "$libnfs" + ########################################## # Check if we have lex/yacc available yacc="no" @@ -2253,7 +2408,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 @@ -2434,6 +2589,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 @@ -2448,6 +2607,40 @@ if test "$libzbc" != "no" ; then fi print_config "libzbc engine" "$libzbc" +if test "$targetos" = "Linux" ; then +########################################## +# Check NVME_URING_CMD support +cat > $TMPC << EOF +#include +int main(void) +{ + struct nvme_uring_cmd *cmd; + + 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 march=armv8-a+crc+crypto if test "$march_armv8_a_crc_crypto" != "yes" ; then @@ -2699,6 +2892,7 @@ print_config "Windows PDB generation" "$pdb" ########################################## # check for timerfd support timerfd_create="no" +if test "$esx" != "yes" ; then cat > $TMPC << EOF #include #include @@ -2708,8 +2902,9 @@ int main(int argc, char **argv) return timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK); } EOF -if compile_prog "" "" "timerfd_create"; then - timerfd_create="yes" + if compile_prog "" "" "timerfd_create"; then + timerfd_create="yes" + fi fi print_config "timerfd_create" "$timerfd_create" @@ -2751,6 +2946,9 @@ fi if test "$pthread_sigmask" = "yes" ; then output_sym "CONFIG_PTHREAD_SIGMASK" fi +if test "$pthread_getaffinity" = "yes" ; then + output_sym "CONFIG_PTHREAD_GETAFFINITY" +fi if test "$have_asprintf" = "yes" ; then output_sym "CONFIG_HAVE_ASPRINTF" fi @@ -2790,18 +2988,21 @@ fi if test "$libverbs" = "yes" -a "$rdmacm" = "yes" ; then output_sym "CONFIG_RDMA" 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 + 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 + output_sym "CONFIG_LIBRPMA_GPSPM" +fi if test "$clock_gettime" = "yes" ; then output_sym "CONFIG_CLOCK_GETTIME" fi if test "$clock_monotonic" = "yes" ; then output_sym "CONFIG_CLOCK_MONOTONIC" fi -if test "$clock_monotonic_raw" = "yes" ; then - output_sym "CONFIG_CLOCK_MONOTONIC_RAW" -fi -if test "$clock_monotonic_precise" = "yes" ; then - output_sym "CONFIG_CLOCK_MONOTONIC_PRECISE" -fi if test "$clockid_t" = "yes"; then output_sym "CONFIG_CLOCKID_T" fi @@ -2982,7 +3183,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 @@ -2996,6 +3197,9 @@ fi if test "$libcufile" = "yes" ; then output_sym "CONFIG_LIBCUFILE" fi +if test "$dfs" = "yes" ; then + output_sym "CONFIG_DFS" +fi if test "$march_set" = "no" && test "$build_native" = "yes" ; then output_sym "CONFIG_BUILD_NATIVE" fi @@ -3035,13 +3239,29 @@ if test "$libnbd" = "yes" ; then echo "LIBNBD_CFLAGS=$libnbd_cflags" >> $config_host_mak echo "LIBNBD_LIBS=$libnbd_libs" >> $config_host_mak fi +if test "$libnfs" = "yes" ; then + output_sym "CONFIG_LIBNFS" + 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 "$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) @@ -3061,6 +3281,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