Re-visit SHA-1 code
[wimlib] / m4 / nasm.m4
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_MIPSEL_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 ])