Index: acinclude.m4 |
diff --git a/acinclude.m4 b/acinclude.m4 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2c907620fee080a78730d1999b70dcc822548a4f |
--- /dev/null |
+++ b/acinclude.m4 |
@@ -0,0 +1,254 @@ |
+# AC_PROG_NASM |
+# -------------------------- |
+# Check that NASM exists and determine flags |
+AC_DEFUN([AC_PROG_NASM],[ |
+ |
+AC_ARG_VAR(NASM, [NASM command (used to build the x86/x86-64 SIMD code)]) |
+if test "x$NASM" = "x"; then |
+ AC_CHECK_PROGS(NASM, [nasm nasmw yasm]) |
+ test -z "$NASM" && AC_MSG_ERROR([no nasm (Netwide Assembler) found]) |
+fi |
+ |
+AC_MSG_CHECKING([for object file format of host system]) |
+case "$host_os" in |
+ cygwin* | mingw* | pw32* | interix*) |
+ case "$host_cpu" in |
+ x86_64) |
+ objfmt='Win64-COFF' |
+ ;; |
+ *) |
+ objfmt='Win32-COFF' |
+ ;; |
+ esac |
+ ;; |
+ msdosdjgpp* | go32*) |
+ objfmt='COFF' |
+ ;; |
+ os2-emx*) # not tested |
+ objfmt='MSOMF' # obj |
+ ;; |
+ linux*coff* | linux*oldld*) |
+ objfmt='COFF' # ??? |
+ ;; |
+ linux*aout*) |
+ objfmt='a.out' |
+ ;; |
+ linux*) |
+ case "$host_cpu" in |
+ x86_64) |
+ objfmt='ELF64' |
+ ;; |
+ *) |
+ objfmt='ELF' |
+ ;; |
+ esac |
+ ;; |
+ kfreebsd* | freebsd* | netbsd* | openbsd*) |
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then |
+ objfmt='BSD-a.out' |
+ else |
+ case "$host_cpu" in |
+ x86_64 | amd64) |
+ objfmt='ELF64' |
+ ;; |
+ *) |
+ objfmt='ELF' |
+ ;; |
+ esac |
+ fi |
+ ;; |
+ solaris* | sunos* | sysv* | sco*) |
+ case "$host_cpu" in |
+ x86_64) |
+ objfmt='ELF64' |
+ ;; |
+ *) |
+ objfmt='ELF' |
+ ;; |
+ esac |
+ ;; |
+ darwin* | rhapsody* | nextstep* | openstep* | macos*) |
+ case "$host_cpu" in |
+ x86_64) |
+ objfmt='Mach-O64' |
+ ;; |
+ *) |
+ objfmt='Mach-O' |
+ ;; |
+ esac |
+ ;; |
+ *) |
+ objfmt='ELF ?' |
+ ;; |
+esac |
+ |
+AC_MSG_RESULT([$objfmt]) |
+if test "$objfmt" = 'ELF ?'; then |
+ objfmt='ELF' |
+ AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.]) |
+fi |
+ |
+AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ]) |
+case "$objfmt" in |
+ MSOMF) NAFLAGS='-fobj -DOBJ32';; |
+ Win32-COFF) NAFLAGS='-fwin32 -DWIN32';; |
+ Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__';; |
+ COFF) NAFLAGS='-fcoff -DCOFF';; |
+ a.out) NAFLAGS='-faout -DAOUT';; |
+ BSD-a.out) NAFLAGS='-faoutb -DAOUT';; |
+ ELF) NAFLAGS='-felf -DELF';; |
+ ELF64) NAFLAGS='-felf64 -DELF -D__x86_64__';; |
+ RDF) NAFLAGS='-frdf -DRDF';; |
+ Mach-O) NAFLAGS='-fmacho -DMACHO';; |
+ Mach-O64) NAFLAGS='-fmacho64 -DMACHO -D__x86_64__';; |
+esac |
+AC_MSG_RESULT([$NAFLAGS]) |
+AC_SUBST([NAFLAGS]) |
+ |
+AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works]) |
+cat > conftest.asm <<EOF |
+[%line __oline__ "configure" |
+ section .text |
+ global _main,main |
+_main: |
+main: xor eax,eax |
+ ret |
+]EOF |
+try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm' |
+if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then |
+ AC_MSG_RESULT(yes) |
+else |
+ echo "configure: failed program was:" >&AC_FD_CC |
+ cat conftest.asm >&AC_FD_CC |
+ rm -rf conftest* |
+ AC_MSG_RESULT(no) |
+ AC_MSG_ERROR([installation or configuration problem: assembler cannot create object files.]) |
+fi |
+ |
+AC_MSG_CHECKING([whether the linker accepts assembler output]) |
+try_nasm='${CC-cc} -o conftest${ac_exeext} $LDFLAGS conftest.o $LIBS 1>&AC_FD_CC' |
+if AC_TRY_EVAL(try_nasm) && test -s conftest${ac_exeext}; then |
+ rm -rf conftest* |
+ AC_MSG_RESULT(yes) |
+else |
+ rm -rf conftest* |
+ AC_MSG_RESULT(no) |
+ AC_MSG_ERROR([configuration problem: maybe object file format mismatch.]) |
+fi |
+ |
+]) |
+ |
+# AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE |
+# -------------------------- |
+# Test whether the assembler is suitable and supports NEON instructions |
+AC_DEFUN([AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE],[ |
+ ac_good_gnu_arm_assembler=no |
+ ac_save_CC="$CC" |
+ ac_save_CFLAGS="$CFLAGS" |
+ CFLAGS="$CCASFLAGS -x assembler-with-cpp" |
+ CC="$CCAS" |
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ |
+ .text |
+ .fpu neon |
+ .arch armv7a |
+ .object_arch armv4 |
+ .arm |
+ pld [r0] |
+ vmovn.u16 d0, q0]])], ac_good_gnu_arm_assembler=yes) |
+ |
+ ac_use_gas_preprocessor=no |
+ if test "x$ac_good_gnu_arm_assembler" = "xno" ; then |
+ CC="gas-preprocessor.pl $CCAS" |
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ |
+ .text |
+ .fpu neon |
+ .arch armv7a |
+ .object_arch armv4 |
+ .arm |
+ pld [r0] |
+ vmovn.u16 d0, q0]])], ac_use_gas_preprocessor=yes) |
+ fi |
+ CFLAGS="$ac_save_CFLAGS" |
+ CC="$ac_save_CC" |
+ |
+ if test "x$ac_use_gas_preprocessor" = "xyes" ; then |
+ CCAS="gas-preprocessor.pl $CCAS" |
+ AC_SUBST([CCAS]) |
+ ac_good_gnu_arm_assembler=yes |
+ fi |
+ |
+ if test "x$ac_good_gnu_arm_assembler" = "xyes" ; then |
+ $1 |
+ else |
+ $2 |
+ fi |
+]) |
+ |
+# AC_CHECK_COMPATIBLE_MIPSEL_ASSEMBLER_IFELSE |
+# -------------------------- |
+# Test whether the assembler is suitable and supports MIPS instructions |
+AC_DEFUN([AC_CHECK_COMPATIBLE_MIPS_ASSEMBLER_IFELSE],[ |
+ have_mips_dspr2=no |
+ ac_save_CFLAGS="$CFLAGS" |
+ CFLAGS="$CCASFLAGS -mdspr2" |
+ |
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ |
+ |
+ int main () |
+ { |
+ int c = 0, a = 0, b = 0; |
+ __asm__ __volatile__ ( |
+ "precr.qb.ph %[c], %[a], %[b] \n\t" |
+ : [c] "=r" (c) |
+ : [a] "r" (a), [b] "r" (b) |
+ ); |
+ return c; |
+ } |
+ ]])], have_mips_dspr2=yes) |
+ CFLAGS=$ac_save_CFLAGS |
+ |
+ if test "x$have_mips_dspr2" = "xyes" ; then |
+ $1 |
+ else |
+ $2 |
+ fi |
+]) |
+ |
+AC_DEFUN([AC_CHECK_COMPATIBLE_ARM64_ASSEMBLER_IFELSE],[ |
+ ac_good_gnu_arm_assembler=no |
+ ac_save_CC="$CC" |
+ ac_save_CFLAGS="$CFLAGS" |
+ CFLAGS="$CCASFLAGS -x assembler-with-cpp" |
+ CC="$CCAS" |
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ |
+ .text |
+ MYVAR .req x0 |
+ movi v0.16b, #100 |
+ mov MYVAR, #100 |
+ .unreq MYVAR]])], ac_good_gnu_arm_assembler=yes) |
+ |
+ ac_use_gas_preprocessor=no |
+ if test "x$ac_good_gnu_arm_assembler" = "xno" ; then |
+ CC="gas-preprocessor.pl $CCAS" |
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ |
+ .text |
+ MYVAR .req x0 |
+ movi v0.16b, #100 |
+ mov MYVAR, #100 |
+ .unreq MYVAR]])], ac_use_gas_preprocessor=yes) |
+ fi |
+ CFLAGS="$ac_save_CFLAGS" |
+ CC="$ac_save_CC" |
+ |
+ if test "x$ac_use_gas_preprocessor" = "xyes" ; then |
+ CCAS="gas-preprocessor.pl $CCAS" |
+ AC_SUBST([CCAS]) |
+ ac_good_gnu_arm_assembler=yes |
+ fi |
+ |
+ if test "x$ac_good_gnu_arm_assembler" = "xyes" ; then |
+ $1 |
+ else |
+ $2 |
+ fi |
+]) |