summaryrefslogtreecommitdiff
path: root/rts/m4/ghc_adjustors_method.m4
diff options
context:
space:
mode:
Diffstat (limited to 'rts/m4/ghc_adjustors_method.m4')
-rw-r--r--rts/m4/ghc_adjustors_method.m449
1 files changed, 49 insertions, 0 deletions
diff --git a/rts/m4/ghc_adjustors_method.m4 b/rts/m4/ghc_adjustors_method.m4
new file mode 100644
index 0000000000..cae941a20e
--- /dev/null
+++ b/rts/m4/ghc_adjustors_method.m4
@@ -0,0 +1,49 @@
+dnl GHC_ADJUSTORS_METHOD(Platform)
+dnl --------------------------------------------------------------
+dnl Use libffi for adjustors?
+AC_DEFUN([GHC_ADJUSTORS_METHOD],
+[
+ case [$]{$1[Arch]} in
+ i386|x86_64)
+ # We have native adjustor support on these platforms
+ HaveNativeAdjustor=yes
+ ;;
+ *)
+ HaveNativeAdjustor=no
+ ;;
+ esac
+
+ AC_ARG_ENABLE(libffi-adjustors,
+ [AS_HELP_STRING(
+ [--enable-libffi-adjustors],
+ [Force use of libffi for adjustors, even on platforms which have support for more efficient, native adjustors.])],
+ UseLibffiForAdjustors=$enableval,
+ dnl do nothing
+ )
+
+ AC_MSG_CHECKING([whether to use libffi for adjustors])
+ if test "$UseLibffiForAdjustors" = "yes" ; then
+ # Use libffi is the user explicitly requested it
+ AdjustorType="libffi"
+ elif test "$HaveNativeAdjustor" = "yes"; then
+ # Otherwise if we have a native adjustor implementation use that
+ AdjustorType="native"
+ else
+ # If we don't have a native adjustor implementation then default to libffi
+ AdjustorType="libffi"
+ fi
+
+ case "$AdjustorType" in
+ libffi)
+ UseLibffiForAdjustors=YES
+ AC_MSG_RESULT([yes])
+ ;;
+ native)
+ UseLibffiForAdjustors=NO
+ AC_MSG_RESULT([no])
+ ;;
+ *)
+ AC_MSG_ERROR([Internal error: Invalid AdjustorType])
+ exit 1
+ esac
+])