diff --git a/configure b/configure index 5e1eeefc817..25930e3106d 100755 --- a/configure +++ b/configure @@ -829,6 +829,7 @@ with_coreaudio with_cups with_curses with_dbus +with_float_abi with_fontconfig with_freetype with_gettext @@ -2388,6 +2389,7 @@ Optional Packages: --without-cups do not use CUPS --without-curses do not use (n)curses --without-dbus do not use DBus (dynamic device support) + --with-float-abi=abi specify the ABI (soft|softfp|hard) for ARM platforms --without-fontconfig do not use fontconfig --without-freetype do not use the FreeType library --without-gettext do not use gettext @@ -3545,6 +3547,12 @@ if test "${with_dbus+set}" = set; then : fi +# Check whether --with-float-abi was given. +if test "${with_float_abi+set}" = set; then : + withval=$with_float_abi; +fi + + # Check whether --with-fontconfig was given. if test "${with_fontconfig+set}" = set; then : withval=$with_fontconfig; @@ -5263,12 +5271,20 @@ $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - CFLAGS="$CFLAGS -marm" - TARGETFLAGS="-marm" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports floating point" >&5 -$as_echo_n "checking whether $CC supports floating point... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + case $with_float_abi in + soft|softfp|hard) + float_abi=$with_float_abi ;; + *) + case $host_os in + *eabihf) + float_abi=hard ;; + *) + float_abi=softfp + saved_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -marm -mfloat-abi=$float_abi" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -mfloat-abi=$float_abi" >&5 +$as_echo_n "checking whether $CC supports -mfloat-abi=$float_abi... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -5285,10 +5301,18 @@ $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - as_fn_error $? "You need a target with floating point support to build Wine for ARM." "$LINENO" 5 + float_abi=soft + as_fn_append wine_warnings "|Floating point is not supported for this target. The resulting build won't be compatible with Windows ARM binaries." fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext + CFLAGS=$saved_CFLAGS + esac + ;; + esac + CFLAGS="$CFLAGS -marm -mfloat-abi=$float_abi" + TARGETFLAGS="-marm -mfloat-abi=$float_abi" + ;; i[3456789]86*) enable_win16=${enable_win16:-yes} diff --git a/configure.ac b/configure.ac index 8d9ec29bb81..00413bcba2d 100644 --- a/configure.ac +++ b/configure.ac @@ -43,6 +43,7 @@ AC_ARG_WITH(cups, AS_HELP_STRING([--without-cups],[do not use CUPS])) AC_ARG_WITH(curses, AS_HELP_STRING([--without-curses],[do not use (n)curses]), [if test "x$withval" = "xno"; then ac_cv_header_ncurses_h=no; ac_cv_header_curses_h=no; fi]) AC_ARG_WITH(dbus, AS_HELP_STRING([--without-dbus],[do not use DBus (dynamic device support)])) +AC_ARG_WITH(float-abi, AS_HELP_STRING([--with-float-abi=abi],[specify the ABI (soft|softfp|hard) for ARM platforms])) AC_ARG_WITH(fontconfig,AS_HELP_STRING([--without-fontconfig],[do not use fontconfig])) AC_ARG_WITH(freetype, AS_HELP_STRING([--without-freetype],[do not use the FreeType library])) AC_ARG_WITH(gettext, AS_HELP_STRING([--without-gettext],[do not use gettext])) @@ -177,13 +178,29 @@ case $host in [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_ERROR([You need a target with Thumb support to build Wine for ARM.])]) - CFLAGS="$CFLAGS -marm" - AC_SUBST(TARGETFLAGS,"-marm") - AC_MSG_CHECKING([whether $CC supports floating point]) - WINE_TRY_ASM_LINK(["vmrs r2,fpscr"],,, - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - AC_MSG_ERROR([You need a target with floating point support to build Wine for ARM.])]) + case $with_float_abi in + soft|softfp|hard) + float_abi=$with_float_abi ;; + *) + case $host_os in + *eabihf) + float_abi=hard ;; + *) + float_abi=softfp + saved_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -marm -mfloat-abi=$float_abi" + AC_MSG_CHECKING([whether $CC supports -mfloat-abi=$float_abi]) + WINE_TRY_ASM_LINK(["vmrs r2,fpscr"],,, + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + float_abi=soft + WINE_WARNING([Floating point is not supported for this target. The resulting build won't be compatible with Windows ARM binaries.])]) + CFLAGS=$saved_CFLAGS + esac + ;; + esac + CFLAGS="$CFLAGS -marm -mfloat-abi=$float_abi" + AC_SUBST(TARGETFLAGS,"-marm -mfloat-abi=$float_abi") ;; i[[3456789]]86*) enable_win16=${enable_win16:-yes}