X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=configure;h=a5c0f6ef84482d95fa0e7c2fbf45591a7921b134;hp=cefd61032284ddc36013a7d7ab1d8aaa9bc71b71;hb=e59ad777d34cfee20b3b700482b936c16cceaa8e;hpb=a16f04b96d6328d87fb04d6c2c1a9936b2e274d8 diff --git a/configure b/configure index cefd6103..a5c0f6ef 100755 --- a/configure +++ b/configure @@ -1,7 +1,7 @@ #!/bin/sh # # Fio configure script. Heavily influenced by the manual qemu configure -# script. Sad this this is easier than autoconf and enemies. +# script. Sad this is easier than autoconf and enemies. # # set temporary file name @@ -142,8 +142,11 @@ gfio_check="no" libhdfs="no" pmemblk="no" devdax="no" +pmem="no" disable_lex="" disable_pmem="no" +disable_native="no" +march_set="no" prefix=/usr/local # parse options @@ -164,6 +167,8 @@ for opt do ;; --build-32bit-win) build_32bit_win="yes" ;; + --target-win-ver=*) target_win_ver="$optarg" + ;; --build-static) build_static="yes" ;; --enable-gfio) gfio_check="yes" @@ -172,9 +177,9 @@ for opt do ;; --disable-rdma) disable_rdma="yes" ;; - --disable-rbd) disable_rbd="yes" + --disable-rados) disable_rados="yes" ;; - --disable-rbd-blkin) disable_rbd_blkin="yes" + --disable-rbd) disable_rbd="yes" ;; --disable-gfapi) disable_gfapi="yes" ;; @@ -192,6 +197,8 @@ for opt do ;; --enable-cuda) enable_cuda="yes" ;; + --disable-native) disable_native="yes" + ;; --help) show_help="yes" ;; @@ -208,6 +215,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 "--build-static Build a static fio" echo "--esx Configure build options for esx" echo "--enable-gfio Enable building of gtk gfio" @@ -221,11 +229,25 @@ 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 "--disable-native Don't build for native host" exit $exit_val fi cross_prefix=${cross_prefix-${CROSS_COMPILE}} -cc="${CC-${cross_prefix}gcc}" +# Preferred compiler (can be overriden later after we know the platform): +# ${CC} (if set) +# ${cross_prefix}gcc (if cross-prefix specified) +# gcc if available +# clang if available +if test -z "${CC}${cross_prefix}"; then + if has gcc; then + cc=gcc + elif has clang; then + cc=clang + fi +else + cc="${CC-${cross_prefix}gcc}" +fi if check_define __ANDROID__ ; then targetos="Android" @@ -233,6 +255,8 @@ elif check_define __linux__ ; then targetos="Linux" elif check_define __OpenBSD__ ; then targetos='OpenBSD' +elif check_define __NetBSD__ ; then + targetos='NetBSD' elif check_define __sun__ ; then targetos='SunOS' CFLAGS="$CFLAGS -D_REENTRANT" @@ -261,7 +285,7 @@ fi # cross-compiling to one of these OSes then you'll need to specify # the correct CPU with the --cpu option. case $targetos in -AIX|OpenBSD) +AIX|OpenBSD|NetBSD) # Unless explicitly enabled, turn off lex. # OpenBSD will hit syntax error when enabled. if test -z "$disable_lex" ; then @@ -301,35 +325,34 @@ SunOS) CYGWIN*) # We still force some options, so keep this message here. echo "Forcing some known good options on Windows" - if test -z "$CC" ; then + if test -z "${CC}${cross_prefix}"; then if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then - CC="i686-w64-mingw32-gcc" - if test -e "../zlib/contrib/vstudio/vc14/x86/ZlibStatReleaseWithoutAsm/zlibstat.lib"; then - echo "Building with zlib support" - output_sym "CONFIG_ZLIB" - echo "LIBS=../zlib/contrib/vstudio/vc14/x86/ZlibStatReleaseWithoutAsm/zlibstat.lib" >> $config_host_mak - fi + cc="i686-w64-mingw32-gcc" else - CC="x86_64-w64-mingw32-gcc" - if test -e "../zlib/contrib/vstudio/vc14/x64/ZlibStatReleaseWithoutAsm/zlibstat.lib"; then - echo "Building with zlib support" - output_sym "CONFIG_ZLIB" - echo "LIBS=../zlib/contrib/vstudio/vc14/x64/ZlibStatReleaseWithoutAsm/zlibstat.lib" >> $config_host_mak - fi + cc="x86_64-w64-mingw32-gcc" fi fi - if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then - output_sym "CONFIG_32BIT" + + target_win_ver=$(echo "$target_win_ver" | tr '[:lower:]' '[:upper:]') + if test -z "$target_win_ver"; then + # Default Windows API target + target_win_ver="7" + fi + if test "$target_win_ver" = "XP"; then + output_sym "CONFIG_WINDOWS_XP" + elif test "$target_win_ver" = "7"; then + output_sym "CONFIG_WINDOWS_7" + CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0601" else - output_sym "CONFIG_64BIT_LLP64" + fatal "Unknown target Windows version" fi + # We need this to be output_sym'd here because this is Windows specific. # The regular configure path never sets this config. output_sym "CONFIG_WINDOWSAIO" # We now take the regular configuration path without having exit 0 here. # Flags below are still necessary mostly for MinGW. socklen_t="yes" - sfaa="yes" rusage_thread="yes" fdatasync="yes" clock_gettime="yes" # clock_monotonic probe has dependency on this @@ -337,14 +360,24 @@ CYGWIN*) gettimeofday="yes" sched_idle="yes" tcp_nodelay="yes" - tls_thread="yes" - static_assert="yes" ipv6="yes" - echo "CC=$CC" >> $config_host_mak - echo "BUILD_CFLAGS=$CFLAGS -I../zlib -include config-host.h -D_GNU_SOURCE" >> $config_host_mak ;; esac +# Now we know the target platform we can have another guess at the preferred +# compiler when it wasn't explictly set +if test -z "${CC}${cross_prefix}"; then + if test "$targetos" = "FreeBSD" || test "$targetos" = "Darwin"; then + if has clang; then + cc=clang + fi + fi +fi +if test -z "$cc"; then + echo "configure: failed to find compiler" + exit 1 +fi + if test ! -z "$cpu" ; then # command line argument : @@ -415,18 +448,6 @@ case "$cpu" in ;; esac -if test -z "$CC" ; then - if test "$targetos" = "FreeBSD"; then - if has clang; then - CC=clang - else - CC=gcc - fi - fi -fi - -cc="${CC-${cross_prefix}gcc}" - ########################################## # check cross compile @@ -483,6 +504,9 @@ fi print_config "Operating system" "$targetos" print_config "CPU" "$cpu" print_config "Big endian" "$bigendian" +if test ! -z "$target_win_ver"; then + print_config "Target Windows version" "$target_win_ver" +fi print_config "Compiler" "$cc" print_config "Cross compile" "$cross_compile" echo @@ -691,6 +715,44 @@ if compile_prog "" "" "__sync_fetch_and_add()" ; then fi print_config "__sync_fetch_and_add" "$sfaa" +########################################## +# __sync_synchronize() test +if test "$sync_sync" != "yes" ; then + sync_sync="no" +fi +cat > $TMPC << EOF +#include + +int main(int argc, char **argv) +{ + __sync_synchronize(); + return 0; +} +EOF +if compile_prog "" "" "__sync_synchronize()" ; then + sync_sync="yes" +fi +print_config "__sync_synchronize" "$sync_sync" + +########################################## +# __sync_val_compare_and_swap() test +if test "$cmp_swap" != "yes" ; then + cmp_swap="no" +fi +cat > $TMPC << EOF +#include + +int main(int argc, char **argv) +{ + int x = 0; + return __sync_val_compare_and_swap(&x, 1, 2); +} +EOF +if compile_prog "" "" "__sync_val_compare_and_swap()" ; then + cmp_swap="yes" +fi +print_config "__sync_val_compare_and_swap" "$cmp_swap" + ########################################## # libverbs probe if test "$libverbs" != "yes" ; then @@ -730,6 +792,40 @@ if test "$disable_rdma" != "yes" && compile_prog "" "-lrdmacm" "rdma"; then fi print_config "rdmacm" "$rdmacm" +########################################## +# asprintf() and vasprintf() probes +if test "$have_asprintf" != "yes" ; then + have_asprintf="no" +fi +cat > $TMPC << EOF +#include + +int main(int argc, char **argv) +{ + return asprintf(NULL, "%s", "str") == 0; +} +EOF +if compile_prog "" "" "have_asprintf"; then + have_asprintf="yes" +fi +print_config "asprintf()" "$have_asprintf" + +if test "$have_vasprintf" != "yes" ; then + have_vasprintf="no" +fi +cat > $TMPC << EOF +#include + +int main(int argc, char **argv) +{ + return vasprintf(NULL, "%s", NULL) == 0; +} +EOF +if compile_prog "" "" "have_vasprintf"; then + have_vasprintf="yes" +fi +print_config "vasprintf()" "$have_vasprintf" + ########################################## # Linux fallocate probe if test "$linux_fallocate" != "yes" ; then @@ -1470,6 +1566,35 @@ if compile_prog "" "" "ipv6"; then fi print_config "IPv6 helpers" "$ipv6" +########################################## +# check for rados +if test "$rados" != "yes" ; then + rados="no" +fi +cat > $TMPC << EOF +#include + +int main(int argc, char **argv) +{ + rados_t cluster; + rados_ioctx_t io_ctx; + const char cluster_name[] = "ceph"; + const char user_name[] = "client.admin"; + const char pool[] = "rados"; + + /* The rados_create2 signature required was only introduced in ceph 0.65 */ + rados_create2(&cluster, cluster_name, user_name, 0); + rados_ioctx_create(cluster, pool, &io_ctx); + + return 0; +} +EOF +if test "$disable_rados" != "yes" && compile_prog "" "-lrados" "rados"; then + LIBS="-lrados $LIBS" + rados="yes" +fi +print_config "Rados engine" "$rados" + ########################################## # check for rbd if test "$rbd" != "yes" ; then @@ -1530,7 +1655,7 @@ print_config "rbd_poll" "$rbd_poll" fi ########################################## -# check for rbd_invaidate_cache() +# check for rbd_invalidate_cache() if test "$rbd_inval" != "yes" ; then rbd_inval="no" fi @@ -1551,36 +1676,6 @@ fi print_config "rbd_invalidate_cache" "$rbd_inval" fi -########################################## -# check for blkin -if test "$rbd_blkin" != "yes" ; then - rbd_blkin="no" -fi -cat > $TMPC << EOF -#include -#include - -int main(int argc, char **argv) -{ - int r; - struct blkin_trace_info t_info; - blkin_init_trace_info(&t_info); - rbd_completion_t completion; - rbd_image_t image; - uint64_t off; - size_t len; - const char *buf; - r = rbd_aio_write_traced(image, off, len, buf, completion, &t_info); - return 0; -} -EOF -if test "$disable_rbd" != "yes" && test "$disable_rbd_blkin" != "yes" \ - && compile_prog "" "-lrbd -lrados -lblkin" "rbd_blkin"; then - LIBS="-lblkin $LIBS" - rbd_blkin="yes" -fi -print_config "rbd blkin tracing" "$rbd_blkin" - ########################################## # Check whether we have setvbuf if test "$setvbuf" != "yes" ; then @@ -1790,6 +1885,7 @@ print_config "libpmemblk" "$libpmemblk" # Choose the ioengines if test "$libpmem" = "yes" && test "$disable_pmem" = "no"; then + pmem="yes" devdax="yes" if test "$libpmemblk" = "yes"; then pmemblk="yes" @@ -1804,6 +1900,10 @@ print_config "NVML pmemblk engine" "$pmemblk" # Report whether dev-dax engine is enabled print_config "NVML dev-dax engine" "$devdax" +########################################## +# Report whether libpmem engine is enabled +print_config "NVML libpmem engine" "$pmem" + ########################################## # Check if we have lex/yacc available yacc="no" @@ -1993,6 +2093,24 @@ fi print_config "strndup" "$strndup" ########################################## +# probe +# Note: presence of implies that is +# also available but not the other way around. +if test "$valgrind_dev" != "yes" ; then + valgrind_dev="no" +fi +cat > $TMPC << EOF +#include +int main(int argc, char **argv) +{ + return 0; +} +EOF +if compile_prog "" "" "valgrind_dev"; then + valgrind_dev="yes" +fi +print_config "Valgrind headers" "$valgrind_dev" + # check march=armv8-a+crc+crypto if test "$march_armv8_a_crc_crypto" != "yes" ; then march_armv8_a_crc_crypto="no" @@ -2011,6 +2129,7 @@ EOF if compile_prog "-march=armv8-a+crc+crypto" "" ""; then march_armv8_a_crc_crypto="yes" CFLAGS="$CFLAGS -march=armv8-a+crc+crypto -DARCH_HAVE_CRC_CRYPTO" + march_set="yes" fi fi print_config "march_armv8_a_crc_crypto" "$march_armv8_a_crc_crypto" @@ -2033,6 +2152,37 @@ if test "$enable_cuda" = "yes" && compile_prog "" "-lcuda" "cuda"; then fi print_config "cuda" "$cuda" +########################################## +# mkdir() probe. mingw apparently has a one-argument mkdir :/ +mkdir_two="no" +cat > $TMPC << EOF +#include +#include +int main(int argc, char **argv) +{ + return mkdir("/tmp/bla", 0600); +} +EOF +if compile_prog "" "" "mkdir(a, b)"; then + mkdir_two="yes" +fi +print_config "mkdir(a, b)" "$mkdir_two" + +########################################## +# check for cc -march=native +build_native="no" +cat > $TMPC << EOF +int main(int argc, char **argv) +{ + return 0; +} +EOF +if test "$disable_native" = "no" && test "$disable_opt" != "yes" && \ + compile_prog "-march=native" "" "march=native"; then + build_native="yes" +fi +print_config "Build march=native" "$build_native" + ############################################################################# if test "$wordsize" = "64" ; then @@ -2062,6 +2212,12 @@ fi if test "$posix_pshared" = "yes" ; then output_sym "CONFIG_PSHARED" fi +if test "$have_asprintf" = "yes" ; then + output_sym "HAVE_ASPRINTF" +fi +if test "$have_vasprintf" = "yes" ; then + output_sym "HAVE_VASPRINTF" +fi if test "$linux_fallocate" = "yes" ; then output_sym "CONFIG_LINUX_FALLOCATE" fi @@ -2077,6 +2233,12 @@ fi if test "$sfaa" = "yes" ; then output_sym "CONFIG_SFAA" fi +if test "$sync_sync" = "yes" ; then + output_sym "CONFIG_SYNC_SYNC" +fi +if test "$cmp_swap" = "yes" ; then + output_sym "CONFIG_CMP_SWAP" +fi if test "$libverbs" = "yes" -a "$rdmacm" = "yes" ; then output_sym "CONFIG_RDMA" fi @@ -2179,6 +2341,9 @@ fi if test "$ipv6" = "yes" ; then output_sym "CONFIG_IPV6" fi +if test "$rados" = "yes" ; then + output_sym "CONFIG_RADOS" +fi if test "$rbd" = "yes" ; then output_sym "CONFIG_RBD" fi @@ -2188,15 +2353,13 @@ fi if test "$rbd_inval" = "yes" ; then output_sym "CONFIG_RBD_INVAL" fi -if test "$rbd_blkin" = "yes" ; then - output_sym "CONFIG_RBD_BLKIN" -fi if test "$setvbuf" = "yes" ; then output_sym "CONFIG_SETVBUF" fi if test "$s390_z196_facilities" = "yes" ; then output_sym "CONFIG_S390_Z196_FACILITIES" CFLAGS="$CFLAGS -march=z9-109" + march_set="yes" fi if test "$gfapi" = "yes" ; then output_sym "CONFIG_GFAPI" @@ -2223,6 +2386,9 @@ fi if test "$devdax" = "yes" ; then output_sym "CONFIG_LINUX_DEVDAX" fi +if test "$pmem" = "yes" ; then + output_sym "CONFIG_LIBPMEM" +fi if test "$arith" = "yes" ; then output_sym "CONFIG_ARITHMETIC" if test "$yacc_is_bison" = "yes" ; then @@ -2255,12 +2421,24 @@ fi if test "$disable_opt" = "yes" ; then output_sym "CONFIG_DISABLE_OPTIMIZATIONS" fi +if test "$valgrind_dev" = "yes"; then + output_sym "CONFIG_VALGRIND_DEV" +fi if test "$zlib" = "no" ; then - echo "Consider installing zlib-dev (zlib-devel), some fio features depend on it." + echo "Consider installing zlib-dev (zlib-devel, some fio features depend on it." + if test "$build_static" = "yes"; then + echo "Note that some distros have separate packages for static libraries." + fi fi if test "$cuda" = "yes" ; then output_sym "CONFIG_CUDA" fi +if test "$mkdir_two" = "yes" ; then + output_sym "CONFIG_HAVE_MKDIR_TWO" +fi +if test "$march_set" = "no" && test "$build_native" = "yes" ; then + output_sym "CONFIG_BUILD_NATIVE" +fi echo "LIBS+=$LIBS" >> $config_host_mak echo "GFIO_LIBS+=$GFIO_LIBS" >> $config_host_mak