1 dnl Process this file with autoconf to produce a configure script.
4 dnl Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
6 dnl This file is part of the GNU MP Library.
8 dnl The GNU MP Library is free software; you can redistribute it and/or modify
9 dnl it under the terms of the GNU Lesser General Public License as published
10 dnl by the Free Software Foundation; either version 2.1 of the License, or (at
11 dnl your option) any later version.
13 dnl The GNU MP Library is distributed in the hope that it will be useful, but
14 dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 dnl License for more details.
18 dnl You should have received a copy of the GNU Lesser General Public License
19 dnl along with the GNU MP Library; see the file COPYING.LIB. If not, write to
20 dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
21 dnl MA 02111-1307, USA.
24 AC_REVISION($Revision: 1.6 $)dnl
32 AM_INIT_AUTOMAKE(gmp, GMP_VERSION)
33 AM_CONFIG_HEADER(config.h:config.in)
41 AC_HELP_STRING([--enable-assert],[enable ASSERT checking [default=no]]),
42 [case "${enableval}" in
44 *) AC_MSG_ERROR([bad value ${enableval} for --enable-assert, need yes or no]) ;;
48 if test "$enable_assert" = "yes"; then
49 AC_DEFINE(WANT_ASSERT,1,
50 [./configure --enable-assert option, to enable some ASSERT()s])
55 AC_HELP_STRING([--enable-alloca],[use alloca for temp space [default=yes]]),
56 [case "${enableval}" in
58 *) AC_MSG_ERROR([bad value ${enableval} for --enable-alloca, need yes or no]) ;;
62 if test "$enable_alloca" = "no"; then
63 AC_DEFINE(USE_STACK_ALLOC,1,
64 [./configure --disable-alloca option, to use stack-alloc.c, not alloca])
69 AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [default=no]]),
70 [case "${enableval}" in
72 *) AC_MSG_ERROR([bad value ${enableval} for --enable-fft, need yes or no]) ;;
76 if test "$enable_fft" = "yes"; then
78 [./configure --enable-fft option, to enable FFTs for multiplication])
83 AC_HELP_STRING([--enable-mpbsd],[build Berkley MP compatibility library [default=no]]),
84 [case "${enableval}" in
86 *) AC_MSG_ERROR([bad value ${enableval} for --enable-mpbsd, need yes or no]) ;;
89 AM_CONDITIONAL(WANT_MPBSD, test "$enable_mpbsd" = "yes")
93 AC_HELP_STRING([--enable-mpfr],[build MPFR [default=no]]),
94 [case "${enableval}" in
96 *) AC_MSG_ERROR([bad value ${enableval} for --enable-mpfr, need yes or no]) ;;
99 AM_CONDITIONAL(WANT_MPFR, test "$enable_mpfr" = "yes")
102 dnl Switch on OS and determine what compiler to use.
104 dnl os_64bit Set to "yes" if OS is 64-bit capable.
105 dnl FIXME: Rename to `check_64bit_compiler'!
106 dnl cclist List of compilers, best first.
107 dnl gmp_cflags_{cc} Flags for compiler named {cc}.
108 dnl gmp_cflags64_{cc} Flags for compiler named {cc} for 64-bit code.
109 dnl gmp_optcflags_{cc} Optional compiler flags.
110 dnl gmp_xoptcflags_{cc} Exclusive optional compiler flags.
113 cclist="gcc cc" # FIXME: Prefer c89 to cc.
114 gmp_cflags_gcc="-g -O2"
115 gmp_cflags64_gcc="-g -O2"
122 # Don't perform any assembly syntax tests on this beast.
123 gmp_no_asm_syntax_testing=yes
125 gmp_cflags_cc="$gmp_cflags_cc -O"
128 flavour=`echo $target_cpu | sed 's/^alpha//g'`
129 if test -n "$flavour"; then
130 case $flavour in # compilers don't seem to understand `ev67' and such.
131 ev6? | ev7*) flavour=ev6;;
133 gmp_optcflags_gcc="-mcpu=$flavour"
134 # FIXME: We shouldn't fail fatally if none of these work, but that's
135 # how xoptcflags work and we don't have any other mechanism right now.
136 # Why do we need this here and not for alpha*-*-* below?
137 gmp_xoptcflags_gcc="-Wa,-arch,${flavour} -Wa,-m${flavour}"
138 gmp_optcflags_cc="-arch $flavour -tune $flavour"
143 flavour=`echo $target_cpu | sed 's/^alpha//g'`
144 if test -n "$flavour"; then
146 ev6? | ev7*) flavour=ev6;;
148 gmp_optcflags_gcc="-mcpu=$flavour"
151 # Cray vector machines. This must come after alpha* so that we can
152 # recognize present and future vector processors with a wildcard.
154 # Don't perform any assembly syntax tests on this beast.
155 gmp_no_asm_syntax_testing=yes
157 # Don't inherit default gmp_cflags_cc value; it comes with -g which
158 # disables all optimization on Cray vector systems
162 # AMD and Intel x86 configurations
163 [i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*])
164 # Rumour has it -O2 used to give worse register allocation than just -O.
165 gmp_cflags_gcc="-g -O -fomit-frame-pointer"
168 i386*-*-*) gmp_optcflags_gcc="-mcpu=i386 -march=i386";;
169 i486*-*-*) gmp_optcflags_gcc="-mcpu=i486 -march=i486";;
170 i586*-*-* | pentium-*-* | pentiummmx-*-*)
171 gmp_optcflags_gcc="-mcpu=pentium -march=pentium";;
173 # -march=pentiumpro not used because mpz/powm.c (swox cvs rev 1.4)
174 # tickles a bug in gcc 2.95.2 (believed fixed in 2.96).
175 [i686*-*-* | pentiumpro-*-* | pentium[23]-*-*])
176 gmp_optcflags_gcc="-mcpu=pentiumpro";;
178 k6*-*-*) gmp_optcflags_gcc="-mcpu=k6 -march=k6";;
180 # Athlon instruction costs are close to p6: 3 cycle load latency, 4-6
181 # cycle mul, 40 cycle div, pairable adc, ...
182 # FIXME: Change this when gcc gets something specific for Athlon.
183 # -march=pentiumpro not used, per i686 above.
184 athlon-*-*) gmp_optcflags_gcc="-mcpu=pentiumpro";;
189 [ultrasparc*-*-solaris2.[7-9] | sparcv9-*-solaris2.[7-9]])
191 gmp_cflags_gcc="$gmp_cflags_gcc -Wa,-xarch=v8plus"
192 gmp_xoptcflags_gcc="-mcpu=v9 -mcpu=v8 -mv8"
193 gmp_cflags64_gcc="$gmp_cflags64_gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9"
194 gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4"
195 gmp_cflags64_cc="-xtarget=native -xarch=v9 -xO4"
199 gmp_cflags64_gcc="$gmp_cflags64_gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9"
200 gmp_cflags_gcc="$gmp_cflags_gcc -m32"
201 gmp_xoptflags_gcc="-mcpu=ultrasparc -mvis"
203 ultrasparc*-*-* | sparcv9-*-*)
204 gmp_cflags_gcc="$gmp_cflags_gcc -Wa,-xarch=v8plus"
205 gmp_xoptcflags_gcc="-mcpu=v9 -mcpu=v8 -mv8"
206 gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4"
208 sparcv8*-*-solaris2.* | microsparc*-*-solaris2.*)
209 gmp_cflags_gcc="$gmp_cflags_gcc"
210 gmp_xoptcflags_gcc="-mcpu=v8 -mv8"
211 gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4"
213 sparcv8*-*-* | microsparc*-*-*) # SunOS, Linux, *BSD
215 gmp_cflags_gcc="$gmp_cflags_gcc"
216 gmp_xoptcflags_gcc="-mcpu=v8 -mv8"
217 gmp_cflags_acc="-g -O2 -cg92"
218 gmp_cflags_cc="-O2" # FIXME: Flag for v8?
220 supersparc*-*-solaris2.*)
221 gmp_cflags_gcc="$gmp_cflags_gcc -DSUPERSPARC"
222 gmp_xoptcflags_gcc="-mcpu=v8 -mv8"
223 gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4 -DSUPERSPARC"
225 supersparc*-*-*) # SunOS, Linux, *BSD
227 gmp_cflags_gcc="$gmp_cflags_gcc -DSUPERSPARC"
228 gmp_xoptcflags_gcc="-mcpu=v8 -mv8"
229 gmp_cflags_acc="-g -O2 -cg92 -DSUPERSPARC"
230 gmp_cflags_cc="-O2 -DSUPERSPARC" # FIXME: Flag for v8?
234 gmp_cflags_acc="-g -O2"
235 gmp_cflags_cc="-g -O2"
241 gmp_cflags_gcc="$gmp_cflags_gcc -maix64 -mpowerpc64"
242 gmp_cflags_xlc="-g -O2 -q64 -qtune=pwr3"
246 gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc"
247 gmp_cflags_xlc="$gmp_cflags_cc -qarch=ppc -O2"
251 gmp_cflags_gcc="$gmp_cflags_gcc -mpower"
252 gmp_cflags_xlc="$gmp_cflags_cc -qarch=pwr -O2"
255 gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc64"
256 AC_DEFINE(_LONG_LONG_LIMB) dnl FIXME: Remove.
259 gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc"
265 gmp_cflags64_gcc="-g -O2 -mabi=n32"
266 gmp_cflags64_cc="$gmp_cflags64_cc -O2 -n32"
269 # Motorola 68k family
271 gmp_cflags_gcc="-g -O -m88110" dnl FIXME: Use `-O2'?
274 gmp_cflags_gcc="$gmp_cflags_gcc -fomit-frame-pointer"
280 gmp_cflags_c89="$gmp_cflags_cc +O2"
281 gmp_cflags_cc="$gmp_cflags_cc +O2"
285 gmp_cflags_c89="+DD64 +O3"
286 gmp_cflags_cc="+DD64 +O3"
291 gmp_cflags64_gcc="$gmp_cflags64_gcc -mWHAT -D_LONG_LONG_LIMB"
292 # +O2 to cc triggers bug in mpz/powm.c (1.4)
293 gmp_cflags64_c89="+DA2.0 +e +O3 -D_LONG_LONG_LIMB"
294 gmp_cflags64_cc="+DA2.0 +e +O3 -D_LONG_LONG_LIMB"
295 gmp_cflags_c89="$gmp_cflags_cc +O2"
296 gmp_cflags_cc="$gmp_cflags_cc +O2"
301 gmp_cflags_gcc="$gmp_cflags_gcc -fomit-frame-pointer"
305 [f30[01]-fujitsu-sysv*])
307 gmp_cflags_vcc="-g" # FIXME: flags for vcc?
312 *-*-mingw32) gmp_cflags_gcc="$gmp_cflags_gcc -mno-cygwin";;
315 dnl Check for programs needed by macros for finding compiler.
316 dnl More programs are checked for below, when a compiler is found.
317 AC_PROG_NM dnl Macro from Libtool.
318 # nm on 64-bit AIX needs to know the object file format
325 # Save CFLAGS given on command line.
326 gmp_user_CFLAGS="$CFLAGS"
328 if test -z "$CC"; then
330 GMP_PROG_CC_FIND($cclist, $os_64bit)
332 # If 64-bit OS and we have a 64-bit compiler, use it.
333 if test -n "$os_64bit" && test -n "$CC64"; then
337 eval CFLAGS=\$gmp_cflags_$CC
340 # Try compiler flags that may work with only some compiler versions.
341 # gmp_optcflags: All or nothing.
342 eval optcflags=\$gmp_optcflags_$CC
343 if test -n "$optcflags"; then
344 CFLAGS_save="$CFLAGS"
345 CFLAGS="$CFLAGS $optcflags"
346 AC_MSG_CHECKING([whether $CC accepts $optcflags])
348 AC_TRY_COMPILER([int main(){return(0);}], optok, cross)
349 if test "$optok" = "yes"; then
353 CFLAGS="$CFLAGS_save"
356 # gmp_xoptcflags: First is best, one has to work.
357 eval xoptcflags=\$gmp_xoptcflags_$CC
358 if test -n "$xoptcflags"; then
360 for xopt in $xoptcflags; do
361 CFLAGS_save="$CFLAGS"
362 CFLAGS="$CFLAGS $xopt"
363 AC_MSG_CHECKING([whether $CC accepts $xopt])
365 AC_TRY_COMPILER([int main(){return(0);}], optok, cross)
366 if test "$optok" = "yes"; then
372 CFLAGS="$CFLAGS_save"
375 if test "$gmp_found" = "no"; then
376 echo ["$0: fatal: need a compiler that understands one of $xoptcflags"]
382 # Restore CFLAGS given on command line.
383 # FIXME: We've run through quite some unnecessary code looking for a
384 # nice compiler and working flags for it, just to spoil that with user
386 test -n "$gmp_user_CFLAGS" && CFLAGS="$gmp_user_CFLAGS"
388 # Select chosen compiler.
395 dnl Checks for programs.
396 dnl --------------------
401 AC_CHECK_PROG(AR, ar, ar)
402 # ar on AIX needs to know the object file format
408 dnl FIXME: Find good ld? /usr/ucb/ld on Solaris won't work.
410 dnl Checks for assembly syntax.
411 if test "$gmp_no_asm_syntax_testing" != "yes"; then
415 GMP_CHECK_ASM_LABEL_SUFFIX
418 GMP_CHECK_ASM_LSYM_PREFIX
420 GMP_CHECK_ASM_UNDERSCORE(underscore=yes, underscore=no)
421 GMP_CHECK_ASM_ALIGN_LOG(asm_align=log, asm_align=nolog)
424 dnl FIXME: Check for FPU and set `floating_point' appropriately.
426 dnl ========================================
428 dnl ----------------------------------------
429 dnl Set the following target specific variables:
430 dnl path where to search for source files
431 dnl family processor family (Needed for building
432 dnl asm-syntax.h for now. FIXME: Remove.)
433 dnl extra_functions extra functions
441 [sparcv9*-*-solaris2.[789]* | sparc64*-*-solaris2.[789]* | ultrasparc*-*-solaris2.[789]*])
442 if test -n "$CC64"; then
445 path="sparc32/v9 sparc32/v8 sparc32"
451 sparcv8*-*-* | microsparc*-*-*)
452 path="sparc32/v8 sparc32"
453 if test x${floating_point} = xno
454 then extra_functions="udiv_nfp"
455 else extra_functions="udiv_fp"
458 sparcv9*-*-* | ultrasparc*-*-*)
459 path="sparc32/v9 sparc32/v8 sparc32"
460 extra_functions="udiv_fp"
463 path="sparc32/v8/supersparc sparc32/v8 sparc32"
464 extra_functions="udiv"
466 sparc*-*-*) path="sparc32"
467 if test x${floating_point} = xno
468 then extra_functions="udiv_nfp"
469 else extra_functions="udiv_fp"
473 path="hppa/hppa1_1 hppa"
474 extra_functions="udiv_qrnnd"
478 extra_functions="udiv_qrnnd"
482 extra_functions="umul_ppmm udiv_qrnnd"
485 if test -n "$CC64"; then
487 extra_functions="umul_ppmm udiv_qrnnd"
488 # We need to use the system compiler, or actually the system assembler,
489 # since GAS has not been ported to understand the 2.0 instructions.
492 # FIXME: path should be "hppa/hppa2_0 hppa/hppa1_1 hppa"
493 path="hppa/hppa1_1 hppa"
494 extra_functions="udiv_qrnnd"
497 hppa*-*-*) #assume pa7100
498 path="hppa/hppa1_1/pa7100 hppa/hppa1_1 hppa"
499 extra_functions="udiv_qrnnd";;
500 [f30[01]-fujitsu-sysv*])
502 alphaev6*-*-*) path="alpha/ev6 alpha"; extra_functions="invert_limb cntlz";;
503 alphaev5*-*-*) path="alpha/ev5 alpha"; extra_functions="invert_limb cntlz";;
504 alpha*-*-*) path="alpha"; extra_functions="invert_limb cntlz";;
505 # Cray vector machines. This must come after alpha* so that we can
506 # recognize present and future vector processors with a wildcard.
509 extra_functions="mulww";;
510 am29000*-*-*) path="a29k";;
511 a29k*-*-*) path="a29k";;
513 # AMD and Intel x86 configurations
515 [i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*])
516 gmp_m4postinc="x86/x86-defs.m4"
517 extra_functions="udiv umul"
518 CALLING_CONVENTIONS_OBJS="x86call.o x86check.o"
520 GMP_CHECK_ASM_SHLDL_CL(
521 [GMP_DEFINE(WANT_SHLDL_CL,1)],
522 [GMP_DEFINE(WANT_SHLDL_CL,0)])
523 GMP_CHECK_ASM_ALIGN_FILL_0x90
525 # the CPUs below wanting to know about mmx
527 [pentiummmx-*-* | pentium[23]-*-* | k6*-*-* | athlon-*-*])
528 GMP_CHECK_ASM_MMX(tmp_mmx=yes, tmp_mmx=no)
532 # default for anything not otherwise mentioned
540 # don't know what best suits k5
543 i586*-*-* | pentium-*-*)
544 path="x86/pentium x86"
547 path="x86/pentium x86"
548 if test "$tmp_mmx" = yes; then
549 path="x86/pentium/mmx $path"
552 i686*-*-* | pentiumpro-*-*)
557 # The pentium/mmx lshift and rshift are good on p6 and can be used
558 # until there's something specific for p6.
559 if test "$tmp_mmx" = yes; then
560 path="x86/p6/mmx x86/pentium/mmx $path"
565 # The pentium/mmx lshift and rshift are good on p6 and can be used
566 # until there's something specific for p6.
567 if test "$tmp_mmx" = yes; then
568 path="x86/p6/p3mmx x86/p6/mmx x86/pentium/mmx $path"
573 if test "$tmp_mmx" = yes; then
574 path="x86/k6/k62mmx x86/k6/mmx $path"
579 if test "$tmp_mmx" = yes; then
580 path="x86/k6/mmx $path"
585 if test "$tmp_mmx" = yes; then
586 path="x86/k7/mmx $path"
593 i960*-*-*) path="i960";;
595 ia64*-*-*) path="ia64";;
597 # Motorola 68k configurations. Let m68k mean 68020-68040.
598 [m680[234]0*-*-* | m68k*-*-* | \
599 m68*-next-nextstep*]) # Nexts are at least '020
600 path="m68k/mc68020 m68k"
608 m88k*-*-* | m88k*-*-*) path="m88k";;
609 m88110*-*-*) path="m88k/mc88110 m88k";;
610 ns32k*-*-*) path="ns32k";;
612 pyramid-*-*) path="pyr";;
614 ppc601-*-*) path="power powerpc32";;
615 powerpc64*-*-*) path="powerpc64";;
616 powerpc*-*-*) path="powerpc32";;
617 rs6000-*-* | power-*-* | power2-*-*)
619 extra_functions="udiv_w_sdiv"
623 sh2-*-*) path="sh/sh2 sh";;
625 [mips[34]*-*-*]) path="mips3";;
626 mips*-*-irix6*) path="mips3";;
627 mips*-*-*) path="mips2";;
629 vax*-*-*) path="vax"; extra_functions="udiv_w_sdiv";;
631 z8000x*-*-*) path="z8000x"; extra_functions="udiv_w_sdiv";;
632 z8000*-*-*) path="z8000"; extra_functions="udiv_w_sdiv";;
634 clipper*-*-*) path="clipper";;
637 AC_SUBST(CALLING_CONVENTIONS_OBJS)
638 if test -n "$CALLING_CONVENTIONS_OBJS"; then
639 AC_DEFINE(HAVE_CALLING_CONVENTIONS,1,
640 [Define if mpn/tests has calling conventions checking for the CPU])
645 [i[5-8]86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*])
646 # rdtsc is in pentium and up, not in i386 and i486
647 SPEED_CYCLECOUNTER_OBJS=pentium.lo
650 SPEED_CYCLECOUNTER_OBJS=alpha.lo
652 sparcv9*-*-* | ultrasparc*-*-* | sparc64*-*-*)
653 SPEED_CYCLECOUNTER_OBJS=sparcv9.lo
656 SPEED_CYCLECOUNTER_OBJS=hppa2.lo
659 SPEED_CYCLECOUNTER_OBJS=hppa.lo
663 AC_SUBST(SPEED_CYCLECOUNTER_OBJS)
665 if test -n "$SPEED_CYCLECOUNTER_OBJS"
667 AC_DEFINE(HAVE_SPEED_CYCLECOUNTER, 1,
668 [Define if a speed_cyclecounter exists (for the tune programs)])
672 dnl Extensions for executable and object files.
673 dnl -------------------------------------------
679 dnl FIXME: Shared libs seem to fail on aix4.3.
680 dnl FIXME: Should invoke [AC_DISABLE_SHARED], but m4 recurses to death.
682 [*-*-aix4.[3-9]*]) enable_shared=no ;;
686 dnl Checks for libraries.
687 dnl ---------------------
688 AC_CHECK_DECLS((optarg))
690 dnl Checks for header files.
691 dnl ------------------------
693 AC_CHECK_HEADERS(getopt.h unistd.h sys/sysctl.h sys/time.h)
695 dnl Checks for typedefs, structures, and compiler characteristics.
696 dnl --------------------------------------------------------------
697 AC_CHECK_TYPES((void))
700 dnl Checks for library functions.
701 dnl -----------------------------
702 dnl Most of these are only for the benefit of supplementary programs. The
703 dnl library itself doesn't use anything weird.
706 dnl AC_CHECK_FUNCS(strtol)
707 AC_CHECK_FUNCS(getopt_long getpagesize popen processor_info strtoul sysconf sysctlbyname)
709 dnl Trick automake into thinking we've run AM_C_PROTOTYPES which it wants
710 dnl for ansi2knr, and instead use our own test. (It's only a warning
711 dnl automake prints, but it's good to suppress it.)
718 dnl Set `syntax' to one of <blank>, "mit", "elf", "aix", "macho".
720 # For now, we use the old switch for setting syntax.
721 # FIXME: Remove when conversion to .asm is completed.
724 m680[234]0*-*-linuxaout* | m68k*-*-linuxaout* | \
725 m68k-next-nextstep* | \
729 m680[234]0*-*-linux* | m68k*-*-linux*)
732 m680[234]0*-*-* | m68k*-*-*)
738 dnl ----------------------------------------
739 # Now build an asm-syntax.h file for targets that include that from the
741 # FIXME: Remove when conversion to .asm is completed.
742 case "${family}-${underscore}-${asm_align}-${syntax}" in
744 echo '#define MIT_SYNTAX' >asm-syntax.h
745 cat $srcdir/mpn/underscore.h >>asm-syntax.h
746 echo '#include "'$srcdir'/mpn/m68k/syntax.h"' >>asm-syntax.h;;
748 echo '#define ELF_SYNTAX' >asm-syntax.h
749 echo '#define C_SYMBOL_NAME(name) name' >>asm-syntax.h
750 echo '#include "'$srcdir'/mpn/m68k/syntax.h"' >>asm-syntax.h;;
754 # The pattern here tests for an absolute path the same way as
755 # _AC_OUTPUT_FILES in autoconf acgeneral.m4.
756 GMP_DEFINE_RAW(["dnl CONFIG_TOP_SRCDIR is a path from the mpn builddir to the top srcdir"])
758 [[\\/]]* | ?:[[\\/]]* )
759 GMP_DEFINE_RAW(["define(<CONFIG_TOP_SRCDIR>,<\`$srcdir'>)"]) ;;
760 *) GMP_DEFINE_RAW(["define(<CONFIG_TOP_SRCDIR>,<\`../$srcdir'>)"]) ;;
763 GMP_DEFINE_RAW(["include(CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4')"], POST)
765 # Must be after asm-defs.m4
766 GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_TARGET_CPU_$target_cpu')", POST)
769 dnl config.m4 post-includes
770 dnl -----------------------
771 dnl (Note x86 post include set with $path above.)
775 gmp_m4postinc="alpha/unicos.m4"
778 gmp_m4postinc="alpha/default.m4"
782 *-*-mach* | *-*-rhapsody* | *-*-nextstep*)
783 ;; # these use non-conventional assembly syntax.
785 gmp_m4postinc="powerpc32/regmap.m4 powerpc64/aix.m4"
788 gmp_m4postinc="powerpc32/regmap.m4 powerpc32/aix.m4"
791 gmp_m4postinc="powerpc32/regmap.m4"
798 for tmp_f in $gmp_m4postinc; do
799 GMP_DEFINE_RAW(["include_mpn(\`$tmp_f')"], POST)
803 # Set up `gmp_links'. It's a list of link:file pairs that configure will
804 # process to create link -> file.
807 # If the user specified `MPN_PATH', use that instead of the path we've
809 if test -z "$MPN_PATH"; then
815 # Pick the correct source files in $path and link them to mpn/.
816 # $gmp_mpn_functions lists all functions we need.
818 # The rule is to find a file with the function name and a .asm, .S,
819 # .s, or .c extension. Certain multi-function files with special names
820 # can provide some functions too. (mpn/Makefile.am passes
821 # -DOPERATION_<func> to get them to generate the right code.)
823 # FIXME: udiv and umul aren't in $gmp_mpn_functions_optional yet since
824 # there's some versions of those files which should be checked for bit
825 # rot first. Put them in $extra_functions for each target for now,
826 # change to standard optionals when all are ready.
828 # Note: The following lines defining $gmp_mpn_functions_optional
829 # and $gmp_mpn_functions are parsed by the "macos/configure"
830 # Perl script. So if you change the lines in a major way
831 # make sure to run and examine the output from
833 # % (cd macos; perl configure)
835 gmp_mpn_functions_optional="copyi copyd com_n \
836 and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n"
838 gmp_mpn_functions="${extra_functions} inlines add_n sub_n mul_1 addmul_1 \
839 submul_1 lshift rshift diveby3 divrem divrem_1 divrem_2 \
840 mod_1 mod_1_rs pre_mod_1 dump \
841 mul mul_fft mul_n mul_basecase sqr_basecase random \
842 random2 sqrtrem get_str set_str scan0 scan1 popcount hamdist cmp perfsqr \
843 bdivmod gcd_1 gcd gcdext tdiv_qr bz_divrem_n sb_divrem_mn jacbase \
844 $gmp_mpn_functions_optional"
846 # the list of all object files used by mpn/Makefile.in and the
847 # top-level Makefile.in, respectively
849 mpn_objs_in_libgmp="mpn/mp_bases.lo"
851 for tmp_fn in ${gmp_mpn_functions} ; do
852 [rm -f mpn/${tmp_fn}.[Ssc] mpn/${tmp_fn}.asm]
854 # functions that can be provided by multi-function files
857 add_n|sub_n) tmp_mulfunc="aors_n" ;;
858 addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;;
859 popcount|hamdist) tmp_mulfunc="popham" ;;
860 and_n|andn_n|nand_n | ior_n|iorn_n|nior_n | xor_n|xnor_n)
861 tmp_mulfunc="logops_n" ;;
865 for tmp_dir in $path; do
866 for tmp_base in $tmp_fn $tmp_mulfunc; do
867 for tmp_ext in asm S s c; do
868 tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext
869 if test -f $tmp_file; then
872 mpn_objects="$mpn_objects ${tmp_fn}.lo"
873 mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_fn}.lo"
874 gmp_links="$gmp_links mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext"
876 # duplicate AC_DEFINEs are harmless, so it doesn't matter
877 # that multi-function files get grepped here repeatedly
879 sed -n 's/^[ ]*MULFUNC_PROLOGUE(\(.*\))/\1/p' $tmp_file ;
880 sed -n 's/^[ ]*PROLOGUE(\(.*\))/\1/p' $tmp_file
882 for gmp_tmp in $gmp_ep; do
883 AC_DEFINE_UNQUOTED(HAVE_NATIVE_${gmp_tmp})
889 if test $found = yes; then break ; fi
891 if test $found = yes; then break ; fi
894 if test $found = no; then
895 for tmp_optional in $gmp_mpn_functions_optional; do
896 if test $tmp_optional = $tmp_fn; then
900 if test $found = no; then
901 AC_MSG_ERROR([no version of $tmp_fn found in path: $path])
906 # Create link for gmp-mparam.h.
907 for tmp_dir in $path ; do
909 if test -f $srcdir/mpn/${tmp_dir}/gmp-mparam.h ; then
910 gmp_links="$gmp_links gmp-mparam.h:mpn/${tmp_dir}/gmp-mparam.h"
912 # Copy any KARATSUBA_SQR_THRESHOLD in gmp-mparam.h to config.m4.
913 # Some versions of sqr_basecase.asm use this.
914 tmp_gmp_karatsuba_sqr_threshold="`sed -n 's/^#define KARATSUBA_SQR_THRESHOLD[ ]*\([0-9][0-9]*\).*$/\1/p' $srcdir/mpn/${tmp_dir}/gmp-mparam.h`"
915 if test -n "$tmp_gmp_karatsuba_sqr_threshold"; then
916 GMP_DEFINE_RAW(["define(<KARATSUBA_SQR_THRESHOLD>,<$tmp_gmp_karatsuba_sqr_threshold>)"])
923 # Dig out the links from `gmp_links' for inclusion in DISTCLEANFILES.
925 for f in $gmp_links; do
926 gmp_srclinks="$gmp_srclinks `echo $f | sed 's/\(.*\):.*/\1/'`"
929 AC_SUBST(mpn_objects)
930 AC_SUBST(mpn_objs_in_libgmp)
931 AC_SUBST(gmp_srclinks)
933 dnl ----------------------------------------
935 AC_CONFIG_LINKS($gmp_links)
937 dnl Create config.m4.
941 dnl FIXME: Upcoming version of autoconf/automake may not like broken lines.
942 AC_OUTPUT(Makefile mpz/Makefile mpn/Makefile)