diff options
author | Denis Bitouzé <dbitouze@wanadoo.fr> | 2021-02-25 18:23:07 +0000 |
---|---|---|
committer | Denis Bitouzé <dbitouze@wanadoo.fr> | 2021-02-25 18:23:07 +0000 |
commit | c6101f91d071883b48b1b4b51e5eba0f36d9a78d (patch) | |
tree | 1bf7f5a881d7a4f5c5bf59d0b2821943dd822372 /Build/source/libs/gmp/gmp-src/configure.ac | |
parent | 07ee7222e389b0777456b427a55c22d0e6ffd267 (diff) |
French translation for tlmgr updated
git-svn-id: svn://tug.org/texlive/trunk@57912 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/gmp/gmp-src/configure.ac')
-rw-r--r-- | Build/source/libs/gmp/gmp-src/configure.ac | 4028 |
1 files changed, 0 insertions, 4028 deletions
diff --git a/Build/source/libs/gmp/gmp-src/configure.ac b/Build/source/libs/gmp/gmp-src/configure.ac deleted file mode 100644 index cafdb3c7161..00000000000 --- a/Build/source/libs/gmp/gmp-src/configure.ac +++ /dev/null @@ -1,4028 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. - - -define(GMP_COPYRIGHT,[[ - -Copyright 1996-2020 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of either: - - * the GNU Lesser General Public License as published by the Free - Software Foundation; either version 3 of the License, or (at your - option) any later version. - -or - - * the GNU General Public License as published by the Free Software - Foundation; either version 2 of the License, or (at your option) any - later version. - -or both in parallel, as here. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received copies of the GNU General Public License and the -GNU Lesser General Public License along with the GNU MP Library. If not, -see https://www.gnu.org/licenses/. -]]) - -AC_COPYRIGHT(GMP_COPYRIGHT) -AH_TOP(/*GMP_COPYRIGHT*/) - -AC_REVISION($Revision$) -AC_PREREQ(2.59) -AC_INIT(GNU MP, GMP_VERSION, [gmp-bugs@gmplib.org, see https://gmplib.org/manual/Reporting-Bugs.html], gmp) -AC_CONFIG_SRCDIR(gmp-impl.h) -m4_pattern_forbid([^[ \t]*GMP_]) -m4_pattern_allow(GMP_LDFLAGS) -m4_pattern_allow(GMP_LIMB_BITS) -m4_pattern_allow(GMP_MPARAM_H_SUGGEST) -m4_pattern_allow(GMP_NAIL_BITS) -m4_pattern_allow(GMP_NUMB_BITS) -m4_pattern_allow(GMP_NONSTD_ABI) -m4_pattern_allow(GMP_CPU_TYPE) -m4_pattern_allow(GMP_AVX_NOT_REALLY_AVAILABLE) - -# If --target is not used then $target_alias is empty, but if say -# "./configure athlon-pc-freebsd3.5" is used, then all three of -# $build_alias, $host_alias and $target_alias are set to -# "athlon-pc-freebsd3.5". -# -if test -n "$target_alias" && test "$target_alias" != "$host_alias"; then - AC_MSG_ERROR([--target is not appropriate for GMP -Use --build=CPU-VENDOR-OS if you need to specify your CPU and/or system -explicitly. Use --host if cross-compiling (see "Installing GMP" in the -manual for more on this).]) -fi - -GMP_INIT(config.m4) - -AC_CANONICAL_HOST - -dnl Automake "no-dependencies" is used because include file dependencies -dnl are not useful to us. Pretty much everything depends just on gmp.h, -dnl gmp-impl.h and longlong.h, and yet only rarely does everything need to -dnl be rebuilt for changes to those files. -dnl -dnl "no-dependencies" also helps with the way we're setup to run -dnl AC_PROG_CXX only conditionally. If dependencies are used then recent -dnl automake (eg 1.7.2) appends an AM_CONDITIONAL to AC_PROG_CXX, and then -dnl gets upset if it's not actually executed. -dnl -dnl Note that there's a copy of these options in the top-level Makefile.am, -dnl so update there too if changing anything. -dnl -AM_INIT_AUTOMAKE([1.8 gnu no-dependencies subdir-objects]) -AC_CONFIG_HEADERS(config.h:config.in) -AM_MAINTAINER_MODE - - -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, - [Define to 1 to enable ASSERT checking, per --enable-assert]) - want_assert_01=1 -else - want_assert_01=0 -fi -GMP_DEFINE_RAW(["define(<WANT_ASSERT>,$want_assert_01)"]) - - -AC_ARG_ENABLE(alloca, -AC_HELP_STRING([--enable-alloca],[how to get temp memory [default=reentrant]]), -[case $enableval in -alloca|malloc-reentrant|malloc-notreentrant) ;; -yes|no|reentrant|notreentrant) ;; -debug) ;; -*) - AC_MSG_ERROR([bad value $enableval for --enable-alloca, need one of: -yes no reentrant notreentrant alloca malloc-reentrant malloc-notreentrant debug]) ;; -esac], -[enable_alloca=reentrant]) - - -# IMPROVE ME: The default for C++ is disabled. The tests currently -# performed below for a working C++ compiler are not particularly strong, -# and in general can't be expected to get the right setup on their own. The -# most significant problem is getting the ABI the same. Defaulting CXXFLAGS -# to CFLAGS takes only a small step towards this. It's also probably worth -# worrying whether the C and C++ runtimes from say gcc and a vendor C++ can -# work together. Some rather broken C++ installations were encountered -# during testing, and though such things clearly aren't GMP's problem, if -# --enable-cxx=detect were to be the default then some careful checks of -# which, if any, C++ compiler on the system is up to scratch would be -# wanted. -# -AC_ARG_ENABLE(cxx, -AC_HELP_STRING([--enable-cxx],[enable C++ support [default=no]]), -[case $enableval in -yes|no|detect) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-cxx, need yes/no/detect]) ;; -esac], -[enable_cxx=no]) - - -AC_ARG_ENABLE(assembly, -AC_HELP_STRING([--enable-assembly],[enable the use of assembly loops [default=yes]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-assembly, need yes or no]) ;; -esac], -[enable_assembly=yes]) - - -AC_ARG_ENABLE(fft, -AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [default=yes]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-fft, need yes or no]) ;; -esac], -[enable_fft=yes]) - -if test "$enable_fft" = "yes"; then - AC_DEFINE(WANT_FFT,1, - [Define to 1 to enable FFTs for multiplication, per --enable-fft]) -fi - - -AC_ARG_ENABLE(old-fft-full, -AC_HELP_STRING([--enable-old-fft-full],[enable old mpn_mul_fft_full for multiplication [default=no]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-old-fft-full, need yes or no]) ;; -esac], -[enable_old_fft_full=no]) - -if test "$enable_old_fft_full" = "yes"; then - AC_DEFINE(WANT_OLD_FFT_FULL,1, - [Define to 1 to enable old mpn_mul_fft_full for multiplication, per --enable-old-fft-full]) -fi - - -AC_ARG_ENABLE(nails, -AC_HELP_STRING([--enable-nails],[use nails on limbs [default=no]]), -[case $enableval in -[yes|no|[02468]|[0-9][02468]]) ;; -[*[13579]]) - AC_MSG_ERROR([bad value $enableval for --enable-nails, only even nail sizes supported]) ;; -*) - AC_MSG_ERROR([bad value $enableval for --enable-nails, need yes/no/number]) ;; -esac], -[enable_nails=no]) - -case $enable_nails in -yes) GMP_NAIL_BITS=2 ;; -no) GMP_NAIL_BITS=0 ;; -*) GMP_NAIL_BITS=$enable_nails ;; -esac -AC_SUBST(GMP_NAIL_BITS) - - -AC_ARG_ENABLE(profiling, -AC_HELP_STRING([--enable-profiling], - [build with profiler support [default=no]]), -[case $enableval in -no|prof|gprof|instrument) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-profiling, need no/prof/gprof/instrument]) ;; -esac], -[enable_profiling=no]) - -case $enable_profiling in - prof) - AC_DEFINE(WANT_PROFILING_PROF, 1, - [Define to 1 if --enable-profiling=prof]) - ;; - gprof) - AC_DEFINE(WANT_PROFILING_GPROF, 1, - [Define to 1 if --enable-profiling=gprof]) - ;; - instrument) - AC_DEFINE(WANT_PROFILING_INSTRUMENT, 1, - [Define to 1 if --enable-profiling=instrument]) - ;; -esac - -GMP_DEFINE_RAW(["define(<WANT_PROFILING>,<\`$enable_profiling'>)"]) - -# -fomit-frame-pointer is incompatible with -pg on some chips -if test "$enable_profiling" = gprof; then - fomit_frame_pointer= -else - fomit_frame_pointer="-fomit-frame-pointer" -fi - - -AC_ARG_WITH(readline, -AC_HELP_STRING([--with-readline], - [readline support in demo programs [default=detect]]), -[case $withval in -yes|no|detect) ;; -*) AC_MSG_ERROR([bad value $withval for --with-readline, need yes/no/detect]) ;; -esac], -[with_readline=detect]) - - -AC_ARG_ENABLE(fat, -AC_HELP_STRING([--enable-fat], - [build fat libraries on systems that support it [default=no]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-fat, need yes or no]) ;; -esac], -[enable_fat=no]) - - -AC_ARG_ENABLE(minithres, -AC_HELP_STRING([--enable-minithres], - [choose minimal thresholds for testing [default=no]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-minithres, need yes or no]) ;; -esac], -[enable_minithres=no]) - - -AC_ARG_ENABLE(fake-cpuid, -AC_HELP_STRING([--enable-fake-cpuid],[enable GMP_CPU_TYPE faking cpuid [default=no]]), -[case $enableval in -yes|no) ;; -*) AC_MSG_ERROR([bad value $enableval for --enable-fake-cpuid, need yes or no]) ;; -esac], -[enable_fake_cpuid=no]) - -if test "$enable_fake_cpuid" = "yes"; then - AC_DEFINE(WANT_FAKE_CPUID,1, - [Define to 1 to enable GMP_CPU_TYPE faking cpuid, per --enable-fake-cpuid]) -fi - - -if test $enable_fat = yes && test $enable_assembly = no ; then - AC_MSG_ERROR([when doing a fat build, disabling assembly will not work]) -fi - -if test $enable_fake_cpuid = yes && test $enable_fat = no ; then - AC_MSG_ERROR([--enable-fake-cpuid requires --enable-fat]) -fi - - -tmp_host=`echo $host_cpu | sed 's/\./_/'` -AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_$tmp_host) -GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_HOST_CPU_$tmp_host')", POST) - -dnl The HAVE_HOST_CPU_ list here only needs to have entries for those which -dnl are going to be tested, not everything that can possibly be selected. -dnl -dnl The HAVE_HOST_CPU_FAMILY_ list similarly, and note that the AC_DEFINEs -dnl for these are under the cpu specific setups below. - -AH_VERBATIM([HAVE_HOST_CPU_1], -[/* Define one of these to 1 for the host CPU family. - If your CPU is not in any of these families, leave all undefined. - For an AMD64 chip, define "x86" in ABI=32, but not in ABI=64. */ -#undef HAVE_HOST_CPU_FAMILY_alpha -#undef HAVE_HOST_CPU_FAMILY_m68k -#undef HAVE_HOST_CPU_FAMILY_power -#undef HAVE_HOST_CPU_FAMILY_powerpc -#undef HAVE_HOST_CPU_FAMILY_x86 -#undef HAVE_HOST_CPU_FAMILY_x86_64 - -/* Define one of the following to 1 for the host CPU, as per the output of - ./config.guess. If your CPU is not listed here, leave all undefined. */ -#undef HAVE_HOST_CPU_alphaev67 -#undef HAVE_HOST_CPU_alphaev68 -#undef HAVE_HOST_CPU_alphaev7 -#undef HAVE_HOST_CPU_m68020 -#undef HAVE_HOST_CPU_m68030 -#undef HAVE_HOST_CPU_m68040 -#undef HAVE_HOST_CPU_m68060 -#undef HAVE_HOST_CPU_m68360 -#undef HAVE_HOST_CPU_powerpc604 -#undef HAVE_HOST_CPU_powerpc604e -#undef HAVE_HOST_CPU_powerpc750 -#undef HAVE_HOST_CPU_powerpc7400 -#undef HAVE_HOST_CPU_supersparc -#undef HAVE_HOST_CPU_i386 -#undef HAVE_HOST_CPU_i586 -#undef HAVE_HOST_CPU_i686 -#undef HAVE_HOST_CPU_pentium -#undef HAVE_HOST_CPU_pentiummmx -#undef HAVE_HOST_CPU_pentiumpro -#undef HAVE_HOST_CPU_pentium2 -#undef HAVE_HOST_CPU_pentium3 -#undef HAVE_HOST_CPU_pentium4 -#undef HAVE_HOST_CPU_core2 -#undef HAVE_HOST_CPU_nehalem -#undef HAVE_HOST_CPU_westmere -#undef HAVE_HOST_CPU_sandybridge -#undef HAVE_HOST_CPU_ivybridge -#undef HAVE_HOST_CPU_haswell -#undef HAVE_HOST_CPU_broadwell -#undef HAVE_HOST_CPU_skylake -#undef HAVE_HOST_CPU_silvermont -#undef HAVE_HOST_CPU_goldmont -#undef HAVE_HOST_CPU_k8 -#undef HAVE_HOST_CPU_k10 -#undef HAVE_HOST_CPU_bulldozer -#undef HAVE_HOST_CPU_piledriver -#undef HAVE_HOST_CPU_steamroller -#undef HAVE_HOST_CPU_excavator -#undef HAVE_HOST_CPU_zen -#undef HAVE_HOST_CPU_bobcat -#undef HAVE_HOST_CPU_jaguar -#undef HAVE_HOST_CPU_s390_z900 -#undef HAVE_HOST_CPU_s390_z990 -#undef HAVE_HOST_CPU_s390_z9 -#undef HAVE_HOST_CPU_s390_z10 -#undef HAVE_HOST_CPU_s390_z196 - -/* Define to 1 iff we have a s390 with 64-bit registers. */ -#undef HAVE_HOST_CPU_s390_zarch]) - - -# Table of compilers, options, and mpn paths. This code has various related -# purposes -# -# - better default CC/CFLAGS selections than autoconf otherwise gives -# - default CC/CFLAGS selections for extra CPU types specific to GMP -# - a few tests for known bad compilers -# - choice of ABIs on suitable systems -# - selection of corresponding mpn search path -# -# After GMP specific searches and tests, the standard autoconf AC_PROG_CC is -# called. User selections of CC etc are respected. -# -# Care is taken not to use macros like AC_TRY_COMPILE during the GMP -# pre-testing, since they of course depend on AC_PROG_CC, and also some of -# them cache their results, which is not wanted. -# -# The ABI selection mechanism is unique to GMP. All that reaches autoconf -# is a different selection of CC/CFLAGS according to the best ABI the system -# supports, and/or what the user selects. Naturally the mpn assembler code -# selected is very dependent on the ABI. -# -# The closest the standard tools come to a notion of ABI is something like -# "sparc64" which encodes a CPU and an ABI together. This doesn't seem to -# scale well for GMP, where exact CPU types like "ultrasparc2" are wanted, -# separate from the ABI used on them. -# -# -# The variables set here are -# -# cclist the compiler choices -# xx_cflags flags for compiler xx -# xx_cflags_maybe flags for compiler xx, if they work -# xx_cppflags cpp flags for compiler xx -# xx_cflags_optlist list of sets of optional flags -# xx_cflags_yyy set yyy of optional flags for compiler xx -# xx_ldflags -Wc,-foo flags for libtool linking with compiler xx -# ar_flags extra flags for $AR -# nm_flags extra flags for $NM -# limb limb size, can be "longlong" -# path mpn search path -# extra_functions extra mpn functions -# fat_path fat binary mpn search path [if fat binary desired] -# fat_functions fat functions -# fat_thresholds fat thresholds -# -# Suppose xx_cflags_optlist="arch", then flags from $xx_cflags_arch are -# tried, and the first flag that works will be used. An optlist like "arch -# cpu optimize" can be used to get multiple independent sets of flags tried. -# The first that works from each will be used. If no flag in a set works -# then nothing from that set is added. -# -# For multiple ABIs, the scheme extends as follows. -# -# abilist set of ABI choices -# cclist_aa compiler choices in ABI aa -# xx_aa_cflags flags for xx in ABI aa -# xx_aa_cflags_maybe flags for xx in ABI aa, if they work -# xx_aa_cppflags cpp flags for xx in ABI aa -# xx_aa_cflags_optlist list of sets of optional flags in ABI aa -# xx_aa_cflags_yyy set yyy of optional flags for compiler xx in ABI aa -# xx_aa_ldflags -Wc,-foo flags for libtool linking -# ar_aa_flags extra flags for $AR in ABI aa -# nm_aa_flags extra flags for $NM in ABI aa -# limb_aa limb size in ABI aa, can be "longlong" -# path_aa mpn search path in ABI aa -# extra_functions_aa extra mpn functions in ABI aa -# -# As a convenience, the unadorned xx_cflags (etc) are used for the last ABI -# in ablist, if an xx_aa_cflags for that ABI isn't given. For example if -# abilist="64 32" then $cc_64_cflags will be used for the 64-bit ABI, but -# for the 32-bit either $cc_32_cflags or $cc_cflags is used, whichever is -# defined. This makes it easy to add some 64-bit compilers and flags to an -# unadorned 32-bit set. -# -# limb=longlong (or limb_aa=longlong) applies to all compilers within that -# ABI. It won't work to have some needing long long and some not, since a -# single instantiated gmp.h will be used by both. -# -# SPEED_CYCLECOUNTER, cyclecounter_size and CALLING_CONVENTIONS_OBJS are -# also set here, with an ABI suffix. -# -# -# -# A table-driven approach like this to mapping cpu type to good compiler -# options is a bit of a maintenance burden, but there's not much uniformity -# between options specifications on different compilers. Some sort of -# separately updatable tool might be cute. -# -# The use of lots of variables like this, direct and indirect, tends to -# obscure when and how various things are done, but unfortunately it's -# pretty much the only way. If shell subroutines were portable then actual -# code like "if this .. do that" could be written, but attempting the same -# with full copies of GMP_PROG_CC_WORKS etc expanded at every point would -# hugely bloat the output. - - -AC_ARG_VAR(ABI, [desired ABI (for processors supporting more than one ABI)]) - -# abilist needs to be non-empty, "standard" is just a generic name here -abilist="standard" - -# FIXME: We'd like to prefer an ANSI compiler, perhaps by preferring -# c89 over cc here. But note that on HP-UX c89 provides a castrated -# environment, and would want to be excluded somehow. Maybe -# AC_PROG_CC_STDC already does enough to stick cc into ANSI mode and -# we don't need to worry. -# -cclist="gcc cc" - -gcc_cflags="-O2 -pedantic" -gcc_64_cflags="-O2 -pedantic" -cc_cflags="-O" -cc_64_cflags="-O" - -SPEED_CYCLECOUNTER_OBJ= -cyclecounter_size=2 - -AC_SUBST(HAVE_HOST_CPU_FAMILY_power, 0) -AC_SUBST(HAVE_HOST_CPU_FAMILY_powerpc,0) - -case $host in - - alpha*-*-*) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_alpha) - case $host_cpu in - alphaev5* | alphapca5*) - path="alpha/ev5 alpha" ;; - alphaev67 | alphaev68 | alphaev7*) - path="alpha/ev67 alpha/ev6 alpha" ;; - alphaev6) - path="alpha/ev6 alpha" ;; - *) - path="alpha" ;; - esac - if test "$enable_assembly" = "yes" ; then - extra_functions="cntlz" - fi - gcc_cflags_optlist="asm cpu oldas" # need asm ahead of cpu, see below - gcc_cflags_maybe="-mieee" - gcc_cflags_oldas="-Wa,-oldas" # see GMP_GCC_WA_OLDAS. - - # gcc 2.7.2.3 doesn't know any -mcpu= for alpha, apparently. - # gcc 2.95 knows -mcpu= ev4, ev5, ev56, pca56, ev6. - # gcc 3.0 adds nothing. - # gcc 3.1 adds ev45, ev67 (but ev45 is the same as ev4). - # gcc 3.2 adds nothing. - # - # gcc version "2.9-gnupro-99r1" under "-O2 -mcpu=ev6" strikes internal - # compiler errors too easily and is rejected by GMP_PROG_CC_WORKS. Each - # -mcpu=ev6 below has a fallback to -mcpu=ev56 for this reason. - # - case $host_cpu in - alpha) gcc_cflags_cpu="-mcpu=ev4" ;; - alphaev5) gcc_cflags_cpu="-mcpu=ev5" ;; - alphaev56) gcc_cflags_cpu="-mcpu=ev56" ;; - alphapca56 | alphapca57) - gcc_cflags_cpu="-mcpu=pca56" ;; - alphaev6) gcc_cflags_cpu="-mcpu=ev6 -mcpu=ev56" ;; - alphaev67 | alphaev68 | alphaev7*) - gcc_cflags_cpu="-mcpu=ev67 -mcpu=ev6 -mcpu=ev56" ;; - esac - - # gcc version "2.9-gnupro-99r1" on alphaev68-dec-osf5.1 has been seen - # accepting -mcpu=ev6, but not putting the assembler in the right mode - # for what it produces. We need to do this for it, and need to do it - # before testing the -mcpu options. - # - # On old versions of gcc, which don't know -mcpu=, we believe an - # explicit -Wa,-mev5 etc will be necessary to put the assembler in - # the right mode for our .asm files and longlong.h asm blocks. - # - # On newer versions of gcc, when -mcpu= is known, we must give a -Wa - # which is at least as high as the code gcc will generate. gcc - # establishes what it needs with a ".arch" directive, our command line - # option seems to override that. - # - # gas prior to 2.14 doesn't accept -mev67, but -mev6 seems enough for - # ctlz and cttz (in 2.10.0 at least). - # - # OSF `as' accepts ev68 but stupidly treats it as ev4. -arch only seems - # to affect insns like ldbu which are expanded as macros when necessary. - # Insns like ctlz which were never available as macros are always - # accepted and always generate their plain code. - # - case $host_cpu in - alpha) gcc_cflags_asm="-Wa,-arch,ev4 -Wa,-mev4" ;; - alphaev5) gcc_cflags_asm="-Wa,-arch,ev5 -Wa,-mev5" ;; - alphaev56) gcc_cflags_asm="-Wa,-arch,ev56 -Wa,-mev56" ;; - alphapca56 | alphapca57) - gcc_cflags_asm="-Wa,-arch,pca56 -Wa,-mpca56" ;; - alphaev6) gcc_cflags_asm="-Wa,-arch,ev6 -Wa,-mev6" ;; - alphaev67 | alphaev68 | alphaev7*) - gcc_cflags_asm="-Wa,-arch,ev67 -Wa,-mev67 -Wa,-arch,ev6 -Wa,-mev6" ;; - esac - - # It might be better to ask "cc" whether it's Cray C or DEC C, - # instead of relying on the OS part of $host. But it's hard to - # imagine either of those compilers anywhere except their native - # systems. - # - GMP_INCLUDE_MPN(alpha/alpha-defs.m4) - case $host in - *-cray-unicos*) - cc_cflags="-O" # no -g, it silently disables all optimizations - GMP_INCLUDE_MPN(alpha/unicos.m4) - # Don't perform any assembly syntax tests on this beast. - gmp_asm_syntax_testing=no - ;; - *-*-osf*) - GMP_INCLUDE_MPN(alpha/default.m4) - cc_cflags="" - cc_cflags_optlist="opt cpu" - - # not sure if -fast works on old versions, so make it optional - cc_cflags_opt="-fast -O2" - - # DEC C V5.9-005 knows ev4, ev5, ev56, pca56, ev6. - # Compaq C V6.3-029 adds ev67. - # - case $host_cpu in - alpha) cc_cflags_cpu="-arch~ev4~-tune~ev4" ;; - alphaev5) cc_cflags_cpu="-arch~ev5~-tune~ev5" ;; - alphaev56) cc_cflags_cpu="-arch~ev56~-tune~ev56" ;; - alphapca56 | alphapca57) - cc_cflags_cpu="-arch~pca56~-tune~pca56" ;; - alphaev6) cc_cflags_cpu="-arch~ev6~-tune~ev6" ;; - alphaev67 | alphaev68 | alphaev7*) - cc_cflags_cpu="-arch~ev67~-tune~ev67 -arch~ev6~-tune~ev6" ;; - esac - ;; - *) - GMP_INCLUDE_MPN(alpha/default.m4) - ;; - esac - - case $host in - *-*-unicos*) - # tune/alpha.asm assumes int==4bytes but unicos uses int==8bytes - ;; - *) - SPEED_CYCLECOUNTER_OBJ=alpha.lo - cyclecounter_size=1 ;; - esac - ;; - - - # Cray vector machines. - # This must come after alpha* so that we can recognize present and future - # vector processors with a wildcard. - *-cray-unicos*) - gmp_asm_syntax_testing=no - cclist="cc" - # We used to have -hscalar0 here as a workaround for miscompilation of - # mpz/import.c, but let's hope Cray fixes their bugs instead, since - # -hscalar0 causes disastrously poor code to be generated. - cc_cflags="-O3 -hnofastmd -htask0 -Wa,-B" - path="cray" - ;; - - - arm*-*-* | aarch64*-*-*) - abilist="32" - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_cflags_optlist="arch fpmode neon tune" - gcc_64_cflags_optlist="arch tune" - gcc_testlist="gcc-arm-umodsi" - gcc_64_testlist="" - CALLING_CONVENTIONS_OBJS='arm32call.lo arm32check.lo' - CALLING_CONVENTIONS_OBJS_64="" - cclist_64="gcc cc" - any_32_testlist="sizeof-void*-4" - any_64_testlist="sizeof-void*-8" - - # This is needed for clang, which is not content with flags like -mfpu=neon - # alone. - case $host in - *-*-*eabi) - gcc_cflags_fpmode="-mfloat-abi=softfp" ;; - *-*-*eabihf) - gcc_cflags_fpmode="-mfloat-abi=hard" ;; - *-*-mingw*) - limb_64=longlong ;; - esac - - # FIXME: We make mandatory compiler options optional here. We should - # either enforce them, or organise to strip paths as the corresponding - # options fail. - case $host_cpu in - armxscale | arm7ej | arm9te | arm9e* | arm10* | armv5*) - path="arm/v5 arm" - gcc_cflags_arch="-march=armv5" - ;; - armsa1 | arm7t* | arm9t* | armv4t*) - path="arm" - gcc_cflags_arch="-march=armv4" - ;; - arm1156 | armv6t2*) - path="arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv6t2" - ;; - arm11* | armv6*) - path="arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv6" - ;; - armcortexa5 | armv7*) - path="arm/v7a/cora5 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a5" - ;; - armcortexa5neon) - path="arm/neon arm/v7a/cora5 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a5" - ;; - armcortexa7) - path="arm/v7a/cora7 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7ve -march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a7" - ;; - armcortexa7neon) - path="arm/neon arm/v7a/cora7 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7ve -march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a7" - ;; - armcortexa8) - path="arm/v7a/cora8 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a8" - ;; - armcortexa8neon) - path="arm/neon arm/v7a/cora8 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a8" - ;; - armcortexa9) - path="arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a9" - ;; - armcortexa9neon) - path="arm/neon arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a9" - ;; - armcortexa15) - path="arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7ve -march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" - ;; - armcortexa15neon) - path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7ve -march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" - ;; - armcortexa12 | armcortexa17) - path="arm/v7a/cora17 arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7ve -march=armv7-a" - gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" - ;; - armcortexa12neon | armcortexa17neon) - path="arm/v7a/cora17/neon arm/v7a/cora15/neon arm/neon arm/v7a/cora17 arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - gcc_cflags_arch="-march=armv7ve -march=armv7-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" - ;; - armcortexa53 | armcortexa53neon | armcortexa55 | armcortexa55neon) - abilist="64 32" - path="arm/neon arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" - path_64="arm64/cora53 arm64" - gcc_cflags_arch="-march=armv8-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a53" - ;; - armcortexa57 | armcortexa57neon) - abilist="64 32" - path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - path_64="arm64/cora57 arm64" - gcc_cflags_arch="-march=armv8-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a57" - ;; - [armcortexa7[2-9] | armcortexa7[2-9]neon]) - abilist="64 32" - path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - path_64="arm64/cora57 arm64" - gcc_cflags_arch="-march=armv8-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=cortex-a72 -mtune=cortex-a57" - ;; - armexynosm1) - abilist="64 32" - path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - path_64="arm64" - gcc_cflags_arch="-march=armv8-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=exynosm1" - ;; - armthunderx) - abilist="64 32" - path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - path_64="arm64" - gcc_cflags_arch="-march=armv8-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=thunderx" - ;; - armxgene1) - abilist="64 32" - path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - path_64="arm64/xgene1 arm64" - gcc_cflags_arch="-march=armv8-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="-mtune=xgene1" - ;; - aarch64*) - abilist="64 32" - path="arm/v7a/cora15/neon arm/neon arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" - path_64="arm64" - gcc_cflags_arch="-march=armv8-a" - gcc_cflags_neon="-mfpu=neon" - gcc_cflags_tune="" - ;; - *) - path="arm" - gcc_cflags_arch="-march=armv4" - GMP_DEFINE_RAW(["define(<NOTHUMB>,1)"]) - ;; - esac - ;; - - - # Fujitsu - [f30[01]-fujitsu-sysv*]) - cclist="gcc vcc" - # FIXME: flags for vcc? - vcc_cflags="-g" - path="fujitsu" - ;; - - - hppa*-*-*) - # HP cc (the one sold separately) is K&R by default, but AM_C_PROTOTYPES - # will add "-Ae", or "-Aa -D_HPUX_SOURCE", to put it into ansi mode, if - # possible. - # - # gcc for hppa 2.0 can be built either for 2.0n (32-bit) or 2.0w - # (64-bit), but not both, so there's no option to choose the desired - # mode, we must instead detect which of the two it is. This is done by - # checking sizeof(long), either 4 or 8 bytes respectively. Do this in - # ABI=1.0 too, in case someone tries to build that with a 2.0w gcc. - # - gcc_cflags_optlist="arch" - gcc_testlist="sizeof-long-4" - SPEED_CYCLECOUNTER_OBJ=hppa.lo - cyclecounter_size=1 - - # FIXME: For hppa2.0*, path should be "pa32/hppa2_0 pa32/hppa1_1 pa32". - # (Can't remember why this isn't done already, have to check what .asm - # files are available in each and how they run on a typical 2.0 cpu.) - # - case $host_cpu in - hppa1.0*) path="pa32" ;; - hppa7000*) path="pa32/hppa1_1 pa32" ;; - hppa2.0* | hppa64) - path="pa32/hppa2_0 pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;; - *) # default to 7100 - path="pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;; - esac - - # gcc 2.7.2.3 knows -mpa-risc-1-0 and -mpa-risc-1-1 - # gcc 2.95 adds -mpa-risc-2-0, plus synonyms -march=1.0, 1.1 and 2.0 - # - # We don't use -mpa-risc-2-0 in ABI=1.0 because 64-bit registers may not - # be saved by the kernel on an old system. Actually gcc (as of 3.2) - # only adds a few float instructions with -mpa-risc-2-0, so it would - # probably be safe, but let's not take the chance. In any case, a - # configuration like --host=hppa2.0 ABI=1.0 is far from optimal. - # - case $host_cpu in - hppa1.0*) gcc_cflags_arch="-mpa-risc-1-0" ;; - *) # default to 7100 - gcc_cflags_arch="-mpa-risc-1-1" ;; - esac - - case $host_cpu in - hppa1.0*) cc_cflags="+O2" ;; - *) # default to 7100 - cc_cflags="+DA1.1 +O2" ;; - esac - - case $host in - hppa2.0*-*-* | hppa64-*-*) - cclist_20n="gcc cc" - abilist="2.0n 1.0" - path_20n="pa64" - limb_20n=longlong - any_20n_testlist="sizeof-long-4" - SPEED_CYCLECOUNTER_OBJ_20n=hppa2.lo - cyclecounter_size_20n=2 - - # -mpa-risc-2-0 is only an optional flag, in case an old gcc is - # used. Assembler support for 2.0 is essential though, for our asm - # files. - gcc_20n_cflags="$gcc_cflags" - gcc_20n_cflags_optlist="arch" - gcc_20n_cflags_arch="-mpa-risc-2-0 -mpa-risc-1-1" - gcc_20n_testlist="sizeof-long-4 hppa-level-2.0" - - cc_20n_cflags="+DA2.0 +e +O2 -Wl,+vnocompatwarnings" - cc_20n_testlist="hpc-hppa-2-0" - - # ABI=2.0w is available for hppa2.0w and hppa2.0, but not for - # hppa2.0n, on the assumption that that the latter indicates a - # desire for ABI=2.0n. - case $host in - hppa2.0n-*-*) ;; - *) - # HPUX 10 and earlier cannot run 2.0w. Not sure about other - # systems (GNU/Linux for instance), but lets assume they're ok. - case $host in - [*-*-hpux[1-9] | *-*-hpux[1-9].* | *-*-hpux10 | *-*-hpux10.*]) ;; - *) abilist="2.0w $abilist" ;; - esac - - cclist_20w="gcc cc" - gcc_20w_cflags="$gcc_cflags -mpa-risc-2-0" - cc_20w_cflags="+DD64 +O2" - cc_20w_testlist="hpc-hppa-2-0" - path_20w="pa64" - any_20w_testlist="sizeof-long-8" - SPEED_CYCLECOUNTER_OBJ_20w=hppa2w.lo - cyclecounter_size_20w=2 - ;; - esac - ;; - esac - ;; - - - IA64_PATTERN) - abilist="64" - GMP_INCLUDE_MPN(ia64/ia64-defs.m4) - SPEED_CYCLECOUNTER_OBJ=ia64.lo - any_32_testlist="sizeof-long-4" - - case $host_cpu in - itanium) path="ia64/itanium ia64" ;; - itanium2) path="ia64/itanium2 ia64" ;; - *) path="ia64" ;; - esac - - gcc_64_cflags_optlist="tune" - gcc_32_cflags_optlist=$gcc_64_cflags_optlist - - # gcc pre-release 3.4 adds -mtune itanium and itanium2 - case $host_cpu in - itanium) gcc_cflags_tune="-mtune=itanium" ;; - itanium2) gcc_cflags_tune="-mtune=itanium2" ;; - esac - - case $host in - *-*-linux*) - cclist="gcc icc" - icc_cflags="-no-gcc" - icc_cflags_optlist="opt" - # Don't use -O3, it is for "large data sets" and also miscompiles GMP. - # But icc miscompiles GMP at any optimization level, at higher levels - # it miscompiles more files... - icc_cflags_opt="-O2 -O1" - icc_cflags_opt_maybe="-fp-model~precise" - ;; - - *-*-hpux*) - # HP cc sometimes gets internal errors if the optimization level is - # too high. GMP_PROG_CC_WORKS detects this, the "_opt" fallbacks - # let us use whatever seems to work. - # - abilist="32 64" - any_64_testlist="sizeof-long-8" - - cclist_32="gcc cc" - path_32="ia64" - cc_32_cflags="" - cc_32_cflags_optlist="opt" - cc_32_cflags_opt="+O2 +O1" - gcc_32_cflags="$gcc_cflags -milp32" - limb_32=longlong - SPEED_CYCLECOUNTER_OBJ_32=ia64.lo - cyclecounter_size_32=2 - - # Must have +DD64 in CPPFLAGS to get the right __LP64__ for headers, - # but also need it in CFLAGS for linking programs, since automake - # only uses CFLAGS when linking, not CPPFLAGS. - # FIXME: Maybe should use cc_64_ldflags for this, but that would - # need GMP_LDFLAGS used consistently by all the programs. - # - cc_64_cflags="+DD64" - cc_64_cppflags="+DD64" - cc_64_cflags_optlist="opt" - cc_64_cflags_opt="+O2 +O1" - gcc_64_cflags="$gcc_cflags -mlp64" - ;; - esac - ;; - - - # Motorola 68k - # - M68K_PATTERN) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_m68k) - GMP_INCLUDE_MPN(m68k/m68k-defs.m4) - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_cflags_optlist="arch" - - # gcc 2.7.2 knows -m68000, -m68020, -m68030, -m68040. - # gcc 2.95 adds -mcpu32, -m68060. - # FIXME: Maybe "-m68020 -mnobitfield" would suit cpu32 on 2.7.2. - # - case $host_cpu in - m68020) gcc_cflags_arch="-m68020" ;; - m68030) gcc_cflags_arch="-m68030" ;; - m68040) gcc_cflags_arch="-m68040" ;; - m68060) gcc_cflags_arch="-m68060 -m68000" ;; - m68360) gcc_cflags_arch="-mcpu32 -m68000" ;; - *) gcc_cflags_arch="-m68000" ;; - esac - - # FIXME: m68k/mc68020 looks like it's ok for cpu32, but this wants to be - # tested. Will need to introduce an m68k/cpu32 if m68k/mc68020 ever uses - # the bitfield instructions. - case $host_cpu in - [m680[234]0 | m68360]) path="m68k/mc68020 m68k" ;; - *) path="m68k" ;; - esac - ;; - - - # Motorola 88k - m88k*-*-*) - path="m88k" - ;; - m88110*-*-*) - gcc_cflags="$gcc_cflags -m88110" - path="m88k/mc88110 m88k" - ;; - - - # IRIX 5 and earlier can only run 32-bit o32. - # - # IRIX 6 and up always has a 64-bit mips CPU can run n32 or 64. n32 is - # preferred over 64, but only because that's been the default in past - # versions of GMP. The two are equally efficient. - # - # Linux kernel 2.2.13 arch/mips/kernel/irixelf.c has a comment about not - # supporting n32 or 64. - # - # For reference, libtool (eg. 1.5.6) recognises the n32 ABI and knows the - # right options to use when linking (both cc and gcc), so no need for - # anything special from us. - # - mips*-*-*) - abilist="o32" - gcc_cflags_optlist="abi" - gcc_cflags_abi="-mabi=32 -m32" - gcc_testlist="gcc-mips-o32" - path="mips32" - cc_cflags="-O2 -o32" # no -g, it disables all optimizations - # this suits both mips32 and mips64 - GMP_INCLUDE_MPN(mips32/mips-defs.m4) - - case $host in - [mips64*-*-* | mipsisa64*-*-* | mips*-*-irix[6789]*]) - abilist="n32 64 o32" - - cclist_n32="gcc cc" - gcc_n32_cflags_optlist="abi" - gcc_n32_cflags="$gcc_cflags" - gcc_n32_cflags_abi="-mabi=n32 -mn32" - cc_n32_cflags="-O2 -n32" # no -g, it disables all optimizations - limb_n32=longlong - - cclist_64="gcc cc" - gcc_64_cflags_optlist="abi" - gcc_64_cflags="$gcc_cflags" - gcc_64_cflags_abi="-mabi=64 -m64" - gcc_64_ldflags="-Wc,-mabi=64" - cc_64_cflags="-O2 -64" # no -g, it disables all optimizations - cc_64_ldflags="-Wc,-64" - - case $host_cpu in - [mips64r[6789]* | mipsisa64r[6789]*]) - path_n32="mips64/r6 mips64" - path_64="mips64/r6 mips64" - ;; - *) - path_n32="mips64/hilo mips64" - path_64="mips64/hilo mips64" - ;; - esac - - ;; - esac - ;; - - - # Darwin (powerpc-apple-darwin1.3) has it's hacked gcc installed as cc. - # Our usual "gcc in disguise" detection means gcc_cflags etc here gets - # used. - # - # The darwin pre-compiling preprocessor is disabled with -no-cpp-precomp - # since it doesn't like "__attribute__ ((mode (SI)))" etc in gmp-impl.h, - # and so always ends up running the plain preprocessor anyway. This could - # be done in CPPFLAGS rather than CFLAGS, but there's not many places - # preprocessing is done separately, and this is only a speedup, the normal - # preprocessor gets run if there's any problems. - # - # We used to use -Wa,-mppc with gcc, but can't remember exactly why. - # Presumably it was for old versions of gcc where -mpowerpc doesn't put - # the assembler in the right mode. In any case -Wa,-mppc is not good, for - # instance -mcpu=604 makes recent gcc use -m604 to get access to the - # "fsel" instruction, but a -Wa,-mppc overrides that, making code that - # comes out with fsel fail. - # - # (Note also that the darwin assembler doesn't accept "-mppc", so any - # -Wa,-mppc was used only if it worked. The right flag on darwin would be - # "-arch ppc" or some such, but that's already the default.) - # - [powerpc*-*-* | power[3-9]-*-*]) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_powerpc) - HAVE_HOST_CPU_FAMILY_powerpc=1 - abilist="32" - cclist="gcc cc" - cc_cflags="-O2" - gcc_32_cflags_maybe="-m32" - gcc_cflags_optlist="precomp subtype asm cpu" - gcc_cflags_precomp="-no-cpp-precomp" - gcc_cflags_subtype="-force_cpusubtype_ALL" # for vmx on darwin - gcc_cflags_asm="" - gcc_cflags_cpu="" - vmx_path="" - - # grab this object, though it's not a true cycle counter routine - SPEED_CYCLECOUNTER_OBJ=powerpc.lo - cyclecounter_size=0 - - case $host_cpu in - powerpc740 | powerpc750) - path="powerpc32/750 powerpc32" ;; - powerpc7400 | powerpc7410) - path="powerpc32/vmx powerpc32/750 powerpc32" ;; - [powerpc74[45]?]) - path="powerpc32/vmx powerpc32" ;; - *) - path="powerpc32" ;; - esac - - case $host_cpu in - powerpc401) gcc_cflags_cpu="-mcpu=401" ;; - powerpc403) gcc_cflags_cpu="-mcpu=403" - xlc_cflags_arch="-qarch=403 -qarch=ppc" ;; - powerpc405) gcc_cflags_cpu="-mcpu=405" ;; - powerpc505) gcc_cflags_cpu="-mcpu=505" ;; - powerpc601) gcc_cflags_cpu="-mcpu=601" - xlc_cflags_arch="-qarch=601 -qarch=ppc" ;; - powerpc602) gcc_cflags_cpu="-mcpu=602" - xlc_cflags_arch="-qarch=602 -qarch=ppc" ;; - powerpc603) gcc_cflags_cpu="-mcpu=603" - xlc_cflags_arch="-qarch=603 -qarch=ppc" ;; - powerpc603e) gcc_cflags_cpu="-mcpu=603e -mcpu=603" - xlc_cflags_arch="-qarch=603 -qarch=ppc" ;; - powerpc604) gcc_cflags_cpu="-mcpu=604" - xlc_cflags_arch="-qarch=604 -qarch=ppc" ;; - powerpc604e) gcc_cflags_cpu="-mcpu=604e -mcpu=604" - xlc_cflags_arch="-qarch=604 -qarch=ppc" ;; - powerpc620) gcc_cflags_cpu="-mcpu=620" ;; - powerpc630) gcc_cflags_cpu="-mcpu=630" - xlc_cflags_arch="-qarch=pwr3" - cpu_path="p3 p3-p7" ;; - powerpc740) gcc_cflags_cpu="-mcpu=740" ;; - powerpc7400 | powerpc7410) - gcc_cflags_asm="-Wa,-maltivec" - gcc_cflags_cpu="-mcpu=7400 -mcpu=750" ;; - [powerpc74[45]?]) - gcc_cflags_asm="-Wa,-maltivec" - gcc_cflags_cpu="-mcpu=7450" ;; - powerpc750) gcc_cflags_cpu="-mcpu=750" ;; - powerpc801) gcc_cflags_cpu="-mcpu=801" ;; - powerpc821) gcc_cflags_cpu="-mcpu=821" ;; - powerpc823) gcc_cflags_cpu="-mcpu=823" ;; - powerpc860) gcc_cflags_cpu="-mcpu=860" ;; - powerpc970) gcc_cflags_cpu="-mtune=970" - xlc_cflags_arch="-qarch=970 -qarch=pwr3" - vmx_path="powerpc64/vmx" - cpu_path="p4 p3-p7" ;; - power4) gcc_cflags_cpu="-mtune=power4" - xlc_cflags_arch="-qarch=pwr4" - cpu_path="p4 p3-p7" ;; - power5) gcc_cflags_cpu="-mtune=power5 -mtune=power4" - xlc_cflags_arch="-qarch=pwr5" - cpu_path="p5 p4 p3-p7" ;; - power6) gcc_cflags_cpu="-mtune=power6" - xlc_cflags_arch="-qarch=pwr6" - cpu_path="p6 p3-p7" ;; - power7) gcc_cflags_cpu="-mtune=power7 -mtune=power5" - xlc_cflags_arch="-qarch=pwr7 -qarch=pwr5" - cpu_path="p7 p5 p4 p3-p7" ;; - power8) gcc_cflags_cpu="-mtune=power8 -mtune=power7 -mtune=power5" - xlc_cflags_arch="-qarch=pwr8 -qarch=pwr7 -qarch=pwr5" - cpu_path="p8 p7 p5 p4 p3-p7" ;; - power9) gcc_cflags_cpu="-mtune=power9 -mtune=power8 -mtune=power7 -mtune=power5" - xlc_cflags_arch="-qarch=pwr9 -qarch=pwr8 -qarch=pwr7 -qarch=pwr5" - cpu_path="p9 p8 p7 p5 p4 p3-p7" ;; - esac - - case $host in - *-*-aix*) - cclist="gcc xlc cc" - gcc_32_cflags_maybe="-maix32" - xlc_cflags="-O2 -qmaxmem=20000" - xlc_cflags_optlist="arch" - xlc_32_cflags_maybe="-q32" - ar_32_flags="-X32" - nm_32_flags="-X32" - esac - - case $host in - POWERPC64_PATTERN) - case $host in - *-*-aix*) - # On AIX a true 64-bit ABI is available. - # Need -Wc to pass object type flags through to the linker. - abilist="mode64 $abilist" - cclist_mode64="gcc xlc" - gcc_mode64_cflags="$gcc_cflags -maix64 -mpowerpc64" - gcc_mode64_cflags_optlist="cpu" - gcc_mode64_ldflags="-Wc,-maix64" - xlc_mode64_cflags="-O2 -q64 -qmaxmem=20000" - xlc_mode64_cflags_optlist="arch" - xlc_mode64_ldflags="-Wc,-q64" - # Must indicate object type to ar and nm - ar_mode64_flags="-X64" - nm_mode64_flags="-X64" - path_mode64="" - p="" - for i in $cpu_path - do path_mode64="${path_mode64}powerpc64/mode64/$i " - path_mode64="${path_mode64}powerpc64/$i " - p="${p} powerpc32/$i " - done - path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" - path="$p $path" - # grab this object, though it's not a true cycle counter routine - SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo - cyclecounter_size_mode64=0 - ;; - *-*-darwin*) - # On Darwin we can use 64-bit instructions with a longlong limb, - # but the chip still in 32-bit mode. - # In theory this can be used on any OS which knows how to save - # 64-bit registers in a context switch. - # - # Note that we must use -mpowerpc64 with gcc, since the - # longlong.h macros expect limb operands in a single 64-bit - # register, not two 32-bit registers as would be given for a - # long long without -mpowerpc64. In theory we could detect and - # accommodate both styles, but the proper 64-bit registers will - # be fastest and are what we really want to use. - # - # One would think -mpowerpc64 would set the assembler in the right - # mode to handle 64-bit instructions. But for that, also - # -force_cpusubtype_ALL is needed. - # - # Do not use -fast for Darwin, it actually adds options - # incompatible with a shared library. - # - abilist="mode64 mode32 $abilist" - gcc_cflags_opt="-O2 -O1" # will this become used? - cclist_mode32="gcc" - gcc_mode32_cflags_maybe="-m32" - gcc_mode32_cflags="-mpowerpc64" - gcc_mode32_cflags_optlist="subtype cpu opt" - gcc_mode32_cflags_subtype="-force_cpusubtype_ALL" - gcc_mode32_cflags_opt="-O2 -O1" - limb_mode32=longlong - cclist_mode64="gcc" - gcc_mode64_cflags="-m64" - gcc_mode64_cflags_optlist="cpu opt" - gcc_mode64_cflags_opt="-O2 -O1" - path_mode64="" - path_mode32="" - p="" - for i in $cpu_path - do path_mode64="${path_mode64}powerpc64/mode64/$i " - path_mode64="${path_mode64}powerpc64/$i " - path_mode32="${path_mode32}powerpc64/mode32/$i " - path_mode32="${path_mode32}powerpc64/$i " - p="${p} powerpc32/$i " - done - path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" - path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64" - path="$p $path" - SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo - cyclecounter_size_mode64=0 - any_mode64_testlist="sizeof-long-8" - ;; - *-*-linux* | *-*-*bsd*) - # On GNU/Linux, assume the processor is in 64-bit mode. Some - # environments have a gcc that is always in 64-bit mode, while - # others require -m64, hence the use of cflags_maybe. The - # sizeof-long-8 test checks the mode is right (for the no option - # case). - # - # -mpowerpc64 is not used, since it should be the default in - # 64-bit mode. (We need its effect for the various longlong.h - # asm macros to be right of course.) - # - # gcc64 was an early port of gcc to 64-bit mode, but should be - # obsolete before too long. We prefer plain gcc when it knows - # 64-bits. - # - abilist="mode64 mode32 $abilist" - cclist_mode32="gcc" - gcc_mode32_cflags_maybe="-m32" - gcc_mode32_cflags="-mpowerpc64" - gcc_mode32_cflags_optlist="cpu opt" - gcc_mode32_cflags_opt="-O2 -O1" - limb_mode32=longlong - cclist_mode64="gcc gcc64" - gcc_mode64_cflags_maybe="-m64" - gcc_mode64_cflags_optlist="cpu opt" - gcc_mode64_cflags_opt="-O2 -O1" - path_mode64="" - path_mode32="" - p="" - for i in $cpu_path - do path_mode64="${path_mode64}powerpc64/mode64/$i " - path_mode64="${path_mode64}powerpc64/$i " - path_mode32="${path_mode32}powerpc64/mode32/$i " - path_mode32="${path_mode32}powerpc64/$i " - p="${p} powerpc32/$i " - done - path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" - path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64" - path="$p $path" - SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo - cyclecounter_size_mode64=0 - any_mode64_testlist="sizeof-long-8" - ;; - esac - ;; - esac - ;; - - - # POWER 32-bit - [power-*-* | power[12]-*-* | power2sc-*-*]) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_power) - HAVE_HOST_CPU_FAMILY_power=1 - cclist="gcc" - if test "$enable_assembly" = "yes" ; then - extra_functions="udiv_w_sdiv" - fi - path="power" - - # gcc 2.7.2 knows rios1, rios2, rsc - # - # -mcpu=rios2 can tickle an AIX assembler bug (see GMP_PROG_CC_WORKS) so - # there needs to be a fallback to just -mpower. - # - gcc_cflags_optlist="cpu" - case $host in - power-*-*) gcc_cflags_cpu="-mcpu=power -mpower" ;; - power1-*-*) gcc_cflags_cpu="-mcpu=rios1 -mpower" ;; - power2-*-*) gcc_cflags_cpu="-mcpu=rios2 -mpower" ;; - power2sc-*-*) gcc_cflags_cpu="-mcpu=rsc -mpower" ;; - esac - case $host in - *-*-aix*) - cclist="gcc xlc" - xlc_cflags="-O2 -qarch=pwr -qmaxmem=20000" - ;; - esac - ;; - - - # RISC-V - [riscv64-*-*]) - cclist="gcc" - path="riscv/64" - ;; - - - # IBM System/390 and z/Architecture - S390_PATTERN | S390X_PATTERN) - abilist="32" - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_cflags_optlist="arch" - path="s390_32" - if test "$enable_assembly" = "yes" ; then - extra_functions="udiv_w_sdiv" - fi - gcc_32_cflags_maybe="-m31" - - case $host_cpu in - s390) - ;; - z900 | z900esa) - cpu="z900" - gccarch="$cpu" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) - AC_DEFINE(HAVE_HOST_CPU_s390_zarch) - extra_functions="" - ;; - z990 | z990esa) - cpu="z990" - gccarch="$cpu" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) - AC_DEFINE(HAVE_HOST_CPU_s390_zarch) - extra_functions="" - ;; - z9 | z9esa) - cpu="z9" - gccarch="z9-109" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) - AC_DEFINE(HAVE_HOST_CPU_s390_zarch) - extra_functions="" - ;; - z10 | z10esa) - cpu="z10" - gccarch="z10" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) - AC_DEFINE(HAVE_HOST_CPU_s390_zarch) - extra_functions="" - ;; - z196 | z196esa) - cpu="z196" - gccarch="z196" - path="s390_32/esame/$cpu s390_32/esame s390_32" - gcc_cflags_arch="-march=$gccarch" - AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) - AC_DEFINE(HAVE_HOST_CPU_s390_zarch) - extra_functions="" - ;; - esac - - case $host in - S390X_PATTERN) - abilist="64 32" - cclist_64="gcc" - gcc_64_cflags_optlist="arch" - gcc_64_cflags="$gcc_cflags -m64" - path_64="s390_64/$host_cpu s390_64" - extra_functions="" - ;; - esac - ;; - - - sh-*-*) path="sh" ;; - [sh[2-4]-*-*]) path="sh/sh2 sh" ;; - - - *sparc*-*-*) - # sizeof(long)==4 or 8 is tested, to ensure we get the right ABI. We've - # had various bug reports where users have set CFLAGS for their desired - # mode, but not set our ABI. For some reason it's sparc where this - # keeps coming up, presumably users there are accustomed to driving the - # compiler mode that way. The effect of our testlist setting is to - # reject ABI=64 in favour of ABI=32 if the user has forced the flags to - # 32-bit mode. - # - abilist="32" - cclist="gcc acc cc" - any_testlist="sizeof-long-4" - GMP_INCLUDE_MPN(sparc32/sparc-defs.m4) - - case $host_cpu in - sparcv8 | microsparc | turbosparc) - path="sparc32/v8 sparc32" ;; - supersparc) - path="sparc32/v8/supersparc sparc32/v8 sparc32" ;; - [sparc64 | sparcv9* | ultrasparc | ultrasparc[234]*]) - path="sparc32/v9 sparc32/v8 sparc32" ;; - [ultrasparct[12345]]) - path="sparc32/ultrasparct1 sparc32/v8 sparc32" ;; - *) - path="sparc32" ;; - esac - - # gcc 2.7.2 doesn't know about v9 and doesn't pass -xarch=v8plus to the - # assembler. Add it explicitly since the solaris assembler won't accept - # our sparc32/v9 asm code without it. gas accepts -xarch=v8plus too, so - # it can be in the cflags unconditionally (though gas doesn't need it). - # - # gcc -m32 is needed to force 32-bit mode on a dual-ABI system, but past - # gcc doesn't know that flag, hence cflags_maybe. Note that -m32 cannot - # be done through the optlist since the plain cflags would be run first - # and we don't want to require the default mode (whatever it is) works. - # - # Note it's gcc_32_cflags_maybe and not gcc_cflags_maybe because the - # latter would be used in the 64-bit ABI on systems like "*bsd" where - # abilist="64" only. - # - gcc_32_cflags_maybe="-m32" - gcc_cflags_optlist="cpu asm" - - # gcc 2.7.2 knows -mcypress, -msupersparc, -mv8, -msparclite. - # gcc 2.95 knows -mcpu= v7, hypersparc, sparclite86x, f930, f934, - # sparclet, tsc701, v9, ultrasparc. A warning is given that the - # plain -m forms will disappear. - # gcc 3.3 adds ultrasparc3. - # - case $host_cpu in - supersparc*) - gcc_cflags_cpu="-mcpu=supersparc -msupersparc" - gcc_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8";; - sparcv8 | microsparc* | turbosparc | hypersparc*) - gcc_cflags_cpu="-mcpu=v8 -mv8" - gcc_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8";; - sparc64 | sparcv9*) - gcc_cflags_cpu="-mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8 -Wa,-xarch=v8plus" - gcc_64_cflags_asm="-Wa,-Av9 -Wa,-xarch=v9";; - ultrasparc1 | ultrasparc2*) - gcc_cflags_cpu="-mcpu=ultrasparc -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusa -Wa,-xarch=v8plusa" - gcc_64_cflags_asm="-Wa,-Av9a -Wa,-xarch=v9a";; - [ultrasparc[34]]) - gcc_cflags_cpu="-mcpu=ultrasparc3 -mcpu=ultrasparc -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusb -Wa,-xarch=v8plusb" - gcc_64_cflags_asm="-Wa,-Av9b -Wa,-xarch=v9b";; - [ultrasparct[12]]) - gcc_cflags_cpu="-mcpu=niagara -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusc -Wa,-xarch=v8plusc" - gcc_64_cflags_asm="-Wa,-Av9c -Wa,-xarch=v9c";; - ultrasparct3) - gcc_cflags_cpu="-mcpu=niagara3 -mcpu=niagara -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusd -Wa,-xarch=v8plusd" - gcc_64_cflags_asm="-Wa,-Av9d -Wa,-xarch=v9d";; - [ultrasparct[45]]) - gcc_cflags_cpu="-mcpu=niagara4 -mcpu=niagara3 -mcpu=niagara -mcpu=v9" - gcc_32_cflags_asm="-Wa,-Av8plusd -Wa,-xarch=v8plusd" - gcc_64_cflags_asm="-Wa,-Av9d -Wa,-xarch=v9d";; - *) - gcc_cflags_cpu="-mcpu=v7 -mcypress" - gcc_cflags_asm="";; - esac - - # SunPRO cc and acc, and SunOS bundled cc - case $host in - *-*-solaris* | *-*-sunos*) - # Note no -g, it disables all optimizations. - cc_cflags= - cc_cflags_optlist="opt arch cpu" - - # SunOS <= 4 cc doesn't know -xO3, fallback to -O2. - cc_cflags_opt="-xO3 -O2" - - # SunOS cc doesn't know -xarch, apparently always generating v7 - # code, so make this optional - case $host_cpu in - sparcv8 | microsparc* | supersparc* | turbosparc | hypersparc*) - cc_cflags_arch="-xarch=v8";; - [ultrasparct[345]]) - cc_cflags_arch="-xarch=v8plusd" ;; - sparc64 | sparcv9* | ultrasparc*) - cc_cflags_arch="-xarch=v8plus" ;; - *) - cc_cflags_arch="-xarch=v7" ;; - esac - - # SunOS cc doesn't know -xchip and doesn't seem to have an equivalent. - # SunPRO cc 5 recognises -xchip=generic, old, super, super2, micro, - # micro2, hyper, hyper2, powerup, ultra, ultra2, ultra2i. - # SunPRO cc 6 adds -xchip=ultra2e, ultra3cu. - # - case $host_cpu in - supersparc*) cc_cflags_cpu="-xchip=super" ;; - microsparc*) cc_cflags_cpu="-xchip=micro" ;; - turbosparc) cc_cflags_cpu="-xchip=micro2" ;; - hypersparc*) cc_cflags_cpu="-xchip=hyper" ;; - ultrasparc) cc_cflags_cpu="-xchip=ultra" ;; - ultrasparc2) cc_cflags_cpu="-xchip=ultra2 -xchip=ultra" ;; - ultrasparc2i) cc_cflags_cpu="-xchip=ultra2i -xchip=ultra2 -xchip=ultra" ;; - ultrasparc3) cc_cflags_cpu="-xchip=ultra3 -xchip=ultra" ;; - ultrasparc4) cc_cflags_cpu="-xchip=ultra4 -xchip=ultra3 -xchip=ultra" ;; - ultrasparct1) cc_cflags_cpu="-xchip=ultraT1" ;; - ultrasparct2) cc_cflags_cpu="-xchip=ultraT2 -xchip=ultraT1" ;; - ultrasparct3) cc_cflags_cpu="-xchip=ultraT3 -xchip=ultraT2" ;; - ultrasparct4) cc_cflags_cpu="-xchip=T4" ;; - ultrasparct5) cc_cflags_cpu="-xchip=T5 -xchip=T4" ;; - *) cc_cflags_cpu="-xchip=generic" ;; - esac - esac - - case $host_cpu in - sparc64 | sparcv9* | ultrasparc*) - case $host in - # Solaris 6 and earlier cannot run ABI=64 since it doesn't save - # registers properly, so ABI=32 is left as the only choice. - # - [*-*-solaris2.[0-6] | *-*-solaris2.[0-6].*]) ;; - - # BSD sparc64 ports are 64-bit-only systems, so ABI=64 is the only - # choice. In fact they need no special compiler flags, gcc -m64 - # is the default, but it doesn't hurt to add it. v9 CPUs always - # use the sparc64 port, since the plain 32-bit sparc ports don't - # run on a v9. - # - *-*-*bsd*) abilist="64" ;; - - # For all other systems, we try both 64 and 32. - # - # GNU/Linux sparc64 has only recently gained a 64-bit user mode. - # In the past sparc64 meant a v9 cpu, but there were no 64-bit - # operations in user mode. We assume that if "gcc -m64" works - # then the system is suitable. Hopefully even if someone attempts - # to put a new gcc and/or glibc on an old system it won't run. - # - *) abilist="64 32" ;; - esac - - case $host_cpu in - ultrasparc | ultrasparc2 | ultrasparc2i) - path_64="sparc64/ultrasparc1234 sparc64" ;; - [ultrasparc[34]]) - path_64="sparc64/ultrasparc34 sparc64/ultrasparc1234 sparc64" ;; - [ultrasparct[12]]) - path_64="sparc64/ultrasparct1 sparc64" ;; - [ultrasparct3]) - path_64="sparc64/ultrasparct3 sparc64" ;; - [ultrasparct[45]]) - path_64="sparc64/ultrasparct45 sparc64/ultrasparct3 sparc64" ;; - *) - path_64="sparc64" - esac - - cclist_64="gcc" - any_64_testlist="sizeof-long-8" - - # gcc -mptr64 is probably implied by -m64, but we're not sure if - # this was always so. On Solaris in the past we always used both - # "-m64 -mptr64". - # - # gcc -Wa,-xarch=v9 is thought to be necessary in some cases on - # solaris, but it would seem likely that if gcc is going to generate - # 64-bit code it will have to add that option itself where needed. - # An extra copy of this option should be harmless though, but leave - # it until we're sure. (Might want -xarch=v9a or -xarch=v9b for the - # higher cpu types instead.) - # - gcc_64_cflags="$gcc_cflags -m64 -mptr64" - gcc_64_ldflags="-Wc,-m64" - gcc_64_cflags_optlist="cpu asm" - - case $host in - *-*-solaris*) - # Sun cc. - # - # We used to have -fast and some fixup options here, but it - # recurrently caused problems with miscompilation. Of course, - # -fast is documented as miscompiling things for the sake of speed. - # - cclist_64="$cclist_64 cc" - cc_64_cflags_optlist="cpu" - case $host_cpu in - [ultrasparct[345]]) - cc_64_cflags="$cc_64_cflags -xO3 -xarch=v9d" ;; - *) - cc_64_cflags="-xO3 -xarch=v9" ;; - esac - ;; - esac - - # using the v9 %tick register - SPEED_CYCLECOUNTER_OBJ_32=sparcv9.lo - SPEED_CYCLECOUNTER_OBJ_64=sparcv9.lo - cyclecounter_size_32=2 - cyclecounter_size_64=2 - ;; - esac - ;; - - - # VAX - vax*-*-*elf*) - # Use elf conventions (i.e., '%' register prefix, no global prefix) - # - GMP_INCLUDE_MPN(vax/elf.m4) - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - path="vax" - if test "$enable_assembly" = "yes" ; then - extra_functions="udiv_w_sdiv" - fi - ;; - vax*-*-*) - # Default to aout conventions (i.e., no register prefix, '_' global prefix) - # - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - path="vax" - if test "$enable_assembly" = "yes" ; then - extra_functions="udiv_w_sdiv" - fi - ;; - - - # AMD and Intel x86 configurations, including AMD64 - # - # Rumour has it gcc -O2 used to give worse register allocation than just - # -O, but lets assume that's no longer true. - # - # -m32 forces 32-bit mode on a bi-arch 32/64 amd64 build of gcc. -m64 is - # the default in such a build (we think), so -m32 is essential for ABI=32. - # This is, of course, done for any $host_cpu, not just x86_64, so we can - # get such a gcc into the right mode to cross-compile to say i486-*-*. - # - # -m32 is not available in gcc 2.95 and earlier, hence cflags_maybe to use - # it when it works. We check sizeof(long)==4 to ensure we get the right - # mode, in case -m32 has failed not because it's an old gcc, but because - # it's a dual 32/64-bit gcc without a 32-bit libc, or whatever. - # - X86_PATTERN | X86_64_PATTERN) - abilist="32" - cclist="gcc icc cc" - gcc_cflags="$gcc_cflags $fomit_frame_pointer" - gcc_32_cflags_maybe="-m32" - icc_cflags="-no-gcc" - icc_cflags_optlist="opt" - icc_cflags_opt="-O3 -O2 -O1" - icc_cflags_opt_maybe="-fp-model~precise" - any_32_testlist="sizeof-long-4" - gcc_cflags_optlist="cpu arch noavx" - CALLING_CONVENTIONS_OBJS='x86call.lo x86check$U.lo' - - # Availability of rdtsc is checked at run-time. - SPEED_CYCLECOUNTER_OBJ=pentium.lo - - # Set to "yes" below on a per-cpu basis. We do that in order to allow for - # a relevant warning to be output when using a CPU with mulx on a system - # which cannot assemble it. - x86_have_mulx=no - - # gcc 2.7.2 only knows i386 and i486, using -m386 or -m486. These - # represent -mcpu= since -m486 doesn't generate 486 specific insns. - # gcc 2.95 adds k6, pentium and pentiumpro, and takes -march= and -mcpu=. - # gcc 3.0 adds athlon. - # gcc 3.1 adds k6-2, k6-3, pentium-mmx, pentium2, pentium3, pentium4, - # athlon-tbird, athlon-4, athlon-xp, athlon-mp. - # gcc 3.2 adds winchip2. - # gcc 3.3 adds winchip-c6. - # gcc 3.3.1 from mandrake adds k8 and knows -mtune. - # gcc 3.4 adds c3, c3-2, k8, and deprecates -mcpu in favour of -mtune. - # - # In gcc 2.95.[0123], -march=pentiumpro provoked a stack slot bug in an - # old version of mpz/powm.c. Seems to be fine with the current code, so - # no need for any restrictions on that option. - # - # -march=pentiumpro can fail if the assembler doesn't know "cmov" - # (eg. solaris 2.8 native "as"), so always have -march=pentium after - # that as a fallback. - # - # -march=pentium4 and -march=k8 enable SSE2 instructions, which may or - # may not be supported by the assembler and/or the OS, and is bad in gcc - # prior to 3.3. The tests will reject these if no good, so fallbacks - # like "-march=pentium4 -mno-sse2" are given to try also without SSE2. - # Note the relevant -march types are listed in the optflags handling - # below, be sure to update there if adding new types emitting SSE2. - # - # -mtune is used at the start of each cpu option list to give something - # gcc 3.4 will use, thereby avoiding warnings from -mcpu. -mcpu forms - # are retained for use by prior gcc. For example pentium has - # "-mtune=pentium -mcpu=pentium ...", the -mtune is for 3.4 and the - # -mcpu for prior. If there's a brand new choice in 3.4 for a chip, - # like k8 for x86_64, then it can be the -mtune at the start, no need to - # duplicate anything. - # - case $host_cpu in - i386*) - gcc_cflags_cpu="-mtune=i386 -mcpu=i386 -m386" - gcc_cflags_arch="-march=i386" - path="x86" - ;; - i486*) - gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486" - gcc_cflags_arch="-march=i486" - path="x86/i486 x86" - ;; - i586 | pentium) - gcc_cflags_cpu="-mtune=pentium -mcpu=pentium -m486" - gcc_cflags_arch="-march=pentium" - path="x86/pentium x86" - ;; - pentiummmx) - gcc_cflags_cpu="-mtune=pentium-mmx -mcpu=pentium-mmx -mcpu=pentium -m486" - gcc_cflags_arch="-march=pentium-mmx -march=pentium" - path="x86/pentium/mmx x86/pentium x86/mmx x86" - ;; - i686 | pentiumpro) - gcc_cflags_cpu="-mtune=pentiumpro -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentiumpro -march=pentium" - path="x86/p6 x86" - ;; - pentium2) - gcc_cflags_cpu="-mtune=pentium2 -mcpu=pentium2 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium2 -march=pentiumpro -march=pentium" - path="x86/p6/mmx x86/p6 x86/mmx x86" - ;; - pentium3) - gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium" - path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - ;; - pentiumm) - gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium" - path="x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - ;; - k6) - gcc_cflags_cpu="-mtune=k6 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6" - path="x86/k6/mmx x86/k6 x86/mmx x86" - ;; - k62) - gcc_cflags_cpu="-mtune=k6-2 -mcpu=k6-2 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6-2 -march=k6" - path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" - ;; - k63) - gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6-3 -march=k6" - path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" - ;; - geode) - gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486" - gcc_cflags_arch="-march=k6-3 -march=k6" - path="x86/geode x86/k6/k62mmx x86/k6/mmx x86/k6 x86/mmx x86" - ;; - athlon) - # Athlon instruction costs are close to P6 (3 cycle load latency, - # 4-6 cycle mul, 40 cycle div, pairable adc, etc) so if gcc doesn't - # know athlon (eg. 2.95.2 doesn't) then fall back on pentiumpro. - gcc_cflags_cpu="-mtune=athlon -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=athlon -march=pentiumpro -march=pentium" - path="x86/k7/mmx x86/k7 x86/mmx x86" - ;; - i786 | pentium4) - # pentiumpro is the primary fallback when gcc doesn't know pentium4. - # This gets us cmov to eliminate branches. Maybe "athlon" would be - # a possibility on gcc 3.0. - # - gcc_cflags_cpu="-mtune=pentium4 -mcpu=pentium4 -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=pentium4 -march=pentium4~-mno-sse2 -march=pentiumpro -march=pentium" - gcc_64_cflags_cpu="-mtune=nocona" - path="x86/pentium4/sse2 x86/pentium4/mmx x86/pentium4 x86/mmx x86" - path_64="x86_64/pentium4 x86_64" - ;; - viac32) - # Not sure of the best fallbacks here for -mcpu. - # c3-2 has sse and mmx, so pentium3 is good for -march. - gcc_cflags_cpu="-mtune=c3-2 -mcpu=c3-2 -mcpu=i486 -m486" - gcc_cflags_arch="-march=c3-2 -march=pentium3 -march=pentiumpro -march=pentium" - path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - ;; - viac3*) - # Not sure of the best fallbacks here. - gcc_cflags_cpu="-mtune=c3 -mcpu=c3 -mcpu=i486 -m486" - gcc_cflags_arch="-march=c3 -march=pentium-mmx -march=pentium" - path="x86/pentium/mmx x86/pentium x86/mmx x86" - ;; - athlon64 | k8 | x86_64) - gcc_cflags_cpu="-mtune=k8 -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486" - gcc_cflags_arch="-march=k8 -march=k8~-mno-sse2 -march=athlon -march=pentiumpro -march=pentium" - path="x86/k8 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/k8 x86_64" - ;; - k10) - gcc_cflags_cpu="-mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/k10 x86/k8 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/k10 x86_64/k8 x86_64" - ;; - bobcat) - gcc_cflags_cpu="-mtune=btver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bt1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bt1 x86_64/k10 x86_64/k8 x86_64" - ;; - jaguar | jaguarnoavx) - gcc_cflags_cpu="-mtune=btver2 -mtune=btver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=btver2 -march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bt2 x86/bt1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bt2 x86_64/bt1 x86_64/k10 x86_64/k8 x86_64" - ;; - bulldozer | bd1 | bulldozernoavx | bd1noavx) - gcc_cflags_cpu="-mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - piledriver | bd2 | piledrivernoavx | bd2noavx) - gcc_cflags_cpu="-mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - steamroller | bd3 | steamrollernoavx | bd3noavx) - gcc_cflags_cpu="-mtune=bdver3 -mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver3 -march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd3 x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd3 x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - ;; - excavator | bd4 | excavatornoavx | bd4noavx) - gcc_cflags_cpu="-mtune=bdver4 -mtune=bdver3 -mtune=bdver2 -mtune=bdver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=bdver4 -march=bdver3 -march=bdver2 -march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" - path="x86/bd4 x86/bd3 x86/bd2 x86/bd1 x86/k7/mmx x86/k7 x86/mmx x86" - path_64="x86_64/bd4 x86_64/bd3 x86_64/bd2 x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" - x86_have_mulx=yes - ;; - zen | zennoavx) - gcc_cflags_cpu="-mtune=znver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=znver1 -march=amdfam10 -march=k8" - path="x86/k7/mmx x86/k7 x86/mmx x86" - x86_have_mulx=yes - path_64="x86_64/zen x86_64" - ;; - zen2 | zen2noavx | zen3 | zen3noavx) - gcc_cflags_cpu="-mtune=znver2 -mtune=znver1 -mtune=amdfam10 -mtune=k8" - gcc_cflags_arch="-march=znver2 -march=znver1 -march=amdfam10 -march=k8" - path="x86/k7/mmx x86/k7 x86/mmx x86" - x86_have_mulx=yes - path_64="x86_64/zen2 x86_64/zen x86_64" - ;; - core2) - gcc_cflags_cpu="-mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/core2 x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/core2 x86_64" - ;; - corei | coreinhm | coreiwsm | nehalem | westmere) - gcc_cflags_cpu="-mtune=nehalem -mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=nehalem -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreinhm x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreinhm x86_64/core2 x86_64" - ;; - coreisbr | coreisbrnoavx | coreiibr | coreiibrnoavx | \ - sandybridge | sandybridgenoavx | ivybridge | ivybridgenoavx) - gcc_cflags_cpu="-mtune=sandybridge -mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=sandybridge -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - ;; - coreihwl | coreihwlnoavx | haswell | haswellnoavx) - gcc_cflags_cpu="-mtune=haswell -mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=haswell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreihwl x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - x86_have_mulx=yes - ;; - coreibwl | coreibwlnoavx | broadwell | broadwellnoavx) - gcc_cflags_cpu="-mtune=broadwell -mtune=corei7 -mtune=core2 -mtune=k8" - gcc_cflags_arch="-march=broadwell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreihwl x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/coreibwl x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - # extra_functions_64="missing" # enable for bmi2/adx simulation - x86_have_mulx=yes - ;; - skylake | skylakenoavx | kabylake | kabylakenoavx) - gcc_cflags_cpu="-mtune=skylake -mtune=broadwell -mtune=corei7 -mtune=core2 -mtune=k8" - # Don't pass -march=skylake for now as then some compilers emit AVX512. - gcc_cflags_arch="-march=broadwell -march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" - path="x86/coreihwl x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86/mmx x86" - path_64="x86_64/skylake x86_64/coreibwl x86_64/coreihwl x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" - # extra_functions_64="missing" # enable for bmi2/adx simulation - x86_have_mulx=yes - ;; - atom) # in-order pipeline atom - gcc_cflags_cpu="-mtune=atom -mtune=pentium3" - gcc_cflags_arch="-march=atom -march=pentium3" - path="x86/atom/sse2 x86/atom/mmx x86/atom x86/mmx x86" - path_64="x86_64/atom x86_64" - ;; - silvermont) # out-of-order pipeline atom - gcc_cflags_cpu="-mtune=slm -mtune=atom -mtune=pentium3" - gcc_cflags_arch="-march=slm -march=atom -march=pentium3" - path="x86/silvermont x86/atom/sse2 x86/atom/mmx x86/atom x86/mmx x86" - path_64="x86_64/silvermont x86_64/atom x86_64" - ;; - goldmont) # out-of-order pipeline atom - gcc_cflags_cpu="-mtune=slm -mtune=atom -mtune=pentium3" - gcc_cflags_arch="-march=slm -march=atom -march=pentium3" - path="x86/goldmont x86/atom/sse2 x86/atom/mmx x86/atom x86/mmx x86" - path_64="x86_64/goldmont x86_64/silvermont x86_64/atom x86_64" - ;; - nano) - gcc_cflags_cpu="-mtune=nano" - gcc_cflags_arch="-march=nano" - path="x86/nano x86/mmx x86" - path_64="x86_64/nano x86_64" - ;; - *) - gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486" - gcc_cflags_arch="-march=i486" - path="x86" - path_64="x86_64" - ;; - esac - - case $host in - # Disable AVX if the CPU part tells us AVX is unavailable, but also - # unconditionally for NetBSD where they don't work but OSXSAVE is set - # to claim the contrary. - *noavx-*-* | *-*-netbsd*) - gcc_cflags_noavx="-mno-avx" - GMP_DEFINE_RAW(["define(<GMP_AVX_NOT_REALLY_AVAILABLE>,1)"]) - ;; - esac - - case $host in - X86_64_PATTERN) - cclist_64="gcc cc" - gcc_64_cflags="$gcc_cflags -m64" - gcc_64_cflags_optlist="cpu arch noavx" - CALLING_CONVENTIONS_OBJS_64='amd64call.lo amd64check$U.lo' - SPEED_CYCLECOUNTER_OBJ_64=x86_64.lo - cyclecounter_size_64=2 - - cclist_x32="gcc cc" - gcc_x32_cflags="$gcc_cflags -mx32" - gcc_x32_cflags_optlist="$gcc_64_cflags_optlist" - CALLING_CONVENTIONS_OBJS_x32="$CALLING_CONVENTIONS_OBJS_64" - SPEED_CYCLECOUNTER_OBJ_x32="$SPEED_CYCLECOUNTER_OBJ_64" - cyclecounter_size_x32="$cyclecounter_size_64" - path_x32="$path_64" - limb_x32=longlong - any_x32_testlist="sizeof-long-4" - - abilist="64 x32 32" - if test "$enable_assembly" = "yes" ; then - extra_functions_64="$extra_functions_64 invert_limb_table" - extra_functions_x32=$extra_functions_64 - fi - - case $host in - *-*-solaris*) - # Sun cc. - cc_64_cflags="-xO3 -m64" - ;; - *-*-mingw* | *-*-msys | *-*-cygwin) - limb_64=longlong - CALLING_CONVENTIONS_OBJS_64="" - AC_DEFINE(HOST_DOS64,1,[Define to 1 for Windos/64]) - GMP_NONSTD_ABI_64=DOS64 - ;; - esac - ;; - esac - ;; - - - # Special CPU "none" used to select generic C, now this is obsolete. - none-*-*) - enable_assembly=no - AC_MSG_WARN([the \"none\" host is obsolete, use --disable-assembly]) - ;; - -esac - -# mingw can be built by the cygwin gcc if -mno-cygwin is added. For -# convenience add this automatically if it works. Actual mingw gcc accepts -# -mno-cygwin too, but of course is the default. mingw only runs on the -# x86s, but allow any CPU here so as to catch "none" too. -# -case $host in - *-*-mingw* | *-*-msys) - gcc_cflags_optlist="$gcc_cflags_optlist nocygwin" - gcc_cflags_nocygwin="-mno-cygwin" - ;; -esac - - -CFLAGS_or_unset=${CFLAGS-'(unset)'} -CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'} - -cat >&AC_FD_CC <<EOF -User: -ABI=$ABI -CC=$CC -CFLAGS=$CFLAGS_or_unset -CPPFLAGS=$CPPFLAGS_or_unset -MPN_PATH=$MPN_PATH -GMP: -abilist=$abilist -cclist=$cclist -EOF - - -test_CFLAGS=${CFLAGS+set} -test_CPPFLAGS=${CPPFLAGS+set} - -for abi in $abilist; do - abi_last="$abi" -done - -# If the user specifies an ABI then it must be in $abilist, after that -# $abilist is restricted to just that choice. -# -if test -n "$ABI"; then - found=no - for abi in $abilist; do - if test $abi = "$ABI"; then found=yes; break; fi - done - if test $found = no; then - AC_MSG_ERROR([ABI=$ABI is not among the following valid choices: $abilist]) - fi - abilist="$ABI" -fi - -found_compiler=no - -for abi in $abilist; do - - echo "checking ABI=$abi" - - # Suppose abilist="64 32", then for abi=64, will have abi1="_64" and - # abi2="_64". For abi=32, will have abi1="_32" and abi2="". This is how - # $gcc_cflags becomes a fallback for $gcc_32_cflags (the last in the - # abilist), but there's no fallback for $gcc_64_cflags. - # - abi1=[`echo _$abi | sed 's/[.]//g'`] - if test $abi = $abi_last; then abi2=; else abi2="$abi1"; fi - - # Compiler choices under this ABI - eval cclist_chosen=\"\$cclist$abi1\" - test -n "$cclist_chosen" || eval cclist_chosen=\"\$cclist$abi2\" - - # If there's a user specified $CC then don't use a list for - # $cclist_chosen, just a single value for $ccbase. - # - if test -n "$CC"; then - - # The first word of $CC, stripped of any directory. For instance - # CC="/usr/local/bin/gcc -pipe" will give "gcc". - # - for ccbase in $CC; do break; done - ccbase=`echo $ccbase | sed 's:.*/::'` - - # If this $ccbase is in $cclist_chosen then it's a compiler we know and - # we can do flags defaulting with it. If not, then $cclist_chosen is - # set to "unrecognised" so no default flags are used. - # - # "unrecognised" is used to avoid bad effects with eval if $ccbase has - # non-symbol characters. For instance ccbase=my+cc would end up with - # something like cflags="$my+cc_cflags" which would give - # cflags="+cc_cflags" rather than the intended empty string for an - # unknown compiler. - # - found=unrecognised - for i in $cclist_chosen; do - if test "$ccbase" = $i; then - found=$ccbase - break - fi - done - cclist_chosen=$found - fi - - for ccbase in $cclist_chosen; do - - # When cross compiling, look for a compiler with the $host_alias as a - # prefix, the same way that AC_CHECK_TOOL does. But don't do this to a - # user-selected $CC. - # - # $cross_compiling will be yes/no/maybe at this point. Do the host - # prefixing for "maybe" as well as "yes". - # - if test "$cross_compiling" != no && test -z "$CC"; then - cross_compiling_prefix="${host_alias}-" - fi - - for ccprefix in $cross_compiling_prefix ""; do - - cc="$CC" - test -n "$cc" || cc="$ccprefix$ccbase" - - # If the compiler is gcc but installed under another name, then change - # $ccbase so as to use the flags we know for gcc. This helps for - # instance when specifying CC=gcc272 on Debian GNU/Linux, or the - # native cc which is really gcc on NeXT or MacOS-X. - # - # FIXME: There's a slight misfeature here. If cc is actually gcc but - # gcc is not a known compiler under this $abi then we'll end up - # testing it with no flags and it'll work, but chances are it won't be - # in the right mode for the ABI we desire. Let's quietly hope this - # doesn't happen. - # - if test $ccbase != gcc; then - GMP_PROG_CC_IS_GNU($cc,ccbase=gcc) - fi - - # Similarly if the compiler is IBM xlc but invoked as cc or whatever - # then change $ccbase and make the default xlc flags available. - if test $ccbase != xlc; then - GMP_PROG_CC_IS_XLC($cc,ccbase=xlc) - fi - - # acc was Sun's first unbundled compiler back in the SunOS days, or - # something like that, but today its man page says it's not meant to - # be used directly (instead via /usr/ucb/cc). The options are pretty - # much the same as the main SunPRO cc, so share those configs. - # - case $host in - *sparc*-*-solaris* | *sparc*-*-sunos*) - if test "$ccbase" = acc; then ccbase=cc; fi ;; - esac - - for tmp_cflags_maybe in yes no; do - eval cflags=\"\$${ccbase}${abi1}_cflags\" - test -n "$cflags" || eval cflags=\"\$${ccbase}${abi2}_cflags\" - - if test "$tmp_cflags_maybe" = yes; then - # don't try cflags_maybe when the user set CFLAGS - if test "$test_CFLAGS" = set; then continue; fi - eval cflags_maybe=\"\$${ccbase}${abi1}_cflags_maybe\" - test -n "$cflags_maybe" || eval cflags_maybe=\"\$${ccbase}${abi2}_cflags_maybe\" - # don't try cflags_maybe if there's nothing set - if test -z "$cflags_maybe"; then continue; fi - cflags="$cflags_maybe $cflags" - fi - - # Any user CFLAGS, even an empty string, takes precedence - if test "$test_CFLAGS" = set; then cflags=$CFLAGS; fi - - # Any user CPPFLAGS, even an empty string, takes precedence - eval cppflags=\"\$${ccbase}${abi1}_cppflags\" - test -n "$cppflags" || eval cppflags=\"\$${ccbase}${abi2}_cppflags\" - if test "$test_CPPFLAGS" = set; then cppflags=$CPPFLAGS; fi - - # --enable-profiling adds -p/-pg even to user-specified CFLAGS. - # This is convenient, but it's perhaps a bit naughty to modify user - # CFLAGS. - case "$enable_profiling" in - prof) cflags="$cflags -p" ;; - gprof) cflags="$cflags -pg" ;; - instrument) cflags="$cflags -finstrument-functions" ;; - esac - - GMP_PROG_CC_WORKS($cc $cflags $cppflags,,continue) - - # If we're supposed to be using a "long long" for a limb, check that - # it works. - eval limb_chosen=\"\$limb$abi1\" - test -n "$limb_chosen" || eval limb_chosen=\"\$limb$abi2\" - if test "$limb_chosen" = longlong; then - GMP_PROG_CC_WORKS_LONGLONG($cc $cflags $cppflags,,continue) - fi - - # The tests to perform on this $cc, if any - eval testlist=\"\$${ccbase}${abi1}_testlist\" - test -n "$testlist" || eval testlist=\"\$${ccbase}${abi2}_testlist\" - test -n "$testlist" || eval testlist=\"\$any${abi1}_testlist\" - test -n "$testlist" || eval testlist=\"\$any${abi2}_testlist\" - - testlist_pass=yes - for tst in $testlist; do - case $tst in - hpc-hppa-2-0) GMP_HPC_HPPA_2_0($cc,,testlist_pass=no) ;; - gcc-arm-umodsi) GMP_GCC_ARM_UMODSI($cc,,testlist_pass=no) ;; - gcc-mips-o32) GMP_GCC_MIPS_O32($cc,,testlist_pass=no) ;; - hppa-level-2.0) GMP_HPPA_LEVEL_20($cc $cflags,,testlist_pass=no) ;; - sizeof*) GMP_C_TEST_SIZEOF($cc $cflags,$tst,,testlist_pass=no) ;; - esac - if test $testlist_pass = no; then break; fi - done - - if test $testlist_pass = yes; then - found_compiler=yes - break - fi - done - - if test $found_compiler = yes; then break; fi - done - - if test $found_compiler = yes; then break; fi - done - - if test $found_compiler = yes; then break; fi -done - - -# If we recognised the CPU, as indicated by $path being set, then insist -# that we have a working compiler, either from our $cclist choices or from -# $CC. We can't let AC_PROG_CC look around for a compiler because it might -# find one that we've rejected (for not supporting the modes our asm code -# demands, etc). -# -# If we didn't recognise the CPU (and this includes host_cpu=none), then -# fall through and let AC_PROG_CC look around for a compiler too. This is -# mostly in the interests of following a standard autoconf setup, after all -# we've already tested cc and gcc adequately (hopefully). As of autoconf -# 2.50 the only thing AC_PROG_CC really adds is a check for "cl" (Microsoft -# C on MS-DOS systems). -# -if test $found_compiler = no && test -n "$path"; then - AC_MSG_ERROR([could not find a working compiler, see config.log for details]) -fi - -case $host in - X86_PATTERN | X86_64_PATTERN) - # If the user asked for a fat build, override the path and flags set above - if test $enable_fat = yes; then - gcc_cflags_cpu="" - gcc_cflags_arch="" - - fat_functions="add_n addmul_1 bdiv_dbm1c com cnd_add_n cnd_sub_n - copyd copyi dive_1 divrem_1 - gcd_11 lshift lshiftc mod_1 mod_1_1 mod_1_1_cps mod_1_2 - mod_1_2_cps mod_1_4 mod_1_4_cps mod_34lsub1 mode1o mul_1 - mul_basecase mullo_basecase pre_divrem_1 pre_mod_1 redc_1 - redc_2 rshift sqr_basecase sub_n submul_1" - - if test "$abi" = 32; then - extra_functions="$extra_functions fat fat_entry" - path="x86/fat x86" - fat_path="x86 x86/fat x86/i486 - x86/k6 x86/k6/mmx x86/k6/k62mmx - x86/k7 x86/k7/mmx - x86/k8 x86/k10 x86/bt1 x86/bd1 - x86/pentium x86/pentium/mmx - x86/p6 x86/p6/mmx x86/p6/p3mmx x86/p6/sse2 - x86/pentium4 x86/pentium4/mmx x86/pentium4/sse2 - x86/core2 x86/coreinhm x86/coreisbr - x86/goldmont x86/silvermont - x86/atom x86/atom/mmx x86/atom/sse2 x86/nano" - fi - - if test "$abi" = 64; then - gcc_64_cflags="" - extra_functions_64="$extra_functions_64 fat fat_entry" - path_64="x86_64/fat x86_64" - fat_path="x86_64 x86_64/fat - x86_64/k8 x86_64/k10 x86_64/bd1 x86_64/bt1 x86_64/bt2 x86_64/zen - x86_64/pentium4 x86_64/core2 x86_64/coreinhm x86_64/coreisbr - x86_64/coreihwl x86_64/coreibwl x86_64/skylake x86_64/atom - x86_64/silvermont x86_64/goldmont x86_64/nano" - fat_functions="$fat_functions addmul_2 addlsh1_n addlsh2_n sublsh1_n" - fi - - fat_thresholds="MUL_TOOM22_THRESHOLD MUL_TOOM33_THRESHOLD - SQR_TOOM2_THRESHOLD SQR_TOOM3_THRESHOLD - BMOD_1_TO_MOD_1_THRESHOLD" - fi - ;; -esac - - -if test $found_compiler = yes; then - - # If we're creating CFLAGS, then look for optional additions. If the user - # set CFLAGS then leave it alone. - # - if test "$test_CFLAGS" != set; then - eval optlist=\"\$${ccbase}${abi1}_cflags_optlist\" - test -n "$optlist" || eval optlist=\"\$${ccbase}${abi2}_cflags_optlist\" - - for opt in $optlist; do - eval optflags=\"\$${ccbase}${abi1}_cflags_${opt}\" - test -n "$optflags" || eval optflags=\"\$${ccbase}${abi2}_cflags_${opt}\" - test -n "$optflags" || eval optflags=\"\$${ccbase}_cflags_${opt}\" - - for flag in $optflags; do - - # ~ represents a space in an option spec - flag=`echo "$flag" | tr '~' ' '` - - case $flag in - -march=pentium4 | -march=k8) - # For -march settings which enable SSE2 we exclude certain bad - # gcc versions and we need an OS knowing how to save xmm regs. - # - # This is only for ABI=32, any 64-bit gcc is good and any OS - # knowing x86_64 will know xmm. - # - # -march=k8 was only introduced in gcc 3.3, so we shouldn't need - # the GMP_GCC_PENTIUM4_SSE2 check (for gcc 3.2 and prior). But - # it doesn't hurt to run it anyway, sharing code with the - # pentium4 case. - # - if test "$abi" = 32; then - GMP_GCC_PENTIUM4_SSE2($cc $cflags $cppflags,, continue) - GMP_OS_X86_XMM($cc $cflags $cppflags,, continue) - fi - ;; - -no-cpp-precomp) - # special check, avoiding a warning - GMP_GCC_NO_CPP_PRECOMP($ccbase,$cc,$cflags, - [cflags="$cflags $flag" - break], - [continue]) - ;; - -Wa,-m*) - case $host in - alpha*-*-*) - GMP_GCC_WA_MCPU($cc $cflags, $flag, , [continue]) - ;; - esac - ;; - -Wa,-oldas) - GMP_GCC_WA_OLDAS($cc $cflags $cppflags, - [cflags="$cflags $flag" - break], - [continue]) - ;; - esac - - GMP_PROG_CC_WORKS($cc $cflags $cppflags $flag, - [cflags="$cflags $flag" - break]) - done - done - fi - - ABI="$abi" - CC="$cc" - CFLAGS="$cflags" - CPPFLAGS="$cppflags" - - # Could easily have this in config.h too, if desired. - ABI_nodots=`echo $ABI | sed 's/\./_/'` - GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_ABI_$ABI_nodots')", POST) - - eval GMP_NONSTD_ABI=\"\$GMP_NONSTD_ABI_$ABI_nodots\" - - # GMP_LDFLAGS substitution, selected according to ABI. - # These are needed on libgmp.la and libmp.la, but currently not on - # convenience libraries like tune/libspeed.la or mpz/libmpz.la. - # - eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\" - test -n "$GMP_LDFLAGS" || eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\" - AC_SUBST(GMP_LDFLAGS) - AC_SUBST(LIBGMP_LDFLAGS) - AC_SUBST(LIBGMPXX_LDFLAGS) - - # extra_functions, selected according to ABI - eval tmp=\"\$extra_functions$abi1\" - test -n "$tmp" || eval tmp=\"\$extra_functions$abi2\" - extra_functions="$tmp" - - - # Cycle counter, selected according to ABI. - # - eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi1\" - test -n "$tmp" || eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi2\" - SPEED_CYCLECOUNTER_OBJ="$tmp" - eval tmp=\"\$cyclecounter_size$abi1\" - test -n "$tmp" || eval tmp=\"\$cyclecounter_size$abi2\" - cyclecounter_size="$tmp" - - if test -n "$SPEED_CYCLECOUNTER_OBJ"; then - AC_DEFINE_UNQUOTED(HAVE_SPEED_CYCLECOUNTER, $cyclecounter_size, - [Tune directory speed_cyclecounter, undef=none, 1=32bits, 2=64bits)]) - fi - AC_SUBST(SPEED_CYCLECOUNTER_OBJ) - - - # Calling conventions checking, selected according to ABI. - # - eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi1\" - test -n "$tmp" || eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi2\" - if test "$enable_assembly" = "yes"; then - CALLING_CONVENTIONS_OBJS="$tmp" - else - CALLING_CONVENTIONS_OBJS="" - fi - - if test -n "$CALLING_CONVENTIONS_OBJS"; then - AC_DEFINE(HAVE_CALLING_CONVENTIONS,1, - [Define to 1 if tests/libtests has calling conventions checking for the CPU]) - fi - AC_SUBST(CALLING_CONVENTIONS_OBJS) - -fi - - -# If the user gave an MPN_PATH, use that verbatim, otherwise choose -# according to the ABI and add "generic". -# -if test -n "$MPN_PATH"; then - path="$MPN_PATH" -else - eval tmp=\"\$path$abi1\" - test -n "$tmp" || eval tmp=\"\$path$abi2\" - path="$tmp generic" -fi - - -# Long long limb setup for gmp.h. -case $limb_chosen in -longlong) DEFN_LONG_LONG_LIMB="#define _LONG_LONG_LIMB 1" ;; -*) DEFN_LONG_LONG_LIMB="/* #undef _LONG_LONG_LIMB */" ;; -esac -AC_SUBST(DEFN_LONG_LONG_LIMB) - - -# The C compiler and preprocessor, put into ANSI mode if possible. -AC_PROG_CC -AC_PROG_CC_C99 -AC_PROG_CPP - -#if test "$ac_cv_prog_cc_c99" = no; then -# AC_MSG_ERROR([Cannot find a C99 capable compiler]) -#fi - -# The C compiler on the build system, and associated tests. -GMP_PROG_CC_FOR_BUILD -GMP_PROG_CPP_FOR_BUILD -GMP_PROG_EXEEXT_FOR_BUILD -GMP_C_FOR_BUILD_ANSI -GMP_CHECK_LIBM_FOR_BUILD - - -# How to assemble, used with CFLAGS etc, see mpn/Makeasm.am. -# Using the compiler is a lot easier than figuring out how to invoke the -# assembler directly. -# -test -n "$CCAS" || CCAS="$CC -c" -AC_SUBST(CCAS) - - -# The C++ compiler, if desired. -want_cxx=no -if test $enable_cxx != no; then - test_CXXFLAGS=${CXXFLAGS+set} - AC_PROG_CXX - - echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AC_FD_CC - cxxflags_ac_prog_cxx=$CXXFLAGS - cxxflags_list=ac_prog_cxx - - # If the user didn't specify $CXXFLAGS, then try $CFLAGS, with -g removed - # if AC_PROG_CXX thinks that doesn't work. $CFLAGS stands a good chance - # of working, eg. on a GNU system where CC=gcc and CXX=g++. - # - if test "$test_CXXFLAGS" != set; then - cxxflags_cflags=$CFLAGS - cxxflags_list="cflags $cxxflags_list" - if test "$ac_prog_cxx_g" = no; then - cxxflags_cflags=`echo "$cxxflags_cflags" | sed -e 's/ -g //' -e 's/^-g //' -e 's/ -g$//'` - fi - fi - - # See if the C++ compiler works. If the user specified CXXFLAGS then all - # we're doing is checking whether AC_PROG_CXX succeeded, since it doesn't - # give a fatal error, just leaves CXX set to a default g++. If on the - # other hand the user didn't specify CXXFLAGS then we get to try here our - # $cxxflags_list alternatives. - # - # Automake includes $CPPFLAGS in a C++ compile, so we do the same here. - # - for cxxflags_choice in $cxxflags_list; do - eval CXXFLAGS=\"\$cxxflags_$cxxflags_choice\" - GMP_PROG_CXX_WORKS($CXX $CPPFLAGS $CXXFLAGS, - [want_cxx=yes - break]) - done - - # If --enable-cxx=yes but a C++ compiler can't be found, then abort. - if test $want_cxx = no && test $enable_cxx = yes; then - AC_MSG_ERROR([C++ compiler not available, see config.log for details]) - fi -fi - -AM_CONDITIONAL(WANT_CXX, test $want_cxx = yes) - -# FIXME: We're not interested in CXXCPP for ourselves, but if we don't do it -# here then AC_PROG_LIBTOOL will AC_REQUIRE it (via _LT_AC_TAGCONFIG) and -# hence execute it unconditionally, and that will fail if there's no C++ -# compiler (and no generic /lib/cpp). -# -if test $want_cxx = yes; then - AC_PROG_CXXCPP -fi - - -# Path setups for Cray, according to IEEE or CFP. These must come after -# deciding the compiler. -# -GMP_CRAY_OPTIONS( - [add_path="cray/ieee"], - [add_path="cray/cfp"; extra_functions="mulwwc90"], - [add_path="cray/cfp"; extra_functions="mulwwj90"]) - - -if test -z "$MPN_PATH"; then - path="$add_path $path" -fi - -# For a nail build, also look in "nails" subdirectories. -# -if test $GMP_NAIL_BITS != 0 && test -z "$MPN_PATH"; then - new_path= - for i in $path; do - case $i in - generic) new_path="$new_path $i" ;; - *) new_path="$new_path $i/nails $i" ;; - esac - done - path=$new_path -fi - - -# Put all directories into CPUVEC_list so as to get a full set of -# CPUVEC_SETUP_$tmp_suffix defines into config.h, even if some of them are -# empty because mmx and/or sse2 had to be dropped. -# -for i in $fat_path; do - GMP_FAT_SUFFIX(tmp_suffix, $i) - CPUVEC_list="$CPUVEC_list CPUVEC_SETUP_$tmp_suffix" -done - - -# If there's any sse2 or mmx in the path, check whether the assembler -# supports it, and remove if not. -# -# We only need this in ABI=32, for ABI=64 on x86_64 we can assume a new -# enough assembler. -# -case $host in - X86_PATTERN | X86_64_PATTERN) - if test "$ABI" = 32; then - case "$path $fat_path" in - *mmx*) GMP_ASM_X86_MMX( , [GMP_STRIP_PATH(*mmx*)]) ;; - esac - case "$path $fat_path" in - *sse2*) GMP_ASM_X86_SSE2( , [GMP_STRIP_PATH(sse2)]) ;; - esac - fi - ;; -esac - - -if test "$enable_assembly" = "no"; then - path="generic" - AC_DEFINE([NO_ASM],1,[Define to 1 to disable the use of inline assembly]) -# for abi in $abilist; do -# eval unset "path_\$abi" -# eval gcc_${abi}_cflags=\"\$gcc_${abi}_cflags -DNO_ASM\" -# done -fi - - -cat >&AC_FD_CC <<EOF -Decided: -ABI=$ABI -CC=$CC -CFLAGS=$CFLAGS -CPPFLAGS=$CPPFLAGS -GMP_LDFLAGS=$GMP_LDFLAGS -CXX=$CXX -CXXFLAGS=$CXXFLAGS -path=$path -EOF -echo "using ABI=\"$ABI\"" -echo " CC=\"$CC\"" -echo " CFLAGS=\"$CFLAGS\"" -echo " CPPFLAGS=\"$CPPFLAGS\"" -if test $want_cxx = yes; then - echo " CXX=\"$CXX\"" - echo " CXXFLAGS=\"$CXXFLAGS\"" -fi -echo " MPN_PATH=\"$path\"" - - -CL_AS_NOEXECSTACK - -GMP_PROG_AR -GMP_PROG_NM - -case $host in - # FIXME: On AIX 3 and 4, $libname.a is included in libtool - # $library_names_spec, so libgmp.a becomes a symlink to libgmp.so, making - # it impossible to build shared and static libraries simultaneously. - # Disable shared libraries by default, but let the user override with - # --enable-shared --disable-static. - # - # FIXME: This $libname.a problem looks like it might apply to *-*-amigaos* - # and *-*-os2* too, but wait for someone to test this before worrying - # about it. If there is a problem then of course libtool is the right - # place to fix it. - # - [*-*-aix[34]*]) - if test -z "$enable_shared"; then enable_shared=no; fi ;; -esac - - -# Configs for Windows DLLs. - -AC_LIBTOOL_WIN32_DLL - -AC_SUBST(LIBGMP_DLL,0) -case $host in - *-*-cygwin* | *-*-mingw* | *-*-msys | *-*-pw32* | *-*-os2*) - # By default, build only static. - if test -z "$enable_shared"; then - enable_shared=no - fi - # Don't allow both static and DLL. - if test "$enable_shared" != no && test "$enable_static" != no; then - AC_MSG_ERROR([cannot build both static and DLL, since gmp.h is different for each. -Use "--disable-static --enable-shared" to build just a DLL.]) - fi - - # "-no-undefined" is required when building a DLL, see documentation on - # AC_LIBTOOL_WIN32_DLL. - # - # "-Wl,--export-all-symbols" is a bit of a hack, it gets all libgmp and - # libgmpxx functions and variables exported. This is what libtool did - # in the past, and it's convenient for us in the test programs. - # - # Maybe it'd be prudent to check for --export-all-symbols before using - # it, but it seems to have been in ld since at least 2000, and there's - # not really any alternative we want to take up at the moment. - # - # "-Wl,output-def" is used to get a .def file for use by MS lib to make - # a .lib import library, described in the manual. libgmp-3.dll.def - # corresponds to the libmp-3.dll.def generated by libtool (as a result - # of -export-symbols on that library). - # - # Incidentally, libtool does generate an import library libgmp.dll.a, - # but it's "ar" format and cannot be used by the MS linker. There - # doesn't seem to be any GNU tool for generating or converting to .lib. - # - # FIXME: The .def files produced by -Wl,output-def include isascii, - # iscsym, iscsymf and toascii, apparently because mingw ctype.h doesn't - # inline isascii (used in gmp). It gives an extern inline for - # __isascii, but for some reason not the plain isascii. - # - if test "$enable_shared" = yes; then - GMP_LDFLAGS="$GMP_LDFLAGS -no-undefined -Wl,--export-all-symbols" - LIBGMP_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmp-3.dll.def" - LIBGMPXX_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmpxx-3.dll.def" - LIBGMP_DLL=1 - fi - ;; -esac - - -# Ensure that $CONFIG_SHELL is available for AC_LIBTOOL_SYS_MAX_CMD_LEN. -# It's often set already by _LT_AC_PROG_ECHO_BACKSLASH or -# _AS_LINENO_PREPARE, but not always. -# -# The symptom of CONFIG_SHELL unset is some "expr" errors during the test, -# and an empty result. This only happens when invoked as "sh configure", -# ie. no path, and can be seen for instance on ia64-*-hpux*. -# -# FIXME: Newer libtool should have it's own fix for this. -# -if test -z "$CONFIG_SHELL"; then - CONFIG_SHELL=$SHELL -fi - -# Enable CXX in libtool only if we want it, and never enable GCJ, nor RC on -# mingw and cygwin. Under --disable-cxx this avoids some error messages -# from libtool arising from the fact we didn't actually run AC_PROG_CXX. -# Notice that any user-supplied --with-tags setting takes precedence. -# -# FIXME: Is this the right way to get this effect? Very possibly not, but -# the current _LT_AC_TAGCONFIG doesn't really suggest an alternative. -# -if test "${with_tags+set}" != set; then - if test $want_cxx = yes; then - with_tags=CXX - else - with_tags= - fi -fi - -# The dead hand of AC_REQUIRE makes AC_PROG_LIBTOOL expand and execute -# AC_PROG_F77, even when F77 is not in the selected with_tags. This is -# probably harmless, but it's unsightly and bloats our configure, so pretend -# AC_PROG_F77 has been expanded already. -# -# FIXME: Rumour has it libtool will one day provide a way for a configure.in -# to say what it wants from among supported languages etc. -# -#AC_PROVIDE([AC_PROG_F77]) - -AC_PROG_LIBTOOL - -# Generate an error here if attempting to build both shared and static when -# $libname.a is in $library_names_spec (as mentioned above), rather than -# wait for ar or ld to fail. -# -if test "$enable_shared" = yes && test "$enable_static" = yes; then - case $library_names_spec in - *libname.a*) - AC_MSG_ERROR([cannot create both shared and static libraries on this system, --disable one of the two]) - ;; - esac -fi - -AM_CONDITIONAL(ENABLE_STATIC, test "$enable_static" = yes) - - -# Many of these library and header checks are for the benefit of -# supplementary programs. libgmp doesn't use anything too weird. - -AC_HEADER_STDC -AC_HEADER_TIME - -# Reasons for testing: -# float.h - not in SunOS bundled cc -# invent.h - IRIX specific -# langinfo.h - X/Open standard only, not in djgpp for instance -# locale.h - old systems won't have this -# nl_types.h - X/Open standard only, not in djgpp for instance -# (usually langinfo.h gives nl_item etc, but not on netbsd 1.4.1) -# sys/attributes.h - IRIX specific -# sys/iograph.h - IRIX specific -# sys/mman.h - not in Cray Unicos -# sys/param.h - not in mingw -# sys/processor.h - solaris specific, though also present in macos -# sys/pstat.h - HPUX specific -# sys/resource.h - not in mingw -# sys/sysctl.h - not in mingw -# sys/sysinfo.h - OSF specific -# sys/syssgi.h - IRIX specific -# sys/systemcfg.h - AIX specific -# sys/time.h - autoconf suggests testing, don't know anywhere without it -# sys/times.h - not in mingw -# machine/hal_sysinfo.h - OSF specific -# -# inttypes.h, stdint.h, unistd.h and sys/types.h are already in the autoconf -# default tests -# -AC_CHECK_HEADERS(fcntl.h float.h invent.h langinfo.h locale.h nl_types.h sys/attributes.h sys/iograph.h sys/mman.h sys/param.h sys/processor.h sys/pstat.h sys/sysinfo.h sys/syssgi.h sys/systemcfg.h sys/time.h sys/times.h) - -# On SunOS, sys/resource.h needs sys/time.h (for struct timeval) -AC_CHECK_HEADERS(sys/resource.h,,, -[#if TIME_WITH_SYS_TIME -# include <sys/time.h> -# include <time.h> -#else -# if HAVE_SYS_TIME_H -# include <sys/time.h> -# else -# include <time.h> -# endif -#endif]) - -# On NetBSD and OpenBSD, sys/sysctl.h needs sys/param.h for various constants -AC_CHECK_HEADERS(sys/sysctl.h,,, -[#if HAVE_SYS_PARAM_H -# include <sys/param.h> -#endif]) - -# On OSF 4.0, <machine/hal_sysinfo.h> must have <sys/sysinfo.h> for ulong_t -AC_CHECK_HEADERS(machine/hal_sysinfo.h,,, -[#if HAVE_SYS_SYSINFO_H -# include <sys/sysinfo.h> -#endif]) - -# Reasons for testing: -# optarg - not declared in mingw -# fgetc, fscanf, ungetc, vfprintf - not declared in SunOS 4 -# sys_errlist, sys_nerr - not declared in SunOS 4 -# -# optarg should be in unistd.h and the rest in stdio.h, both of which are -# in the autoconf default includes. -# -# sys_errlist and sys_nerr are supposed to be in <errno.h> on SunOS according -# to the man page (but aren't), in glibc they're in stdio.h. -# -AC_CHECK_DECLS([fgetc, fscanf, optarg, ungetc, vfprintf]) -AC_CHECK_DECLS([sys_errlist, sys_nerr], , , -[#include <stdio.h> -#include <errno.h>]) - -AC_TYPE_SIGNAL - -# Reasons for testing: -# intmax_t - C99 -# long double - not in the HP bundled K&R cc -# long long - only in reasonably recent compilers -# ptrdiff_t - seems to be everywhere, maybe don't need to check this -# quad_t - BSD specific -# uint_least32_t - C99 -# -# the default includes are sufficient for all these types -# -AC_CHECK_TYPES([intmax_t, long double, long long, ptrdiff_t, quad_t, - uint_least32_t, intptr_t]) - -# FIXME: Really want #ifndef __cplusplus around the #define volatile -# replacement autoconf gives, since volatile is always available in C++. -# But we don't use it in C++ currently. -AC_C_VOLATILE - -AC_C_RESTRICT - -# GMP_C_STDARG -GMP_C_ATTRIBUTE_CONST -GMP_C_ATTRIBUTE_MALLOC -GMP_C_ATTRIBUTE_MODE -GMP_C_ATTRIBUTE_NORETURN -GMP_C_HIDDEN_ALIAS - -GMP_H_EXTERN_INLINE - -# from libtool -AC_CHECK_LIBM -AC_SUBST(LIBM) - -GMP_FUNC_ALLOCA -GMP_OPTION_ALLOCA - -GMP_H_HAVE_FILE - -AC_C_BIGENDIAN( - [AC_DEFINE(HAVE_LIMB_BIG_ENDIAN, 1) - GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_LIMB_BIG_ENDIAN')", POST)], - [AC_DEFINE(HAVE_LIMB_LITTLE_ENDIAN, 1) - GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_LIMB_LITTLE_ENDIAN')", POST) - ], [:]) -AH_VERBATIM([HAVE_LIMB], -[/* Define one of these to 1 for the endianness of `mp_limb_t'. - If the endianness is not a simple big or little, or you don't know what - it is, then leave both undefined. */ -#undef HAVE_LIMB_BIG_ENDIAN -#undef HAVE_LIMB_LITTLE_ENDIAN]) - -GMP_C_DOUBLE_FORMAT - - -# Reasons for testing: -# alarm - not in mingw -# attr_get - IRIX specific -# clock_gettime - not in glibc 2.2.4, only very recent systems -# cputime - not in glibc -# getsysinfo - OSF specific -# getrusage - not in mingw -# gettimeofday - not in mingw -# mmap - not in mingw, djgpp -# nl_langinfo - X/Open standard only, not in djgpp for instance -# obstack_vprintf - glibc specific -# processor_info - solaris specific -# pstat_getprocessor - HPUX specific (10.x and up) -# raise - an ANSI-ism, though probably almost universal by now -# read_real_time - AIX specific -# sigaction - not in mingw -# sigaltstack - not in mingw, or old AIX (reputedly) -# sigstack - not in mingw -# strerror - not in SunOS -# strnlen - glibc extension (some other systems too) -# syssgi - IRIX specific -# times - not in mingw -# -# AC_FUNC_STRNLEN is not used because we don't want the AC_LIBOBJ -# replacement setups it gives. It detects a faulty strnlen on AIX, but -# missing out on that test is ok since our only use of strnlen is in -# __gmp_replacement_vsnprintf which is not required on AIX since it has a -# vsnprintf. -# -AC_CHECK_FUNCS(alarm attr_get clock cputime getpagesize getrusage gettimeofday getsysinfo localeconv memset mmap mprotect nl_langinfo obstack_vprintf popen processor_info pstat_getprocessor raise read_real_time sigaction sigaltstack sigstack syssgi strchr strerror strnlen strtol strtoul sysconf sysctl sysctlbyname times) - -# clock_gettime is in librt on *-*-osf5.1 and on glibc, so att -lrt to -# TUNE_LIBS if needed. On linux (tested on x86_32, 2.6.26), -# clock_getres reports ns accuracy, while in a quick test on osf -# clock_getres said only 1 millisecond. - -old_LIBS="$LIBS" -AC_SEARCH_LIBS(clock_gettime, rt, [ - AC_DEFINE([HAVE_CLOCK_GETTIME],1,[Define to 1 if you have the `clock_gettime' function])]) -TUNE_LIBS="$LIBS" -LIBS="$old_LIBS" - -AC_SUBST(TUNE_LIBS) - -GMP_FUNC_VSNPRINTF -GMP_FUNC_SSCANF_WRITABLE_INPUT - -# Reasons for checking: -# pst_processor psp_iticksperclktick - not in hpux 9 -# -AC_CHECK_MEMBER(struct pst_processor.psp_iticksperclktick, - [AC_DEFINE(HAVE_PSP_ITICKSPERCLKTICK, 1, -[Define to 1 if <sys/pstat.h> `struct pst_processor' exists -and contains `psp_iticksperclktick'.])],, - [#include <sys/pstat.h>]) - -# C++ tests, when required -# -if test $enable_cxx = yes; then - AC_LANG_PUSH(C++) - - # Reasons for testing: - # <sstream> - not in g++ 2.95.2 - # std::locale - not in g++ 2.95.4 - # - AC_CHECK_HEADERS([sstream]) - AC_CHECK_TYPES([std::locale],,,[#include <locale>]) - - AC_LANG_POP(C++) -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.) - -# Note: $gmp_mpn_functions must have mod_1 before pre_mod_1 so the former -# can optionally provide the latter as an extra entrypoint. Likewise -# divrem_1 and pre_divrem_1. - -gmp_mpn_functions_optional="umul udiv \ - invert_limb sqr_diagonal sqr_diag_addlsh1 \ - mul_2 mul_3 mul_4 mul_5 mul_6 \ - addmul_2 addmul_3 addmul_4 addmul_5 addmul_6 addmul_7 addmul_8 \ - addlsh1_n sublsh1_n rsblsh1_n rsh1add_n rsh1sub_n \ - addlsh2_n sublsh2_n rsblsh2_n \ - addlsh_n sublsh_n rsblsh_n \ - add_n_sub_n addaddmul_1msb0" - -gmp_mpn_functions="$extra_functions \ - add add_1 add_n sub sub_1 sub_n cnd_add_n cnd_sub_n cnd_swap neg com \ - mul_1 addmul_1 submul_1 \ - add_err1_n add_err2_n add_err3_n sub_err1_n sub_err2_n sub_err3_n \ - lshift rshift dive_1 diveby3 divis divrem divrem_1 divrem_2 \ - fib2_ui fib2m mod_1 mod_34lsub1 mode1o pre_divrem_1 pre_mod_1 dump \ - mod_1_1 mod_1_2 mod_1_3 mod_1_4 lshiftc \ - mul mul_fft mul_n sqr mul_basecase sqr_basecase nussbaumer_mul \ - mulmid_basecase toom42_mulmid mulmid_n mulmid \ - random random2 pow_1 \ - rootrem sqrtrem sizeinbase get_str set_str compute_powtab \ - scan0 scan1 popcount hamdist cmp zero_p \ - perfsqr perfpow strongfibo \ - gcd_11 gcd_22 gcd_1 gcd gcdext_1 gcdext gcd_subdiv_step \ - gcdext_lehmer \ - div_q tdiv_qr jacbase jacobi_2 jacobi get_d \ - matrix22_mul matrix22_mul1_inverse_vector \ - hgcd_matrix hgcd2 hgcd_step hgcd_reduce hgcd hgcd_appr \ - hgcd2_jacobi hgcd_jacobi \ - mullo_n mullo_basecase sqrlo sqrlo_basecase \ - toom22_mul toom32_mul toom42_mul toom52_mul toom62_mul \ - toom33_mul toom43_mul toom53_mul toom54_mul toom63_mul \ - toom44_mul \ - toom6h_mul toom6_sqr toom8h_mul toom8_sqr \ - toom_couple_handling \ - toom2_sqr toom3_sqr toom4_sqr \ - toom_eval_dgr3_pm1 toom_eval_dgr3_pm2 \ - toom_eval_pm1 toom_eval_pm2 toom_eval_pm2exp toom_eval_pm2rexp \ - toom_interpolate_5pts toom_interpolate_6pts toom_interpolate_7pts \ - toom_interpolate_8pts toom_interpolate_12pts toom_interpolate_16pts \ - invertappr invert binvert mulmod_bnm1 sqrmod_bnm1 \ - div_qr_1 div_qr_1n_pi1 \ - div_qr_2 div_qr_2n_pi1 div_qr_2u_pi1 \ - sbpi1_div_q sbpi1_div_qr sbpi1_divappr_q \ - dcpi1_div_q dcpi1_div_qr dcpi1_divappr_q \ - mu_div_qr mu_divappr_q mu_div_q \ - bdiv_q_1 \ - sbpi1_bdiv_q sbpi1_bdiv_qr sbpi1_bdiv_r \ - dcpi1_bdiv_q dcpi1_bdiv_qr \ - mu_bdiv_q mu_bdiv_qr \ - bdiv_q bdiv_qr broot brootinv bsqrt bsqrtinv \ - divexact bdiv_dbm1c redc_1 redc_2 redc_n powm powlo sec_powm \ - sec_mul sec_sqr sec_div_qr sec_div_r sec_pi1_div_qr sec_pi1_div_r \ - sec_add_1 sec_sub_1 sec_invert \ - trialdiv remove \ - and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n \ - copyi copyd zero sec_tabselect \ - comb_tables \ - $gmp_mpn_functions_optional" - -define(GMP_MULFUNC_CHOICES, -[# functions that can be provided by multi-function files -tmp_mulfunc= -case $tmp_fn in - add_n|sub_n) tmp_mulfunc="aors_n" ;; - add_err1_n|sub_err1_n) - tmp_mulfunc="aors_err1_n" ;; - add_err2_n|sub_err2_n) - tmp_mulfunc="aors_err2_n" ;; - add_err3_n|sub_err3_n) - tmp_mulfunc="aors_err3_n" ;; - cnd_add_n|cnd_sub_n) tmp_mulfunc="cnd_aors_n" ;; - sec_add_1|sec_sub_1) tmp_mulfunc="sec_aors_1" ;; - addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;; - mul_2|addmul_2) tmp_mulfunc="aormul_2" ;; - mul_3|addmul_3) tmp_mulfunc="aormul_3" ;; - mul_4|addmul_4) tmp_mulfunc="aormul_4" ;; - 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" ;; - lshift|rshift) tmp_mulfunc="lorrshift";; - addlsh1_n) - tmp_mulfunc="aorslsh1_n aorrlsh1_n aorsorrlsh1_n";; - sublsh1_n) - tmp_mulfunc="aorslsh1_n sorrlsh1_n aorsorrlsh1_n";; - rsblsh1_n) - tmp_mulfunc="aorrlsh1_n sorrlsh1_n aorsorrlsh1_n";; - addlsh2_n) - tmp_mulfunc="aorslsh2_n aorrlsh2_n aorsorrlsh2_n";; - sublsh2_n) - tmp_mulfunc="aorslsh2_n sorrlsh2_n aorsorrlsh2_n";; - rsblsh2_n) - tmp_mulfunc="aorrlsh2_n sorrlsh2_n aorsorrlsh2_n";; - addlsh_n) - tmp_mulfunc="aorslsh_n aorrlsh_n aorsorrlsh_n";; - sublsh_n) - tmp_mulfunc="aorslsh_n sorrlsh_n aorsorrlsh_n";; - rsblsh_n) - tmp_mulfunc="aorrlsh_n sorrlsh_n aorsorrlsh_n";; - rsh1add_n|rsh1sub_n) - tmp_mulfunc="rsh1aors_n";; - sec_div_qr|sec_div_r) - tmp_mulfunc="sec_div";; - sec_pi1_div_qr|sec_pi1_div_r) - tmp_mulfunc="sec_pi1_div";; -esac -]) - -# the list of all object files used by mpn/Makefile.in and the -# top-level Makefile.in, respectively -mpn_objects= -mpn_objs_in_libgmp= - -# links from the sources, to be removed by "make distclean" -gmp_srclinks= - - -# mpn_relative_top_srcdir is $top_srcdir, but for use from within the mpn -# build directory. If $srcdir is relative then we use a relative path too, -# so the two trees can be moved together. -case $srcdir in - [[\\/]* | ?:[\\/]*]) # absolute, as per autoconf - mpn_relative_top_srcdir=$srcdir ;; - *) # relative - mpn_relative_top_srcdir=../$srcdir ;; -esac - - -define(MPN_SUFFIXES,[asm S s c]) - -dnl Usage: GMP_FILE_TO_FUNCTION_BASE(func,file) -dnl -dnl Set $func to the function base name for $file, eg. dive_1 gives -dnl divexact_1. -dnl -define(GMP_FILE_TO_FUNCTION, -[case $$2 in - dive_1) $1=divexact_1 ;; - diveby3) $1=divexact_by3c ;; - pre_divrem_1) $1=preinv_divrem_1 ;; - mode1o) $1=modexact_1c_odd ;; - pre_mod_1) $1=preinv_mod_1 ;; - mod_1_1) $1=mod_1_1p ;; - mod_1_1_cps) $1=mod_1_1p_cps ;; - mod_1_2) $1=mod_1s_2p ;; - mod_1_2_cps) $1=mod_1s_2p_cps ;; - mod_1_3) $1=mod_1s_3p ;; - mod_1_3_cps) $1=mod_1s_3p_cps ;; - mod_1_4) $1=mod_1s_4p ;; - mod_1_4_cps) $1=mod_1s_4p_cps ;; - *) $1=$$2 ;; -esac -]) - -# Fat binary setups. -# -# We proceed through each $fat_path directory, and look for $fat_function -# routines there. Those found are incorporated in the build by generating a -# little mpn/<foo>.asm or mpn/<foo>.c file in the build directory, with -# suitable function renaming, and adding that to $mpn_objects (the same as a -# normal mpn file). -# -# fat.h is generated with macros to let internal calls to each $fat_function -# go directly through __gmpn_cpuvec, plus macros and declarations helping to -# setup that structure, on a per-directory basis ready for -# mpn/<cpu>/fat/fat.c. -# -# fat.h includes thresholds listed in $fat_thresholds, extracted from -# gmp-mparam.h in each directory. An overall maximum for each threshold is -# established, for use in making fixed size arrays of temporary space. -# (Eg. MUL_TOOM33_THRESHOLD_LIMIT used by mpn/generic/mul.c.) -# -# It'd be possible to do some of this manually, but when there's more than a -# few functions and a few directories it becomes very tedious, and very -# prone to having some routine accidentally omitted. On that basis it seems -# best to automate as much as possible, even if the code to do so is a bit -# ugly. -# - -if test -n "$fat_path"; then - # Usually the mpn build directory is created with mpn/Makefile - # instantiation, but we want to write to it sooner. - mkdir mpn 2>/dev/null - - echo "/* fat.h - setups for fat binaries." >fat.h - echo " Generated by configure - DO NOT EDIT. */" >>fat.h - - AC_DEFINE(WANT_FAT_BINARY, 1, [Define to 1 when building a fat binary.]) - GMP_DEFINE(WANT_FAT_BINARY, yes) - - # Don't want normal copies of fat functions - for tmp_fn in $fat_functions; do - GMP_REMOVE_FROM_LIST(gmp_mpn_functions, $tmp_fn) - GMP_REMOVE_FROM_LIST(gmp_mpn_functions_optional, $tmp_fn) - done - - for tmp_fn in $fat_functions; do - GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) - echo " -#ifndef OPERATION_$tmp_fn -#undef mpn_$tmp_fbase -#define mpn_$tmp_fbase (*__gmpn_cpuvec.$tmp_fbase) -#endif -DECL_$tmp_fbase (__MPN(${tmp_fbase}_init));" >>fat.h - # encourage various macros to use fat functions - AC_DEFINE_UNQUOTED(HAVE_NATIVE_mpn_$tmp_fbase) - done - - echo "" >>fat.h - echo "/* variable thresholds */" >>fat.h - for tmp_tn in $fat_thresholds; do - echo "#undef $tmp_tn" >>fat.h - echo "#define $tmp_tn CPUVEC_THRESHOLD (`echo $tmp_tn | tr [A-Z] [a-z]`)" >>fat.h - done - - echo " -/* Copy all fields into __gmpn_cpuvec. - memcpy is not used because it might operate byte-wise (depending on its - implementation), and we need the function pointer writes to be atomic. - "volatile" discourages the compiler from trying to optimize this. */ -#define CPUVEC_INSTALL(vec) \\ - do { \\ - volatile struct cpuvec_t *p = &__gmpn_cpuvec; \\" >>fat.h - for tmp_fn in $fat_functions; do - GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) - echo " p->$tmp_fbase = vec.$tmp_fbase; \\" >>fat.h - done - for tmp_tn in $fat_thresholds; do - tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` - echo " p->$tmp_field_name = vec.$tmp_field_name; \\" >>fat.h - done - echo " } while (0)" >>fat.h - - echo " -/* A helper to check all fields are filled. */ -#define ASSERT_CPUVEC(vec) \\ - do { \\" >>fat.h - for tmp_fn in $fat_functions; do - GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) - echo " ASSERT (vec.$tmp_fbase != NULL); \\" >>fat.h - done - for tmp_tn in $fat_thresholds; do - tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` - echo " ASSERT (vec.$tmp_field_name != 0); \\" >>fat.h - done - echo " } while (0)" >>fat.h - - echo " -/* Call ITERATE(field) for each fat threshold field. */ -#define ITERATE_FAT_THRESHOLDS() \\ - do { \\" >>fat.h - for tmp_tn in $fat_thresholds; do - tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` - echo " ITERATE ($tmp_tn, $tmp_field_name); \\" >>fat.h - done - echo " } while (0)" >>fat.h - - for tmp_dir in $fat_path; do - CPUVEC_SETUP= - THRESH_ASM_SETUP= - echo "" >>fat.h - GMP_FAT_SUFFIX(tmp_suffix, $tmp_dir) - - # In order to keep names unique on a DOS 8.3 filesystem, use a prefix - # (rather than a suffix) for the generated file names, and abbreviate. - case $tmp_suffix in - pentium) tmp_prefix=p ;; - pentium_mmx) tmp_prefix=pm ;; - p6_mmx) tmp_prefix=p2 ;; - p6_p3mmx) tmp_prefix=p3 ;; - pentium4) tmp_prefix=p4 ;; - pentium4_mmx) tmp_prefix=p4m ;; - pentium4_sse2) tmp_prefix=p4s ;; - k6_mmx) tmp_prefix=k6m ;; - k6_k62mmx) tmp_prefix=k62 ;; - k7_mmx) tmp_prefix=k7m ;; - *) tmp_prefix=$tmp_suffix ;; - esac - - # Extract desired thresholds from gmp-mparam.h file in this directory, - # if present. - tmp_mparam=$srcdir/mpn/$tmp_dir/gmp-mparam.h - if test -f $tmp_mparam; then - for tmp_tn in $fat_thresholds; do - tmp_thresh=`sed -n "s/^#define $tmp_tn[ ]*\\([0-9][0-9]*\\).*$/\\1/p" $tmp_mparam` - if test -n "$tmp_thresh"; then - THRESH_ASM_SETUP=["${THRESH_ASM_SETUP}define($tmp_tn,$tmp_thresh) -"] - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.`echo $tmp_tn | tr [[A-Z]] [[a-z]]` = $tmp_thresh; \\ -" - eval tmp_limit=\$${tmp_tn}_LIMIT - if test -z "$tmp_limit"; then - tmp_limit=0 - fi - if test $tmp_thresh -gt $tmp_limit; then - eval ${tmp_tn}_LIMIT=$tmp_thresh - fi - fi - done - fi - - for tmp_fn in $fat_functions; do - GMP_MULFUNC_CHOICES - - for tmp_base in $tmp_fn $tmp_mulfunc; do - for tmp_ext in MPN_SUFFIXES; do - tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext - if test -f $tmp_file; then - - # If the host uses a non-standard ABI, check if tmp_file supports it - # - if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then - abi=[`sed -n 's/^[ ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file `] - if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then - true - else - continue - fi - fi - - mpn_objects="$mpn_objects ${tmp_prefix}_$tmp_fn.lo" - mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_prefix}_$tmp_fn.lo" - - GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) - - # carry-in variant, eg. divrem_1c or modexact_1c_odd - case $tmp_fbase in - *_1*) tmp_fbasec=`echo $tmp_fbase | sed 's/_1/_1c/'` ;; - *) tmp_fbasec=${tmp_fbase}c ;; - esac - - # Create a little file doing an include from srcdir. The - # OPERATION and renamings aren't all needed all the time, but - # they don't hurt if unused. - # - # FIXME: Should generate these via config.status commands. - # Would need them all in one AC_CONFIG_COMMANDS though, since - # that macro doesn't accept a set of separate commands generated - # by shell code. - # - case $tmp_ext in - asm) - # hide the d-n-l from autoconf's error checking - tmp_d_n_l=d""nl - echo ["$tmp_d_n_l mpn_$tmp_fbase - from $tmp_dir directory for fat binary. -$tmp_d_n_l Generated by configure - DO NOT EDIT. - -define(OPERATION_$tmp_fn) -define(__gmpn_$tmp_fbase, __gmpn_${tmp_fbase}_$tmp_suffix) -define(__gmpn_$tmp_fbasec,__gmpn_${tmp_fbasec}_${tmp_suffix}) -define(__gmpn_preinv_${tmp_fbase},__gmpn_preinv_${tmp_fbase}_${tmp_suffix}) -define(__gmpn_${tmp_fbase}_cps,__gmpn_${tmp_fbase}_cps_${tmp_suffix}) - -$tmp_d_n_l For k6 and k7 gcd_1 calling their corresponding mpn_modexact_1_odd -ifdef(\`__gmpn_modexact_1_odd',, -\`define(__gmpn_modexact_1_odd,__gmpn_modexact_1_odd_${tmp_suffix})') - -$THRESH_ASM_SETUP -include][($mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.asm) -"] >mpn/${tmp_prefix}_$tmp_fn.asm - ;; - c) - echo ["/* mpn_$tmp_fbase - from $tmp_dir directory for fat binary. - Generated by configure - DO NOT EDIT. */ - -#define OPERATION_$tmp_fn 1 -#define __gmpn_$tmp_fbase __gmpn_${tmp_fbase}_$tmp_suffix -#define __gmpn_$tmp_fbasec __gmpn_${tmp_fbasec}_${tmp_suffix} -#define __gmpn_preinv_${tmp_fbase} __gmpn_preinv_${tmp_fbase}_${tmp_suffix} -#define __gmpn_${tmp_fbase}_cps __gmpn_${tmp_fbase}_cps_${tmp_suffix} - -#include \"$mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.c\" -"] >mpn/${tmp_prefix}_$tmp_fn.c - ;; - esac - - # Prototype, and append to CPUVEC_SETUP for this directory. - echo "DECL_$tmp_fbase (__gmpn_${tmp_fbase}_$tmp_suffix);" >>fat.h - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.$tmp_fbase = __gmpn_${tmp_fbase}_${tmp_suffix}; \\ -" - # Ditto for any preinv variant (preinv_divrem_1, preinv_mod_1). - if grep "^PROLOGUE(mpn_preinv_$tmp_fn)" $tmp_file >/dev/null; then - echo "DECL_preinv_$tmp_fbase (__gmpn_preinv_${tmp_fbase}_$tmp_suffix);" >>fat.h - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.preinv_$tmp_fbase = __gmpn_preinv_${tmp_fbase}_${tmp_suffix}; \\ -" - fi - - # Ditto for any mod_1...cps variant - if grep "^PROLOGUE(mpn_${tmp_fbase}_cps)" $tmp_file >/dev/null; then - echo "DECL_${tmp_fbase}_cps (__gmpn_${tmp_fbase}_cps_$tmp_suffix);" >>fat.h - CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.${tmp_fbase}_cps = __gmpn_${tmp_fbase}_cps_${tmp_suffix}; \\ -" - fi - fi - done - done - done - - # Emit CPUVEC_SETUP for this directory - echo "" >>fat.h - echo "#define CPUVEC_SETUP_$tmp_suffix \\" >>fat.h - echo " do { \\" >>fat.h - echo "$CPUVEC_SETUP } while (0)" >>fat.h - done - - # Emit threshold limits - echo "" >>fat.h - for tmp_tn in $fat_thresholds; do - eval tmp_limit=\$${tmp_tn}_LIMIT - echo "#define ${tmp_tn}_LIMIT $tmp_limit" >>fat.h - done -fi - - -# Normal binary setups. -# - -for tmp_ext in MPN_SUFFIXES; do - eval found_$tmp_ext=no -done - -for tmp_fn in $gmp_mpn_functions; do - for tmp_ext in MPN_SUFFIXES; do - test "$no_create" = yes || rm -f mpn/$tmp_fn.$tmp_ext - done - - # mpn_preinv_divrem_1 might have been provided by divrem_1.asm, likewise - # mpn_preinv_mod_1 by mod_1.asm. - case $tmp_fn in - pre_divrem_1) - if test "$HAVE_NATIVE_mpn_preinv_divrem_1" = yes; then continue; fi ;; - pre_mod_1) - if test "$HAVE_NATIVE_mpn_preinv_mod_1" = yes; then continue; fi ;; - esac - - GMP_MULFUNC_CHOICES - - found=no - for tmp_dir in $path; do - for tmp_base in $tmp_fn $tmp_mulfunc; do - for tmp_ext in MPN_SUFFIXES; do - tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext - if test -f $tmp_file; then - - # For a nails build, check if the file supports our nail bits. - # Generic code always supports all nails. - # - # FIXME: When a multi-function file is selected to provide one of - # the nails-neutral routines, like logops_n for and_n, the - # PROLOGUE grepping will create HAVE_NATIVE_mpn_<foo> defines for - # all functions in that file, even if they haven't all been - # nailified. Not sure what to do about this, it's only really a - # problem for logops_n, and it's not too terrible to insist those - # get nailified always. - # - if test $GMP_NAIL_BITS != 0 && test $tmp_dir != generic; then - case $tmp_fn in - and_n | ior_n | xor_n | andn_n | \ - copyi | copyd | \ - popcount | hamdist | \ - udiv | udiv_w_sdiv | umul | \ - cntlz | invert_limb) - # these operations are either unaffected by nails or defined - # to operate on full limbs - ;; - *) - nails=[`sed -n 's/^[ ]*NAILS_SUPPORT(\(.*\))/\1/p' $tmp_file `] - for n in $nails; do - case $n in - *-*) - n_start=`echo "$n" | sed -n 's/\(.*\)-.*/\1/p'` - n_end=`echo "$n" | sed -n 's/.*-\(.*\)/\1/p'` - ;; - *) - n_start=$n - n_end=$n - ;; - esac - if test $GMP_NAIL_BITS -ge $n_start && test $GMP_NAIL_BITS -le $n_end; then - found=yes - break - fi - done - if test $found != yes; then - continue - fi - ;; - esac - fi - - # If the host uses a non-standard ABI, check if tmp_file supports it - # - if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then - abi=[`sed -n 's/^[ ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file `] - if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then - true - else - continue - fi - fi - - found=yes - eval found_$tmp_ext=yes - - if test $tmp_ext = c; then - tmp_u='$U' - else - tmp_u= - fi - - mpn_objects="$mpn_objects $tmp_fn$tmp_u.lo" - mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/$tmp_fn$tmp_u.lo" - AC_CONFIG_LINKS(mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext) - gmp_srclinks="$gmp_srclinks mpn/$tmp_fn.$tmp_ext" - - # Duplicate AC_DEFINEs are harmless, so it doesn't matter - # that multi-function files get grepped here repeatedly. - # The PROLOGUE pattern excludes the optional second parameter. - 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) - eval HAVE_NATIVE_$gmp_tmp=yes - done - - case $tmp_fn in - sqr_basecase) sqr_basecase_source=$tmp_file ;; - esac - - 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 - -# All cycle counters are .asm files currently -if test -n "$SPEED_CYCLECOUNTER_OBJ"; then - found_asm=yes -fi - -dnl The following list only needs to have templates for those defines which -dnl are going to be tested by the code, there's no need to have every -dnl possible mpn routine. - -AH_VERBATIM([HAVE_NATIVE], -[/* Define to 1 each of the following for which a native (ie. CPU specific) - implementation of the corresponding routine exists. */ -#undef HAVE_NATIVE_mpn_add_n -#undef HAVE_NATIVE_mpn_add_n_sub_n -#undef HAVE_NATIVE_mpn_add_nc -#undef HAVE_NATIVE_mpn_addaddmul_1msb0 -#undef HAVE_NATIVE_mpn_addlsh1_n -#undef HAVE_NATIVE_mpn_addlsh2_n -#undef HAVE_NATIVE_mpn_addlsh_n -#undef HAVE_NATIVE_mpn_addlsh1_nc -#undef HAVE_NATIVE_mpn_addlsh2_nc -#undef HAVE_NATIVE_mpn_addlsh_nc -#undef HAVE_NATIVE_mpn_addlsh1_n_ip1 -#undef HAVE_NATIVE_mpn_addlsh2_n_ip1 -#undef HAVE_NATIVE_mpn_addlsh_n_ip1 -#undef HAVE_NATIVE_mpn_addlsh1_nc_ip1 -#undef HAVE_NATIVE_mpn_addlsh2_nc_ip1 -#undef HAVE_NATIVE_mpn_addlsh_nc_ip1 -#undef HAVE_NATIVE_mpn_addlsh1_n_ip2 -#undef HAVE_NATIVE_mpn_addlsh2_n_ip2 -#undef HAVE_NATIVE_mpn_addlsh_n_ip2 -#undef HAVE_NATIVE_mpn_addlsh1_nc_ip2 -#undef HAVE_NATIVE_mpn_addlsh2_nc_ip2 -#undef HAVE_NATIVE_mpn_addlsh_nc_ip2 -#undef HAVE_NATIVE_mpn_addmul_1c -#undef HAVE_NATIVE_mpn_addmul_2 -#undef HAVE_NATIVE_mpn_addmul_3 -#undef HAVE_NATIVE_mpn_addmul_4 -#undef HAVE_NATIVE_mpn_addmul_5 -#undef HAVE_NATIVE_mpn_addmul_6 -#undef HAVE_NATIVE_mpn_addmul_7 -#undef HAVE_NATIVE_mpn_addmul_8 -#undef HAVE_NATIVE_mpn_addmul_2s -#undef HAVE_NATIVE_mpn_and_n -#undef HAVE_NATIVE_mpn_andn_n -#undef HAVE_NATIVE_mpn_bdiv_dbm1c -#undef HAVE_NATIVE_mpn_bdiv_q_1 -#undef HAVE_NATIVE_mpn_pi1_bdiv_q_1 -#undef HAVE_NATIVE_mpn_cnd_add_n -#undef HAVE_NATIVE_mpn_cnd_sub_n -#undef HAVE_NATIVE_mpn_com -#undef HAVE_NATIVE_mpn_copyd -#undef HAVE_NATIVE_mpn_copyi -#undef HAVE_NATIVE_mpn_div_qr_1n_pi1 -#undef HAVE_NATIVE_mpn_div_qr_2 -#undef HAVE_NATIVE_mpn_divexact_1 -#undef HAVE_NATIVE_mpn_divexact_by3c -#undef HAVE_NATIVE_mpn_divrem_1 -#undef HAVE_NATIVE_mpn_divrem_1c -#undef HAVE_NATIVE_mpn_divrem_2 -#undef HAVE_NATIVE_mpn_gcd_1 -#undef HAVE_NATIVE_mpn_gcd_11 -#undef HAVE_NATIVE_mpn_gcd_22 -#undef HAVE_NATIVE_mpn_hamdist -#undef HAVE_NATIVE_mpn_invert_limb -#undef HAVE_NATIVE_mpn_ior_n -#undef HAVE_NATIVE_mpn_iorn_n -#undef HAVE_NATIVE_mpn_lshift -#undef HAVE_NATIVE_mpn_lshiftc -#undef HAVE_NATIVE_mpn_lshsub_n -#undef HAVE_NATIVE_mpn_mod_1 -#undef HAVE_NATIVE_mpn_mod_1_1p -#undef HAVE_NATIVE_mpn_mod_1c -#undef HAVE_NATIVE_mpn_mod_1s_2p -#undef HAVE_NATIVE_mpn_mod_1s_4p -#undef HAVE_NATIVE_mpn_mod_34lsub1 -#undef HAVE_NATIVE_mpn_modexact_1_odd -#undef HAVE_NATIVE_mpn_modexact_1c_odd -#undef HAVE_NATIVE_mpn_mul_1 -#undef HAVE_NATIVE_mpn_mul_1c -#undef HAVE_NATIVE_mpn_mul_2 -#undef HAVE_NATIVE_mpn_mul_3 -#undef HAVE_NATIVE_mpn_mul_4 -#undef HAVE_NATIVE_mpn_mul_5 -#undef HAVE_NATIVE_mpn_mul_6 -#undef HAVE_NATIVE_mpn_mul_basecase -#undef HAVE_NATIVE_mpn_mullo_basecase -#undef HAVE_NATIVE_mpn_nand_n -#undef HAVE_NATIVE_mpn_nior_n -#undef HAVE_NATIVE_mpn_popcount -#undef HAVE_NATIVE_mpn_preinv_divrem_1 -#undef HAVE_NATIVE_mpn_preinv_mod_1 -#undef HAVE_NATIVE_mpn_redc_1 -#undef HAVE_NATIVE_mpn_redc_2 -#undef HAVE_NATIVE_mpn_rsblsh1_n -#undef HAVE_NATIVE_mpn_rsblsh2_n -#undef HAVE_NATIVE_mpn_rsblsh_n -#undef HAVE_NATIVE_mpn_rsblsh1_nc -#undef HAVE_NATIVE_mpn_rsblsh2_nc -#undef HAVE_NATIVE_mpn_rsblsh_nc -#undef HAVE_NATIVE_mpn_rsh1add_n -#undef HAVE_NATIVE_mpn_rsh1add_nc -#undef HAVE_NATIVE_mpn_rsh1sub_n -#undef HAVE_NATIVE_mpn_rsh1sub_nc -#undef HAVE_NATIVE_mpn_rshift -#undef HAVE_NATIVE_mpn_sbpi1_bdiv_r -#undef HAVE_NATIVE_mpn_sqr_basecase -#undef HAVE_NATIVE_mpn_sqr_diagonal -#undef HAVE_NATIVE_mpn_sqr_diag_addlsh1 -#undef HAVE_NATIVE_mpn_sub_n -#undef HAVE_NATIVE_mpn_sub_nc -#undef HAVE_NATIVE_mpn_sublsh1_n -#undef HAVE_NATIVE_mpn_sublsh2_n -#undef HAVE_NATIVE_mpn_sublsh_n -#undef HAVE_NATIVE_mpn_sublsh1_nc -#undef HAVE_NATIVE_mpn_sublsh2_nc -#undef HAVE_NATIVE_mpn_sublsh_nc -#undef HAVE_NATIVE_mpn_sublsh1_n_ip1 -#undef HAVE_NATIVE_mpn_sublsh2_n_ip1 -#undef HAVE_NATIVE_mpn_sublsh_n_ip1 -#undef HAVE_NATIVE_mpn_sublsh1_nc_ip1 -#undef HAVE_NATIVE_mpn_sublsh2_nc_ip1 -#undef HAVE_NATIVE_mpn_sublsh_nc_ip1 -#undef HAVE_NATIVE_mpn_submul_1c -#undef HAVE_NATIVE_mpn_tabselect -#undef HAVE_NATIVE_mpn_udiv_qrnnd -#undef HAVE_NATIVE_mpn_udiv_qrnnd_r -#undef HAVE_NATIVE_mpn_umul_ppmm -#undef HAVE_NATIVE_mpn_umul_ppmm_r -#undef HAVE_NATIVE_mpn_xor_n -#undef HAVE_NATIVE_mpn_xnor_n]) - - -# Don't demand an m4 unless it's actually needed. -if test $found_asm = yes; then - GMP_PROG_M4 - GMP_M4_M4WRAP_SPURIOUS -# else -# It's unclear why this m4-not-needed stuff was ever done. -# if test -z "$M4" ; then -# M4=m4-not-needed -# fi -fi - -# Only do the GMP_ASM checks if there's a .S or .asm wanting them. -if test $found_asm = no && test $found_S = no; then - gmp_asm_syntax_testing=no -fi - -if test "$gmp_asm_syntax_testing" != no; then - GMP_ASM_TEXT - GMP_ASM_DATA - GMP_ASM_LABEL_SUFFIX - GMP_ASM_GLOBL - GMP_ASM_GLOBL_ATTR - GMP_ASM_UNDERSCORE - GMP_ASM_RODATA - GMP_ASM_TYPE - GMP_ASM_SIZE - GMP_ASM_LSYM_PREFIX - GMP_ASM_W32 - GMP_ASM_ALIGN_LOG - - case $host in - arm*-*-* | aarch64*-*-*) - case $ABI in - 32) - GMP_INCLUDE_MPN(arm/arm-defs.m4) ;; - 64) - case $host in - *-*-darwin*) - GMP_INCLUDE_MPN(arm64/darwin.m4) ;; - *) - GMP_INCLUDE_MPN(arm64/arm64-defs.m4) ;; - esac - ;; - esac - ;; - hppa*-*-*) - # for both pa32 and pa64 - GMP_INCLUDE_MPN(pa32/pa-defs.m4) - ;; - IA64_PATTERN) - GMP_ASM_IA64_ALIGN_OK - ;; - M68K_PATTERN) - GMP_ASM_M68K_INSTRUCTION - GMP_ASM_M68K_ADDRESSING - GMP_ASM_M68K_BRANCHES - ;; - [powerpc*-*-* | power[3-9]-*-*]) - GMP_ASM_POWERPC_PIC_ALWAYS - GMP_ASM_POWERPC_R_REGISTERS - GMP_INCLUDE_MPN(powerpc32/powerpc-defs.m4) - - # Check for Linux ELFv1 ABI - AC_EGREP_CPP(yes, -[#if _CALL_ELF == 1 -yes -#endif], - [GMP_DEFINE_RAW(["define(<ELFv1_ABI>)"])]) - - # Check for Linux ELFv2 ABI - AC_EGREP_CPP(yes, -[#if _CALL_ELF == 2 -yes -#endif], - [GMP_DEFINE_RAW(["define(<ELFv2_ABI>)"])]) - - case $host in - *-*-aix*) - case $ABI in - mode64) GMP_INCLUDE_MPN(powerpc64/aix.m4) ;; - *) GMP_INCLUDE_MPN(powerpc32/aix.m4) ;; - esac - ;; - *-*-linux* | *-*-*bsd*) - case $ABI in - mode64) GMP_INCLUDE_MPN(powerpc64/elf.m4) ;; - mode32 | 32) GMP_INCLUDE_MPN(powerpc32/elf.m4) ;; - esac - ;; - *-*-darwin*) - case $ABI in - mode64) GMP_INCLUDE_MPN(powerpc64/darwin.m4) ;; - mode32 | 32) GMP_INCLUDE_MPN(powerpc32/darwin.m4) ;; - esac - ;; - *) - # Assume unrecognized operating system is the powerpc eABI - GMP_INCLUDE_MPN(powerpc32/eabi.m4) - ;; - esac - ;; - power*-*-aix*) - GMP_INCLUDE_MPN(powerpc32/aix.m4) - ;; - *sparc*-*-*) - case $ABI in - 64) - GMP_ASM_SPARC_REGISTER - ;; - esac - GMP_ASM_SPARC_GOTDATA - GMP_ASM_SPARC_SHARED_THUNKS - ;; - X86_PATTERN | X86_64_PATTERN) - GMP_ASM_ALIGN_FILL_0x90 - if test "$x86_have_mulx" = yes; then - GMP_ASM_X86_MULX - fi - GMP_ASM_COFF_TYPE - case $ABI in - 32) - GMP_INCLUDE_MPN(x86/x86-defs.m4) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86) - GMP_ASM_X86_GOT_UNDERSCORE - GMP_ASM_X86_SHLDL_CL - case $enable_profiling in - prof | gprof) GMP_ASM_X86_MCOUNT ;; - esac - case $host in - *-*-darwin*) - GMP_INCLUDE_MPN(x86/darwin.m4) ;; - esac - ;; - 64|x32) - GMP_INCLUDE_MPN(x86_64/x86_64-defs.m4) - AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86_64) - case $host in - *-*-darwin*) - GMP_INCLUDE_MPN(x86_64/darwin.m4) ;; - *-*-mingw* | *-*-msys | *-*-cygwin) - GMP_INCLUDE_MPN(x86_64/dos64.m4) ;; - *-openbsd*) - GMP_DEFINE_RAW(["define(<OPENBSD>,1)"]) ;; - *-linux*) - GMP_DEFINE_RAW(["define(<LINUX>,1)"]) ;; - esac - ;; - esac - ;; - esac -fi - -# For --enable-minithres, prepend "minithres" to path so that its special -# gmp-mparam.h will be used. -if test $enable_minithres = yes; then - path="minithres $path" -fi - -# Create link for gmp-mparam.h. -gmp_mparam_source= -for gmp_mparam_dir in $path; do - test "$no_create" = yes || rm -f gmp-mparam.h - tmp_file=$srcdir/mpn/$gmp_mparam_dir/gmp-mparam.h - if test -f $tmp_file; then - AC_CONFIG_LINKS(gmp-mparam.h:mpn/$gmp_mparam_dir/gmp-mparam.h) - gmp_srclinks="$gmp_srclinks gmp-mparam.h" - gmp_mparam_source=$tmp_file - break - fi -done -if test -z "$gmp_mparam_source"; then - AC_MSG_ERROR([no version of gmp-mparam.h found in path: $path]) -fi - -# For a helpful message from tune/tuneup.c -gmp_mparam_suggest=$gmp_mparam_source -if test "$gmp_mparam_dir" = generic; then - for i in $path; do break; done - if test "$i" != generic; then - gmp_mparam_suggest="new file $srcdir/mpn/$i/gmp-mparam.h" - fi -fi -AC_DEFINE_UNQUOTED(GMP_MPARAM_H_SUGGEST, "$gmp_mparam_source", -[The gmp-mparam.h file (a string) the tune program should suggest updating.]) - - -# Copy relevant parameters from gmp-mparam.h to config.m4. -# We only do this for parameters that are used by some assembly files. -# Fat binaries do this on a per-file basis, so skip in that case. -# -if test -z "$fat_path"; then - for i in SQR_TOOM2_THRESHOLD BMOD_1_TO_MOD_1_THRESHOLD SHLD_SLOW SHRD_SLOW; do - value=`sed -n 's/^#define '$i'[ ]*\([0-9A-Z][0-9A-Z_]*\).*$/\1/p' $gmp_mparam_source` - if test -n "$value"; then - GMP_DEFINE_RAW(["define(<$i>,<$value>)"]) - fi - done -fi - - -# Sizes of some types, needed at preprocessing time. -# -# FIXME: The assumption that GMP_LIMB_BITS is 8*sizeof(mp_limb_t) might -# be slightly rash, but it's true everywhere we know of and ought to be true -# of any sensible system. In a generic C build, grepping LONG_BIT out of -# <limits.h> might be an alternative, for maximum portability. -# -AC_CHECK_SIZEOF(void *) -AC_CHECK_SIZEOF(unsigned short) -AC_CHECK_SIZEOF(unsigned) -AC_CHECK_SIZEOF(unsigned long) -AC_CHECK_SIZEOF(mp_limb_t, , GMP_INCLUDE_GMP_H) -if test "$ac_cv_sizeof_mp_limb_t" = 0; then - AC_MSG_ERROR([Oops, mp_limb_t doesn't seem to work]) -fi -AC_SUBST(GMP_LIMB_BITS, `expr 8 \* $ac_cv_sizeof_mp_limb_t`) -GMP_DEFINE_RAW(["define(<SIZEOF_UNSIGNED>,<$ac_cv_sizeof_unsigned>)"]) - -# Check compiler limb size matches gmp-mparam.h -# -# FIXME: Some of the cycle counter objects in the tune directory depend on -# the size of ulong, it'd be possible to check that here, though a mismatch -# probably wouldn't want to be fatal, none of the libgmp assembler code -# depends on ulong. -# -mparam_bits=[`sed -n 's/^#define GMP_LIMB_BITS[ ][ ]*\([0-9]*\).*$/\1/p' $gmp_mparam_source`] -if test -n "$mparam_bits" && test "$mparam_bits" -ne $GMP_LIMB_BITS; then - if test "$test_CFLAGS" = set; then - AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code -in this configuration expects $mparam_bits bits. -You appear to have set \$CFLAGS, perhaps you also need to tell GMP the -intended ABI, see "ABI and ISA" in the manual.]) - else - AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code -in this configuration expects $mparam_bits bits.]) - fi -fi - -GMP_DEFINE_RAW(["define(<GMP_LIMB_BITS>,$GMP_LIMB_BITS)"]) -GMP_DEFINE_RAW(["define(<GMP_NAIL_BITS>,$GMP_NAIL_BITS)"]) -GMP_DEFINE_RAW(["define(<GMP_NUMB_BITS>,eval(GMP_LIMB_BITS-GMP_NAIL_BITS))"]) - - -AC_SUBST(mpn_objects) -AC_SUBST(mpn_objs_in_libgmp) -AC_SUBST(gmp_srclinks) - - -# A recompiled sqr_basecase for use in the tune program, if necessary. -TUNE_SQR_OBJ= -test -d tune || mkdir tune -case $sqr_basecase_source in - *.asm) - sqr_max=[`sed -n 's/^def...(SQR_TOOM2_THRESHOLD_MAX, *\([0-9]*\))/\1/p' $sqr_basecase_source`] - if test -n "$sqr_max"; then - TUNE_SQR_OBJ=sqr_asm.o - AC_DEFINE_UNQUOTED(TUNE_SQR_TOOM2_MAX,$sqr_max, - [Maximum size the tune program can test for SQR_TOOM2_THRESHOLD]) - fi - cat >tune/sqr_basecase.c <<EOF -/* not sure that an empty file can compile, so put in a dummy */ -int sqr_basecase_dummy; -EOF - ;; - *.c) - TUNE_SQR_OBJ= - AC_DEFINE(TUNE_SQR_TOOM2_MAX,SQR_TOOM2_MAX_GENERIC) - cat >tune/sqr_basecase.c <<EOF -#define TUNE_PROGRAM_BUILD 1 -#define TUNE_PROGRAM_BUILD_SQR 1 -#include "mpn/sqr_basecase.c" -EOF - ;; -esac -AC_SUBST(TUNE_SQR_OBJ) - - -# Configs for demos/pexpr.c. -# -AC_CONFIG_FILES(demos/pexpr-config.h:demos/pexpr-config-h.in) -GMP_SUBST_CHECK_FUNCS(clock, cputime, getrusage, gettimeofday, sigaction, sigaltstack, sigstack) -GMP_SUBST_CHECK_HEADERS(sys/resource.h) -AC_CHECK_TYPES([stack_t], HAVE_STACK_T_01=1, HAVE_STACK_T_01=0, - [#include <signal.h>]) -AC_SUBST(HAVE_STACK_T_01) - -# Configs for demos/calc directory -# -# AC_SUBST+AC_CONFIG_FILES is used for calc-config.h, rather than AC_DEFINE+ -# AC_CONFIG_HEADERS, since with the latter automake (1.8) will then put the -# directory (ie. demos/calc) into $(DEFAULT_INCLUDES) for every Makefile.in, -# which would look very strange. -# -# -lcurses is required by libreadline. On a typical SVR4 style system this -# normally doesn't have to be given explicitly, since libreadline.so will -# have a NEEDED record for it. But if someone for some reason is using only -# a static libreadline.a then we must give -lcurses. Readline (as of -# version 4.3) doesn't use libtool, so we can't rely on a .la to cover -# necessary dependencies. -# -# On a couple of systems we've seen libreadline available, but the headers -# not in the default include path, so check for readline/readline.h. We've -# also seen readline/history.h missing, not sure if that's just a broken -# install or a very old version, but check that too. -# -AC_CONFIG_FILES(demos/calc/calc-config.h:demos/calc/calc-config-h.in) -LIBCURSES= -if test $with_readline != no; then - AC_CHECK_LIB(ncurses, tputs, [LIBCURSES=-lncurses], - [AC_CHECK_LIB(curses, tputs, [LIBCURSES=-lcurses])]) -fi -AC_SUBST(LIBCURSES) -use_readline=$with_readline -if test $with_readline = detect; then - use_readline=no - AC_CHECK_LIB(readline, readline, - [AC_CHECK_HEADER(readline/readline.h, - [AC_CHECK_HEADER(readline/history.h, use_readline=yes)])], - , $LIBCURSES) - AC_MSG_CHECKING(readline detected) - AC_MSG_RESULT($use_readline) -fi -if test $use_readline = yes; then - AC_SUBST(WITH_READLINE_01, 1) - AC_SUBST(LIBREADLINE, -lreadline) -else - WITH_READLINE_01=0 -fi -AC_PROG_YACC -AM_PROG_LEX - -LT_INIT - -# Create config.m4. -GMP_FINISH - -# Create Makefiles -# FIXME: Upcoming version of autoconf/automake may not like broken lines. -# Right now automake isn't accepting the new AC_CONFIG_FILES scheme. - -AC_OUTPUT(Makefile \ - mpf/Makefile mpn/Makefile mpq/Makefile \ - mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile \ - tests/Makefile tests/devel/Makefile \ - tests/mpf/Makefile tests/mpn/Makefile tests/mpq/Makefile \ - tests/mpz/Makefile tests/rand/Makefile tests/misc/Makefile \ - tests/cxx/Makefile \ - doc/Makefile tune/Makefile \ - demos/Makefile demos/calc/Makefile demos/expr/Makefile \ - gmp.h:gmp-h.in gmp.pc:gmp.pc.in gmpxx.pc:gmpxx.pc.in) - -AC_MSG_NOTICE([summary of build options: - - Version: ${PACKAGE_STRING} - Host type: ${host} - ABI: ${ABI} - Install prefix: ${prefix} - Compiler: ${CC} - Static libraries: ${enable_static} - Shared libraries: ${enable_shared} -]) |