blob: 87cc1cff8fa1f3691d16d7474753758d975cd2e3 [file] [log] [blame]
Jens Axboe67bf9822013-01-10 11:23:19 +01001#!/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
8if test ! -z "$TMPDIR" ; then
9 TMPDIR1="${TMPDIR}"
10elif test ! -z "$TEMPDIR" ; then
11 TMPDIR1="${TEMPDIR}"
12else
13 TMPDIR1="/tmp"
14fi
15
16TMPC="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.c"
17TMPO="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.o"
18TMPE="${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@linaro.org>
22trap "rm -f $TMPC $TMPO $TMPE" EXIT INT QUIT TERM
23
24rm -rf config.log
25
26config_host_mak="config-host.mak"
Jens Axboe4feafb12013-01-24 23:07:55 -070027config_host_h="config-host.h"
28
29rm -rf $config_host_mak
30rm -rf $config_host_h
Jens Axboe67bf9822013-01-10 11:23:19 +010031
Jens Axboed7145a72013-02-11 13:21:54 +010032fatal() {
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
Jens Axboe44404c52013-01-24 14:20:09 -070040# Default CFLAGS
Jens Axboe208e4c82013-01-29 09:26:07 +010041CFLAGS="-D_GNU_SOURCE"
42EXTFLAGS="-include config-host.h"
Jens Axboe44404c52013-01-24 14:20:09 -070043
Jens Axboe67bf9822013-01-10 11:23:19 +010044# Print a helpful header at the top of config.log
45echo "# FIO configure log $(date)" >> config.log
46printf "# Configured with:" >> config.log
47printf " '%s'" "$0" "$@" >> config.log
48echo >> config.log
49echo "#" >> config.log
50
Jens Axboe7560fe72013-01-25 08:52:28 -070051# Print configure header at the top of $config_host_h
52echo "/*" > $config_host_h
53echo " * Automatically generated by configure - do not modify" >> $config_host_h
54printf " * Configured with:" >> $config_host_h
55printf " * '%s'" "$0" "$@" >> $config_host_h
56echo "" >> $config_host_h
57echo " */" >> $config_host_h
58
Jens Axboe67bf9822013-01-10 11:23:19 +010059do_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."
Jens Axboed7145a72013-02-11 13:21:54 +010081 fatal "You can run configure with --disable-werror to bypass this check."
Jens Axboe67bf9822013-01-10 11:23:19 +010082}
83
84compile_object() {
85 do_cc $CFLAGS -c -o $TMPO $TMPC
86}
87
88compile_prog() {
89 local_cflags="$1"
90 local_ldflags="$2"
91 echo "Compiling test case $3" >> config.log
92 do_cc $CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
93}
94
95feature_not_found() {
96 feature=$1
97
98 echo "ERROR"
99 echo "ERROR: User requested feature $feature"
100 echo "ERROR: configure was not able to find it"
Jens Axboed7145a72013-02-11 13:21:54 +0100101 fatal "ERROR"
Jens Axboe67bf9822013-01-10 11:23:19 +0100102}
103
104has() {
105 type "$1" >/dev/null 2>&1
106}
107
108check_define() {
109 cat > $TMPC <<EOF
110#if !defined($1)
111#error $1 not defined
112#endif
113int main(void)
114{
115 return 0;
116}
117EOF
118 compile_object
119}
120
Jens Axboe4feafb12013-01-24 23:07:55 -0700121output_sym() {
122 echo "$1=y" >> $config_host_mak
123 echo "#define $1" >> $config_host_h
124}
125
Jens Axboe67bf9822013-01-10 11:23:19 +0100126targetos=""
127cpu=""
128
129cc="${CC-${cross_prefix}gcc}"
130
Jens Axboe899fab32013-01-29 10:06:30 +0100131show_help="no"
132exit_val=0
133
Jens Axboecb1125b2013-01-23 13:47:54 -0700134# parse options
135for opt do
136 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
137 case "$opt" in
Jens Axboe8b156d82013-02-10 15:48:34 +0100138 --cpu=*) cpu="$optarg"
139 ;;
Jens Axboecb1125b2013-01-23 13:47:54 -0700140 --cc=*) CC="$optarg"
141 ;;
Jens Axboe208e4c82013-01-29 09:26:07 +0100142 --extra-cflags=*) CFLAGS="$CFLAGS $optarg"
143 ;;
Huadong Liu74097112013-02-05 08:43:14 +0100144 --build-32bit-win=*) build_32bit_win="$optarg"
145 ;;
Jens Axboe899fab32013-01-29 10:06:30 +0100146 --help)
147 show_help="yes"
148 ;;
Jens Axboecb1125b2013-01-23 13:47:54 -0700149 *)
150 echo "Bad option $opt"
Jens Axboe899fab32013-01-29 10:06:30 +0100151 show_help="yes"
152 exit_val=1
Jens Axboecb1125b2013-01-23 13:47:54 -0700153 esac
154done
155
Jens Axboe899fab32013-01-29 10:06:30 +0100156if test "$show_help" = "yes" ; then
Jens Axboe8b156d82013-02-10 15:48:34 +0100157 echo "--cpu= Specify target CPU if auto-detect fails"
Jens Axboe899fab32013-01-29 10:06:30 +0100158 echo "--cc= Specify compiler to use"
159 echo "--extra-cflags= Specify extra CFLAGS to pass to compiler"
Bruce Cran723d7b32013-02-05 17:44:19 +0000160 echo "--build-32bit-win= Specify yes for a 32-bit build on Windows"
Jens Axboe899fab32013-01-29 10:06:30 +0100161 exit $exit_val
162fi
163
Jens Axboe67bf9822013-01-10 11:23:19 +0100164if check_define __linux__ ; then
165 targetos="Linux"
Jens Axboe67bf9822013-01-10 11:23:19 +0100166elif check_define __OpenBSD__ ; then
167 targetos='OpenBSD'
168elif check_define __sun__ ; then
169 targetos='SunOS'
170else
171 targetos=`uname -s`
172fi
173
174# Some host OSes need non-standard checks for which CPU to use.
175# Note that these checks are broken for cross-compilation: if you're
176# cross-compiling to one of these OSes then you'll need to specify
177# the correct CPU with the --cpu option.
178case $targetos in
179Darwin)
180 # on Leopard most of the system is 32-bit, so we have to ask the kernel if
181 # we can run 64-bit userspace code.
182 # If the user didn't specify a CPU explicitly and the kernel says this is
183 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual
184 # detection code.
185 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
186 cpu="x86_64"
187 fi
188 ;;
189SunOS)
190 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
191 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
192 cpu="x86_64"
193 fi
Jens Axboecfd94f72013-01-23 16:23:48 -0700194 ;;
195CYGWIN*)
196 echo "Forcing known good options on Windows"
Jens Axboe4578d012013-01-23 16:26:12 -0700197 if test -z "$CC" ; then
Huadong Liu74097112013-02-05 08:43:14 +0100198 if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then
199 CC="i686-w64-mingw32-gcc"
200 else
201 CC="x86_64-w64-mingw32-gcc"
202 fi
Jens Axboe4578d012013-01-23 16:26:12 -0700203 fi
Jens Axboe4feafb12013-01-24 23:07:55 -0700204 output_sym "CONFIG_LITTLE_ENDIAN"
Huadong Liu74097112013-02-05 08:43:14 +0100205 if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then
206 output_sym "CONFIG_32BIT"
207 else
208 output_sym "CONFIG_64BIT_LLP64"
209 fi
Jens Axboe4feafb12013-01-24 23:07:55 -0700210 output_sym "CONFIG_FADVISE"
211 output_sym "CONFIG_SOCKLEN_T"
Jens Axboe4feafb12013-01-24 23:07:55 -0700212 output_sym "CONFIG_FADVISE"
213 output_sym "CONFIG_SFAA"
214 output_sym "CONFIG_RUSAGE_THREAD"
215 output_sym "CONFIG_WINDOWSAIO"
216 output_sym "CONFIG_FDATASYNC"
Bruce Cran59308a62013-02-02 20:59:31 +0000217 output_sym "CONFIG_CLOCK_MONOTONIC"
Bruce Crandc0518c2013-01-28 16:07:15 +0000218 output_sym "CONFIG_GETTIMEOFDAY"
219 output_sym "CONFIG_CLOCK_GETTIME"
Jens Axboe7e09a9f2013-01-30 13:58:58 +0100220 output_sym "CONFIG_SCHED_IDLE"
Jens Axboe1eafa372013-01-31 10:19:51 +0100221 output_sym "CONFIG_TCP_NODELAY"
Jens Axboe4feafb12013-01-24 23:07:55 -0700222 echo "CC=$CC" >> $config_host_mak
Jens Axboe899fab32013-01-29 10:06:30 +0100223 echo "EXTFLAGS=$CFLAGS -include config-host.h -D_GNU_SOURCE" >> $config_host_mak
Jens Axboecfd94f72013-01-23 16:23:48 -0700224 exit 0
Jens Axboe67bf9822013-01-10 11:23:19 +0100225esac
226
227if test ! -z "$cpu" ; then
228 # command line argument
229 :
230elif check_define __i386__ ; then
231 cpu="i386"
232elif check_define __x86_64__ ; then
233 cpu="x86_64"
234elif check_define __sparc__ ; then
235 if check_define __arch64__ ; then
236 cpu="sparc64"
237 else
238 cpu="sparc"
239 fi
240elif check_define _ARCH_PPC ; then
241 if check_define _ARCH_PPC64 ; then
242 cpu="ppc64"
243 else
244 cpu="ppc"
245 fi
246elif check_define __mips__ ; then
247 cpu="mips"
248elif check_define __ia64__ ; then
249 cpu="ia64"
250elif check_define __s390__ ; then
251 if check_define __s390x__ ; then
252 cpu="s390x"
253 else
254 cpu="s390"
255 fi
256elif check_define __arm__ ; then
257 cpu="arm"
258elif check_define __hppa__ ; then
259 cpu="hppa"
260else
261 cpu=`uname -m`
262fi
263
264# Normalise host CPU name and set ARCH.
265case "$cpu" in
266 ia64|ppc|ppc64|s390|s390x|sparc64)
267 cpu="$cpu"
268 ;;
269 i386|i486|i586|i686|i86pc|BePC)
270 cpu="i386"
271 ;;
272 x86_64|amd64)
273 cpu="x86_64"
274 ;;
275 armv*b|armv*l|arm)
276 cpu="arm"
277 ;;
278 hppa|parisc|parisc64)
279 cpu="hppa"
280 ;;
281 mips*)
282 cpu="mips"
283 ;;
284 sparc|sun4[cdmuv])
285 cpu="sparc"
286 ;;
287 *)
Jens Axboe8b156d82013-02-10 15:48:34 +0100288 echo "Unknown CPU"
Jens Axboe67bf9822013-01-10 11:23:19 +0100289 ;;
290esac
291
Jens Axboedcbbf5b2013-01-25 14:35:27 -0700292if test -z "$CC" ; then
Jens Axboe67bf9822013-01-10 11:23:19 +0100293 if test "$targetos" = "FreeBSD"; then
294 if has clang; then
295 CC=clang
296 else
297 CC=gcc
298 fi
Jens Axboe67bf9822013-01-10 11:23:19 +0100299 fi
300fi
301
302cc="${CC-${cross_prefix}gcc}"
303
Jens Axboe0dcebdf2013-01-23 15:42:16 -0700304##########################################
305# check endianness
306bigendian="no"
307cat > $TMPC <<EOF
308#include <inttypes.h>
309int main(void)
310{
311 volatile uint32_t i=0x01234567;
312 return (*((uint8_t*)(&i))) == 0x67;
313}
314EOF
315if compile_prog "" "" "endian"; then
316 $TMPE && bigendian="yes"
317fi
318
319
Jens Axboe67bf9822013-01-10 11:23:19 +0100320echo "Operating system $targetos"
321echo "CPU $cpu"
Jens Axboe0dcebdf2013-01-23 15:42:16 -0700322echo "Big endian $bigendian"
Jens Axboe67bf9822013-01-10 11:23:19 +0100323echo "Compiler $cc"
324echo
325
326##########################################
327# check for wordsize
328wordsize="0"
329cat > $TMPC <<EOF
330#include <stdio.h>
331int main(void)
332{
333 unsigned int wsize = sizeof(long) * 8;
334 printf("%d\n", wsize);
335 return 0;
336}
337EOF
338if compile_prog "" "" "wordsize"; then
339 wordsize=$($TMPE)
340fi
341echo "Wordsize $wordsize"
342
343##########################################
344# linux-aio probe
345libaio="no"
346cat > $TMPC <<EOF
347#include <libaio.h>
348#include <stddef.h>
349int main(void)
350{
351 io_setup(0, NULL);
352 return 0;
353}
354EOF
355if compile_prog "" "-laio" "libaio" ; then
356 libaio=yes
357 LIBS="-laio $LIBS"
358else
359 if test "$libaio" = "yes" ; then
360 feature_not_found "linux AIO"
361 fi
362 libaio=no
363fi
364echo "Linux AIO support $libaio"
365
366##########################################
367# posix aio probe
368posix_aio="no"
369posix_aio_lrt="no"
370cat > $TMPC <<EOF
371#include <aio.h>
372int main(void)
373{
374 struct aiocb cb;
375 aio_read(&cb);
376 return 0;
377}
378EOF
379if compile_prog "" "" "posixaio" ; then
380 posix_aio="yes"
381elif compile_prog "" "-lrt" "posixaio"; then
382 posix_aio="yes"
383 posix_aio_lrt="yes"
384 LIBS="-lrt $LIBS"
385fi
386echo "POSIX AIO support $posix_aio"
387echo "POSIX AIO support needs -lrt $posix_aio_lrt"
388
389##########################################
390# posix aio fsync probe
391posix_aio_fsync="no"
392if test "$posix_aio" = "yes" ; then
393 cat > $TMPC <<EOF
394#include <fcntl.h>
395#include <aio.h>
396int main(void)
397{
398 struct aiocb cb;
399 return aio_fsync(O_SYNC, &cb);
400 return 0;
401}
402EOF
403 if compile_prog "" "$LIBS" "posix_aio_fsync" ; then
404 posix_aio_fsync=yes
405 fi
406fi
407echo "POSIX AIO fsync $posix_aio_fsync"
408
409##########################################
410# solaris aio probe
411solaris_aio="no"
412cat > $TMPC <<EOF
413#include <sys/types.h>
414#include <sys/asynch.h>
415#include <unistd.h>
416int main(void)
417{
418 aio_result_t res;
419 return aioread(0, NULL, 0, 0, SEEK_SET, &res);
420 return 0;
421}
422EOF
423if compile_prog "" "-laio" "solarisaio" ; then
424 solaris_aio=yes
425 LIBS="-laio $LIBS"
426fi
427echo "Solaris AIO support $solaris_aio"
428
429##########################################
430# __sync_fetch_and_and test
431sfaa="no"
432cat > $TMPC << EOF
433static int sfaa(int *ptr)
434{
435 return __sync_fetch_and_and(ptr, 0);
436}
437
438int main(int argc, char **argv)
439{
440 int val = 42;
441 sfaa(&val);
442 return val;
443}
444EOF
445if compile_prog "" "" "__sync_fetch_and_add()" ; then
446 sfaa="yes"
447fi
448echo "__sync_fetch_and add $sfaa"
449
450##########################################
451# libverbs probe
452libverbs="no"
453cat > $TMPC << EOF
454#include <stdio.h>
455#include <infiniband/arch.h>
456int main(int argc, char **argv)
457{
458 struct ibv_pd *pd = ibv_alloc_pd(NULL);
459 return 0;
460}
461EOF
462if compile_prog "" "-libverbs" "libverbs" ; then
463 libverbs="yes"
464 LIBS="-libverbs $LIBS"
465fi
466echo "libverbs $libverbs"
467
468##########################################
469# rdmacm probe
470rdmacm="no"
471cat > $TMPC << EOF
472#include <stdio.h>
473#include <rdma/rdma_cma.h>
474int main(int argc, char **argv)
475{
476 rdma_destroy_qp(NULL);
477 return 0;
478}
479EOF
480if compile_prog "" "-lrdmacm" "rdma"; then
481 rdmacm="yes"
482 LIBS="-lrdmacm $LIBS"
483fi
484echo "rdmacm $rdmacm"
485
486##########################################
487# Linux fallocate probe
488linux_fallocate="no"
489cat > $TMPC << EOF
490#include <stdio.h>
491#include <linux/falloc.h>
492int main(int argc, char **argv)
493{
494 int r = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 1024);
495 return r;
496}
497EOF
498if compile_prog "" "" "linux_fallocate"; then
499 linux_fallocate="yes"
500fi
501echo "Linux fallocate $linux_fallocate"
502
503##########################################
504# POSIX fadvise probe
505posix_fadvise="no"
506cat > $TMPC << EOF
507#include <stdio.h>
508#include <fcntl.h>
509int main(int argc, char **argv)
510{
511 int r = posix_fadvise(0, 0, 0, POSIX_FADV_NORMAL);
512 return r;
513}
514EOF
515if compile_prog "" "" "posix_fadvise"; then
516 posix_fadvise="yes"
517fi
518echo "POSIX fadvise $posix_fadvise"
519
520##########################################
521# POSIX fallocate probe
522posix_fallocate="no"
523cat > $TMPC << EOF
524#include <stdio.h>
525#include <fcntl.h>
526int main(int argc, char **argv)
527{
528 int r = posix_fallocate(0, 0, 1024);
529 return r;
530}
531EOF
532if compile_prog "" "" "posix_fallocate"; then
533 posix_fallocate="yes"
534fi
535echo "POSIX fallocate $posix_fallocate"
536
537##########################################
538# sched_set/getaffinity 2 or 3 argument test
539linux_2arg_affinity="no"
540linux_3arg_affinity="no"
541cat > $TMPC << EOF
Jens Axboe67bf9822013-01-10 11:23:19 +0100542#include <sched.h>
543int main(int argc, char **argv)
544{
545 cpu_set_t mask;
546 return sched_setaffinity(0, sizeof(mask), &mask);
547}
548EOF
549if compile_prog "" "" "sched_setaffinity(,,)"; then
550 linux_3arg_affinity="yes"
551else
552 cat > $TMPC << EOF
Jens Axboe67bf9822013-01-10 11:23:19 +0100553#include <sched.h>
554int main(int argc, char **argv)
555{
556 cpu_set_t mask;
557 return sched_setaffinity(0, &mask);
558}
559EOF
560 if compile_prog "" "" "sched_setaffinity(,)"; then
561 linux_2arg_affinity="yes"
562 fi
563fi
564echo "sched_setaffinity(3 arg) $linux_3arg_affinity"
565echo "sched_setaffinity(2 arg) $linux_2arg_affinity"
566
567##########################################
568# clock_gettime probe
569clock_gettime="no"
570cat > $TMPC << EOF
571#include <stdio.h>
572#include <time.h>
573int main(int argc, char **argv)
574{
575 return clock_gettime(0, NULL);
576}
577EOF
578if compile_prog "" "" "clock_gettime"; then
579 clock_gettime="yes"
580elif compile_prog "" "-lrt" "clock_gettime"; then
581 clock_gettime="yes"
582 LIBS="-lrt $LIBS"
583fi
584echo "clock_gettime $clock_gettime"
585
586##########################################
587# CLOCK_MONOTONIC probe
588clock_monotonic="no"
589if test "$clock_gettime" = "yes" ; then
590 cat > $TMPC << EOF
591#include <stdio.h>
592#include <time.h>
593int main(int argc, char **argv)
594{
595 return clock_gettime(CLOCK_MONOTONIC, NULL);
596}
597EOF
598 if compile_prog "" "$LIBS" "clock monotonic"; then
599 clock_monotonic="yes"
600 fi
601fi
602echo "CLOCK_MONOTONIC $clock_monotonic"
603
604##########################################
605# CLOCK_MONOTONIC_PRECISE probe
606clock_monotonic_precise="no"
607if test "$clock_gettime" = "yes" ; then
608 cat > $TMPC << EOF
609#include <stdio.h>
610#include <time.h>
611int main(int argc, char **argv)
612{
613 return clock_gettime(CLOCK_MONOTONIC_PRECISE, NULL);
614}
615EOF
616 if compile_prog "" "$LIBS" "clock monotonic precise"; then
617 clock_monotonic_precise="yes"
618 fi
619fi
620echo "CLOCK_MONOTONIC_PRECISE $clock_monotonic_precise"
621
622##########################################
623# gettimeofday() probe
624gettimeofday="no"
625cat > $TMPC << EOF
626#include <sys/time.h>
627#include <stdio.h>
628int main(int argc, char **argv)
629{
630 struct timeval tv;
631 return gettimeofday(&tv, NULL);
632}
633EOF
634if compile_prog "" "" "gettimeofday"; then
635 gettimeofday="yes"
636fi
637echo "gettimeofday $gettimeofday"
638
639##########################################
640# fdatasync() probe
641fdatasync="no"
642cat > $TMPC << EOF
643#include <stdio.h>
644#include <unistd.h>
645int main(int argc, char **argv)
646{
647 return fdatasync(0);
648}
649EOF
650if compile_prog "" "" "fdatasync"; then
651 fdatasync="yes"
652fi
653echo "fdatasync $fdatasync"
654
655##########################################
656# sync_file_range() probe
657sync_file_range="no"
658cat > $TMPC << EOF
659#include <stdio.h>
660#include <unistd.h>
Jens Axboe67bf9822013-01-10 11:23:19 +0100661#include <fcntl.h>
662#include <linux/fs.h>
663int main(int argc, char **argv)
664{
665 unsigned int flags = SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE |
666 SYNC_FILE_RANGE_WAIT_AFTER;
667 return sync_file_range(0, 0, 0, flags);
668}
669EOF
670if compile_prog "" "" "sync_file_range"; then
671 sync_file_range="yes"
672fi
673echo "sync_file_range $sync_file_range"
674
675##########################################
676# ext4 move extent probe
677ext4_me="no"
678cat > $TMPC << EOF
679#include <fcntl.h>
680#include <sys/ioctl.h>
681int main(int argc, char **argv)
682{
683 struct move_extent me;
684 return ioctl(0, EXT4_IOC_MOVE_EXT, &me);
685}
686EOF
Jens Axboec7165b82013-01-12 10:27:53 +0100687if compile_prog "" "" "ext4 move extent" ; then
688 ext4_me="yes"
689elif test $targetos = "Linux" ; then
690 # On Linux, just default to it on and let it error at runtime if we really
691 # don't have it. None of my updated systems have it defined, but it does
692 # work. Takes a while to bubble back.
Jens Axboe67bf9822013-01-10 11:23:19 +0100693 ext4_me="yes"
694fi
695echo "EXT4 move extent $ext4_me"
696
697##########################################
698# splice probe
699linux_splice="no"
700cat > $TMPC << EOF
Jens Axboe67bf9822013-01-10 11:23:19 +0100701#include <stdio.h>
702#include <fcntl.h>
703int main(int argc, char **argv)
704{
705 return splice(0, NULL, 0, NULL, 0, SPLICE_F_NONBLOCK);
706}
707EOF
708if compile_prog "" "" "linux splice"; then
709 linux_splice="yes"
710fi
711echo "Linux splice(2) $linux_splice"
712
713##########################################
714# GUASI probe
715guasi="no"
716cat > $TMPC << EOF
717#include <guasi.h>
718#include <guasi_syscalls.h>
719int main(int argc, char **argv)
720{
721 guasi_t ctx = guasi_create(0, 0, 0);
722 return 0;
723}
724EOF
725if compile_prog "" "" "guasi"; then
726 guasi="yes"
727fi
728echo "GUASI $guasi"
729
730##########################################
731# fusion-aw probe
732fusion_aw="no"
733cat > $TMPC << EOF
Jens Axboe99db6562013-01-14 19:33:40 +0100734#include <nvm/vectored_write.h>
Jens Axboe67bf9822013-01-10 11:23:19 +0100735int main(int argc, char **argv)
736{
737 struct vsl_iovec iov;
738 return vsl_vectored_write(0, &iov, 0, O_ATOMIC);
739}
740EOF
Jens Axboe99db6562013-01-14 19:33:40 +0100741if compile_prog "" "-L/usr/lib/fio -lnvm-primitives" "fusion-aw"; then
742 LIBS="-L/usr/lib/fio -lnvm-primitives $LIBS"
Jens Axboe67bf9822013-01-10 11:23:19 +0100743 fusion_aw="yes"
744fi
745echo "Fusion-io atomic engine $fusion_aw"
746
747##########################################
748# libnuma probe
749libnuma="no"
750cat > $TMPC << EOF
751#include <numa.h>
752int main(int argc, char **argv)
753{
754 return numa_available();
755}
756EOF
757if compile_prog "" "-lnuma" "libnuma"; then
758 libnuma="yes"
759 LIBS="-lnuma $LIBS"
760fi
761echo "libnuma $libnuma"
762
763##########################################
764# strsep() probe
765strsep="no"
766cat > $TMPC << EOF
767#include <string.h>
768int main(int argc, char **argv)
769{
770 strsep(NULL, NULL);
771 return 0;
772}
773EOF
774if compile_prog "" "" "strsep"; then
775 strsep="yes"
776fi
777echo "strsep $strsep"
778
779##########################################
780# getopt_long_only() probe
781getopt_long_only="no"
782cat > $TMPC << EOF
783#include <unistd.h>
784#include <stdio.h>
785int main(int argc, char **argv)
786{
787 int c = getopt_long_only(argc, argv, NULL, NULL, NULL);
788 return c;
789}
790EOF
791if compile_prog "" "" "getopt_long_only"; then
792 getopt_long_only="yes"
793fi
794echo "getopt_long_only() $getopt_long_only"
795
796##########################################
797# inet_aton() probe
798inet_aton="no"
799cat > $TMPC << EOF
800#include <sys/socket.h>
801#include <arpa/inet.h>
802#include <stdio.h>
803int main(int argc, char **argv)
804{
805 struct in_addr in;
806 return inet_aton(NULL, &in);
807}
808EOF
809if compile_prog "" "" "inet_aton"; then
810 inet_aton="yes"
811fi
812echo "inet_aton $inet_aton"
813
814##########################################
815# socklen_t probe
816socklen_t="no"
817cat > $TMPC << EOF
818#include <string.h>
819#include <netinet/in.h>
820int main(int argc, char **argv)
821{
822 socklen_t len = 0;
823 return len;
824}
825EOF
826if compile_prog "" "" "socklen_t"; then
827 socklen_t="yes"
828fi
829echo "socklen_t $socklen_t"
830
831##########################################
832# Whether or not __thread is supported for TLS
833tls_thread="no"
834cat > $TMPC << EOF
835#include <stdio.h>
836static int __thread ret;
837int main(int argc, char **argv)
838{
839 return ret;
840}
841EOF
842if compile_prog "" "" "__thread"; then
843 tls_thread="yes"
844fi
845echo "__thread $tls_thread"
846
Jens Axboe44404c52013-01-24 14:20:09 -0700847##########################################
848# Check whether we have getrusage(RUSAGE_THREAD)
849rusage_thread="no"
850cat > $TMPC << EOF
851#include <sys/time.h>
852#include <sys/resource.h>
853int main(int argc, char **argv)
854{
855 struct rusage ru;
856 getrusage(RUSAGE_THREAD, &ru);
857 return 0;
858}
859EOF
860if compile_prog "" "" "RUSAGE_THREAD"; then
861 rusage_thread="yes"
862fi
863echo "RUSAGE_THREAD $rusage_thread"
864
Jens Axboe7e09a9f2013-01-30 13:58:58 +0100865##########################################
866# Check whether we have SCHED_IDLE
867sched_idle="no"
868cat > $TMPC << EOF
869#include <sched.h>
870int main(int argc, char **argv)
871{
872 struct sched_param p;
873 return sched_setscheduler(0, SCHED_IDLE, &p);
874}
875EOF
876if compile_prog "" "" "SCHED_IDLE"; then
877 sched_idle="yes"
878fi
879echo "SCHED_IDLE $sched_idle"
880
Jens Axboe1eafa372013-01-31 10:19:51 +0100881##########################################
882# Check whether we have TCP_NODELAY
883tcp_nodelay="no"
884cat > $TMPC << EOF
885#include <stdio.h>
886#include <sys/types.h>
887#include <sys/socket.h>
888#include <netinet/tcp.h>
889int main(int argc, char **argv)
890{
891 return getsockopt(0, 0, TCP_NODELAY, NULL, NULL);
892}
893EOF
894if compile_prog "" "" "TCP_NODELAY"; then
895 tcp_nodelay="yes"
896fi
897echo "TCP_NODELAY $tcp_nodelay"
898
Jens Axboe67bf9822013-01-10 11:23:19 +0100899#############################################################################
900
901echo "# Automatically generated by configure - do not modify" > $config_host_mak
902printf "# Configured with:" >> $config_host_mak
903printf " '%s'" "$0" "$@" >> $config_host_mak
904echo >> $config_host_mak
905
906if test "$wordsize" = "64" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700907 output_sym "CONFIG_64BIT"
Jens Axboe67bf9822013-01-10 11:23:19 +0100908elif test "$wordsize" = "32" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700909 output_sym "CONFIG_32BIT"
Jens Axboe67bf9822013-01-10 11:23:19 +0100910else
Jens Axboed7145a72013-02-11 13:21:54 +0100911 fatal "Unknown wordsize!"
Jens Axboe67bf9822013-01-10 11:23:19 +0100912fi
Jens Axboe0dcebdf2013-01-23 15:42:16 -0700913if test "$bigendian" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700914 output_sym "CONFIG_BIG_ENDIAN"
Jens Axboe0dcebdf2013-01-23 15:42:16 -0700915else
Jens Axboe4feafb12013-01-24 23:07:55 -0700916 output_sym "CONFIG_LITTLE_ENDIAN"
Jens Axboe0dcebdf2013-01-23 15:42:16 -0700917fi
Jens Axboe67bf9822013-01-10 11:23:19 +0100918if test "$libaio" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700919 output_sym "CONFIG_LIBAIO"
Jens Axboe67bf9822013-01-10 11:23:19 +0100920fi
921if test "$posix_aio" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700922 output_sym "CONFIG_POSIXAIO"
Jens Axboe67bf9822013-01-10 11:23:19 +0100923fi
924if test "$posix_aio_fsync" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700925 output_sym "CONFIG_POSIXAIO_FSYNC"
Jens Axboe67bf9822013-01-10 11:23:19 +0100926fi
927if test "$linux_fallocate" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700928 output_sym "CONFIG_LINUX_FALLOCATE"
Jens Axboe67bf9822013-01-10 11:23:19 +0100929fi
930if test "$posix_fallocate" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700931 output_sym "CONFIG_POSIX_FALLOCATE"
Jens Axboe67bf9822013-01-10 11:23:19 +0100932fi
933if test "$fdatasync" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700934 output_sym "CONFIG_FDATASYNC"
Jens Axboe67bf9822013-01-10 11:23:19 +0100935fi
936if test "$sync_file_range" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700937 output_sym "CONFIG_SYNC_FILE_RANGE"
Jens Axboe67bf9822013-01-10 11:23:19 +0100938fi
939if test "$sfaa" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700940 output_sym "CONFIG_SFAA"
Jens Axboe67bf9822013-01-10 11:23:19 +0100941fi
942if test "$libverbs" = "yes" -o "rdmacm" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700943 output_sym "CONFIG_RDMA"
Jens Axboe67bf9822013-01-10 11:23:19 +0100944fi
945if test "$clock_gettime" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700946 output_sym "CONFIG_CLOCK_GETTIME"
Jens Axboe67bf9822013-01-10 11:23:19 +0100947fi
948if test "$clock_monotonic" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700949 output_sym "CONFIG_CLOCK_MONOTONIC"
Jens Axboe67bf9822013-01-10 11:23:19 +0100950fi
951if test "$clock_monotonic_precise" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700952 output_sym "CONFIG_CLOCK_MONOTONIC_PRECISE"
Jens Axboe67bf9822013-01-10 11:23:19 +0100953fi
954if test "$gettimeofday" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700955 output_sym "CONFIG_GETTIMEOFDAY"
Jens Axboe67bf9822013-01-10 11:23:19 +0100956fi
957if test "$posix_fadvise" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700958 output_sym "CONFIG_POSIX_FADVISE"
Jens Axboe67bf9822013-01-10 11:23:19 +0100959fi
960if test "$linux_3arg_affinity" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700961 output_sym "CONFIG_3ARG_AFFINITY"
Jens Axboe67bf9822013-01-10 11:23:19 +0100962elif test "$linux_2arg_affinity" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700963 output_sym "CONFIG_2ARG_AFFINITY"
Jens Axboe67bf9822013-01-10 11:23:19 +0100964fi
965if test "$strsep" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700966 output_sym "CONFIG_STRSEP"
Jens Axboe67bf9822013-01-10 11:23:19 +0100967fi
968if test "$getopt_long_only" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700969 output_sym "CONFIG_GETOPT_LONG_ONLY"
Jens Axboe67bf9822013-01-10 11:23:19 +0100970fi
971if test "$inet_aton" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700972 output_sym "CONFIG_INET_ATON"
Jens Axboe67bf9822013-01-10 11:23:19 +0100973fi
974if test "$socklen_t" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700975 output_sym "CONFIG_SOCKLEN_T"
Jens Axboe67bf9822013-01-10 11:23:19 +0100976fi
977if test "$ext4_me" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700978 output_sym "CONFIG_LINUX_EXT4_MOVE_EXTENT"
Jens Axboe67bf9822013-01-10 11:23:19 +0100979fi
980if test "$linux_splice" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700981 output_sym "CONFIG_LINUX_SPLICE"
Jens Axboe67bf9822013-01-10 11:23:19 +0100982fi
983if test "$guasi" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700984 output_sym "CONFIG_GUASI"
Jens Axboe67bf9822013-01-10 11:23:19 +0100985fi
986if test "$fusion_aw" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700987 output_sym "CONFIG_FUSION_AW"
Jens Axboe67bf9822013-01-10 11:23:19 +0100988fi
989if test "$libnuma" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700990 output_sym "CONFIG_LIBNUMA"
Jens Axboe67bf9822013-01-10 11:23:19 +0100991fi
992if test "$solaris_aio" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700993 output_sym "CONFIG_SOLARISAIO"
Jens Axboe67bf9822013-01-10 11:23:19 +0100994fi
995if test "$tls_thread" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700996 output_sym "CONFIG_TLS_THREAD"
Jens Axboe67bf9822013-01-10 11:23:19 +0100997fi
Jens Axboe44404c52013-01-24 14:20:09 -0700998if test "$rusage_thread" = "yes" ; then
Jens Axboe4feafb12013-01-24 23:07:55 -0700999 output_sym "CONFIG_RUSAGE_THREAD"
Jens Axboe44404c52013-01-24 14:20:09 -07001000fi
Jens Axboe7e09a9f2013-01-30 13:58:58 +01001001if test "$sched_idle" = "yes" ; then
1002 output_sym "CONFIG_SCHED_IDLE"
1003fi
Jens Axboe1eafa372013-01-31 10:19:51 +01001004if test "$tcp_nodelay" = "yes" ; then
1005 output_sym "CONFIG_TCP_NODELAY"
1006fi
Jens Axboe67bf9822013-01-10 11:23:19 +01001007
1008echo "LIBS+=$LIBS" >> $config_host_mak
1009echo "CC=$cc" >> $config_host_mak
Jens Axboe208e4c82013-01-29 09:26:07 +01001010echo "EXTFLAGS=$EXTFLAGS $CFLAGS" >> $config_host_mak