X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=configure;h=d2ca8934f3bed5e3ba73f0551990cbfedcc10a4a;hb=2fbe1e195999e23c95b08d03eadac0b5f95330e7;hp=5d475bf3593046c3d8f16e6d26cf661658cccee6;hpb=439c45afa8c1a47edb1cd928be692b9e0ba7728a;p=fio.git diff --git a/configure b/configure index 5d475bf3..d2ca8934 100755 --- a/configure +++ b/configure @@ -133,6 +133,23 @@ output_sym() { echo "#define $1" >> $config_host_h } +check_min_lib_version() { + _feature=$3 + + if "${cross_prefix}"pkg-config --atleast-version="$2" "$1" > /dev/null 2>&1; then + return 0 + fi + : "${_feature:=${1}}" + if "${cross_prefix}"pkg-config --version > /dev/null 2>&1; then + if eval "echo \$$_feature" = "yes" ; then + feature_not_found "$_feature" "$1 >= $2" + fi + else + print_config "$1" "missing pkg-config, can't check $_feature version" + fi + return 1 +} + targetos="" cpu="" @@ -144,13 +161,15 @@ libhdfs="no" pmemblk="no" devdax="no" pmem="no" +cuda="no" disable_lex="" disable_pmem="no" disable_native="no" march_set="no" libiscsi="no" libnbd="no" -libaio_uring="no" +libzbc="" +dynamic_engines="no" prefix=/usr/local # parse options @@ -173,6 +192,8 @@ for opt do ;; --target-win-ver=*) target_win_ver="$optarg" ;; + --enable-pdb) pdb="yes" + ;; --build-static) build_static="yes" ;; --enable-gfio) gfio_check="yes" @@ -201,7 +222,7 @@ for opt do ;; --disable-pmem) disable_pmem="yes" ;; - --enable-cuda) enable_cuda="yes" + --enable-cuda) cuda="yes" ;; --disable-native) disable_native="yes" ;; @@ -211,9 +232,11 @@ for opt do ;; --enable-libnbd) libnbd="yes" ;; + --disable-libzbc) libzbc="no" + ;; --disable-tcmalloc) disable_tcmalloc="yes" ;; - --enable-libaio-uring) libaio_uring="yes" + --dynamic-libengines) dynamic_engines="yes" ;; --help) show_help="yes" @@ -232,6 +255,7 @@ if test "$show_help" = "yes" ; then 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 "--enable-pdb Enable Windows PDB symbols generation (needs clang/lld)" echo "--build-static Build a static fio" echo "--esx Configure build options for esx" echo "--enable-gfio Enable building of gtk gfio" @@ -252,8 +276,9 @@ 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-libzbc Disable libzbc even if found" echo "--disable-tcmalloc Disable tcmalloc support" - echo "--enable-libaio-uring Enable libaio emulated over io_uring" + echo "--dynamic-libengines Lib-based ioengines as dynamic libraries" exit $exit_val fi @@ -368,6 +393,8 @@ CYGWIN*) 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 output_sym "CONFIG_WINDOWS_7" CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0601" @@ -546,6 +573,25 @@ else fi print_config "Static build" "$build_static" +########################################## +# check for C11 atomics support +cat > $TMPC < +int main(void) +{ + _Atomic unsigned v; + atomic_load(&v); + return 0; +} +EOF +if ! compile_prog "" "" "C11 atomics"; then + echo + echo "Your compiler doesn't support C11 atomics. gcc 4.9/clang 3.6 are the" + echo "minimum versions with it - perhaps your compiler is too old?" + fatal "C11 atomics support not found" +fi + + ########################################## # check for wordsize wordsize="0" @@ -603,17 +649,13 @@ int main(void) return 0; } EOF - if test "$libaio_uring" = "yes" && compile_prog "" "-luring" "libaio io_uring" ; then - libaio=yes - elif compile_prog "" "-laio" "libaio" ; then + if compile_prog "" "-laio" "libaio" ; then libaio=yes - libaio_uring=no else if test "$libaio" = "yes" ; then feature_not_found "linux AIO" "libaio-dev or libaio-devel" fi libaio=no - libaio_uring=no fi cat > $TMPC < $TMPC << EOF int main(int argc, char **argv) { - return asprintf(NULL, "%s", "str") == 0; + char *buf; + return asprintf(&buf, "%s", "str") == 0; } EOF if compile_prog "" "" "have_asprintf"; then @@ -906,7 +948,8 @@ cat > $TMPC << EOF int main(int argc, char **argv) { va_list ap; - return vasprintf(NULL, "%s", ap) == 0; + char *buf; + return vasprintf(&buf, "%s", ap) == 0; } EOF if compile_prog "" "" "have_vasprintf"; then @@ -1047,46 +1090,6 @@ EOF fi print_config "CLOCK_MONOTONIC" "$clock_monotonic" -########################################## -# CLOCK_MONOTONIC_RAW probe -if test "$clock_monotonic_raw" != "yes" ; then - clock_monotonic_raw="no" -fi -if test "$clock_gettime" = "yes" ; then - cat > $TMPC << EOF -#include -#include -int main(int argc, char **argv) -{ - return clock_gettime(CLOCK_MONOTONIC_RAW, NULL); -} -EOF - if compile_prog "" "$LIBS" "clock monotonic"; then - clock_monotonic_raw="yes" - fi -fi -print_config "CLOCK_MONOTONIC_RAW" "$clock_monotonic_raw" - -########################################## -# CLOCK_MONOTONIC_PRECISE probe -if test "$clock_monotonic_precise" != "yes" ; then - clock_monotonic_precise="no" -fi -if test "$clock_gettime" = "yes" ; then - cat > $TMPC << EOF -#include -#include -int main(int argc, char **argv) -{ - return clock_gettime(CLOCK_MONOTONIC_PRECISE, NULL); -} -EOF - if compile_prog "" "$LIBS" "clock monotonic precise"; then - clock_monotonic_precise="yes" - fi -fi -print_config "CLOCK_MONOTONIC_PRECISE" "$clock_monotonic_precise" - ########################################## # clockid_t probe if test "$clockid_t" != "yes" ; then @@ -1261,25 +1264,6 @@ if compile_prog "" "" "linux splice"; then fi print_config "Linux splice(2)" "$linux_splice" -########################################## -# GUASI probe -if test "$guasi" != "yes" ; then - guasi="no" -fi -cat > $TMPC << EOF -#include -#include -int main(int argc, char **argv) -{ - guasi_t ctx = guasi_create(0, 0, 0); - return 0; -} -EOF -if compile_prog "" "" "guasi"; then - guasi="yes" -fi -print_config "GUASI" "$guasi" - ########################################## # libnuma probe if test "$libnuma" != "yes" ; then @@ -1488,18 +1472,17 @@ if test "$?" != "0" ; then echo "configure: gtk and gthread not found" exit 1 fi -if ! ${cross_prefix}pkg-config --atleast-version 2.18.0 gtk+-2.0; then - echo "GTK found, but need version 2.18 or higher" - gfio="no" -else +gfio="yes" +if check_min_lib_version gtk+-2.0 2.18.0 "gfio"; then if compile_prog "$GTK_CFLAGS" "$GTK_LIBS" "gfio" ; then - gfio="yes" GFIO_LIBS="$LIBS $GTK_LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" else echo "Please install gtk and gdk libraries" gfio="no" fi +else + gfio="no" fi LDFLAGS=$ORG_LDFLAGS fi @@ -2029,7 +2012,7 @@ if test "$libhdfs" = "yes" ; then hdfs_conf_error=1 fi if test "$hdfs_conf_error" = "1" ; then - exit 1 + feature_not_found "libhdfs" "" fi FIO_HDFS_CPU=$cpu if test "$FIO_HDFS_CPU" = "x86_64" ; then @@ -2068,10 +2051,11 @@ if test "$libpmem" != "yes" ; then fi cat > $TMPC << EOF #include +#include int main(int argc, char **argv) { int rc; - rc = pmem_is_pmem(0, 0); + rc = pmem_is_pmem(NULL, NULL); return 0; } EOF @@ -2080,6 +2064,27 @@ if compile_prog "" "-lpmem" "libpmem"; then fi print_config "libpmem" "$libpmem" +########################################## +# Check whether libpmem's version >= 1.5 +if test "$libpmem1_5" != "yes" ; then + libpmem1_5="no" +fi +if test "$libpmem" = "yes"; then + cat > $TMPC << EOF +#include +#include +int main(int argc, char **argv) +{ + pmem_memcpy(NULL, NULL, NULL, NULL); + return 0; +} +EOF + if compile_prog "" "-lpmem" "libpmem1_5"; then + libpmem1_5="yes" + fi +fi +print_config "libpmem1_5" "$libpmem1_5" + ########################################## # Check whether we have libpmemblk # libpmem is a prerequisite @@ -2102,10 +2107,12 @@ EOF fi print_config "libpmemblk" "$libpmemblk" -# Choose the ioengines +# Choose libpmem-based ioengines if test "$libpmem" = "yes" && test "$disable_pmem" = "no"; then - pmem="yes" devdax="yes" + if test "$libpmem1_5" = "yes"; then + pmem="yes" + fi if test "$libpmemblk" = "yes"; then pmemblk="yes" fi @@ -2147,33 +2154,26 @@ fi print_config "DDN's Infinite Memory Engine" "$libime" ########################################## -# Check if we have required environment variables configured for libiscsi -if test "$libiscsi" = "yes" ; then - if $(pkg-config --atleast-version=1.9.0 libiscsi); then +# Check if we have libiscsi +if test "$libiscsi" != "no" ; then + if check_min_lib_version libiscsi 1.9.0; then libiscsi="yes" libiscsi_cflags=$(pkg-config --cflags libiscsi) libiscsi_libs=$(pkg-config --libs libiscsi) else - if test "$libiscsi" = "yes" ; then - echo "libiscsi" "Install libiscsi >= 1.9.0" - fi libiscsi="no" fi fi print_config "iscsi engine" "$libiscsi" ########################################## -# Check if we have libnbd (for NBD support). -minimum_libnbd=0.9.8 -if test "$libnbd" = "yes" ; then - if $(pkg-config --atleast-version=$minimum_libnbd libnbd); then +# Check if we have libnbd (for NBD support) +if test "$libnbd" != "no" ; then + if check_min_lib_version libnbd 0.9.8; then libnbd="yes" libnbd_cflags=$(pkg-config --cflags libnbd) libnbd_libs=$(pkg-config --libs libnbd) else - if test "$libnbd" = "yes" ; then - echo "libnbd" "Install libnbd >= $minimum_libnbd" - fi libnbd="no" fi fi @@ -2187,19 +2187,14 @@ lex="no" arith="no" if test "$disable_lex" = "no" || test -z "$disable_lex" ; then if test "$targetos" != "SunOS" ; then -LEX=$(which lex 2> /dev/null) -if test -x "$LEX" ; then +if has lex; then lex="yes" fi -YACC=$(which bison 2> /dev/null) -if test -x "$YACC" ; then +if has bison; then yacc="yes" yacc_is_bison="yes" -else - YACC=$(which yacc 2> /dev/null) - if test -x "$YACC" ; then - yacc="yes" - fi +elif has yacc; then + yacc="yes" fi if test "$yacc" = "yes" && test "$lex" = "yes" ; then arith="yes" @@ -2215,7 +2210,9 @@ int main(int argc, char **argv) return 0; } EOF -if compile_prog "" "-ll" "lex"; then +if compile_prog "" "-lfl" "flex"; then + LIBS="-lfl $LIBS" +elif compile_prog "" "-ll" "lex"; then LIBS="-ll $LIBS" else arith="no" @@ -2229,8 +2226,7 @@ if test "$arith" = "yes" ; then if test "$force_no_lex_o" = "yes" ; then lex_use_o="no" else -$LEX -o lex.yy.c exp/expression-parser.l 2> /dev/null -if test "$?" = "0" ; then +if lex -o lex.yy.c exp/expression-parser.l 2> /dev/null; then lex_use_o="yes" else lex_use_o="no" @@ -2386,6 +2382,7 @@ if compile_prog "" "" "valgrind_dev"; then fi print_config "Valgrind headers" "$valgrind_dev" +if test "$targetos" = "Linux" ; then ########################################## # probe if test "$linux_blkzoned" != "yes" ; then @@ -2404,10 +2401,25 @@ fi print_config "Zoned block device support" "$linux_blkzoned" ########################################## -# libzbc probe -if test "$libzbc" != "yes" ; then - libzbc="no" +# Check BLK_ZONE_REP_CAPACITY +cat > $TMPC << EOF +#include +int main(void) +{ + return BLK_ZONE_REP_CAPACITY; +} +EOF +if compile_prog "" "" "blkzoned report capacity"; then + output_sym "CONFIG_HAVE_REP_CAPACITY" + rep_capacity="yes" +else + rep_capacity="no" fi +print_config "Zoned block device capacity" "$rep_capacity" +fi + +########################################## +# libzbc probe cat > $TMPC << EOF #include int main(int argc, char **argv) @@ -2417,19 +2429,18 @@ int main(int argc, char **argv) return zbc_open("foo=bar", O_RDONLY, &dev); } EOF -if compile_prog "" "-lzbc" "libzbc"; then - libzbcvermaj=$(pkg-config --modversion libzbc | sed 's/\.[0-9]*\.[0-9]*//') - if test "$libzbcvermaj" -ge "5" ; then +if test "$libzbc" != "no" ; then + if compile_prog "" "-lzbc" "libzbc"; then libzbc="yes" + if ! check_min_lib_version libzbc 5; then + libzbc="no" + fi else - print_config "libzbc engine" "Unsupported libzbc version (version 5 or above required)" - libzbc="no" - fi -else - if test "$libzbc" = "yes" ; then + if test "$libzbc" = "yes" ; then feature_not_found "libzbc" "libzbc or libzbc/zbc.h" + fi + libzbc="no" fi - libzbc="no" fi print_config "libzbc engine" "$libzbc" @@ -2464,9 +2475,7 @@ print_config "march_armv8_a_crc_crypto" "$march_armv8_a_crc_crypto" ########################################## # cuda probe -if test "$cuda" != "yes" ; then - cuda="no" -fi +if test "$cuda" != "no" ; then cat > $TMPC << EOF #include int main(int argc, char **argv) @@ -2474,9 +2483,15 @@ int main(int argc, char **argv) return cuInit(0); } EOF -if test "$enable_cuda" = "yes" && compile_prog "" "-lcuda" "cuda"; then - cuda="yes" - LIBS="-lcuda $LIBS" + if compile_prog "" "-lcuda" "cuda"; then + cuda="yes" + LIBS="-lcuda $LIBS" + else + if test "$cuda" = "yes" ; then + feature_not_found "cuda" "" + fi + cuda="no" + fi fi print_config "cuda" "$cuda" @@ -2632,6 +2647,45 @@ if compile_prog "" "" "statx_syscall"; then fi print_config "statx(2)/syscall" "$statx_syscall" +########################################## +# check for Windows PDB generation support +if test "pdb" != "no" ; then + cat > $TMPC < $TMPC << EOF +#include +#include + +int main(int argc, char **argv) +{ + return timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK); +} +EOF +if compile_prog "" "" "timerfd_create"; then + timerfd_create="yes" +fi +print_config "timerfd_create" "$timerfd_create" + ############################################################################# if test "$wordsize" = "64" ; then @@ -2654,9 +2708,6 @@ if test "$libaio" = "yes" ; then if test "$libaio_rw_flags" = "yes" ; then output_sym "CONFIG_LIBAIO_RW_FLAGS" fi - if test "$libaio_uring" = "yes" ; then - output_sym "CONFIG_LIBAIO_URING" - fi fi if test "$posix_aio" = "yes" ; then output_sym "CONFIG_POSIXAIO" @@ -2762,9 +2813,6 @@ fi if test "$linux_splice" = "yes" ; then output_sym "CONFIG_LINUX_SPLICE" fi -if test "$guasi" = "yes" ; then - output_sym "CONFIG_GUASI" -fi if test "$libnuma_v2" = "yes" ; then output_sym "CONFIG_LIBNUMA" fi @@ -2868,9 +2916,9 @@ fi if test "$arith" = "yes" ; then output_sym "CONFIG_ARITHMETIC" if test "$yacc_is_bison" = "yes" ; then - echo "YACC=$YACC -y" >> $config_host_mak + echo "YACC=bison -y" >> $config_host_mak else - echo "YACC=$YACC" >> $config_host_mak + echo "YACC=yacc" >> $config_host_mak fi if test "$lex_use_o" = "yes" ; then echo "CONFIG_LEX_USE_O=y" >> $config_host_mak @@ -2936,6 +2984,9 @@ fi if test "$statx_syscall" = "yes"; then output_sym "CONFIG_HAVE_STATX_SYSCALL" fi +if test "$timerfd_create" = "yes"; then + output_sym "CONFIG_HAVE_TIMERFD_CREATE" +fi if test "$fallthrough" = "yes"; then CFLAGS="$CFLAGS -Wimplicit-fallthrough" fi @@ -2954,17 +3005,30 @@ if test "$libnbd" = "yes" ; then echo "LIBNBD_CFLAGS=$libnbd_cflags" >> $config_host_mak echo "LIBNBD_LIBS=$libnbd_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 + +print_config "Lib-based ioengines dynamic" "$dynamic_engines" cat > $TMPC << EOF int main(int argc, char **argv) { return 0; } EOF -if test "$disable_tcmalloc" != "yes" && compile_prog "" "-ltcmalloc" "tcmalloc"; then - LIBS="-ltcmalloc $LIBS" - tcmalloc="yes" -else - tcmalloc="no" +if test "$disable_tcmalloc" != "yes"; then + if compile_prog "" "-ltcmalloc" "tcmalloc"; then + tcmalloc="yes" + LIBS="-ltcmalloc $LIBS" + elif compile_prog "" "-l:libtcmalloc_minimal.so.4" "tcmalloc_minimal4"; then + tcmalloc="yes" + LIBS="-l:libtcmalloc_minimal.so.4 $LIBS" + else + tcmalloc="no" + fi fi print_config "TCMalloc support" "$tcmalloc"