diff options
Diffstat (limited to 'rts/gmp/configure.in')
-rw-r--r-- | rts/gmp/configure.in | 950 |
1 files changed, 950 insertions, 0 deletions
diff --git a/rts/gmp/configure.in b/rts/gmp/configure.in new file mode 100644 index 0000000000..18f610fe29 --- /dev/null +++ b/rts/gmp/configure.in @@ -0,0 +1,950 @@ +dnl Process this file with autoconf to produce a configure script. + + +dnl Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +dnl +dnl This file is part of the GNU MP Library. +dnl +dnl The GNU MP Library is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU Lesser General Public License as published +dnl by the Free Software Foundation; either version 2.1 of the License, or (at +dnl your option) any later version. +dnl +dnl The GNU MP Library is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +dnl License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public License +dnl along with the GNU MP Library; see the file COPYING.LIB. If not, write to +dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +dnl MA 02111-1307, USA. + + +AC_REVISION($Revision: 1.8 $)dnl +AC_PREREQ(2.14)dnl +AC_INIT(gmp-impl.h) + +dnl Check system. +AC_CANONICAL_SYSTEM + +dnl Automake +AM_INIT_AUTOMAKE(gmp, GMP_VERSION) +AM_CONFIG_HEADER(config.h:config.in) +AM_MAINTAINER_MODE + +dnl GMP specific +GMP_INIT(config.m4) + + +AC_ARG_ENABLE(assert, +AC_HELP_STRING([--enable-assert],[enable ASSERT checking [default=no]]), +[case "${enableval}" in +yes|no) ;; +*) AC_MSG_ERROR([bad value ${enableval} for --enable-assert, need yes or no]) ;; +esac], +[enable_assert=no]) + +if test "$enable_assert" = "yes"; then + AC_DEFINE(WANT_ASSERT,1, + [./configure --enable-assert option, to enable some ASSERT()s]) +fi + + +AC_ARG_ENABLE(alloca, +AC_HELP_STRING([--enable-alloca],[use alloca for temp space [default=yes]]), +[case "${enableval}" in +yes|no) ;; +*) AC_MSG_ERROR([bad value ${enableval} for --enable-alloca, need yes or no]) ;; +esac], +[enable_alloca=yes]) + +if test "$enable_alloca" = "no"; then + AC_DEFINE(USE_STACK_ALLOC,1, + [./configure --disable-alloca option, to use stack-alloc.c, not alloca]) +fi + + +AC_ARG_ENABLE(fft, +AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [default=no]]), +[case "${enableval}" in +yes|no) ;; +*) AC_MSG_ERROR([bad value ${enableval} for --enable-fft, need yes or no]) ;; +esac], +[enable_fft=no]) + +if test "$enable_fft" = "yes"; then + AC_DEFINE(WANT_FFT,1, + [./configure --enable-fft option, to enable FFTs for multiplication]) +fi + + +AC_ARG_ENABLE(mpbsd, +AC_HELP_STRING([--enable-mpbsd],[build Berkley MP compatibility library [default=no]]), +[case "${enableval}" in +yes|no) ;; +*) AC_MSG_ERROR([bad value ${enableval} for --enable-mpbsd, need yes or no]) ;; +esac], +[enable_mpbsd=no]) +AM_CONDITIONAL(WANT_MPBSD, test "$enable_mpbsd" = "yes") + + +AC_ARG_ENABLE(mpfr, +AC_HELP_STRING([--enable-mpfr],[build MPFR [default=no]]), +[case "${enableval}" in +yes|no) ;; +*) AC_MSG_ERROR([bad value ${enableval} for --enable-mpfr, need yes or no]) ;; +esac], +[enable_mpfr=no]) +AM_CONDITIONAL(WANT_MPFR, test "$enable_mpfr" = "yes") + + +dnl Switch on OS and determine what compiler to use. +dnl +dnl os_64bit Set to "yes" if OS is 64-bit capable. +dnl FIXME: Rename to `check_64bit_compiler'! +dnl cclist List of compilers, best first. +dnl gmp_cflags_{cc} Flags for compiler named {cc}. +dnl gmp_cflags64_{cc} Flags for compiler named {cc} for 64-bit code. +dnl gmp_optcflags_{cc} Optional compiler flags. +dnl gmp_xoptcflags_{cc} Exclusive optional compiler flags. +dnl +os_64bit="no" +cclist="gcc cc" # FIXME: Prefer c89 to cc. +gmp_cflags_gcc="-g -O2" +gmp_cflags64_gcc="-g -O2" +gmp_cflags_cc="-g" +gmp_cflags64_cc="-g" + +case "$target" in + # Alpha + alpha*-cray-unicos*) + # Don't perform any assembly syntax tests on this beast. + gmp_no_asm_syntax_testing=yes + cclist=cc + gmp_cflags_cc="$gmp_cflags_cc -O" + ;; + alpha*-*-osf*) + flavour=`echo $target_cpu | sed 's/^alpha//g'` + if test -n "$flavour"; then + case $flavour in # compilers don't seem to understand `ev67' and such. + ev6? | ev7*) flavour=ev6;; + esac + gmp_optcflags_gcc="-mcpu=$flavour" + # FIXME: We shouldn't fail fatally if none of these work, but that's + # how xoptcflags work and we don't have any other mechanism right now. + # Why do we need this here and not for alpha*-*-* below? + gmp_xoptcflags_gcc="-Wa,-arch,${flavour} -Wa,-m${flavour}" + gmp_optcflags_cc="-arch $flavour -tune $flavour" + fi + ;; + alpha*-*-*) + cclist="gcc" + flavour=`echo $target_cpu | sed 's/^alpha//g'` + if test -n "$flavour"; then + case $flavour in + ev6? | ev7*) flavour=ev6;; + esac + gmp_optcflags_gcc="-mcpu=$flavour" + fi + ;; + # Cray vector machines. This must come after alpha* so that we can + # recognize present and future vector processors with a wildcard. + *-cray-unicos*) + # Don't perform any assembly syntax tests on this beast. + gmp_no_asm_syntax_testing=yes + cclist=cc + # Don't inherit default gmp_cflags_cc value; it comes with -g which + # disables all optimization on Cray vector systems + gmp_cflags_cc="-O" + ;; + + # AMD and Intel x86 configurations + [i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*]) + # Rumour has it -O2 used to give worse register allocation than just -O. + gmp_cflags_gcc="-g -O -fomit-frame-pointer" + + case "${target}" in + i386*-*-*) gmp_optcflags_gcc="-mcpu=i386 -march=i386";; + i486*-*-*) gmp_optcflags_gcc="-mcpu=i486 -march=i486";; + i586*-*-* | pentium-*-* | pentiummmx-*-*) + gmp_optcflags_gcc="-mcpu=pentium -march=pentium";; + + # -march=pentiumpro not used because mpz/powm.c (swox cvs rev 1.4) + # tickles a bug in gcc 2.95.2 (believed fixed in 2.96). + [i686*-*-* | pentiumpro-*-* | pentium[23]-*-*]) + gmp_optcflags_gcc="-mcpu=pentiumpro";; + + k6*-*-*) gmp_optcflags_gcc="-mcpu=k6 -march=k6";; + + # Athlon instruction costs are close to p6: 3 cycle load latency, 4-6 + # cycle mul, 40 cycle div, pairable adc, ... + # FIXME: Change this when gcc gets something specific for Athlon. + # -march=pentiumpro not used, per i686 above. + athlon-*-*) gmp_optcflags_gcc="-mcpu=pentiumpro";; + esac + ;; + + # Sparc + [ultrasparc*-*-solaris2.[7-9] | sparcv9-*-solaris2.[7-9]]) + os_64bit=yes + gmp_cflags_gcc="$gmp_cflags_gcc -Wa,-xarch=v8plus" + gmp_xoptcflags_gcc="-mcpu=v9 -mcpu=v8 -mv8" + gmp_cflags64_gcc="$gmp_cflags64_gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9" + gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4" + gmp_cflags64_cc="-xtarget=native -xarch=v9 -xO4" + ;; + sparc64-*-linux*) + # Need to think more about the options passed here. This isn't good for + # some sparc64 linux distros, since we end up not optimizing when all the + # options below fail. + os_64bit=yes + gmp_cflags64_gcc="$gmp_cflags64_gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9" + gmp_cflags_gcc="$gmp_cflags_gcc -m32" + gmp_xoptflags_gcc="-mcpu=ultrasparc -mvis" + ;; + ultrasparc*-*-* | sparcv9-*-*) + gmp_cflags_gcc="$gmp_cflags_gcc -Wa,-xarch=v8plus" + gmp_xoptcflags_gcc="-mcpu=v9 -mcpu=v8 -mv8" + gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4" + ;; + sparcv8*-*-solaris2.* | microsparc*-*-solaris2.*) + gmp_cflags_gcc="$gmp_cflags_gcc" + gmp_xoptcflags_gcc="-mcpu=v8 -mv8" + gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4" + ;; + sparcv8*-*-* | microsparc*-*-*) # SunOS, Linux, *BSD + cclist="gcc acc cc" + gmp_cflags_gcc="$gmp_cflags_gcc" + gmp_xoptcflags_gcc="-mcpu=v8 -mv8" + gmp_cflags_acc="-g -O2 -cg92" + gmp_cflags_cc="-O2" # FIXME: Flag for v8? + ;; + supersparc*-*-solaris2.*) + gmp_cflags_gcc="$gmp_cflags_gcc -DSUPERSPARC" + gmp_xoptcflags_gcc="-mcpu=v8 -mv8" + gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4 -DSUPERSPARC" + ;; + supersparc*-*-*) # SunOS, Linux, *BSD + cclist="gcc acc cc" + gmp_cflags_gcc="$gmp_cflags_gcc -DSUPERSPARC" + gmp_xoptcflags_gcc="-mcpu=v8 -mv8" + gmp_cflags_acc="-g -O2 -cg92 -DSUPERSPARC" + gmp_cflags_cc="-O2 -DSUPERSPARC" # FIXME: Flag for v8? + ;; + *sparc*-*-*) + cclist="gcc acc cc" + gmp_cflags_acc="-g -O2" + gmp_cflags_cc="-g -O2" + ;; + + # POWER/PowerPC + powerpc64-*-aix*) + cclist="gcc xlc" + gmp_cflags_gcc="$gmp_cflags_gcc -maix64 -mpowerpc64" + gmp_cflags_xlc="-g -O2 -q64 -qtune=pwr3" + ;; + powerpc*-*-aix*) + cclist="gcc xlc" + gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc" + gmp_cflags_xlc="$gmp_cflags_cc -qarch=ppc -O2" + ;; + power-*-aix*) + cclist="gcc xlc" + gmp_cflags_gcc="$gmp_cflags_gcc -mpower" + gmp_cflags_xlc="$gmp_cflags_cc -qarch=pwr -O2" + ;; + powerpc64*-*-*) + gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc64" + AC_DEFINE(_LONG_LONG_LIMB) dnl FIXME: Remove. + ;; + powerpc-apple-darwin* | powerpc-apple-macosx*) + gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc -traditional-cpp" + ;; + powerpc*-*-*) + gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc" + ;; + + # MIPS + mips-sgi-irix6.*) + os_64bit=yes + gmp_cflags64_gcc="-g -O2 -mabi=n32" + gmp_cflags64_cc="$gmp_cflags64_cc -O2 -n32" + ;; + + # Motorola 68k family + m88110*-*-*) + gmp_cflags_gcc="-g -O -m88110" dnl FIXME: Use `-O2'? + ;; + m68*-*-*) + gmp_cflags_gcc="$gmp_cflags_gcc -fomit-frame-pointer" + ;; + + # HP + hppa1.0*-*-*) + cclist="gcc c89 cc" + gmp_cflags_c89="$gmp_cflags_cc +O2" + gmp_cflags_cc="$gmp_cflags_cc +O2" + ;; + hppa2.0w*-*-*) + cclist="c89 cc" + gmp_cflags_c89="+DD64 +O3" + gmp_cflags_cc="+DD64 +O3" + ;; + hppa2.0*-*-*) + os_64bit=yes + cclist="gcc c89 cc" + gmp_cflags64_gcc="$gmp_cflags64_gcc -mWHAT -D_LONG_LONG_LIMB" + # +O2 to cc triggers bug in mpz/powm.c (1.4) + gmp_cflags64_c89="+DA2.0 +e +O3 -D_LONG_LONG_LIMB" + gmp_cflags64_cc="+DA2.0 +e +O3 -D_LONG_LONG_LIMB" + gmp_cflags_c89="$gmp_cflags_cc +O2" + gmp_cflags_cc="$gmp_cflags_cc +O2" + ;; + + # VAX + vax*-*-*) + gmp_cflags_gcc="$gmp_cflags_gcc -fomit-frame-pointer" + ;; + + # Fujitsu + [f30[01]-fujitsu-sysv*]) + cclist="gcc vcc" + gmp_cflags_vcc="-g" # FIXME: flags for vcc? + ;; +esac + +case "${target}" in + *-*-mingw32) gmp_cflags_gcc="$gmp_cflags_gcc -mno-cygwin";; +esac + +dnl Check for programs needed by macros for finding compiler. +dnl More programs are checked for below, when a compiler is found. +AC_PROG_NM dnl Macro from Libtool. +# nm on 64-bit AIX needs to know the object file format +case "$target" in + powerpc64*-*-aix*) + NM="$NM -X 64" + ;; +esac + +# Save CFLAGS given on command line. +gmp_user_CFLAGS="$CFLAGS" + +if test -z "$CC"; then + # Find compiler. + GMP_PROG_CC_FIND($cclist, $os_64bit) + + # If 64-bit OS and we have a 64-bit compiler, use it. + if test -n "$os_64bit" && test -n "$CC64"; then + CC=$CC64 + CFLAGS=$CFLAGS64 + else + eval CFLAGS=\$gmp_cflags_$CC + fi + + # Try compiler flags that may work with only some compiler versions. + # gmp_optcflags: All or nothing. + eval optcflags=\$gmp_optcflags_$CC + if test -n "$optcflags"; then + CFLAGS_save="$CFLAGS" + CFLAGS="$CFLAGS $optcflags" + AC_MSG_CHECKING([whether $CC accepts $optcflags]) + AC_LANG_C + AC_TRY_COMPILER([int main(){return(0);}], optok, cross) + if test "$optok" = "yes"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + CFLAGS="$CFLAGS_save" + fi + fi + # gmp_xoptcflags: First is best, one has to work. + eval xoptcflags=\$gmp_xoptcflags_$CC + if test -n "$xoptcflags"; then + gmp_found="no" + for xopt in $xoptcflags; do + CFLAGS_save="$CFLAGS" + CFLAGS="$CFLAGS $xopt" + AC_MSG_CHECKING([whether $CC accepts $xopt]) + AC_LANG_C + AC_TRY_COMPILER([int main(){return(0);}], optok, cross) + if test "$optok" = "yes"; then + AC_MSG_RESULT([yes]) + gmp_found="yes" + break + else + AC_MSG_RESULT([no]) + CFLAGS="$CFLAGS_save" + fi + done + if test "$gmp_found" = "no"; then + echo ["$0: fatal: need a compiler that understands one of $xoptcflags"] + exit 1 + fi + fi +fi + +# Restore CFLAGS given on command line. +# FIXME: We've run through quite some unnecessary code looking for a +# nice compiler and working flags for it, just to spoil that with user +# supplied flags. +test -n "$gmp_user_CFLAGS" && CFLAGS="$gmp_user_CFLAGS" + +# Select chosen compiler. +GMP_PROG_CC_SELECT + +# How to assemble. +CCAS="$CC -c" +AC_SUBST(CCAS) + +dnl Checks for programs. +dnl -------------------- +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_LN_S +GMP_PROG_M4 +AC_CHECK_PROG(AR, ar, ar) +# ar on AIX needs to know the object file format +case "$target" in + powerpc64*-*-aix*) + AR="$AR -X 64" + ;; +esac +dnl FIXME: Find good ld? /usr/ucb/ld on Solaris won't work. + +dnl Checks for assembly syntax. +if test "$gmp_no_asm_syntax_testing" != "yes"; then + GMP_CHECK_ASM_TEXT + GMP_CHECK_ASM_DATA + GMP_CHECK_ASM_GLOBL + GMP_CHECK_ASM_LABEL_SUFFIX + GMP_CHECK_ASM_TYPE + GMP_CHECK_ASM_SIZE + GMP_CHECK_ASM_LSYM_PREFIX + GMP_CHECK_ASM_W32 + GMP_CHECK_ASM_UNDERSCORE(underscore=yes, underscore=no) + GMP_CHECK_ASM_ALIGN_LOG(asm_align=log, asm_align=nolog) +fi + +dnl FIXME: Check for FPU and set `floating_point' appropriately. + +dnl ======================================== +dnl Configuring mpn. +dnl ---------------------------------------- +dnl Set the following target specific variables: +dnl path where to search for source files +dnl family processor family (Needed for building +dnl asm-syntax.h for now. FIXME: Remove.) +dnl extra_functions extra functions + +family=generic + +case ${target} in + arm*-*-*) + path="arm" + ;; + [sparcv9*-*-solaris2.[789]* | sparc64*-*-solaris2.[789]* | ultrasparc*-*-solaris2.[789]*]) + if test -n "$CC64" + then path="sparc64" + else path="sparc32/v9 sparc32/v8 sparc32" + fi + ;; + sparc64-*-linux*) + if test -n "$CC64" + then path="sparc64" + else path="sparc32/v9 sparc32/v8 sparc32" + fi + ;; + sparcv8*-*-* | microsparc*-*-*) + path="sparc32/v8 sparc32" + if test x${floating_point} = xno + then extra_functions="udiv_nfp" + else extra_functions="udiv_fp" + fi + ;; + sparcv9*-*-* | ultrasparc*-*-*) + path="sparc32/v9 sparc32/v8 sparc32" + extra_functions="udiv_fp" + ;; + supersparc*-*-*) + path="sparc32/v8/supersparc sparc32/v8 sparc32" + extra_functions="udiv" + ;; + sparc*-*-*) path="sparc32" + if test x${floating_point} = xno + then extra_functions="udiv_nfp" + else extra_functions="udiv_fp" + fi + ;; + hppa7000*-*-*) + path="hppa/hppa1_1 hppa" + extra_functions="udiv_qrnnd" + ;; + hppa1.0*-*-*) + path="hppa" + extra_functions="udiv_qrnnd" + ;; + hppa2.0w-*-*) + path="pa64w" + extra_functions="umul_ppmm udiv_qrnnd" + ;; + hppa2.0*-*-*) + if test -n "$CC64"; then + path="pa64" + extra_functions="umul_ppmm udiv_qrnnd" + # We need to use the system compiler, or actually the system assembler, + # since GAS has not been ported to understand the 2.0 instructions. + CCAS="$CC64 -c" + else + # FIXME: path should be "hppa/hppa2_0 hppa/hppa1_1 hppa" + path="hppa/hppa1_1 hppa" + extra_functions="udiv_qrnnd" + fi + ;; + hppa*-*-*) #assume pa7100 + path="hppa/hppa1_1/pa7100 hppa/hppa1_1 hppa" + extra_functions="udiv_qrnnd";; + [f30[01]-fujitsu-sysv*]) + path=fujitsu;; + alphaev6*-*-*) path="alpha/ev6 alpha"; extra_functions="invert_limb cntlz";; + alphaev5*-*-*) path="alpha/ev5 alpha"; extra_functions="invert_limb cntlz";; + alpha*-*-*) path="alpha"; extra_functions="invert_limb cntlz";; + # Cray vector machines. This must come after alpha* so that we can + # recognize present and future vector processors with a wildcard. + *-cray-unicos*) + path="cray" + extra_functions="mulww";; + am29000*-*-*) path="a29k";; + a29k*-*-*) path="a29k";; + + # AMD and Intel x86 configurations + + [i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*]) + gmp_m4postinc="x86/x86-defs.m4" + extra_functions="udiv umul" + CALLING_CONVENTIONS_OBJS="x86call.o x86check.o" + + GMP_CHECK_ASM_SHLDL_CL( + [GMP_DEFINE(WANT_SHLDL_CL,1)], + [GMP_DEFINE(WANT_SHLDL_CL,0)]) + GMP_CHECK_ASM_ALIGN_FILL_0x90 + + # the CPUs below wanting to know about mmx + case ${target} in + [pentiummmx-*-* | pentium[23]-*-* | k6*-*-* | athlon-*-*]) + GMP_CHECK_ASM_MMX(tmp_mmx=yes, tmp_mmx=no) + ;; + esac + + # default for anything not otherwise mentioned + path="x86" + + case ${target} in + [i[34]86*-*-*]) + path="x86" + ;; + k5*-*-*) + # don't know what best suits k5 + path="x86" + ;; + i586*-*-* | pentium-*-*) + path="x86/pentium x86" + ;; + pentiummmx-*-*) + path="x86/pentium x86" + if test "$tmp_mmx" = yes; then + path="x86/pentium/mmx $path" + fi + ;; + i686*-*-* | pentiumpro-*-*) + path="x86/p6 x86" + ;; + pentium2-*-*) + path="x86/p6 x86" + # The pentium/mmx lshift and rshift are good on p6 and can be used + # until there's something specific for p6. + if test "$tmp_mmx" = yes; then + path="x86/p6/mmx x86/pentium/mmx $path" + fi + ;; + pentium3-*-*) + path="x86/p6 x86" + # The pentium/mmx lshift and rshift are good on p6 and can be used + # until there's something specific for p6. + if test "$tmp_mmx" = yes; then + path="x86/p6/p3mmx x86/p6/mmx x86/pentium/mmx $path" + fi + ;; + [k6[23]*-*-*]) + path="x86/k6 x86" + if test "$tmp_mmx" = yes; then + path="x86/k6/k62mmx x86/k6/mmx $path" + fi + ;; + k6*-*-*) + path="x86/k6 x86" + if test "$tmp_mmx" = yes; then + path="x86/k6/mmx $path" + fi + ;; + athlon-*-*) + path="x86/k7 x86" + if test "$tmp_mmx" = yes; then + path="x86/k7/mmx $path" + fi + ;; + esac + ;; + + + i960*-*-*) path="i960";; + + ia64*-*-*) path="ia64";; + +# Motorola 68k configurations. Let m68k mean 68020-68040. + [m680[234]0*-*-* | m68k*-*-* | \ + m68*-next-nextstep*]) # Nexts are at least '020 + path="m68k/mc68020 m68k" + family=m68k + ;; + m68000*-*-*) + path="m68k" + family=m68k + ;; + + m88k*-*-* | m88k*-*-*) path="m88k";; + m88110*-*-*) path="m88k/mc88110 m88k";; + ns32k*-*-*) path="ns32k";; + + pyramid-*-*) path="pyr";; + + ppc601-*-*) path="power powerpc32";; + powerpc64*-*-*) path="powerpc64";; + powerpc*-*-*) path="powerpc32";; + rs6000-*-* | power-*-* | power2-*-*) + path="power" + extra_functions="udiv_w_sdiv" + ;; + + sh-*-*) path="sh";; + sh2-*-*) path="sh/sh2 sh";; + + [mips[34]*-*-*]) path="mips3";; + mips*-*-irix6*) path="mips3";; + mips*-*-*) path="mips2";; + + vax*-*-*) path="vax"; extra_functions="udiv_w_sdiv";; + + z8000x*-*-*) path="z8000x"; extra_functions="udiv_w_sdiv";; + z8000*-*-*) path="z8000"; extra_functions="udiv_w_sdiv";; + + clipper*-*-*) path="clipper";; +esac + +AC_SUBST(CALLING_CONVENTIONS_OBJS) +if test -n "$CALLING_CONVENTIONS_OBJS"; then + AC_DEFINE(HAVE_CALLING_CONVENTIONS,1, + [Define if mpn/tests has calling conventions checking for the CPU]) +fi + + +case ${target} in + [i[5-8]86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*]) + # rdtsc is in pentium and up, not in i386 and i486 + SPEED_CYCLECOUNTER_OBJS=pentium.lo + ;; + alpha*-*-*) + SPEED_CYCLECOUNTER_OBJS=alpha.lo + ;; + sparcv9*-*-* | ultrasparc*-*-* | sparc64*-*-*) + SPEED_CYCLECOUNTER_OBJS=sparcv9.lo + ;; + hppa2*-*-*) + SPEED_CYCLECOUNTER_OBJS=hppa2.lo + ;; + hppa*-*-*) + SPEED_CYCLECOUNTER_OBJS=hppa.lo + ;; +esac + +AC_SUBST(SPEED_CYCLECOUNTER_OBJS) + +if test -n "$SPEED_CYCLECOUNTER_OBJS" +then + AC_DEFINE(HAVE_SPEED_CYCLECOUNTER, 1, + [Define if a speed_cyclecounter exists (for the tune programs)]) +fi + + +dnl Extensions for executable and object files. +dnl ------------------------------------------- +AC_EXEEXT +AC_OBJEXT + +dnl Use Libtool. +dnl ------------ +dnl FIXME: Shared libs seem to fail on aix4.3. +dnl FIXME: Should invoke [AC_DISABLE_SHARED], but m4 recurses to death. +case "$target" in + [*-*-aix4.[3-9]*]) enable_shared=no ;; +esac +AC_PROG_LIBTOOL + +dnl Checks for libraries. +dnl --------------------- +AC_CHECK_DECLS((optarg)) + +dnl Checks for header files. +dnl ------------------------ +AC_HEADER_STDC +AC_CHECK_HEADERS(getopt.h unistd.h sys/sysctl.h sys/time.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +dnl -------------------------------------------------------------- +AC_CHECK_TYPES((void)) +AC_C_STRINGIZE + +dnl Checks for library functions. +dnl ----------------------------- +dnl Most of these are only for the benefit of supplementary programs. The +dnl library itself doesn't use anything weird. +dnl AC_FUNC_MEMCMP +dnl AC_TYPE_SIGNAL +dnl AC_CHECK_FUNCS(strtol) +AC_CHECK_FUNCS(getopt_long getpagesize popen processor_info strtoul sysconf sysctlbyname) + +dnl Trick automake into thinking we've run AM_C_PROTOTYPES which it wants +dnl for ansi2knr, and instead use our own test. (It's only a warning +dnl automake prints, but it's good to suppress it.) +ifelse(0,1,[ +AM_C_PROTOTYPES +]) +GMP_C_ANSI2KNR + + +dnl Set `syntax' to one of <blank>, "mit", "elf", "aix", "macho". +syntax= +# For now, we use the old switch for setting syntax. +# FIXME: Remove when conversion to .asm is completed. +changequote(,)dnl +case "${target}" in + m680[234]0*-*-linuxaout* | m68k*-*-linuxaout* | \ + m68k-next-nextstep* | \ + m68000*-*-*) + syntax=mit + ;; + m680[234]0*-*-linux* | m68k*-*-linux*) + syntax=elf + ;; + m680[234]0*-*-* | m68k*-*-*) + syntax=mit + ;; +esac +changequote([,])dnl + +dnl ---------------------------------------- +# Now build an asm-syntax.h file for targets that include that from the +# assembly files. +# FIXME: Remove when conversion to .asm is completed. +case "${family}-${underscore}-${asm_align}-${syntax}" in + m68k-yes-log-mit) + echo '#define MIT_SYNTAX' >asm-syntax.h + cat $srcdir/mpn/underscore.h >>asm-syntax.h + echo '#include "'$srcdir'/mpn/m68k/syntax.h"' >>asm-syntax.h;; + m68k-no-nolog-elf) + echo '#define ELF_SYNTAX' >asm-syntax.h + echo '#define C_SYMBOL_NAME(name) name' >>asm-syntax.h + echo '#include "'$srcdir'/mpn/m68k/syntax.h"' >>asm-syntax.h;; +esac + + +# The pattern here tests for an absolute path the same way as +# _AC_OUTPUT_FILES in autoconf acgeneral.m4. +GMP_DEFINE_RAW(["dnl CONFIG_TOP_SRCDIR is a path from the mpn builddir to the top srcdir"]) +case "$srcdir" in +[[\\/]]* | ?:[[\\/]]* ) + GMP_DEFINE_RAW(["define(<CONFIG_TOP_SRCDIR>,<\`$srcdir'>)"]) ;; +*) GMP_DEFINE_RAW(["define(<CONFIG_TOP_SRCDIR>,<\`../$srcdir'>)"]) ;; +esac + +GMP_DEFINE_RAW(["include(CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4')"], POST) + +# Must be after asm-defs.m4 +GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_TARGET_CPU_$target_cpu')", POST) + + +dnl config.m4 post-includes +dnl ----------------------- +dnl (Note x86 post include set with $path above.) +changequote(,)dnl +case "$target" in + alpha*-cray-unicos*) + gmp_m4postinc="alpha/unicos.m4" + ;; + alpha*-*-*) + gmp_m4postinc="alpha/default.m4" + ;; + power*-*-*) + case "$target" in + *-*-mach* | *-*-rhapsody* | *-*-nextstep* | *-*-darwin* | *-*-macosx*) + ;; # these use non-conventional assembly syntax. + powerpc64-*-aix*) + gmp_m4postinc="powerpc32/regmap.m4 powerpc64/aix.m4" + ;; + *-*-aix*) + gmp_m4postinc="powerpc32/regmap.m4 powerpc32/aix.m4" + ;; + *) + gmp_m4postinc="powerpc32/regmap.m4" + ;; + esac + ;; +esac +changequote([, ])dnl + +for tmp_f in $gmp_m4postinc; do + GMP_DEFINE_RAW(["include_mpn(\`$tmp_f')"], POST) +done + + +# Set up `gmp_links'. It's a list of link:file pairs that configure will +# process to create link -> file. +gmp_links= + +# If the user specified `MPN_PATH', use that instead of the path we've +# come up with. +if test -z "$MPN_PATH"; then + path="$path generic" +else + path="$MPN_PATH" +fi + +# Pick the correct source files in $path and link them to mpn/. +# $gmp_mpn_functions lists all functions we need. +# +# The rule is to find a file with the function name and a .asm, .S, +# .s, or .c extension. Certain multi-function files with special names +# can provide some functions too. (mpn/Makefile.am passes +# -DOPERATION_<func> to get them to generate the right code.) + +# FIXME: udiv and umul aren't in $gmp_mpn_functions_optional yet since +# there's some versions of those files which should be checked for bit +# rot first. Put them in $extra_functions for each target for now, +# change to standard optionals when all are ready. + +# Note: The following lines defining $gmp_mpn_functions_optional +# and $gmp_mpn_functions are parsed by the "macos/configure" +# Perl script. So if you change the lines in a major way +# make sure to run and examine the output from +# +# % (cd macos; perl configure) + +gmp_mpn_functions_optional="copyi copyd com_n \ + and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n" + +gmp_mpn_functions="${extra_functions} inlines add_n sub_n mul_1 addmul_1 \ + submul_1 lshift rshift diveby3 divrem divrem_1 divrem_2 \ + mod_1 mod_1_rs pre_mod_1 dump \ + mul mul_fft mul_n mul_basecase sqr_basecase random \ + random2 sqrtrem get_str set_str scan0 scan1 popcount hamdist cmp perfsqr \ + bdivmod gcd_1 gcd gcdext tdiv_qr bz_divrem_n sb_divrem_mn jacbase \ + $gmp_mpn_functions_optional" + +# the list of all object files used by mpn/Makefile.in and the +# top-level Makefile.in, respectively +mpn_objects= +mpn_objs_in_libgmp="mpn/mp_bases.lo" + +for tmp_fn in ${gmp_mpn_functions} ; do + [rm -f mpn/${tmp_fn}.[Ssc] mpn/${tmp_fn}.asm] + + # functions that can be provided by multi-function files + tmp_mulfunc= + case $tmp_fn in + add_n|sub_n) tmp_mulfunc="aors_n" ;; + addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;; + popcount|hamdist) tmp_mulfunc="popham" ;; + and_n|andn_n|nand_n | ior_n|iorn_n|nior_n | xor_n|xnor_n) + tmp_mulfunc="logops_n" ;; + esac + + found=no + for tmp_dir in $path; do + for tmp_base in $tmp_fn $tmp_mulfunc; do + for tmp_ext in asm S s c; do + tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext + if test -f $tmp_file; then + found=yes + + mpn_objects="$mpn_objects ${tmp_fn}.lo" + mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_fn}.lo" + gmp_links="$gmp_links mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext" + + # duplicate AC_DEFINEs are harmless, so it doesn't matter + # that multi-function files get grepped here repeatedly + gmp_ep=["` + sed -n 's/^[ ]*MULFUNC_PROLOGUE(\(.*\))/\1/p' $tmp_file ; + sed -n 's/^[ ]*PROLOGUE.*(\(.*\))/\1/p' $tmp_file + `"] + for gmp_tmp in $gmp_ep; do + AC_DEFINE_UNQUOTED(HAVE_NATIVE_${gmp_tmp}) + done + + break + fi + done + if test $found = yes; then break ; fi + done + if test $found = yes; then break ; fi + done + + if test $found = no; then + for tmp_optional in $gmp_mpn_functions_optional; do + if test $tmp_optional = $tmp_fn; then + found=yes + fi + done + if test $found = no; then + AC_MSG_ERROR([no version of $tmp_fn found in path: $path]) + fi + fi +done + +# Create link for gmp-mparam.h. +for tmp_dir in $path ; do + rm -f gmp-mparam.h + if test -f $srcdir/mpn/${tmp_dir}/gmp-mparam.h ; then + gmp_links="$gmp_links gmp-mparam.h:mpn/${tmp_dir}/gmp-mparam.h" + + # Copy any KARATSUBA_SQR_THRESHOLD in gmp-mparam.h to config.m4. + # Some versions of sqr_basecase.asm use this. + 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`" + if test -n "$tmp_gmp_karatsuba_sqr_threshold"; then + GMP_DEFINE_RAW(["define(<KARATSUBA_SQR_THRESHOLD>,<$tmp_gmp_karatsuba_sqr_threshold>)"]) + fi + + break + fi +done + +# Dig out the links from `gmp_links' for inclusion in DISTCLEANFILES. +gmp_srclinks= +for f in $gmp_links; do + gmp_srclinks="$gmp_srclinks `echo $f | sed 's/\(.*\):.*/\1/'`" +done + +AC_SUBST(mpn_objects) +AC_SUBST(mpn_objs_in_libgmp) +AC_SUBST(gmp_srclinks) + +dnl ---------------------------------------- +dnl Make links. +AC_CONFIG_LINKS($gmp_links) + +dnl Create config.m4. +GMP_FINISH + +dnl Create Makefiles +dnl FIXME: Upcoming version of autoconf/automake may not like broken lines. +AC_OUTPUT(Makefile mpz/Makefile mpn/Makefile) |