rm -rf config.log
config_host_mak="config-host.mak"
-config_host_ld="config-host.ld"
+config_host_h="config-host.h"
+
+rm -rf $config_host_mak
+rm -rf $config_host_h
+
+# Default CFLAGS
+CFLAGS="-D_GNU_SOURCE"
+EXTFLAGS="-include config-host.h"
# Print a helpful header at the top of config.log
echo "# FIO configure log $(date)" >> config.log
echo >> config.log
echo "#" >> config.log
+# Print configure header at the top of $config_host_h
+echo "/*" > $config_host_h
+echo " * Automatically generated by configure - do not modify" >> $config_host_h
+printf " * Configured with:" >> $config_host_h
+printf " * '%s'" "$0" "$@" >> $config_host_h
+echo "" >> $config_host_h
+echo " */" >> $config_host_h
+
do_cc() {
# Run the compiler, capturing its output to the log.
echo $cc "$@" >> config.log
compile_object
}
+output_sym() {
+ echo "$1=y" >> $config_host_mak
+ echo "#define $1" >> $config_host_h
+}
+
targetos=""
cpu=""
cc="${CC-${cross_prefix}gcc}"
+show_help="no"
+exit_val=0
+
+# parse options
+for opt do
+ optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
+ case "$opt" in
+ --cc=*) CC="$optarg"
+ ;;
+ --extra-cflags=*) CFLAGS="$CFLAGS $optarg"
+ ;;
+ --build-32bit-win=*) build_32bit_win="$optarg"
+ ;;
+ --help)
+ show_help="yes"
+ ;;
+ *)
+ echo "Bad option $opt"
+ show_help="yes"
+ exit_val=1
+ esac
+done
+
+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= Specify yes for a 32-bit build on Windows"
+ exit $exit_val
+fi
+
if check_define __linux__ ; then
targetos="Linux"
-elif test `uname -o` = Cygwin ; then
- echo "Forcing known good options on Windows"
- echo "CC=x86_64-w64-mingw32-gcc" >> $config_host_mak
- echo "CONFIG_64BIT_LLP64=y" >> $config_host_mak
- echo "CONFIG_CLOCK_GETTIME=y" >> $config_host_mak
- echo "CONFIG_CLOCK_MONOTONIC=y" >> $config_host_mak
- echo "CONFIG_GETTIMEOFDAY=y" >> $config_host_mak
- echo "CONFIG_FADVISE=y" >> $config_host_mak
- echo "CONFIG_STRSEP=y" >> $config_host_mak
- echo "CONFIG_SOCKLEN_T=y" >> $config_host_mak
- echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
- echo "CONFIG_FADVISE=y" >> $config_host_mak
- echo "CONFIG_SFAA=y" >> $config_host_mak
- exit 0
elif check_define __OpenBSD__ ; then
targetos='OpenBSD'
elif check_define __sun__ ; then
if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
cpu="x86_64"
fi
+ ;;
+CYGWIN*)
+ echo "Forcing known good options on Windows"
+ if test -z "$CC" ; then
+ if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then
+ CC="i686-w64-mingw32-gcc"
+ else
+ CC="x86_64-w64-mingw32-gcc"
+ fi
+ fi
+ output_sym "CONFIG_LITTLE_ENDIAN"
+ if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then
+ output_sym "CONFIG_32BIT"
+ else
+ output_sym "CONFIG_64BIT_LLP64"
+ fi
+ output_sym "CONFIG_FADVISE"
+ output_sym "CONFIG_SOCKLEN_T"
+ output_sym "CONFIG_POSIX_FALLOCATE"
+ output_sym "CONFIG_FADVISE"
+ output_sym "CONFIG_SFAA"
+ output_sym "CONFIG_RUSAGE_THREAD"
+ output_sym "CONFIG_WINDOWSAIO"
+ output_sym "CONFIG_FDATASYNC"
+ output_sym "CONFIG_CLOCK_MONOTONIC"
+ output_sym "CONFIG_GETTIMEOFDAY"
+ output_sym "CONFIG_CLOCK_GETTIME"
+ output_sym "CONFIG_SCHED_IDLE"
+ output_sym "CONFIG_TCP_NODELAY"
+ echo "CC=$CC" >> $config_host_mak
+ echo "EXTFLAGS=$CFLAGS -include config-host.h -D_GNU_SOURCE" >> $config_host_mak
+ exit 0
esac
if test ! -z "$cpu" ; then
;;
esac
-if test -z $CC; then
+if test -z "$CC" ; then
if test "$targetos" = "FreeBSD"; then
if has clang; then
CC=clang
cc="${CC-${cross_prefix}gcc}"
+##########################################
+# check endianness
+bigendian="no"
+cat > $TMPC <<EOF
+#include <inttypes.h>
+int main(void)
+{
+ volatile uint32_t i=0x01234567;
+ return (*((uint8_t*)(&i))) == 0x67;
+}
+EOF
+if compile_prog "" "" "endian"; then
+ $TMPE && bigendian="yes"
+fi
+
+
echo "Operating system $targetos"
echo "CPU $cpu"
+echo "Big endian $bigendian"
echo "Compiler $cc"
echo
linux_2arg_affinity="no"
linux_3arg_affinity="no"
cat > $TMPC << EOF
-#define _GNU_SOURCE
#include <sched.h>
int main(int argc, char **argv)
{
linux_3arg_affinity="yes"
else
cat > $TMPC << EOF
-#define _GNU_SOURCE
#include <sched.h>
int main(int argc, char **argv)
{
cat > $TMPC << EOF
#include <stdio.h>
#include <unistd.h>
-#define _GNU_SOURCE
#include <fcntl.h>
#include <linux/fs.h>
int main(int argc, char **argv)
# splice probe
linux_splice="no"
cat > $TMPC << EOF
-#define _GNU_SOURCE
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char **argv)
# fusion-aw probe
fusion_aw="no"
cat > $TMPC << EOF
-#include <vsl_dp_experimental/vectored_write.h>
+#include <nvm/vectored_write.h>
int main(int argc, char **argv)
{
struct vsl_iovec iov;
return vsl_vectored_write(0, &iov, 0, O_ATOMIC);
}
EOF
-if compile_prog "" "-lvsldpexp" "fusion-aw"; then
+if compile_prog "" "-L/usr/lib/fio -lnvm-primitives" "fusion-aw"; then
+ LIBS="-L/usr/lib/fio -lnvm-primitives $LIBS"
fusion_aw="yes"
fi
echo "Fusion-io atomic engine $fusion_aw"
fi
echo "__thread $tls_thread"
+##########################################
+# Check whether we have getrusage(RUSAGE_THREAD)
+rusage_thread="no"
+cat > $TMPC << EOF
+#include <sys/time.h>
+#include <sys/resource.h>
+int main(int argc, char **argv)
+{
+ struct rusage ru;
+ getrusage(RUSAGE_THREAD, &ru);
+ return 0;
+}
+EOF
+if compile_prog "" "" "RUSAGE_THREAD"; then
+ rusage_thread="yes"
+fi
+echo "RUSAGE_THREAD $rusage_thread"
+
+##########################################
+# Check whether we have SCHED_IDLE
+sched_idle="no"
+cat > $TMPC << EOF
+#include <sched.h>
+int main(int argc, char **argv)
+{
+ struct sched_param p;
+ return sched_setscheduler(0, SCHED_IDLE, &p);
+}
+EOF
+if compile_prog "" "" "SCHED_IDLE"; then
+ sched_idle="yes"
+fi
+echo "SCHED_IDLE $sched_idle"
+
+##########################################
+# Check whether we have TCP_NODELAY
+tcp_nodelay="no"
+cat > $TMPC << EOF
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/tcp.h>
+int main(int argc, char **argv)
+{
+ return getsockopt(0, 0, TCP_NODELAY, NULL, NULL);
+}
+EOF
+if compile_prog "" "" "TCP_NODELAY"; then
+ tcp_nodelay="yes"
+fi
+echo "TCP_NODELAY $tcp_nodelay"
+
#############################################################################
echo "# Automatically generated by configure - do not modify" > $config_host_mak
echo >> $config_host_mak
if test "$wordsize" = "64" ; then
- echo "CONFIG_64BIT=y" >> $config_host_mak
+ output_sym "CONFIG_64BIT"
elif test "$wordsize" = "32" ; then
- echo "CONFIG_32BIT=y" >> $config_host_mak
+ output_sym "CONFIG_32BIT"
else
echo "Unknown wordsize!"
exit 1
fi
+if test "$bigendian" = "yes" ; then
+ output_sym "CONFIG_BIG_ENDIAN"
+else
+ output_sym "CONFIG_LITTLE_ENDIAN"
+fi
if test "$libaio" = "yes" ; then
- echo "CONFIG_LIBAIO=y" >> $config_host_mak
+ output_sym "CONFIG_LIBAIO"
fi
if test "$posix_aio" = "yes" ; then
- echo "CONFIG_POSIXAIO=y" >> $config_host_mak
+ output_sym "CONFIG_POSIXAIO"
fi
if test "$posix_aio_fsync" = "yes" ; then
- echo "CONFIG_POSIXAIO_FSYNC=y" >> $config_host_mak
+ output_sym "CONFIG_POSIXAIO_FSYNC"
fi
if test "$linux_fallocate" = "yes" ; then
- echo "CONFIG_LINUX_FALLOCATE=y" >> $config_host_mak
+ output_sym "CONFIG_LINUX_FALLOCATE"
fi
if test "$posix_fallocate" = "yes" ; then
- echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
+ output_sym "CONFIG_POSIX_FALLOCATE"
fi
if test "$fdatasync" = "yes" ; then
- echo "CONFIG_FDATASYNC=y" >> $config_host_mak
+ output_sym "CONFIG_FDATASYNC"
fi
if test "$sync_file_range" = "yes" ; then
- echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
+ output_sym "CONFIG_SYNC_FILE_RANGE"
fi
if test "$sfaa" = "yes" ; then
- echo "CONFIG_SFAA=y" >> $config_host_mak
+ output_sym "CONFIG_SFAA"
fi
if test "$libverbs" = "yes" -o "rdmacm" = "yes" ; then
- echo "CONFIG_RDMA=y" >> $config_host_mak
+ output_sym "CONFIG_RDMA"
fi
if test "$clock_gettime" = "yes" ; then
- echo "CONFIG_CLOCK_GETTIME=y" >> $config_host_mak
+ output_sym "CONFIG_CLOCK_GETTIME"
fi
if test "$clock_monotonic" = "yes" ; then
- echo "CONFIG_CLOCK_MONOTONIC=y" >> $config_host_mak
+ output_sym "CONFIG_CLOCK_MONOTONIC"
fi
if test "$clock_monotonic_precise" = "yes" ; then
- echo "CONFIG_CLOCK_MONOTONIC_PRECISE=y" >> $config_host_mak
+ output_sym "CONFIG_CLOCK_MONOTONIC_PRECISE"
fi
if test "$gettimeofday" = "yes" ; then
- echo "CONFIG_GETTIMEOFDAY=y" >> $config_host_mak
+ output_sym "CONFIG_GETTIMEOFDAY"
fi
if test "$posix_fadvise" = "yes" ; then
- echo "CONFIG_POSIX_FADVISE=y" >> $config_host_mak
+ output_sym "CONFIG_POSIX_FADVISE"
fi
if test "$linux_3arg_affinity" = "yes" ; then
- echo "CONFIG_3ARG_AFFINITY=y" >> $config_host_mak
+ output_sym "CONFIG_3ARG_AFFINITY"
elif test "$linux_2arg_affinity" = "yes" ; then
- echo "CONFIG_2ARG_AFFINITY=y" >> $config_host_mak
+ output_sym "CONFIG_2ARG_AFFINITY"
fi
if test "$strsep" = "yes" ; then
- echo "CONFIG_STRSEP=y" >> $config_host_mak
+ output_sym "CONFIG_STRSEP"
fi
if test "$getopt_long_only" = "yes" ; then
- echo "CONFIG_GETOPT_LONG_ONLY=y" >> $config_host_mak
+ output_sym "CONFIG_GETOPT_LONG_ONLY"
fi
if test "$inet_aton" = "yes" ; then
- echo "CONFIG_INET_ATON=y" >> $config_host_mak
+ output_sym "CONFIG_INET_ATON"
fi
if test "$socklen_t" = "yes" ; then
- echo "CONFIG_SOCKLEN_T=y" >> $config_host_mak
+ output_sym "CONFIG_SOCKLEN_T"
fi
if test "$ext4_me" = "yes" ; then
- echo "CONFIG_LINUX_EXT4_MOVE_EXTENT=y" >> $config_host_mak
+ output_sym "CONFIG_LINUX_EXT4_MOVE_EXTENT"
fi
if test "$linux_splice" = "yes" ; then
- echo "CONFIG_LINUX_SPLICE=y" >> $config_host_mak
+ output_sym "CONFIG_LINUX_SPLICE"
fi
if test "$guasi" = "yes" ; then
- echo "CONFIG_GUASI=y" >> $config_host_mak
+ output_sym "CONFIG_GUASI"
fi
if test "$fusion_aw" = "yes" ; then
- echo "CONFIG_FUSION_AW=y" >> $config_host_mak
+ output_sym "CONFIG_FUSION_AW"
fi
if test "$libnuma" = "yes" ; then
- echo "CONFIG_LIBNUMA=y" >> $config_host_mak
+ output_sym "CONFIG_LIBNUMA"
fi
if test "$solaris_aio" = "yes" ; then
- echo "CONFIG_SOLARISAIO=y" >> $config_host_mak
+ output_sym "CONFIG_SOLARISAIO"
fi
if test "$tls_thread" = "yes" ; then
- echo "CONFIG_TLS_THREAD=y" >> $config_host_mak
+ output_sym "CONFIG_TLS_THREAD"
+fi
+if test "$rusage_thread" = "yes" ; then
+ output_sym "CONFIG_RUSAGE_THREAD"
+fi
+if test "$sched_idle" = "yes" ; then
+ output_sym "CONFIG_SCHED_IDLE"
+fi
+if test "$tcp_nodelay" = "yes" ; then
+ output_sym "CONFIG_TCP_NODELAY"
fi
echo "LIBS+=$LIBS" >> $config_host_mak
echo "CC=$cc" >> $config_host_mak
+echo "EXTFLAGS=$EXTFLAGS $CFLAGS" >> $config_host_mak