X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=configure;h=e6e33d7f6451054163bcaa9d6acc77bfd802c45a;hp=25216c631171d044f51f7a0ecf52798e13fd4a51;hb=48ff7df9daea86c82a572b0a840bb8371b6b1a29;hpb=bb012314f734b9de3b2fc198db2c4e3e060db240 diff --git a/configure b/configure index 25216c63..e6e33d7f 100755 --- a/configure +++ b/configure @@ -45,6 +45,7 @@ print_config() { # Default CFLAGS CFLAGS="-D_GNU_SOURCE -include config-host.h $CFLAGS" +CONFIGURE_CFLAGS="-Werror-implicit-function-declaration" BUILD_CFLAGS="" # Print a helpful header at the top of config.log @@ -88,14 +89,14 @@ do_cc() { } compile_object() { - do_cc $CFLAGS -Werror-implicit-function-declaration -c -o $TMPO $TMPC + do_cc $CFLAGS $CONFIGURE_CFLAGS -c -o $TMPO $TMPC } compile_prog() { local_cflags="$1" local_ldflags="$2 $LIBS" echo "Compiling test case $3" >> config.log - do_cc $CFLAGS -Werror-implicit-function-declaration $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags + do_cc $CFLAGS $CONFIGURE_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags } feature_not_found() { @@ -133,6 +134,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 +162,15 @@ libhdfs="no" pmemblk="no" devdax="no" pmem="no" +cuda="no" +libcufile="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 @@ -174,6 +194,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" @@ -202,7 +224,9 @@ for opt do ;; --disable-pmem) disable_pmem="yes" ;; - --enable-cuda) enable_cuda="yes" + --enable-cuda) cuda="yes" + ;; + --enable-libcufile) libcufile="yes" ;; --disable-native) disable_native="yes" ;; @@ -212,9 +236,9 @@ for opt do ;; --enable-libnbd) libnbd="yes" ;; - --disable-tcmalloc) disable_tcmalloc="yes" + --disable-libzbc) libzbc="no" ;; - --enable-libaio-uring) libaio_uring="yes" + --disable-tcmalloc) disable_tcmalloc="yes" ;; --dynamic-libengines) dynamic_engines="yes" ;; @@ -234,7 +258,8 @@ 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" echo "--enable-gfio Enable building of gtk gfio" @@ -251,12 +276,13 @@ if test "$show_help" = "yes" ; then echo "--disable-shm Disable SHM support" echo "--disable-optimizations Don't enable compiler optimizations" echo "--enable-cuda Enable GPUDirect RDMA support" + echo "--enable-libcufile Enable GPUDirect Storage cuFile support" echo "--disable-native Don't build for native host" 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 @@ -335,16 +361,15 @@ Darwin) if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then cpu="x86_64" fi - # Error at compile time linking of weak/partial symbols if possible... + # Avoid configure feature detection of features provided by weak symbols cat > $TMPC < $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 @@ -929,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 @@ -1070,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 @@ -1284,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 @@ -1511,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 @@ -2052,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 @@ -2091,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 @@ -2103,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 @@ -2125,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 @@ -2170,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 @@ -2210,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" @@ -2238,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" @@ -2252,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" @@ -2447,9 +2420,6 @@ fi ########################################## # libzbc probe -if test "$libzbc" != "yes" ; then - libzbc="no" -fi cat > $TMPC << EOF #include int main(int argc, char **argv) @@ -2459,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" @@ -2506,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) @@ -2516,12 +2483,41 @@ 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" +########################################## +# libcufile probe +if test "$libcufile" != "no" ; then +cat > $TMPC << EOF +#include + +int main(int argc, char* argv[]) { + cuFileDriverOpen(); + return 0; +} +EOF + if compile_prog "" "-lcuda -lcudart -lcufile" "libcufile"; then + libcufile="yes" + LIBS="-lcuda -lcudart -lcufile $LIBS" + else + if test "$libcufile" = "yes" ; then + feature_not_found "libcufile" "" + fi + libcufile="no" + fi +fi +print_config "libcufile" "$libcufile" + ########################################## # check for cc -march=native build_native="no" @@ -2674,6 +2670,47 @@ 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 +fi +print_config "timerfd_create" "$timerfd_create" + ############################################################################# if test "$wordsize" = "64" ; then @@ -2696,9 +2733,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" @@ -2804,9 +2838,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 @@ -2910,9 +2941,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 @@ -2960,6 +2991,9 @@ fi if test "$cuda" = "yes" ; then output_sym "CONFIG_CUDA" fi +if test "$libcufile" = "yes" ; then + output_sym "CONFIG_LIBCUFILE" +fi if test "$march_set" = "no" && test "$build_native" = "yes" ; then output_sym "CONFIG_BUILD_NATIVE" fi @@ -2978,6 +3012,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 @@ -2999,6 +3036,10 @@ 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) @@ -3006,11 +3047,16 @@ 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"