Home | History | Annotate | Download | only in libjpeg-turbo
      1 # AC_PROG_NASM
      2 # --------------------------
      3 # Check that NASM exists and determine flags
      4 AC_DEFUN([AC_PROG_NASM],[
      5 
      6 AC_ARG_VAR(NASM, [NASM command (used to build the x86/x86-64 SIMD code)])
      7 if test "x$NASM" = "x"; then
      8   AC_CHECK_PROGS(NASM, [nasm nasmw yasm])
      9   test -z "$NASM" && AC_MSG_ERROR([no nasm (Netwide Assembler) found])
     10 fi
     11 
     12 AC_MSG_CHECKING([for object file format of host system])
     13 case "$host_os" in
     14   cygwin* | mingw* | pw32* | interix*)
     15     case "$host_cpu" in
     16       x86_64)
     17         objfmt='Win64-COFF'
     18         ;;
     19       *)
     20         objfmt='Win32-COFF'
     21         ;;
     22     esac
     23   ;;
     24   msdosdjgpp* | go32*)
     25     objfmt='COFF'
     26   ;;
     27   os2-emx*)			# not tested
     28     objfmt='MSOMF'		# obj
     29   ;;
     30   linux*coff* | linux*oldld*)
     31     objfmt='COFF'		# ???
     32   ;;
     33   linux*aout*)
     34     objfmt='a.out'
     35   ;;
     36   linux*)
     37     case "$host_cpu" in
     38       x86_64)
     39         objfmt='ELF64'
     40         ;;
     41       *)
     42         objfmt='ELF'
     43         ;;
     44     esac
     45   ;;
     46   kfreebsd* | freebsd* | netbsd* | openbsd*)
     47     if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
     48       objfmt='BSD-a.out'
     49     else
     50       case "$host_cpu" in
     51         x86_64 | amd64)
     52           objfmt='ELF64'
     53           ;;
     54         *)
     55           objfmt='ELF'
     56           ;;
     57       esac
     58     fi
     59   ;;
     60   solaris* | sunos* | sysv* | sco*)
     61     case "$host_cpu" in
     62       x86_64)
     63         objfmt='ELF64'
     64         ;;
     65       *)
     66         objfmt='ELF'
     67         ;;
     68     esac
     69   ;;
     70   darwin* | rhapsody* | nextstep* | openstep* | macos*)
     71     case "$host_cpu" in
     72       x86_64)
     73         objfmt='Mach-O64'
     74         ;;
     75       *)
     76         objfmt='Mach-O'
     77         ;;
     78     esac
     79   ;;
     80   *)
     81     objfmt='ELF ?'
     82   ;;
     83 esac
     84 
     85 AC_MSG_RESULT([$objfmt])
     86 if test "$objfmt" = 'ELF ?'; then
     87   objfmt='ELF'
     88   AC_MSG_WARN([unexpected host system. assumed that the format is $objfmt.])
     89 fi
     90 
     91 AC_MSG_CHECKING([for object file format specifier (NAFLAGS) ])
     92 case "$objfmt" in
     93   MSOMF)      NAFLAGS='-fobj -DOBJ32';;
     94   Win32-COFF) NAFLAGS='-fwin32 -DWIN32';;
     95   Win64-COFF) NAFLAGS='-fwin64 -DWIN64 -D__x86_64__';;
     96   COFF)       NAFLAGS='-fcoff -DCOFF';;
     97   a.out)      NAFLAGS='-faout -DAOUT';;
     98   BSD-a.out)  NAFLAGS='-faoutb -DAOUT';;
     99   ELF)        NAFLAGS='-felf -DELF';;
    100   ELF64)      NAFLAGS='-felf64 -DELF -D__x86_64__';;
    101   RDF)        NAFLAGS='-frdf -DRDF';;
    102   Mach-O)     NAFLAGS='-fmacho -DMACHO';;
    103   Mach-O64)   NAFLAGS='-fmacho64 -DMACHO -D__x86_64__';;
    104 esac
    105 AC_MSG_RESULT([$NAFLAGS])
    106 AC_SUBST([NAFLAGS])
    107 
    108 AC_MSG_CHECKING([whether the assembler ($NASM $NAFLAGS) works])
    109 cat > conftest.asm <<EOF
    110 [%line __oline__ "configure"
    111         section .text
    112         global  _main,main
    113 _main:
    114 main:   xor     eax,eax
    115         ret
    116 ]EOF
    117 try_nasm='$NASM $NAFLAGS -o conftest.o conftest.asm'
    118 if AC_TRY_EVAL(try_nasm) && test -s conftest.o; then
    119   AC_MSG_RESULT(yes)
    120 else
    121   echo "configure: failed program was:" >&AC_FD_CC
    122   cat conftest.asm >&AC_FD_CC
    123   rm -rf conftest*
    124   AC_MSG_RESULT(no)
    125   AC_MSG_ERROR([installation or configuration problem: assembler cannot create object files.])
    126 fi
    127 
    128 AC_MSG_CHECKING([whether the linker accepts assembler output])
    129 try_nasm='${CC-cc} -o conftest${ac_exeext} $LDFLAGS conftest.o $LIBS 1>&AC_FD_CC'
    130 if AC_TRY_EVAL(try_nasm) && test -s conftest${ac_exeext}; then
    131   rm -rf conftest*
    132   AC_MSG_RESULT(yes)
    133 else
    134   rm -rf conftest*
    135   AC_MSG_RESULT(no)
    136   AC_MSG_ERROR([configuration problem: maybe object file format mismatch.])
    137 fi
    138 
    139 ])
    140 
    141 # AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE
    142 # --------------------------
    143 # Test whether the assembler is suitable and supports NEON instructions
    144 AC_DEFUN([AC_CHECK_COMPATIBLE_ARM_ASSEMBLER_IFELSE],[
    145   ac_good_gnu_arm_assembler=no
    146   ac_save_CC="$CC"
    147   ac_save_CFLAGS="$CFLAGS"
    148   CFLAGS="$CCASFLAGS -x assembler-with-cpp"
    149   CC="$CCAS"
    150   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    151     .text
    152     .fpu neon
    153     .arch armv7a
    154     .object_arch armv4
    155     .arm
    156     pld [r0]
    157     vmovn.u16 d0, q0]])], ac_good_gnu_arm_assembler=yes)
    158 
    159   ac_use_gas_preprocessor=no
    160   if test "x$ac_good_gnu_arm_assembler" = "xno" ; then
    161     CC="gas-preprocessor.pl $CCAS"
    162     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    163       .text
    164       .fpu neon
    165       .arch armv7a
    166       .object_arch armv4
    167       .arm
    168       pld [r0]
    169       vmovn.u16 d0, q0]])], ac_use_gas_preprocessor=yes)
    170   fi
    171   CFLAGS="$ac_save_CFLAGS"
    172   CC="$ac_save_CC"
    173 
    174   if test "x$ac_use_gas_preprocessor" = "xyes" ; then
    175     CCAS="gas-preprocessor.pl $CCAS"
    176     AC_SUBST([CCAS])
    177     ac_good_gnu_arm_assembler=yes
    178   fi
    179 
    180   if test "x$ac_good_gnu_arm_assembler" = "xyes" ; then
    181     $1
    182   else
    183     $2
    184   fi
    185 ])
    186 
    187 # AC_CHECK_COMPATIBLE_MIPSEL_ASSEMBLER_IFELSE
    188 # --------------------------
    189 # Test whether the assembler is suitable and supports MIPS instructions
    190 AC_DEFUN([AC_CHECK_COMPATIBLE_MIPS_ASSEMBLER_IFELSE],[
    191   have_mips_dspr2=no
    192   ac_save_CFLAGS="$CFLAGS"
    193   CFLAGS="$CCASFLAGS -mdspr2"
    194 
    195   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    196 
    197   int main ()
    198   {
    199     int c = 0, a = 0, b = 0;
    200     __asm__ __volatile__ (
    201         "precr.qb.ph %[c], %[a], %[b]          \n\t"
    202         : [c] "=r" (c)
    203         : [a] "r" (a), [b] "r" (b)
    204     );
    205     return c;
    206   }
    207   ]])], have_mips_dspr2=yes)
    208   CFLAGS=$ac_save_CFLAGS
    209 
    210   if test "x$have_mips_dspr2" = "xyes" ; then
    211     $1
    212   else
    213     $2
    214   fi
    215 ])
    216 
    217 AC_DEFUN([AC_CHECK_COMPATIBLE_ARM64_ASSEMBLER_IFELSE],[
    218   ac_good_gnu_arm_assembler=no
    219   ac_save_CC="$CC"
    220   ac_save_CFLAGS="$CFLAGS"
    221   CFLAGS="$CCASFLAGS -x assembler-with-cpp"
    222   CC="$CCAS"
    223   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    224     .text
    225     MYVAR .req x0
    226     movi v0.16b, #100
    227     mov MYVAR, #100
    228     .unreq MYVAR]])], ac_good_gnu_arm_assembler=yes)
    229 
    230   ac_use_gas_preprocessor=no
    231   if test "x$ac_good_gnu_arm_assembler" = "xno" ; then
    232     CC="gas-preprocessor.pl $CCAS"
    233     AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    234       .text
    235       MYVAR .req x0
    236       movi v0.16b, #100
    237       mov MYVAR, #100
    238       .unreq MYVAR]])], ac_use_gas_preprocessor=yes)
    239   fi
    240   CFLAGS="$ac_save_CFLAGS"
    241   CC="$ac_save_CC"
    242 
    243   if test "x$ac_use_gas_preprocessor" = "xyes" ; then
    244     CCAS="gas-preprocessor.pl $CCAS"
    245     AC_SUBST([CCAS])
    246     ac_good_gnu_arm_assembler=yes
    247   fi
    248 
    249   if test "x$ac_good_gnu_arm_assembler" = "xyes" ; then
    250     $1
    251   else
    252     $2
    253   fi
    254 ])
    255 
    256 # AC_CHECK_ALTIVEC
    257 # ----------------
    258 # Test whether AltiVec intrinsics are supported
    259 AC_DEFUN([AC_CHECK_ALTIVEC],[
    260   ac_save_CFLAGS="$CFLAGS"
    261   CFLAGS="$CFLAGS -maltivec"
    262   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
    263     #include <altivec.h>
    264     int main(void) {
    265       __vector int vi = { 0, 0, 0, 0 };
    266       int i[4];
    267       vec_st(vi, 0, i);
    268       return i[0];
    269     }]])], ac_has_altivec=yes)
    270   CFLAGS="$ac_save_CFLAGS"
    271   if test "x$ac_has_altivec" = "xyes" ; then
    272     $1
    273   else
    274     $2
    275   fi
    276 ])
    277 
    278 AC_DEFUN([AC_NO_SIMD],[
    279   AC_MSG_RESULT([no ("$1")])
    280   with_simd=no;
    281   if test "x${require_simd}" = "xyes"; then
    282     AC_MSG_ERROR([SIMD support not available for this CPU.])
    283   else
    284     AC_MSG_WARN([SIMD support not available for this CPU.  Performance will\
    285  suffer.])
    286   fi
    287 ])
    288