1 #!/bin/sh 2 # 3 # Fio configure script. Heavily influenced by the manual qemu configure 4 # script. Sad this this is easier than autoconf and enemies. 5 # 6 7 # set temporary file name 8 if test ! -z "$TMPDIR" ; then 9 TMPDIR1="${TMPDIR}" 10 elif test ! -z "$TEMPDIR" ; then 11 TMPDIR1="${TEMPDIR}" 12 else 13 TMPDIR1="/tmp" 14 fi 15 16 TMPC="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.c" 17 TMPO="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.o" 18 TMPE="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.exe" 19 20 # NB: do not call "exit" in the trap handler; this is buggy with some shells; 21 # see <1285349658-3122-1-git-send-email-loic.minier (at] linaro.org> 22 trap "rm -f $TMPC $TMPO $TMPE" EXIT INT QUIT TERM 23 24 rm -rf config.log 25 26 config_host_mak="config-host.mak" 27 config_host_h="config-host.h" 28 29 rm -rf $config_host_mak 30 rm -rf $config_host_h 31 32 fatal() { 33 echo $@ 34 echo "Configure failed, check config.log and/or the above output" 35 rm -rf $config_host_mak 36 rm -rf $config_host_h 37 exit 1 38 } 39 40 # Default CFLAGS 41 CFLAGS="-D_GNU_SOURCE -include config-host.h" 42 BUILD_CFLAGS="" 43 44 # Print a helpful header at the top of config.log 45 echo "# FIO configure log $(date)" >> config.log 46 printf "# Configured with:" >> config.log 47 printf " '%s'" "$0" "$@" >> config.log 48 echo >> config.log 49 echo "#" >> config.log 50 51 # Print configure header at the top of $config_host_h 52 echo "/*" > $config_host_h 53 echo " * Automatically generated by configure - do not modify" >> $config_host_h 54 printf " * Configured with:" >> $config_host_h 55 printf " * '%s'" "$0" "$@" >> $config_host_h 56 echo "" >> $config_host_h 57 echo " */" >> $config_host_h 58 59 do_cc() { 60 # Run the compiler, capturing its output to the log. 61 echo $cc "$@" >> config.log 62 $cc "$@" >> config.log 2>&1 || return $? 63 # Test passed. If this is an --enable-werror build, rerun 64 # the test with -Werror and bail out if it fails. This 65 # makes warning-generating-errors in configure test code 66 # obvious to developers. 67 if test "$werror" != "yes"; then 68 return 0 69 fi 70 # Don't bother rerunning the compile if we were already using -Werror 71 case "$*" in 72 *-Werror*) 73 return 0 74 ;; 75 esac 76 echo $cc -Werror "$@" >> config.log 77 $cc -Werror "$@" >> config.log 2>&1 && return $? 78 echo "ERROR: configure test passed without -Werror but failed with -Werror." 79 echo "This is probably a bug in the configure script. The failing command" 80 echo "will be at the bottom of config.log." 81 fatal "You can run configure with --disable-werror to bypass this check." 82 } 83 84 compile_object() { 85 do_cc $CFLAGS -c -o $TMPO $TMPC 86 } 87 88 compile_prog() { 89 local_cflags="$1" 90 local_ldflags="$2 $LIBS" 91 echo "Compiling test case $3" >> config.log 92 do_cc $CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags 93 } 94 95 feature_not_found() { 96 feature=$1 97 packages=$2 98 99 echo "ERROR" 100 echo "ERROR: User requested feature $feature" 101 if test ! -z "$packages" ; then 102 echo "ERROR: That feature needs $packages installed" 103 fi 104 echo "ERROR: configure was not able to find it" 105 fatal "ERROR" 106 } 107 108 has() { 109 type "$1" >/dev/null 2>&1 110 } 111 112 check_define() { 113 cat > $TMPC <<EOF 114 #if !defined($1) 115 #error $1 not defined 116 #endif 117 int main(void) 118 { 119 return 0; 120 } 121 EOF 122 compile_object 123 } 124 125 output_sym() { 126 echo "$1=y" >> $config_host_mak 127 echo "#define $1" >> $config_host_h 128 } 129 130 targetos="" 131 cpu="" 132 133 # default options 134 show_help="no" 135 exit_val=0 136 gfio_check="no" 137 libhdfs="no" 138 pmemblk="no" 139 devdax="no" 140 disable_lex="" 141 disable_pmem="no" 142 prefix=/usr/local 143 144 # parse options 145 for opt do 146 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` 147 case "$opt" in 148 --prefix=*) prefix="$optarg" 149 ;; 150 --cpu=*) cpu="$optarg" 151 ;; 152 # esx is cross compiled and cannot be detect through simple uname calls 153 --esx) 154 esx="yes" 155 ;; 156 --cc=*) CC="$optarg" 157 ;; 158 --extra-cflags=*) CFLAGS="$CFLAGS $optarg" 159 ;; 160 --build-32bit-win) build_32bit_win="yes" 161 ;; 162 --build-static) build_static="yes" 163 ;; 164 --enable-gfio) gfio_check="yes" 165 ;; 166 --disable-numa) disable_numa="yes" 167 ;; 168 --disable-rdma) disable_rdma="yes" 169 ;; 170 --disable-rbd) disable_rbd="yes" 171 ;; 172 --disable-rbd-blkin) disable_rbd_blkin="yes" 173 ;; 174 --disable-gfapi) disable_gfapi="yes" 175 ;; 176 --enable-libhdfs) libhdfs="yes" 177 ;; 178 --disable-lex) disable_lex="yes" 179 ;; 180 --enable-lex) disable_lex="no" 181 ;; 182 --disable-shm) no_shm="yes" 183 ;; 184 --disable-optimizations) disable_opt="yes" 185 ;; 186 --disable-pmem) disable_pmem="yes" 187 ;; 188 --enable-cuda) enable_cuda="yes" 189 ;; 190 --help) 191 show_help="yes" 192 ;; 193 *) 194 echo "Bad option $opt" 195 show_help="yes" 196 exit_val=1 197 esac 198 done 199 200 if test "$show_help" = "yes" ; then 201 echo "--prefix= Use this directory as installation prefix" 202 echo "--cpu= Specify target CPU if auto-detect fails" 203 echo "--cc= Specify compiler to use" 204 echo "--extra-cflags= Specify extra CFLAGS to pass to compiler" 205 echo "--build-32bit-win Enable 32-bit build on Windows" 206 echo "--build-static Build a static fio" 207 echo "--esx Configure build options for esx" 208 echo "--enable-gfio Enable building of gtk gfio" 209 echo "--disable-numa Disable libnuma even if found" 210 echo "--disable-rdma Disable RDMA support even if found" 211 echo "--disable-gfapi Disable gfapi" 212 echo "--enable-libhdfs Enable hdfs support" 213 echo "--disable-lex Disable use of lex/yacc for math" 214 echo "--disable-pmem Disable pmem based engines even if found" 215 echo "--enable-lex Enable use of lex/yacc for math" 216 echo "--disable-shm Disable SHM support" 217 echo "--disable-optimizations Don't enable compiler optimizations" 218 echo "--enable-cuda Enable GPUDirect RDMA support" 219 exit $exit_val 220 fi 221 222 cross_prefix=${cross_prefix-${CROSS_COMPILE}} 223 cc="${CC-${cross_prefix}gcc}" 224 225 if check_define __ANDROID__ ; then 226 targetos="Android" 227 elif check_define __linux__ ; then 228 targetos="Linux" 229 elif check_define __OpenBSD__ ; then 230 targetos='OpenBSD' 231 elif check_define __sun__ ; then 232 targetos='SunOS' 233 CFLAGS="$CFLAGS -D_REENTRANT" 234 elif check_define _WIN32 ; then 235 targetos='CYGWIN' 236 else 237 targetos=`uname -s` 238 fi 239 240 echo "# Automatically generated by configure - do not modify" > $config_host_mak 241 printf "# Configured with:" >> $config_host_mak 242 printf " '%s'" "$0" "$@" >> $config_host_mak 243 echo >> $config_host_mak 244 echo "CONFIG_TARGET_OS=$targetos" >> $config_host_mak 245 246 if test "$no_shm" = "yes" ; then 247 output_sym "CONFIG_NO_SHM" 248 fi 249 250 if test "$disable_opt" = "yes" ; then 251 output_sym "CONFIG_FIO_NO_OPT" 252 fi 253 254 # Some host OSes need non-standard checks for which CPU to use. 255 # Note that these checks are broken for cross-compilation: if you're 256 # cross-compiling to one of these OSes then you'll need to specify 257 # the correct CPU with the --cpu option. 258 case $targetos in 259 AIX|OpenBSD) 260 # Unless explicitly enabled, turn off lex. 261 # OpenBSD will hit syntax error when enabled. 262 if test -z "$disable_lex" ; then 263 disable_lex="yes" 264 else 265 force_no_lex_o="yes" 266 fi 267 ;; 268 Darwin) 269 # on Leopard most of the system is 32-bit, so we have to ask the kernel if 270 # we can run 64-bit userspace code. 271 # If the user didn't specify a CPU explicitly and the kernel says this is 272 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual 273 # detection code. 274 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then 275 cpu="x86_64" 276 fi 277 # Error at compile time linking of weak/partial symbols if possible... 278 cat > $TMPC <<EOF 279 int main(void) 280 { 281 return 0; 282 } 283 EOF 284 if compile_prog "" "-Wl,-no_weak_imports" "disable weak symbols"; then 285 echo "Disabling weak symbols" 286 LDFLAGS="$LDFLAGS -Wl,-no_weak_imports" 287 fi 288 ;; 289 SunOS) 290 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo 291 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 292 cpu="x86_64" 293 fi 294 LIBS="-lnsl -lsocket" 295 ;; 296 CYGWIN*) 297 # We still force some options, so keep this message here. 298 echo "Forcing some known good options on Windows" 299 if test -z "$CC" ; then 300 if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then 301 CC="i686-w64-mingw32-gcc" 302 if test -e "../zlib/contrib/vstudio/vc14/x86/ZlibStatReleaseWithoutAsm/zlibstat.lib"; then 303 echo "Building with zlib support" 304 output_sym "CONFIG_ZLIB" 305 echo "LIBS=../zlib/contrib/vstudio/vc14/x86/ZlibStatReleaseWithoutAsm/zlibstat.lib" >> $config_host_mak 306 fi 307 else 308 CC="x86_64-w64-mingw32-gcc" 309 if test -e "../zlib/contrib/vstudio/vc14/x64/ZlibStatReleaseWithoutAsm/zlibstat.lib"; then 310 echo "Building with zlib support" 311 output_sym "CONFIG_ZLIB" 312 echo "LIBS=../zlib/contrib/vstudio/vc14/x64/ZlibStatReleaseWithoutAsm/zlibstat.lib" >> $config_host_mak 313 fi 314 fi 315 fi 316 if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then 317 output_sym "CONFIG_32BIT" 318 else 319 output_sym "CONFIG_64BIT_LLP64" 320 fi 321 # We need this to be output_sym'd here because this is Windows specific. 322 # The regular configure path never sets this config. 323 output_sym "CONFIG_WINDOWSAIO" 324 # We now take the regular configuration path without having exit 0 here. 325 # Flags below are still necessary mostly for MinGW. 326 socklen_t="yes" 327 sfaa="yes" 328 rusage_thread="yes" 329 fdatasync="yes" 330 clock_gettime="yes" # clock_monotonic probe has dependency on this 331 clock_monotonic="yes" 332 gettimeofday="yes" 333 sched_idle="yes" 334 tcp_nodelay="yes" 335 tls_thread="yes" 336 static_assert="yes" 337 ipv6="yes" 338 echo "CC=$CC" >> $config_host_mak 339 echo "BUILD_CFLAGS=$CFLAGS -I../zlib -include config-host.h -D_GNU_SOURCE" >> $config_host_mak 340 ;; 341 esac 342 343 if test ! -z "$cpu" ; then 344 # command line argument 345 : 346 elif check_define __i386__ ; then 347 cpu="i386" 348 elif check_define __x86_64__ ; then 349 cpu="x86_64" 350 elif check_define __sparc__ ; then 351 if check_define __arch64__ ; then 352 cpu="sparc64" 353 else 354 cpu="sparc" 355 fi 356 elif check_define _ARCH_PPC ; then 357 if check_define _ARCH_PPC64 ; then 358 cpu="ppc64" 359 else 360 cpu="ppc" 361 fi 362 elif check_define __mips__ ; then 363 cpu="mips" 364 elif check_define __ia64__ ; then 365 cpu="ia64" 366 elif check_define __s390__ ; then 367 if check_define __s390x__ ; then 368 cpu="s390x" 369 else 370 cpu="s390" 371 fi 372 elif check_define __arm__ ; then 373 cpu="arm" 374 elif check_define __aarch64__ ; then 375 cpu="aarch64" 376 elif check_define __hppa__ ; then 377 cpu="hppa" 378 else 379 cpu=`uname -m` 380 fi 381 382 # Normalise host CPU name and set ARCH. 383 case "$cpu" in 384 ia64|ppc|ppc64|s390|s390x|sparc64) 385 cpu="$cpu" 386 ;; 387 i386|i486|i586|i686|i86pc|BePC) 388 cpu="x86" 389 ;; 390 x86_64|amd64) 391 cpu="x86_64" 392 ;; 393 armv*b|armv*l|arm) 394 cpu="arm" 395 ;; 396 aarch64) 397 cpu="arm64" 398 ;; 399 hppa|parisc|parisc64) 400 cpu="hppa" 401 ;; 402 mips*) 403 cpu="mips" 404 ;; 405 sparc|sun4[cdmuv]) 406 cpu="sparc" 407 ;; 408 *) 409 echo "Unknown CPU" 410 ;; 411 esac 412 413 if test -z "$CC" ; then 414 if test "$targetos" = "FreeBSD"; then 415 if has clang; then 416 CC=clang 417 else 418 CC=gcc 419 fi 420 fi 421 fi 422 423 cc="${CC-${cross_prefix}gcc}" 424 425 ########################################## 426 # check cross compile 427 428 if test "$cross_compile" != "yes" ; then 429 cross_compile="no" 430 fi 431 cat > $TMPC <<EOF 432 int main(void) 433 { 434 return 0; 435 } 436 EOF 437 if compile_prog "" "" "cross"; then 438 $TMPE 2>/dev/null || cross_compile="yes" 439 else 440 fatal "compile test failed" 441 fi 442 443 ########################################## 444 # check endianness 445 if test "$bigendian" != "yes" ; then 446 bigendian="no" 447 fi 448 if test "$cross_compile" = "no" ; then 449 cat > $TMPC <<EOF 450 #include <inttypes.h> 451 int main(void) 452 { 453 volatile uint32_t i=0x01234567; 454 return (*((uint8_t*)(&i))) == 0x67; 455 } 456 EOF 457 if compile_prog "" "" "endian"; then 458 $TMPE && bigendian="yes" 459 fi 460 else 461 # If we're cross compiling, try our best to work it out and rely on the 462 # run-time check to fail if we get it wrong. 463 cat > $TMPC <<EOF 464 #include <endian.h> 465 int main(void) 466 { 467 #if __BYTE_ORDER != __BIG_ENDIAN 468 # error "Unknown endianness" 469 #endif 470 } 471 EOF 472 compile_prog "" "" "endian" && bigendian="yes" 473 check_define "__ARMEB__" && bigendian="yes" 474 check_define "__MIPSEB__" && bigendian="yes" 475 fi 476 477 478 echo "Operating system $targetos" 479 echo "CPU $cpu" 480 echo "Big endian $bigendian" 481 echo "Compiler $cc" 482 echo "Cross compile $cross_compile" 483 echo 484 485 ########################################## 486 # See if we need to build a static build 487 if test "$build_static" = "yes" ; then 488 CFLAGS="$CFLAGS -ffunction-sections -fdata-sections" 489 LDFLAGS="$LDFLAGS -static -Wl,--gc-sections" 490 else 491 build_static="no" 492 fi 493 echo "Static build $build_static" 494 495 ########################################## 496 # check for wordsize 497 wordsize="0" 498 cat > $TMPC <<EOF 499 #include <limits.h> 500 #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) 501 int main(void) 502 { 503 BUILD_BUG_ON(sizeof(long)*CHAR_BIT != WORDSIZE); 504 return 0; 505 } 506 EOF 507 if compile_prog "-DWORDSIZE=32" "" "wordsize"; then 508 wordsize="32" 509 elif compile_prog "-DWORDSIZE=64" "" "wordsize"; then 510 wordsize="64" 511 else 512 fatal "Unknown wordsize" 513 fi 514 echo "Wordsize $wordsize" 515 516 ########################################## 517 # zlib probe 518 if test "$zlib" != "yes" ; then 519 zlib="no" 520 fi 521 cat > $TMPC <<EOF 522 #include <zlib.h> 523 int main(void) 524 { 525 z_stream stream; 526 if (inflateInit(&stream) != Z_OK) 527 return 1; 528 return 0; 529 } 530 EOF 531 if compile_prog "" "-lz" "zlib" ; then 532 zlib=yes 533 LIBS="-lz $LIBS" 534 fi 535 echo "zlib $zlib" 536 537 ########################################## 538 # linux-aio probe 539 if test "$libaio" != "yes" ; then 540 libaio="no" 541 fi 542 if test "$esx" != "yes" ; then 543 cat > $TMPC <<EOF 544 #include <libaio.h> 545 #include <stddef.h> 546 int main(void) 547 { 548 io_setup(0, NULL); 549 return 0; 550 } 551 EOF 552 if compile_prog "" "-laio" "libaio" ; then 553 libaio=yes 554 LIBS="-laio $LIBS" 555 else 556 if test "$libaio" = "yes" ; then 557 feature_not_found "linux AIO" "libaio-dev or libaio-devel" 558 fi 559 libaio=no 560 fi 561 fi 562 echo "Linux AIO support $libaio" 563 564 ########################################## 565 # posix aio probe 566 if test "$posix_aio" != "yes" ; then 567 posix_aio="no" 568 fi 569 if test "$posix_aio_lrt" != "yes" ; then 570 posix_aio_lrt="no" 571 fi 572 cat > $TMPC <<EOF 573 #include <aio.h> 574 int main(void) 575 { 576 struct aiocb cb; 577 aio_read(&cb); 578 return 0; 579 } 580 EOF 581 if compile_prog "" "" "posixaio" ; then 582 posix_aio="yes" 583 elif compile_prog "" "-lrt" "posixaio"; then 584 posix_aio="yes" 585 posix_aio_lrt="yes" 586 LIBS="-lrt $LIBS" 587 fi 588 echo "POSIX AIO support $posix_aio" 589 echo "POSIX AIO support needs -lrt $posix_aio_lrt" 590 591 ########################################## 592 # posix aio fsync probe 593 if test "$posix_aio_fsync" != "yes" ; then 594 posix_aio_fsync="no" 595 fi 596 if test "$posix_aio" = "yes" ; then 597 cat > $TMPC <<EOF 598 #include <fcntl.h> 599 #include <aio.h> 600 int main(void) 601 { 602 struct aiocb cb; 603 return aio_fsync(O_SYNC, &cb); 604 return 0; 605 } 606 EOF 607 if compile_prog "" "$LIBS" "posix_aio_fsync" ; then 608 posix_aio_fsync=yes 609 fi 610 fi 611 echo "POSIX AIO fsync $posix_aio_fsync" 612 613 ########################################## 614 # POSIX pshared attribute probe 615 if test "$posix_pshared" != "yes" ; then 616 posix_pshared="no" 617 fi 618 cat > $TMPC <<EOF 619 #include <unistd.h> 620 int main(void) 621 { 622 #if defined(_POSIX_THREAD_PROCESS_SHARED) && ((_POSIX_THREAD_PROCESS_SHARED + 0) > 0) 623 # if defined(__CYGWIN__) 624 # error "_POSIX_THREAD_PROCESS_SHARED is buggy on Cygwin" 625 # elif defined(__APPLE__) 626 # include <AvailabilityMacros.h> 627 # include <TargetConditionals.h> 628 # if TARGET_OS_MAC && MAC_OS_X_VERSION_MIN_REQUIRED < 1070 629 # error "_POSIX_THREAD_PROCESS_SHARED is buggy/unsupported prior to OSX 10.7" 630 # endif 631 # endif 632 #else 633 # error "_POSIX_THREAD_PROCESS_SHARED is unsupported" 634 #endif 635 return 0; 636 } 637 EOF 638 if compile_prog "" "$LIBS" "posix_pshared" ; then 639 posix_pshared=yes 640 fi 641 echo "POSIX pshared support $posix_pshared" 642 643 ########################################## 644 # solaris aio probe 645 if test "$solaris_aio" != "yes" ; then 646 solaris_aio="no" 647 fi 648 cat > $TMPC <<EOF 649 #include <sys/types.h> 650 #include <sys/asynch.h> 651 #include <unistd.h> 652 int main(void) 653 { 654 aio_result_t res; 655 return aioread(0, NULL, 0, 0, SEEK_SET, &res); 656 return 0; 657 } 658 EOF 659 if compile_prog "" "-laio" "solarisaio" ; then 660 solaris_aio=yes 661 LIBS="-laio $LIBS" 662 fi 663 echo "Solaris AIO support $solaris_aio" 664 665 ########################################## 666 # __sync_fetch_and_add test 667 if test "$sfaa" != "yes" ; then 668 sfaa="no" 669 fi 670 cat > $TMPC << EOF 671 #include <inttypes.h> 672 static int sfaa(uint64_t *ptr) 673 { 674 return __sync_fetch_and_add(ptr, 0); 675 } 676 677 int main(int argc, char **argv) 678 { 679 uint64_t val = 42; 680 sfaa(&val); 681 return val; 682 } 683 EOF 684 if compile_prog "" "" "__sync_fetch_and_add()" ; then 685 sfaa="yes" 686 fi 687 echo "__sync_fetch_and_add $sfaa" 688 689 ########################################## 690 # libverbs probe 691 if test "$libverbs" != "yes" ; then 692 libverbs="no" 693 fi 694 cat > $TMPC << EOF 695 #include <stdio.h> 696 #include <infiniband/arch.h> 697 int main(int argc, char **argv) 698 { 699 struct ibv_pd *pd = ibv_alloc_pd(NULL); 700 return 0; 701 } 702 EOF 703 if test "$disable_rdma" != "yes" && compile_prog "" "-libverbs" "libverbs" ; then 704 libverbs="yes" 705 LIBS="-libverbs $LIBS" 706 fi 707 echo "libverbs $libverbs" 708 709 ########################################## 710 # rdmacm probe 711 if test "$rdmacm" != "yes" ; then 712 rdmacm="no" 713 fi 714 cat > $TMPC << EOF 715 #include <stdio.h> 716 #include <rdma/rdma_cma.h> 717 int main(int argc, char **argv) 718 { 719 rdma_destroy_qp(NULL); 720 return 0; 721 } 722 EOF 723 if test "$disable_rdma" != "yes" && compile_prog "" "-lrdmacm" "rdma"; then 724 rdmacm="yes" 725 LIBS="-lrdmacm $LIBS" 726 fi 727 echo "rdmacm $rdmacm" 728 729 ########################################## 730 # Linux fallocate probe 731 if test "$linux_fallocate" != "yes" ; then 732 linux_fallocate="no" 733 fi 734 cat > $TMPC << EOF 735 #include <stdio.h> 736 #include <fcntl.h> 737 #include <linux/falloc.h> 738 int main(int argc, char **argv) 739 { 740 int r = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 1024); 741 return r; 742 } 743 EOF 744 if compile_prog "" "" "linux_fallocate"; then 745 linux_fallocate="yes" 746 fi 747 echo "Linux fallocate $linux_fallocate" 748 749 ########################################## 750 # POSIX fadvise probe 751 if test "$posix_fadvise" != "yes" ; then 752 posix_fadvise="no" 753 fi 754 cat > $TMPC << EOF 755 #include <stdio.h> 756 #include <fcntl.h> 757 int main(int argc, char **argv) 758 { 759 int r = posix_fadvise(0, 0, 0, POSIX_FADV_NORMAL); 760 return r; 761 } 762 EOF 763 if compile_prog "" "" "posix_fadvise"; then 764 posix_fadvise="yes" 765 fi 766 echo "POSIX fadvise $posix_fadvise" 767 768 ########################################## 769 # POSIX fallocate probe 770 if test "$posix_fallocate" != "yes" ; then 771 posix_fallocate="no" 772 fi 773 cat > $TMPC << EOF 774 #include <stdio.h> 775 #include <fcntl.h> 776 int main(int argc, char **argv) 777 { 778 int r = posix_fallocate(0, 0, 1024); 779 return r; 780 } 781 EOF 782 if compile_prog "" "" "posix_fallocate"; then 783 posix_fallocate="yes" 784 fi 785 echo "POSIX fallocate $posix_fallocate" 786 787 ########################################## 788 # sched_set/getaffinity 2 or 3 argument test 789 if test "$linux_2arg_affinity" != "yes" ; then 790 linux_2arg_affinity="no" 791 fi 792 if test "$linux_3arg_affinity" != "yes" ; then 793 linux_3arg_affinity="no" 794 fi 795 cat > $TMPC << EOF 796 #include <sched.h> 797 int main(int argc, char **argv) 798 { 799 cpu_set_t mask; 800 return sched_setaffinity(0, sizeof(mask), &mask); 801 } 802 EOF 803 if compile_prog "" "" "sched_setaffinity(,,)"; then 804 linux_3arg_affinity="yes" 805 else 806 cat > $TMPC << EOF 807 #include <sched.h> 808 int main(int argc, char **argv) 809 { 810 cpu_set_t mask; 811 return sched_setaffinity(0, &mask); 812 } 813 EOF 814 if compile_prog "" "" "sched_setaffinity(,)"; then 815 linux_2arg_affinity="yes" 816 fi 817 fi 818 echo "sched_setaffinity(3 arg) $linux_3arg_affinity" 819 echo "sched_setaffinity(2 arg) $linux_2arg_affinity" 820 821 ########################################## 822 # clock_gettime probe 823 if test "$clock_gettime" != "yes" ; then 824 clock_gettime="no" 825 fi 826 cat > $TMPC << EOF 827 #include <stdio.h> 828 #include <time.h> 829 int main(int argc, char **argv) 830 { 831 return clock_gettime(0, NULL); 832 } 833 EOF 834 if compile_prog "" "" "clock_gettime"; then 835 clock_gettime="yes" 836 elif compile_prog "" "-lrt" "clock_gettime"; then 837 clock_gettime="yes" 838 LIBS="-lrt $LIBS" 839 fi 840 echo "clock_gettime $clock_gettime" 841 842 ########################################## 843 # CLOCK_MONOTONIC probe 844 if test "$clock_monotonic" != "yes" ; then 845 clock_monotonic="no" 846 fi 847 if test "$clock_gettime" = "yes" ; then 848 cat > $TMPC << EOF 849 #include <stdio.h> 850 #include <time.h> 851 int main(int argc, char **argv) 852 { 853 return clock_gettime(CLOCK_MONOTONIC, NULL); 854 } 855 EOF 856 if compile_prog "" "$LIBS" "clock monotonic"; then 857 clock_monotonic="yes" 858 fi 859 fi 860 echo "CLOCK_MONOTONIC $clock_monotonic" 861 862 ########################################## 863 # CLOCK_MONOTONIC_RAW probe 864 if test "$clock_monotonic_raw" != "yes" ; then 865 clock_monotonic_raw="no" 866 fi 867 if test "$clock_gettime" = "yes" ; then 868 cat > $TMPC << EOF 869 #include <stdio.h> 870 #include <time.h> 871 int main(int argc, char **argv) 872 { 873 return clock_gettime(CLOCK_MONOTONIC_RAW, NULL); 874 } 875 EOF 876 if compile_prog "" "$LIBS" "clock monotonic"; then 877 clock_monotonic_raw="yes" 878 fi 879 fi 880 echo "CLOCK_MONOTONIC_RAW $clock_monotonic_raw" 881 882 ########################################## 883 # CLOCK_MONOTONIC_PRECISE probe 884 if test "$clock_monotonic_precise" != "yes" ; then 885 clock_monotonic_precise="no" 886 fi 887 if test "$clock_gettime" = "yes" ; then 888 cat > $TMPC << EOF 889 #include <stdio.h> 890 #include <time.h> 891 int main(int argc, char **argv) 892 { 893 return clock_gettime(CLOCK_MONOTONIC_PRECISE, NULL); 894 } 895 EOF 896 if compile_prog "" "$LIBS" "clock monotonic precise"; then 897 clock_monotonic_precise="yes" 898 fi 899 fi 900 echo "CLOCK_MONOTONIC_PRECISE $clock_monotonic_precise" 901 902 ########################################## 903 # clockid_t probe 904 if test "$clockid_t" != "yes" ; then 905 clockid_t="no" 906 fi 907 cat > $TMPC << EOF 908 #include <time.h> 909 #include <string.h> 910 int main(int argc, char **argv) 911 { 912 volatile clockid_t cid; 913 memset((void*)&cid, 0, sizeof(cid)); 914 return 0; 915 } 916 EOF 917 if compile_prog "" "$LIBS" "clockid_t"; then 918 clockid_t="yes" 919 fi 920 echo "clockid_t $clockid_t" 921 922 ########################################## 923 # gettimeofday() probe 924 if test "$gettimeofday" != "yes" ; then 925 gettimeofday="no" 926 fi 927 cat > $TMPC << EOF 928 #include <sys/time.h> 929 #include <stdio.h> 930 int main(int argc, char **argv) 931 { 932 struct timeval tv; 933 return gettimeofday(&tv, NULL); 934 } 935 EOF 936 if compile_prog "" "" "gettimeofday"; then 937 gettimeofday="yes" 938 fi 939 echo "gettimeofday $gettimeofday" 940 941 ########################################## 942 # fdatasync() probe 943 if test "$fdatasync" != "yes" ; then 944 fdatasync="no" 945 fi 946 cat > $TMPC << EOF 947 #include <stdio.h> 948 #include <unistd.h> 949 int main(int argc, char **argv) 950 { 951 return fdatasync(0); 952 } 953 EOF 954 if compile_prog "" "" "fdatasync"; then 955 fdatasync="yes" 956 fi 957 echo "fdatasync $fdatasync" 958 959 ########################################## 960 # sync_file_range() probe 961 if test "$sync_file_range" != "yes" ; then 962 sync_file_range="no" 963 fi 964 cat > $TMPC << EOF 965 #include <stdio.h> 966 #include <unistd.h> 967 #include <fcntl.h> 968 #include <linux/fs.h> 969 int main(int argc, char **argv) 970 { 971 unsigned int flags = SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE | 972 SYNC_FILE_RANGE_WAIT_AFTER; 973 return sync_file_range(0, 0, 0, flags); 974 } 975 EOF 976 if compile_prog "" "" "sync_file_range"; then 977 sync_file_range="yes" 978 fi 979 echo "sync_file_range $sync_file_range" 980 981 ########################################## 982 # ext4 move extent probe 983 if test "$ext4_me" != "yes" ; then 984 ext4_me="no" 985 fi 986 cat > $TMPC << EOF 987 #include <fcntl.h> 988 #include <sys/ioctl.h> 989 int main(int argc, char **argv) 990 { 991 struct move_extent me; 992 return ioctl(0, EXT4_IOC_MOVE_EXT, &me); 993 } 994 EOF 995 if compile_prog "" "" "ext4 move extent" ; then 996 ext4_me="yes" 997 elif test $targetos = "Linux" ; then 998 # On Linux, just default to it on and let it error at runtime if we really 999 # don't have it. None of my updated systems have it defined, but it does 1000 # work. Takes a while to bubble back. 1001 ext4_me="yes" 1002 fi 1003 echo "EXT4 move extent $ext4_me" 1004 1005 ########################################## 1006 # splice probe 1007 if test "$linux_splice" != "yes" ; then 1008 linux_splice="no" 1009 fi 1010 cat > $TMPC << EOF 1011 #include <stdio.h> 1012 #include <fcntl.h> 1013 int main(int argc, char **argv) 1014 { 1015 return splice(0, NULL, 0, NULL, 0, SPLICE_F_NONBLOCK); 1016 } 1017 EOF 1018 if compile_prog "" "" "linux splice"; then 1019 linux_splice="yes" 1020 fi 1021 echo "Linux splice(2) $linux_splice" 1022 1023 ########################################## 1024 # GUASI probe 1025 if test "$guasi" != "yes" ; then 1026 guasi="no" 1027 fi 1028 cat > $TMPC << EOF 1029 #include <guasi.h> 1030 #include <guasi_syscalls.h> 1031 int main(int argc, char **argv) 1032 { 1033 guasi_t ctx = guasi_create(0, 0, 0); 1034 return 0; 1035 } 1036 EOF 1037 if compile_prog "" "" "guasi"; then 1038 guasi="yes" 1039 fi 1040 echo "GUASI $guasi" 1041 1042 ########################################## 1043 # fusion-aw probe 1044 if test "$fusion_aw" != "yes" ; then 1045 fusion_aw="no" 1046 fi 1047 cat > $TMPC << EOF 1048 #include <nvm/nvm_primitives.h> 1049 int main(int argc, char **argv) 1050 { 1051 nvm_version_t ver_info; 1052 nvm_handle_t handle; 1053 1054 handle = nvm_get_handle(0, &ver_info); 1055 return nvm_atomic_write(handle, 0, 0, 0); 1056 } 1057 EOF 1058 if compile_prog "" "-L/usr/lib/fio -L/usr/lib/nvm -lnvm-primitives -ldl -lpthread" "fusion-aw"; then 1059 LIBS="-L/usr/lib/fio -L/usr/lib/nvm -lnvm-primitives -ldl -lpthread $LIBS" 1060 fusion_aw="yes" 1061 fi 1062 echo "Fusion-io atomic engine $fusion_aw" 1063 1064 ########################################## 1065 # libnuma probe 1066 if test "$libnuma" != "yes" ; then 1067 libnuma="no" 1068 fi 1069 cat > $TMPC << EOF 1070 #include <numa.h> 1071 int main(int argc, char **argv) 1072 { 1073 return numa_available(); 1074 } 1075 EOF 1076 if test "$disable_numa" != "yes" && compile_prog "" "-lnuma" "libnuma"; then 1077 libnuma="yes" 1078 LIBS="-lnuma $LIBS" 1079 fi 1080 echo "libnuma $libnuma" 1081 1082 ########################################## 1083 # libnuma 2.x version API, initialize with "no" only if $libnuma is set to "yes" 1084 if test "$libnuma" = "yes" ; then 1085 libnuma_v2="no" 1086 cat > $TMPC << EOF 1087 #include <numa.h> 1088 int main(int argc, char **argv) 1089 { 1090 struct bitmask *mask = numa_parse_nodestring(NULL); 1091 return mask->size == 0; 1092 } 1093 EOF 1094 if compile_prog "" "" "libnuma api"; then 1095 libnuma_v2="yes" 1096 fi 1097 echo "libnuma v2 $libnuma_v2" 1098 fi 1099 1100 ########################################## 1101 # strsep() probe 1102 if test "$strsep" != "yes" ; then 1103 strsep="no" 1104 fi 1105 cat > $TMPC << EOF 1106 #include <string.h> 1107 int main(int argc, char **argv) 1108 { 1109 static char *string = "This is a string"; 1110 strsep(&string, "needle"); 1111 return 0; 1112 } 1113 EOF 1114 if compile_prog "" "" "strsep"; then 1115 strsep="yes" 1116 fi 1117 echo "strsep $strsep" 1118 1119 ########################################## 1120 # strcasestr() probe 1121 if test "$strcasestr" != "yes" ; then 1122 strcasestr="no" 1123 fi 1124 cat > $TMPC << EOF 1125 #include <string.h> 1126 int main(int argc, char **argv) 1127 { 1128 return strcasestr(argv[0], argv[1]) != NULL; 1129 } 1130 EOF 1131 if compile_prog "" "" "strcasestr"; then 1132 strcasestr="yes" 1133 fi 1134 echo "strcasestr $strcasestr" 1135 1136 ########################################## 1137 # strlcat() probe 1138 if test "$strlcat" != "yes" ; then 1139 strlcat="no" 1140 fi 1141 cat > $TMPC << EOF 1142 #include <string.h> 1143 int main(int argc, char **argv) 1144 { 1145 static char dst[64]; 1146 static char *string = "This is a string"; 1147 memset(dst, 0, sizeof(dst)); 1148 strlcat(dst, string, sizeof(dst)); 1149 return 0; 1150 } 1151 EOF 1152 if compile_prog "" "" "strlcat"; then 1153 strlcat="yes" 1154 fi 1155 echo "strlcat $strlcat" 1156 1157 ########################################## 1158 # getopt_long_only() probe 1159 if test "$getopt_long_only" != "yes" ; then 1160 getopt_long_only="no" 1161 fi 1162 cat > $TMPC << EOF 1163 #include <unistd.h> 1164 #include <stdio.h> 1165 #include <getopt.h> 1166 int main(int argc, char **argv) 1167 { 1168 int c = getopt_long_only(argc, argv, NULL, NULL, NULL); 1169 return c; 1170 } 1171 EOF 1172 if compile_prog "" "" "getopt_long_only"; then 1173 getopt_long_only="yes" 1174 fi 1175 echo "getopt_long_only() $getopt_long_only" 1176 1177 ########################################## 1178 # inet_aton() probe 1179 if test "$inet_aton" != "yes" ; then 1180 inet_aton="no" 1181 fi 1182 cat > $TMPC << EOF 1183 #include <sys/socket.h> 1184 #include <arpa/inet.h> 1185 #include <stdio.h> 1186 int main(int argc, char **argv) 1187 { 1188 struct in_addr in; 1189 return inet_aton(NULL, &in); 1190 } 1191 EOF 1192 if compile_prog "" "" "inet_aton"; then 1193 inet_aton="yes" 1194 fi 1195 echo "inet_aton $inet_aton" 1196 1197 ########################################## 1198 # socklen_t probe 1199 if test "$socklen_t" != "yes" ; then 1200 socklen_t="no" 1201 fi 1202 cat > $TMPC << EOF 1203 #include <sys/socket.h> 1204 int main(int argc, char **argv) 1205 { 1206 socklen_t len = 0; 1207 return len; 1208 } 1209 EOF 1210 if compile_prog "" "" "socklen_t"; then 1211 socklen_t="yes" 1212 fi 1213 echo "socklen_t $socklen_t" 1214 1215 ########################################## 1216 # Whether or not __thread is supported for TLS 1217 if test "$tls_thread" != "yes" ; then 1218 tls_thread="no" 1219 fi 1220 cat > $TMPC << EOF 1221 #include <stdio.h> 1222 static __thread int ret; 1223 int main(int argc, char **argv) 1224 { 1225 return ret; 1226 } 1227 EOF 1228 if compile_prog "" "" "__thread"; then 1229 tls_thread="yes" 1230 fi 1231 echo "__thread $tls_thread" 1232 1233 ########################################## 1234 # Check if we have required gtk/glib support for gfio 1235 if test "$gfio" != "yes" ; then 1236 gfio="no" 1237 fi 1238 if test "$gfio_check" = "yes" ; then 1239 cat > $TMPC << EOF 1240 #include <glib.h> 1241 #include <cairo.h> 1242 #include <gtk/gtk.h> 1243 int main(void) 1244 { 1245 gdk_threads_enter(); 1246 gdk_threads_leave(); 1247 1248 return GTK_CHECK_VERSION(2, 18, 0) ? 0 : 1; /* 0 on success */ 1249 } 1250 EOF 1251 GTK_CFLAGS=$(pkg-config --cflags gtk+-2.0 gthread-2.0) 1252 ORG_LDFLAGS=$LDFLAGS 1253 LDFLAGS=$(echo $LDFLAGS | sed s/"-static"//g) 1254 if test "$?" != "0" ; then 1255 echo "configure: gtk and gthread not found" 1256 exit 1 1257 fi 1258 GTK_LIBS=$(pkg-config --libs gtk+-2.0 gthread-2.0) 1259 if test "$?" != "0" ; then 1260 echo "configure: gtk and gthread not found" 1261 exit 1 1262 fi 1263 if compile_prog "$GTK_CFLAGS" "$GTK_LIBS" "gfio" ; then 1264 $TMPE 1265 if test "$?" = "0" ; then 1266 gfio="yes" 1267 GFIO_LIBS="$LIBS $GTK_LIBS" 1268 CFLAGS="$CFLAGS $GTK_CFLAGS" 1269 else 1270 echo "GTK found, but need version 2.18 or higher" 1271 gfio="no" 1272 fi 1273 else 1274 echo "Please install gtk and gdk libraries" 1275 gfio="no" 1276 fi 1277 LDFLAGS=$ORG_LDFLAGS 1278 fi 1279 1280 if test "$gfio_check" = "yes" ; then 1281 echo "gtk 2.18 or higher $gfio" 1282 fi 1283 1284 ########################################## 1285 # Check whether we have getrusage(RUSAGE_THREAD) 1286 if test "$rusage_thread" != "yes" ; then 1287 rusage_thread="no" 1288 fi 1289 cat > $TMPC << EOF 1290 #include <sys/time.h> 1291 #include <sys/resource.h> 1292 int main(int argc, char **argv) 1293 { 1294 struct rusage ru; 1295 getrusage(RUSAGE_THREAD, &ru); 1296 return 0; 1297 } 1298 EOF 1299 if compile_prog "" "" "RUSAGE_THREAD"; then 1300 rusage_thread="yes" 1301 fi 1302 echo "RUSAGE_THREAD $rusage_thread" 1303 1304 ########################################## 1305 # Check whether we have SCHED_IDLE 1306 if test "$sched_idle" != "yes" ; then 1307 sched_idle="no" 1308 fi 1309 cat > $TMPC << EOF 1310 #include <sched.h> 1311 int main(int argc, char **argv) 1312 { 1313 struct sched_param p; 1314 return sched_setscheduler(0, SCHED_IDLE, &p); 1315 } 1316 EOF 1317 if compile_prog "" "" "SCHED_IDLE"; then 1318 sched_idle="yes" 1319 fi 1320 echo "SCHED_IDLE $sched_idle" 1321 1322 ########################################## 1323 # Check whether we have TCP_NODELAY 1324 if test "$tcp_nodelay" != "yes" ; then 1325 tcp_nodelay="no" 1326 fi 1327 cat > $TMPC << EOF 1328 #include <stdio.h> 1329 #include <sys/types.h> 1330 #include <sys/socket.h> 1331 #include <netinet/tcp.h> 1332 int main(int argc, char **argv) 1333 { 1334 return getsockopt(0, 0, TCP_NODELAY, NULL, NULL); 1335 } 1336 EOF 1337 if compile_prog "" "" "TCP_NODELAY"; then 1338 tcp_nodelay="yes" 1339 fi 1340 echo "TCP_NODELAY $tcp_nodelay" 1341 1342 ########################################## 1343 # Check whether we have SO_SNDBUF 1344 if test "$window_size" != "yes" ; then 1345 window_size="no" 1346 fi 1347 cat > $TMPC << EOF 1348 #include <stdio.h> 1349 #include <sys/types.h> 1350 #include <sys/socket.h> 1351 #include <netinet/tcp.h> 1352 int main(int argc, char **argv) 1353 { 1354 setsockopt(0, SOL_SOCKET, SO_SNDBUF, NULL, 0); 1355 setsockopt(0, SOL_SOCKET, SO_RCVBUF, NULL, 0); 1356 } 1357 EOF 1358 if compile_prog "" "" "SO_SNDBUF"; then 1359 window_size="yes" 1360 fi 1361 echo "Net engine window_size $window_size" 1362 1363 ########################################## 1364 # Check whether we have TCP_MAXSEG 1365 if test "$mss" != "yes" ; then 1366 mss="no" 1367 fi 1368 cat > $TMPC << EOF 1369 #include <stdio.h> 1370 #include <sys/types.h> 1371 #include <sys/socket.h> 1372 #include <netinet/tcp.h> 1373 #include <arpa/inet.h> 1374 #include <netinet/in.h> 1375 int main(int argc, char **argv) 1376 { 1377 return setsockopt(0, IPPROTO_TCP, TCP_MAXSEG, NULL, 0); 1378 } 1379 EOF 1380 if compile_prog "" "" "TCP_MAXSEG"; then 1381 mss="yes" 1382 fi 1383 echo "TCP_MAXSEG $mss" 1384 1385 ########################################## 1386 # Check whether we have RLIMIT_MEMLOCK 1387 if test "$rlimit_memlock" != "yes" ; then 1388 rlimit_memlock="no" 1389 fi 1390 cat > $TMPC << EOF 1391 #include <sys/time.h> 1392 #include <sys/resource.h> 1393 int main(int argc, char **argv) 1394 { 1395 struct rlimit rl; 1396 return getrlimit(RLIMIT_MEMLOCK, &rl); 1397 } 1398 EOF 1399 if compile_prog "" "" "RLIMIT_MEMLOCK"; then 1400 rlimit_memlock="yes" 1401 fi 1402 echo "RLIMIT_MEMLOCK $rlimit_memlock" 1403 1404 ########################################## 1405 # Check whether we have pwritev/preadv 1406 if test "$pwritev" != "yes" ; then 1407 pwritev="no" 1408 fi 1409 cat > $TMPC << EOF 1410 #include <stdio.h> 1411 #include <sys/uio.h> 1412 int main(int argc, char **argv) 1413 { 1414 return pwritev(0, NULL, 1, 0) + preadv(0, NULL, 1, 0); 1415 } 1416 EOF 1417 if compile_prog "" "" "pwritev"; then 1418 pwritev="yes" 1419 fi 1420 echo "pwritev/preadv $pwritev" 1421 1422 ########################################## 1423 # Check whether we have pwritev2/preadv2 1424 if test "$pwritev2" != "yes" ; then 1425 pwritev2="no" 1426 fi 1427 cat > $TMPC << EOF 1428 #include <stdio.h> 1429 #include <sys/uio.h> 1430 int main(int argc, char **argv) 1431 { 1432 return pwritev2(0, NULL, 1, 0, 0) + preadv2(0, NULL, 1, 0, 0); 1433 } 1434 EOF 1435 if compile_prog "" "" "pwritev2"; then 1436 pwritev2="yes" 1437 fi 1438 echo "pwritev2/preadv2 $pwritev2" 1439 1440 ########################################## 1441 # Check whether we have the required functions for ipv6 1442 if test "$ipv6" != "yes" ; then 1443 ipv6="no" 1444 fi 1445 cat > $TMPC << EOF 1446 #include <sys/types.h> 1447 #include <sys/socket.h> 1448 #include <netinet/in.h> 1449 #include <netdb.h> 1450 #include <stdio.h> 1451 int main(int argc, char **argv) 1452 { 1453 struct addrinfo hints; 1454 struct in6_addr addr; 1455 int ret; 1456 1457 ret = getaddrinfo(NULL, NULL, &hints, NULL); 1458 freeaddrinfo(NULL); 1459 printf("%s\n", gai_strerror(ret)); 1460 addr = in6addr_any; 1461 return 0; 1462 } 1463 EOF 1464 if compile_prog "" "" "ipv6"; then 1465 ipv6="yes" 1466 fi 1467 echo "IPv6 helpers $ipv6" 1468 1469 ########################################## 1470 # check for rbd 1471 if test "$rbd" != "yes" ; then 1472 rbd="no" 1473 fi 1474 cat > $TMPC << EOF 1475 #include <rbd/librbd.h> 1476 1477 int main(int argc, char **argv) 1478 { 1479 rados_t cluster; 1480 rados_ioctx_t io_ctx; 1481 const char pool[] = "rbd"; 1482 1483 int major, minor, extra; 1484 rbd_version(&major, &minor, &extra); 1485 1486 rados_ioctx_create(cluster, pool, &io_ctx); 1487 return 0; 1488 } 1489 EOF 1490 if test "$disable_rbd" != "yes" && compile_prog "" "-lrbd -lrados" "rbd"; then 1491 LIBS="-lrbd -lrados $LIBS" 1492 rbd="yes" 1493 fi 1494 echo "Rados Block Device engine $rbd" 1495 1496 ########################################## 1497 # check for rbd_poll 1498 if test "$rbd_poll" != "yes" ; then 1499 rbd_poll="no" 1500 fi 1501 if test "$rbd" = "yes"; then 1502 cat > $TMPC << EOF 1503 #include <rbd/librbd.h> 1504 #include <sys/eventfd.h> 1505 1506 int main(int argc, char **argv) 1507 { 1508 rbd_image_t image; 1509 rbd_completion_t comp; 1510 1511 int fd = eventfd(0, EFD_NONBLOCK); 1512 rbd_set_image_notification(image, fd, EVENT_TYPE_EVENTFD); 1513 rbd_poll_io_events(image, comp, 1); 1514 1515 return 0; 1516 } 1517 EOF 1518 if compile_prog "" "-lrbd -lrados" "rbd"; then 1519 rbd_poll="yes" 1520 fi 1521 echo "rbd_poll $rbd_poll" 1522 fi 1523 1524 ########################################## 1525 # check for rbd_invaidate_cache() 1526 if test "$rbd_inval" != "yes" ; then 1527 rbd_inval="no" 1528 fi 1529 if test "$rbd" = "yes"; then 1530 cat > $TMPC << EOF 1531 #include <rbd/librbd.h> 1532 1533 int main(int argc, char **argv) 1534 { 1535 rbd_image_t image; 1536 1537 return rbd_invalidate_cache(image); 1538 } 1539 EOF 1540 if compile_prog "" "-lrbd -lrados" "rbd"; then 1541 rbd_inval="yes" 1542 fi 1543 echo "rbd_invalidate_cache $rbd_inval" 1544 fi 1545 1546 ########################################## 1547 # check for blkin 1548 if test "$rbd_blkin" != "yes" ; then 1549 rbd_blkin="no" 1550 fi 1551 cat > $TMPC << EOF 1552 #include <rbd/librbd.h> 1553 #include <zipkin_c.h> 1554 1555 int main(int argc, char **argv) 1556 { 1557 int r; 1558 struct blkin_trace_info t_info; 1559 blkin_init_trace_info(&t_info); 1560 rbd_completion_t completion; 1561 rbd_image_t image; 1562 uint64_t off; 1563 size_t len; 1564 const char *buf; 1565 r = rbd_aio_write_traced(image, off, len, buf, completion, &t_info); 1566 return 0; 1567 } 1568 EOF 1569 if test "$disable_rbd" != "yes" && test "$disable_rbd_blkin" != "yes" \ 1570 && compile_prog "" "-lrbd -lrados -lblkin" "rbd_blkin"; then 1571 LIBS="-lblkin $LIBS" 1572 rbd_blkin="yes" 1573 fi 1574 echo "rbd blkin tracing $rbd_blkin" 1575 1576 ########################################## 1577 # Check whether we have setvbuf 1578 if test "$setvbuf" != "yes" ; then 1579 setvbuf="no" 1580 fi 1581 cat > $TMPC << EOF 1582 #include <stdio.h> 1583 int main(int argc, char **argv) 1584 { 1585 FILE *f = NULL; 1586 char buf[80]; 1587 setvbuf(f, buf, _IOFBF, sizeof(buf)); 1588 return 0; 1589 } 1590 EOF 1591 if compile_prog "" "" "setvbuf"; then 1592 setvbuf="yes" 1593 fi 1594 echo "setvbuf $setvbuf" 1595 1596 ########################################## 1597 # check for gfapi 1598 if test "$gfapi" != "yes" ; then 1599 gfapi="no" 1600 fi 1601 cat > $TMPC << EOF 1602 #include <glusterfs/api/glfs.h> 1603 1604 int main(int argc, char **argv) 1605 { 1606 glfs_t *g = glfs_new("foo"); 1607 1608 return 0; 1609 } 1610 EOF 1611 if test "$disable_gfapi" != "yes" && compile_prog "" "-lgfapi -lglusterfs" "gfapi"; then 1612 LIBS="-lgfapi -lglusterfs $LIBS" 1613 gfapi="yes" 1614 fi 1615 echo "Gluster API engine $gfapi" 1616 1617 ########################################## 1618 # check for gfapi fadvise support, initialize with "no" only if $gfapi is set to "yes" 1619 if test "$gfapi" = "yes" ; then 1620 gf_fadvise="no" 1621 cat > $TMPC << EOF 1622 #include <glusterfs/api/glfs.h> 1623 1624 int main(int argc, char **argv) 1625 { 1626 struct glfs_fd *fd; 1627 int ret = glfs_fadvise(fd, 0, 0, 1); 1628 1629 return 0; 1630 } 1631 EOF 1632 if compile_prog "" "-lgfapi -lglusterfs" "gfapi"; then 1633 gf_fadvise="yes" 1634 fi 1635 echo "Gluster API use fadvise $gf_fadvise" 1636 fi 1637 1638 ########################################## 1639 # check for gfapi trim support 1640 if test "$gf_trim" != "yes" ; then 1641 gf_trim="no" 1642 fi 1643 if test "$gfapi" = "yes" ; then 1644 cat > $TMPC << EOF 1645 #include <glusterfs/api/glfs.h> 1646 1647 int main(int argc, char **argv) 1648 { 1649 return glfs_discard_async(NULL, 0, 0); 1650 } 1651 EOF 1652 if compile_prog "" "-lgfapi -lglusterfs" "gf trim"; then 1653 gf_trim="yes" 1654 fi 1655 echo "Gluster API trim support $gf_trim" 1656 fi 1657 1658 ########################################## 1659 # Check if we support stckf on s390 1660 if test "$s390_z196_facilities" != "yes" ; then 1661 s390_z196_facilities="no" 1662 fi 1663 cat > $TMPC << EOF 1664 #define STFLE_BITS_Z196 45 /* various z196 facilities ... */ 1665 int main(int argc, char **argv) 1666 { 1667 /* We want just 1 double word to be returned. */ 1668 register unsigned long reg0 asm("0") = 0; 1669 unsigned long stfle_bits; 1670 asm volatile(".machine push" "\n\t" 1671 ".machine \"z9-109\"" "\n\t" 1672 "stfle %0" "\n\t" 1673 ".machine pop" "\n" 1674 : "=QS" (stfle_bits), "+d" (reg0) 1675 : : "cc"); 1676 1677 if ((stfle_bits & (1UL << (63 - STFLE_BITS_Z196))) != 0) 1678 return 0; 1679 else 1680 return -1; 1681 } 1682 EOF 1683 if compile_prog "" "" "s390_z196_facilities"; then 1684 $TMPE 1685 if [[ $? -eq 0 ]]; then 1686 s390_z196_facilities="yes" 1687 fi 1688 fi 1689 echo "s390_z196_facilities $s390_z196_facilities" 1690 1691 ########################################## 1692 # Check if we have required environment variables configured for libhdfs 1693 if test "$libhdfs" = "yes" ; then 1694 hdfs_conf_error=0 1695 if test "$JAVA_HOME" = "" ; then 1696 echo "configure: JAVA_HOME should be defined to jdk/jvm path" 1697 hdfs_conf_error=1 1698 fi 1699 if test "$FIO_LIBHDFS_INCLUDE" = "" ; then 1700 echo "configure: FIO_LIBHDFS_INCLUDE should be defined to libhdfs inlude path" 1701 hdfs_conf_error=1 1702 fi 1703 if test "$FIO_LIBHDFS_LIB" = "" ; then 1704 echo "configure: FIO_LIBHDFS_LIB should be defined to libhdfs library path" 1705 hdfs_conf_error=1 1706 fi 1707 if test "$hdfs_conf_error" = "1" ; then 1708 exit 1 1709 fi 1710 FIO_HDFS_CPU=$cpu 1711 if test "$FIO_HDFS_CPU" = "x86_64" ; then 1712 FIO_HDFS_CPU="amd64" 1713 fi 1714 fi 1715 echo "HDFS engine $libhdfs" 1716 1717 ########################################## 1718 # Check whether we have MTD 1719 if test "$mtd" != "yes" ; then 1720 mtd="no" 1721 fi 1722 cat > $TMPC << EOF 1723 #include <string.h> 1724 #include <mtd/mtd-user.h> 1725 #include <sys/ioctl.h> 1726 int main(int argc, char **argv) 1727 { 1728 struct mtd_write_req ops; 1729 struct mtd_info_user info; 1730 memset(&ops, 0, sizeof(ops)); 1731 info.type = MTD_MLCNANDFLASH; 1732 return ioctl(0, MEMGETINFO, &info); 1733 } 1734 EOF 1735 if compile_prog "" "" "mtd"; then 1736 mtd="yes" 1737 fi 1738 echo "MTD $mtd" 1739 1740 ########################################## 1741 # Check whether we have libpmem 1742 if test "$libpmem" != "yes" ; then 1743 libpmem="no" 1744 fi 1745 cat > $TMPC << EOF 1746 #include <libpmem.h> 1747 int main(int argc, char **argv) 1748 { 1749 int rc; 1750 rc = pmem_is_pmem(0, 0); 1751 return 0; 1752 } 1753 EOF 1754 if compile_prog "" "-lpmem" "libpmem"; then 1755 libpmem="yes" 1756 LIBS="-lpmem $LIBS" 1757 fi 1758 echo "libpmem $libpmem" 1759 1760 ########################################## 1761 # Check whether we have libpmemblk 1762 # libpmem is a prerequisite 1763 if test "$libpmemblk" != "yes" ; then 1764 libpmemblk="no" 1765 fi 1766 if test "$libpmem" = "yes"; then 1767 cat > $TMPC << EOF 1768 #include <libpmemblk.h> 1769 int main(int argc, char **argv) 1770 { 1771 PMEMblkpool *pbp; 1772 pbp = pmemblk_open("", 0); 1773 return 0; 1774 } 1775 EOF 1776 if compile_prog "" "-lpmemblk" "libpmemblk"; then 1777 libpmemblk="yes" 1778 LIBS="-lpmemblk $LIBS" 1779 fi 1780 fi 1781 echo "libpmemblk $libpmemblk" 1782 1783 # Choose the ioengines 1784 if test "$libpmem" = "yes" && test "$disable_pmem" = "no"; then 1785 devdax="yes" 1786 if test "$libpmemblk" = "yes"; then 1787 pmemblk="yes" 1788 fi 1789 fi 1790 1791 ########################################## 1792 # Report whether pmemblk engine is enabled 1793 echo "NVML pmemblk engine $pmemblk" 1794 1795 ########################################## 1796 # Report whether dev-dax engine is enabled 1797 echo "NVML dev-dax engine $devdax" 1798 1799 ########################################## 1800 # Check if we have lex/yacc available 1801 yacc="no" 1802 yacc_is_bison="no" 1803 lex="no" 1804 arith="no" 1805 if test "$disable_lex" = "no" || test -z "$disable_lex" ; then 1806 if test "$targetos" != "SunOS" ; then 1807 LEX=$(which lex 2> /dev/null) 1808 if test -x "$LEX" ; then 1809 lex="yes" 1810 fi 1811 YACC=$(which bison 2> /dev/null) 1812 if test -x "$YACC" ; then 1813 yacc="yes" 1814 yacc_is_bison="yes" 1815 else 1816 YACC=$(which yacc 2> /dev/null) 1817 if test -x "$YACC" ; then 1818 yacc="yes" 1819 fi 1820 fi 1821 if test "$yacc" = "yes" && test "$lex" = "yes" ; then 1822 arith="yes" 1823 fi 1824 1825 if test "$arith" = "yes" ; then 1826 cat > $TMPC << EOF 1827 extern int yywrap(void); 1828 1829 int main(int argc, char **argv) 1830 { 1831 yywrap(); 1832 return 0; 1833 } 1834 EOF 1835 if compile_prog "" "-ll" "lex"; then 1836 LIBS="-ll $LIBS" 1837 else 1838 arith="no" 1839 fi 1840 fi 1841 fi 1842 fi 1843 1844 # Check if lex fails using -o 1845 if test "$arith" = "yes" ; then 1846 if test "$force_no_lex_o" = "yes" ; then 1847 lex_use_o="no" 1848 else 1849 $LEX -o lex.yy.c exp/expression-parser.l 2> /dev/null 1850 if test "$?" = "0" ; then 1851 lex_use_o="yes" 1852 else 1853 lex_use_o="no" 1854 fi 1855 fi 1856 fi 1857 1858 echo "lex/yacc for arithmetic $arith" 1859 1860 ########################################## 1861 # Check whether we have setmntent/getmntent 1862 if test "$getmntent" != "yes" ; then 1863 getmntent="no" 1864 fi 1865 cat > $TMPC << EOF 1866 #include <stdio.h> 1867 #include <mntent.h> 1868 int main(int argc, char **argv) 1869 { 1870 FILE *mtab = setmntent(NULL, "r"); 1871 struct mntent *mnt = getmntent(mtab); 1872 endmntent(mtab); 1873 return 0; 1874 } 1875 EOF 1876 if compile_prog "" "" "getmntent"; then 1877 getmntent="yes" 1878 fi 1879 echo "getmntent $getmntent" 1880 1881 ########################################## 1882 # Check whether we have getmntinfo 1883 # These are originally added for BSDs, but may also work 1884 # on other operating systems with getmntinfo(3). 1885 1886 # getmntinfo(3) for FreeBSD/DragonFlyBSD/OpenBSD. 1887 # Note that NetBSD needs -Werror to catch warning as error. 1888 if test "$getmntinfo" != "yes" ; then 1889 getmntinfo="no" 1890 fi 1891 cat > $TMPC << EOF 1892 #include <stdio.h> 1893 #include <sys/param.h> 1894 #include <sys/mount.h> 1895 int main(int argc, char **argv) 1896 { 1897 struct statfs *st; 1898 return getmntinfo(&st, MNT_NOWAIT); 1899 } 1900 EOF 1901 if compile_prog "-Werror" "" "getmntinfo"; then 1902 getmntinfo="yes" 1903 fi 1904 echo "getmntinfo $getmntinfo" 1905 1906 # getmntinfo(3) for NetBSD. 1907 if test "$getmntinfo_statvfs" != "yes" ; then 1908 getmntinfo_statvfs="no" 1909 fi 1910 cat > $TMPC << EOF 1911 #include <stdio.h> 1912 #include <sys/statvfs.h> 1913 int main(int argc, char **argv) 1914 { 1915 struct statvfs *st; 1916 return getmntinfo(&st, MNT_NOWAIT); 1917 } 1918 EOF 1919 # Skip the test if the one with statfs arg is detected. 1920 if test "$getmntinfo" != "yes" && compile_prog "-Werror" "" "getmntinfo_statvfs"; then 1921 getmntinfo_statvfs="yes" 1922 echo "getmntinfo_statvfs $getmntinfo_statvfs" 1923 fi 1924 1925 ########################################## 1926 # Check whether we have _Static_assert 1927 if test "$static_assert" != "yes" ; then 1928 static_assert="no" 1929 fi 1930 cat > $TMPC << EOF 1931 #include <assert.h> 1932 #include <stdlib.h> 1933 #undef offsetof 1934 #ifdef __compiler_offsetof 1935 #define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER) 1936 #else 1937 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 1938 #endif 1939 1940 #define container_of(ptr, type, member) ({ \ 1941 const typeof( ((type *)0)->member ) *__mptr = (ptr); \ 1942 (type *)( (char *)__mptr - offsetof(type,member) );}) 1943 1944 struct foo { 1945 int a, b; 1946 }; 1947 1948 int main(int argc, char **argv) 1949 { 1950 _Static_assert(offsetof(struct foo, a) == 0 , "Check"); 1951 return 0 ; 1952 } 1953 EOF 1954 if compile_prog "" "" "static_assert"; then 1955 static_assert="yes" 1956 fi 1957 echo "Static Assert $static_assert" 1958 1959 ########################################## 1960 # Check whether we have bool / stdbool.h 1961 if test "$have_bool" != "yes" ; then 1962 have_bool="no" 1963 fi 1964 cat > $TMPC << EOF 1965 #include <stdbool.h> 1966 int main(int argc, char **argv) 1967 { 1968 bool var = true; 1969 return var != false; 1970 } 1971 EOF 1972 if compile_prog "" "" "bool"; then 1973 have_bool="yes" 1974 fi 1975 echo "bool $have_bool" 1976 1977 ########################################## 1978 # check march=armv8-a+crc+crypto 1979 if test "$march_armv8_a_crc_crypto" != "yes" ; then 1980 march_armv8_a_crc_crypto="no" 1981 fi 1982 if test "$cpu" = "arm64" ; then 1983 cat > $TMPC <<EOF 1984 #include <sys/auxv.h> 1985 #include <arm_acle.h> 1986 #include <arm_neon.h> 1987 1988 int main(void) 1989 { 1990 return 0; 1991 } 1992 EOF 1993 if compile_prog "-march=armv8-a+crc+crypto" "" ""; then 1994 march_armv8_a_crc_crypto="yes" 1995 CFLAGS="$CFLAGS -march=armv8-a+crc+crypto -DARCH_HAVE_CRC_CRYPTO" 1996 fi 1997 fi 1998 echo "march_armv8_a_crc_crypto $march_armv8_a_crc_crypto" 1999 2000 ########################################## 2001 # cuda probe 2002 if test "$cuda" != "yes" ; then 2003 cuda="no" 2004 fi 2005 cat > $TMPC << EOF 2006 #include <cuda.h> 2007 int main(int argc, char **argv) 2008 { 2009 return cuInit(0); 2010 } 2011 EOF 2012 if test "$enable_cuda" = "yes" && compile_prog "" "-lcuda" "cuda"; then 2013 cuda="yes" 2014 LIBS="-lcuda $LIBS" 2015 fi 2016 echo "cuda $cuda" 2017 2018 ############################################################################# 2019 2020 if test "$wordsize" = "64" ; then 2021 output_sym "CONFIG_64BIT" 2022 elif test "$wordsize" = "32" ; then 2023 output_sym "CONFIG_32BIT" 2024 else 2025 fatal "Unknown wordsize!" 2026 fi 2027 if test "$bigendian" = "yes" ; then 2028 output_sym "CONFIG_BIG_ENDIAN" 2029 else 2030 output_sym "CONFIG_LITTLE_ENDIAN" 2031 fi 2032 if test "$zlib" = "yes" ; then 2033 output_sym "CONFIG_ZLIB" 2034 fi 2035 if test "$libaio" = "yes" ; then 2036 output_sym "CONFIG_LIBAIO" 2037 fi 2038 if test "$posix_aio" = "yes" ; then 2039 output_sym "CONFIG_POSIXAIO" 2040 fi 2041 if test "$posix_aio_fsync" = "yes" ; then 2042 output_sym "CONFIG_POSIXAIO_FSYNC" 2043 fi 2044 if test "$posix_pshared" = "yes" ; then 2045 output_sym "CONFIG_PSHARED" 2046 fi 2047 if test "$linux_fallocate" = "yes" ; then 2048 output_sym "CONFIG_LINUX_FALLOCATE" 2049 fi 2050 if test "$posix_fallocate" = "yes" ; then 2051 output_sym "CONFIG_POSIX_FALLOCATE" 2052 fi 2053 if test "$fdatasync" = "yes" ; then 2054 output_sym "CONFIG_FDATASYNC" 2055 fi 2056 if test "$sync_file_range" = "yes" ; then 2057 output_sym "CONFIG_SYNC_FILE_RANGE" 2058 fi 2059 if test "$sfaa" = "yes" ; then 2060 output_sym "CONFIG_SFAA" 2061 fi 2062 if test "$libverbs" = "yes" -a "$rdmacm" = "yes" ; then 2063 output_sym "CONFIG_RDMA" 2064 fi 2065 if test "$clock_gettime" = "yes" ; then 2066 output_sym "CONFIG_CLOCK_GETTIME" 2067 fi 2068 if test "$clock_monotonic" = "yes" ; then 2069 output_sym "CONFIG_CLOCK_MONOTONIC" 2070 fi 2071 if test "$clock_monotonic_raw" = "yes" ; then 2072 output_sym "CONFIG_CLOCK_MONOTONIC_RAW" 2073 fi 2074 if test "$clock_monotonic_precise" = "yes" ; then 2075 output_sym "CONFIG_CLOCK_MONOTONIC_PRECISE" 2076 fi 2077 if test "$clockid_t" = "yes"; then 2078 output_sym "CONFIG_CLOCKID_T" 2079 fi 2080 if test "$gettimeofday" = "yes" ; then 2081 output_sym "CONFIG_GETTIMEOFDAY" 2082 fi 2083 if test "$posix_fadvise" = "yes" ; then 2084 output_sym "CONFIG_POSIX_FADVISE" 2085 fi 2086 if test "$linux_3arg_affinity" = "yes" ; then 2087 output_sym "CONFIG_3ARG_AFFINITY" 2088 elif test "$linux_2arg_affinity" = "yes" ; then 2089 output_sym "CONFIG_2ARG_AFFINITY" 2090 fi 2091 if test "$strsep" = "yes" ; then 2092 output_sym "CONFIG_STRSEP" 2093 fi 2094 if test "$strcasestr" = "yes" ; then 2095 output_sym "CONFIG_STRCASESTR" 2096 fi 2097 if test "$strlcat" = "yes" ; then 2098 output_sym "CONFIG_STRLCAT" 2099 fi 2100 if test "$getopt_long_only" = "yes" ; then 2101 output_sym "CONFIG_GETOPT_LONG_ONLY" 2102 fi 2103 if test "$inet_aton" = "yes" ; then 2104 output_sym "CONFIG_INET_ATON" 2105 fi 2106 if test "$socklen_t" = "yes" ; then 2107 output_sym "CONFIG_SOCKLEN_T" 2108 fi 2109 if test "$ext4_me" = "yes" ; then 2110 output_sym "CONFIG_LINUX_EXT4_MOVE_EXTENT" 2111 fi 2112 if test "$linux_splice" = "yes" ; then 2113 output_sym "CONFIG_LINUX_SPLICE" 2114 fi 2115 if test "$guasi" = "yes" ; then 2116 output_sym "CONFIG_GUASI" 2117 fi 2118 if test "$fusion_aw" = "yes" ; then 2119 output_sym "CONFIG_FUSION_AW" 2120 fi 2121 if test "$libnuma_v2" = "yes" ; then 2122 output_sym "CONFIG_LIBNUMA" 2123 fi 2124 if test "$solaris_aio" = "yes" ; then 2125 output_sym "CONFIG_SOLARISAIO" 2126 fi 2127 if test "$tls_thread" = "yes" ; then 2128 output_sym "CONFIG_TLS_THREAD" 2129 fi 2130 if test "$rusage_thread" = "yes" ; then 2131 output_sym "CONFIG_RUSAGE_THREAD" 2132 fi 2133 if test "$gfio" = "yes" ; then 2134 output_sym "CONFIG_GFIO" 2135 fi 2136 if test "$esx" = "yes" ; then 2137 output_sym "CONFIG_ESX" 2138 output_sym "CONFIG_NO_SHM" 2139 fi 2140 if test "$sched_idle" = "yes" ; then 2141 output_sym "CONFIG_SCHED_IDLE" 2142 fi 2143 if test "$tcp_nodelay" = "yes" ; then 2144 output_sym "CONFIG_TCP_NODELAY" 2145 fi 2146 if test "$window_size" = "yes" ; then 2147 output_sym "CONFIG_NET_WINDOWSIZE" 2148 fi 2149 if test "$mss" = "yes" ; then 2150 output_sym "CONFIG_NET_MSS" 2151 fi 2152 if test "$rlimit_memlock" = "yes" ; then 2153 output_sym "CONFIG_RLIMIT_MEMLOCK" 2154 fi 2155 if test "$pwritev" = "yes" ; then 2156 output_sym "CONFIG_PWRITEV" 2157 fi 2158 if test "$pwritev2" = "yes" ; then 2159 output_sym "CONFIG_PWRITEV2" 2160 fi 2161 if test "$ipv6" = "yes" ; then 2162 output_sym "CONFIG_IPV6" 2163 fi 2164 if test "$rbd" = "yes" ; then 2165 output_sym "CONFIG_RBD" 2166 fi 2167 if test "$rbd_poll" = "yes" ; then 2168 output_sym "CONFIG_RBD_POLL" 2169 fi 2170 if test "$rbd_inval" = "yes" ; then 2171 output_sym "CONFIG_RBD_INVAL" 2172 fi 2173 if test "$rbd_blkin" = "yes" ; then 2174 output_sym "CONFIG_RBD_BLKIN" 2175 fi 2176 if test "$setvbuf" = "yes" ; then 2177 output_sym "CONFIG_SETVBUF" 2178 fi 2179 if test "$s390_z196_facilities" = "yes" ; then 2180 output_sym "CONFIG_S390_Z196_FACILITIES" 2181 CFLAGS="$CFLAGS -march=z9-109" 2182 fi 2183 if test "$gfapi" = "yes" ; then 2184 output_sym "CONFIG_GFAPI" 2185 fi 2186 if test "$gf_fadvise" = "yes" ; then 2187 output_sym "CONFIG_GF_FADVISE" 2188 fi 2189 if test "$gf_trim" = "yes" ; then 2190 output_sym "CONFIG_GF_TRIM" 2191 fi 2192 if test "$libhdfs" = "yes" ; then 2193 output_sym "CONFIG_LIBHDFS" 2194 echo "FIO_HDFS_CPU=$FIO_HDFS_CPU" >> $config_host_mak 2195 echo "JAVA_HOME=$JAVA_HOME" >> $config_host_mak 2196 echo "FIO_LIBHDFS_INCLUDE=$FIO_LIBHDFS_INCLUDE" >> $config_host_mak 2197 echo "FIO_LIBHDFS_LIB=$FIO_LIBHDFS_LIB" >> $config_host_mak 2198 fi 2199 if test "$mtd" = "yes" ; then 2200 output_sym "CONFIG_MTD" 2201 fi 2202 if test "$pmemblk" = "yes" ; then 2203 output_sym "CONFIG_PMEMBLK" 2204 fi 2205 if test "$devdax" = "yes" ; then 2206 output_sym "CONFIG_LINUX_DEVDAX" 2207 fi 2208 if test "$arith" = "yes" ; then 2209 output_sym "CONFIG_ARITHMETIC" 2210 if test "$yacc_is_bison" = "yes" ; then 2211 echo "YACC=$YACC -y" >> $config_host_mak 2212 else 2213 echo "YACC=$YACC" >> $config_host_mak 2214 fi 2215 if test "$lex_use_o" = "yes" ; then 2216 echo "CONFIG_LEX_USE_O=y" >> $config_host_mak 2217 fi 2218 fi 2219 if test "$getmntent" = "yes" ; then 2220 output_sym "CONFIG_GETMNTENT" 2221 fi 2222 if test "$getmntinfo" = "yes" ; then 2223 output_sym "CONFIG_GETMNTINFO" 2224 fi 2225 if test "$getmntinfo_statvfs" = "yes" ; then 2226 output_sym "CONFIG_GETMNTINFO_STATVFS" 2227 fi 2228 if test "$static_assert" = "yes" ; then 2229 output_sym "CONFIG_STATIC_ASSERT" 2230 fi 2231 if test "$have_bool" = "yes" ; then 2232 output_sym "CONFIG_HAVE_BOOL" 2233 fi 2234 if test "$disable_opt" = "yes" ; then 2235 output_sym "CONFIG_DISABLE_OPTIMIZATIONS" 2236 fi 2237 if test "$zlib" = "no" ; then 2238 echo "Consider installing zlib-dev (zlib-devel), some fio features depend on it." 2239 fi 2240 if test "$cuda" = "yes" ; then 2241 output_sym "CONFIG_CUDA" 2242 fi 2243 2244 echo "LIBS+=$LIBS" >> $config_host_mak 2245 echo "GFIO_LIBS+=$GFIO_LIBS" >> $config_host_mak 2246 echo "CFLAGS+=$CFLAGS" >> $config_host_mak 2247 echo "LDFLAGS+=$LDFLAGS" >> $config_host_mak 2248 echo "CC=$cc" >> $config_host_mak 2249 echo "BUILD_CFLAGS=$BUILD_CFLAGS $CFLAGS" >> $config_host_mak 2250 echo "INSTALL_PREFIX=$prefix" >> $config_host_mak 2251 2252 if [ `dirname $0` != "." -a ! -e Makefile ]; then 2253 cat > Makefile <<EOF 2254 SRCDIR:=`dirname $0` 2255 include \$(SRCDIR)/Makefile 2256 EOF 2257 fi 2258