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