I have a sample version if you really need make so complicated. In fact I don't think that we need make it like this. Do *not* use it directly.
diff --git a/configure.ac b/configure.ac index 1ca3974..f8c1b18 100644 --- a/configure.ac +++ b/configure.ac @@ -272,16 +272,32 @@ PIXMAN_CHECK_CFLAG([-xldscope=hidden], [dnl dnl =========================================================================== dnl Check for Loongson Multimedia Instructions -if test "x$LS_CFLAGS" = "x" ; then - LS_CFLAGS="-march=loongson2f" +# check CC default configuration +xserver_save_CFLAGS=$CFLAGS +CFLAGS=" $LS_CFLAGS $CFLAGS" +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ + int main () { + /* No -mloongson-mmi,-march=loongson3a and -march=loongson2f */ + #ifndef __mips_loongson_mmi + # error "No Loongson MMI support" + #else + /* Has Loongson MMI support */ + #endif + }]])], LS_CFLAGS_TMP="-mloongson-mmi", LS_CFLAGS_TMP="") +if test x"$LS_CFLAGS_TMP" = x"-mloongson-mmi";then + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ + int main () { + #ifdef _MIPS_ARCH_LOONGSON2F + /* Loongson 2F */ + #else + #error "Loongson 3A" + #endif + }]])], LS_CFLAGS_TMP="-march=loongson2f", LS_CFLAGS_TMP="-mloongson-mmi") fi -have_loongson_mmi=no -AC_MSG_CHECKING(whether to use Loongson MMI assembler) +AC_MSG_CHECKING(whether to enable Loongson MMI) -xserver_save_CFLAGS=$CFLAGS -CFLAGS=" $LS_CFLAGS $CFLAGS -I$srcdir" -AC_LINK_IFELSE([AC_LANG_SOURCE([[ +read -d '' tmp_src << EOF #ifndef __mips_loongson_vector_rev #error "Loongson Multimedia Instructions are only available on Loongson" #endif @@ -292,35 +308,90 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([[ int main () { union { __m64 v; - char c[8]; + char c[[8]]; // autoconf will strip one pair of [], it is not typo } a = { .c = {1, 2, 3, 4, 5, 6, 7, 8} }; int b = 4; __m64 c = _mm_srli_pi16 (a.v, b); return 0; -}]])], have_loongson_mmi=yes) +} +EOF +CFLAGS="$xserver_save_CFLAGS -I$srcdir -march=loongson2f" +AC_LINK_IFELSE([AC_LANG_SOURCE([[$tmp_src]])], cc_support_mmi_2f=yes) +CFLAGS="$xserver_save_CFLAGS -I$srcdir -mloongson-mmi" +AC_LINK_IFELSE([AC_LANG_SOURCE([[$tmp_src]])], cc_support_mmi_3a=yes) CFLAGS=$xserver_save_CFLAGS +# user may disable MMI by --disable-loongson-mmi even compiler supports it by default +# or LS_CFLAGS for MMI is given AC_ARG_ENABLE(loongson-mmi, [AC_HELP_STRING([--disable-loongson-mmi], [disable Loongson MMI fast paths])], [enable_loongson_mmi=$enableval], [enable_loongson_mmi=auto]) -if test $enable_loongson_mmi = no ; then - have_loongson_mmi=disabled +if test "x$enable_loongson_mmi" != xauto && \ + test "x$enable_loongson_mmi" != xyes && \ + test "x$enable_loongson_mmi" != xno && \ + test "x$enable_loongson_mmi" != x2f && \ + test "x$enable_loongson_mmi" != x3a;then + AC_MSG_ERROR([--enable-loongson-mmi only support value yes/no/auto/2f/3a]) fi -if test $have_loongson_mmi = yes ; then - AC_DEFINE(USE_LOONGSON_MMI, 1, [use Loongson Multimedia Instructions]) +if test "x$enable_loongson_mmi" = x2f && test x"$cc_support_mmi_2f" != x"yes"; then + AC_MSG_ERROR([MMI 2F mode is requested while not supported by CC]) +elif test x"$enable_loongson_mmi" = x2f && test x"$cc_support_mmi_2f" = x"yes"; then + LS_CFLAGS="$LS_CFLAGS -march=loongson2f" +elif test x"$enable_loongson_mmi" = x3a && test x"$cc_support_mmi_3a" != x"yes"; then + AC_MSG_ERROR([MMI 3A mode is requested while not supported by CC]) +elif test x"$enable_loongson_mmi" = x3a && test x"$cc_support_mmi_3a" = x"yes"; then + LS_CFLAGS="$LS_CFLAGS -mloongson-mmi" +elif test x"$enable_loongson_mmi" = xno ; then + if test x"$LS_CFLAGS_TMP" = x"-mloongson-mmi";then + LS_CFLAGS="$LS_CFLAGS -mno-loongson-mmi" + elif test x"$LS_CFLAGS_TMP" = x"-mmarch=loongson2f";then + LS_CFLAGS="$LS_CFLAGS -march=mips3" + fi +elif test x"$enable_loongson_mmi" = xyes && test x"$cc_support_mmi_2f" != x"yes" && test x"$cc_support_mmi_3a" != x"yes"; then + AC_MSG_ERROR([MMI is required while not supported by CC]) +elif test x"$enable_loongson_mmi" = xyes && test x"$LS_CFLAGS_TMP" = x"" && test x"$cc_support_mmi_3a" = x"yes"; then + # we prefer 3A if gcc is not configured to support MMI by default, while --enable-loongson-mmi is given + enable_loongson_mmi=3a + LS_CFLAGS="$LS_CFLAGS -mloongson-mmi" +elif test x"$enable_loongson_mmi" = xyes && test x"$LS_CFLAGS_TMP" = x"" && test x"$cc_support_mmi_2f" = x"yes"; then + enable_loongson_mmi=2f + LS_CFLAGS="$LS_CFLAGS -march=loongson2f" +elif test x"$enable_loongson_mmi" = xyes && test x"$LS_CFLAGS_TMP" = x"-mloongson-mmi" && test x"$cc_support_mmi_3a" = x"yes"; then + enable_loongson_mmi=3a + LS_CFLAGS="$LS_CFLAGS -mloongson-mmi" +elif test x"$enable_loongson_mmi" = xyes && test x"$LS_CFLAGS_TMP" = x"-mloongson-mmi" && test x"$cc_support_mmi_3a" != x"yes"; then + AC_MSG_ERROR([CC error: it claims support 3A MMI, while in fact not]) +elif test x"$enable_loongson_mmi" = xyes && test x"$LS_CFLAGS_TMP" = x"-march=loongson2f" && test x"$cc_support_mmi_2f" = x"yes"; then + enable_loongson_mmi=2f + LS_CFLAGS="$LS_CFLAGS -march=loongson2f" +elif test x"$enable_loongson_mmi" = xyes && test x"$LS_CFLAGS_TMP" = x"-march=loongson2f" && test x"$cc_support_mmi_2f" != x"yes"; then + AC_MSG_ERROR([CC error: it claims support 2F MMI, while in fact not]) +elif test x"$enable_loongson_mmi" = xauto && test x"$LS_CFLAGS_TMP" = x"-mloongson-mmi" && test x"$cc_support_mmi_3a" = x"yes"; then + enable_loongson_mmi=3a + LS_CFLAGS="$LS_CFLAGS -mloongson-mmi" +elif test x"$enable_loongson_mmi" = xauto && test x"$LS_CFLAGS_TMP" = x"-mloongson-mmi" && test x"$cc_support_mmi_3a" != x"yes"; then + AC_MSG_ERROR([CC error: it claims support 3A MMI, while in fact not]) +elif test x"$enable_loongson_mmi" = xauto && test x"$LS_CFLAGS_TMP" = x"-march=loongson2f" && test x"$cc_support_mmi_2f" = x"yes"; then + enable_loongson_mmi=2f + LS_CFLAGS="$LS_CFLAGS -march=loongson2f" +elif test x"$enable_loongson_mmi" = xauto && test x"$LS_CFLAGS_TMP" = x"-march=loongson2f" && test x"$cc_support_mmi_2f" != x"yes"; then + AC_MSG_ERROR([CC error: it claims support 2F MMI, while in fact not]) +elif test x"$enable_loongson_mmi" = xauto; then + # no LS_CFLAGS_TMP set: gcc is configured not use MMI by default and CFLAGS doesn't have options about MMI + enable_loongson_mmi=no else - LS_CFLAGS= + enable_loongson_mmi=no fi -AC_MSG_RESULT($have_loongson_mmi) -if test $enable_loongson_mmi = yes && test $have_loongson_mmi = no ; then - AC_MSG_ERROR([Loongson MMI not detected]) +if test x"$enable_loongson_mmi" != xno; then + AC_DEFINE(USE_LOONGSON_MMI, 1, [use Loongson Multimedia Instructions]) fi +AC_MSG_RESULT($enable_loongson_mmi) -AM_CONDITIONAL(USE_LOONGSON_MMI, test $have_loongson_mmi = yes) +AM_CONDITIONAL(USE_LOONGSON_MMI, test x"$enable_loongson_mmi" != xno) dnl =========================================================================== dnl Check for MMX _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pixman