esac
# Get CPU
-SILC_SYSTEM_IS_SMP(AC_DEFINE([SILC_SMP], [], [SILC_SMP]), [])
+SILC_SYSTEM_IS_SMP(AC_DEFINE([SILC_SMP], [], [SILC_SMP]), [],
+ AC_DEFINE([SILC_SMP], [], [SILC_SMP]))
cpu_i386=false
cpu_i486=false
cpu_i586=false
AC_C_INLINE
AC_C_CONST
+# Set some compiler options based on CPU
+if test x$x_have_cpu_sse2 = xtrue; then
+ SILC_ADD_CFLAGS(-msse2)
+fi
+if test x$x_have_cpu_sse3 = xtrue; then
+ SILC_ADD_CFLAGS(-msse3)
+fi
+if test x$x_have_cpu_ssse3 = xtrue; then
+ SILC_ADD_CFLAGS(-mssse3)
+fi
+
__SILC_HAVE_PTHREAD=""
__SILC_HAVE_SIM=""
__SILC_ENABLE_DEBUG=""
#
# Function to check if system has SMP kernel.
-# Usage: SILC_SYSTEM_IS_SMP([ACTION-IF-FOUND] [, ACTION-IF-NOT-FOUND])
+#
+# Usage: SILC_SYSTEM_IS_SMP([ACTION-IF-FOUND] [, ACTION-IF-NOT-FOUND]
+# [, ACTION-IF-NOT-DETECTED])
+#
+# The ACTION-IF-NOT-DETECTED is called if we could not detect whether or
+# not the system is SMP.
+#
+# x_is_smp variable is set to true or false as a result for calling this
+# function. Caller may use the variable to check for the result in the
+# code.
+#
AC_DEFUN([SILC_SYSTEM_IS_SMP],
[
AC_MSG_CHECKING(whether system has SMP kernel)
+ x_is_smp=false
case "$target" in
*-*-linux*)
if test $cpucount -gt 1; then
AC_DEFINE([SILC_SMP], [], [SILC_SMP])
AC_MSG_RESULT(yes)
+ x_is_smp=true
ifelse([$1], , :, [$1])
else
AC_MSG_RESULT(no)
*-*-*bsd*)
# BSDs can have SMP info in sysctl 'kern.smp.cpus' variable
- cpucount=`/sbin/sysctl kern.smp.cpus 2> /dev/null | \
- cut -d'=' -f2 | cut -d' ' -f2`
+ sysctl="sysctl -n kern.smp.cpus"
+ cpucount=`(/sbin/$sysctl 2> /dev/null || \
+ /usr/sbin/$sysctl 2> /dev/null || echo -n 0)`
if test $cpucount -gt 1; then
AC_DEFINE([SILC_SMP], [], [SILC_SMP])
AC_MSG_RESULT(yes)
+ x_is_smp=true
ifelse([$1], , :, [$1])
else
AC_MSG_RESULT(no)
;;
*)
- AC_MSG_RESULT(no)
- ifelse([$2], , :, [$2])
+ AC_MSG_RESULT(cannot detect on this system)
+ ifelse([$3], , :, [$3])
;;
esac
])
# Function to check for CPU feature flags.
+#
# Usage: SILC_CPU_FLAG(flag [, ACTION-IF-FOUND] [, ACTION-IF-NOT-FOUND])
+#
+# x_have_cpu_<flag> variable is set to true or false value as a result for
+# calling this function for the <flag>. Caller may use the variable to
+# check the result in the code.
+#
AC_DEFUN([SILC_CPU_FLAG],
[
AC_MSG_CHECKING(whether CPU supports $1)
+ x_have_cpu_$1=false
case "$target" in
*-*-linux*)
ifelse([$3], , :, [$3])
else
AC_MSG_RESULT(yes)
+ x_have_cpu_$1=true
ifelse([$2], , :, [$2])
fi
else
ifelse([$3], , :, [$3])
else
AC_MSG_RESULT(yes)
+ x_have_cpu_$1=true
ifelse([$2], , :, [$2])
fi
;;
*)
- AC_MSG_RESULT(no)
+ AC_MSG_RESULT(no, cannot detect on this system)
ifelse([$3], , :, [$3])
;;
esac
])
-# Function to check if compiler flag works
+# Function to check if compiler option works with the compiler. If you
+# want the option added to some other than CFLAGS variable use the
+# SILC_ADD_CC_FLAGS which supports to specifiable destination variable.
+#
# Usage: SILC_ADD_CFLAGS(FLAGS, [ACTION-IF-FAILED])
+#
AC_DEFUN([SILC_ADD_CFLAGS],
[ tmp_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $1"
unset tmp_CFLAGS
])
-# Function to check if compiler flag works, destination specifiable
+# Function to check if compiler option works with the compiler,
+# destination variable specifiable
+#
# Usage: SILC_ADD_CC_FLAGS(VAR, FLAGS, [ACTION-IF-FAILED])
+#
AC_DEFUN([SILC_ADD_CC_FLAGS],
[ tmp_CFLAGS="$1_CFLAGS"
$1_CFLAGS="${$1_CFLAGS} $2"