configure.ac revision 1.1.1.1
1dnl Process this file with autoconf to produce a configure script. 2 3 4define(GMP_COPYRIGHT,[[ 5 6Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 72007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. 8 9This file is part of the GNU MP Library. 10 11The GNU MP Library is free software; you can redistribute it and/or modify 12it under the terms of the GNU Lesser General Public License as published 13by the Free Software Foundation; either version 3 of the License, or (at 14your option) any later version. 15 16The GNU MP Library is distributed in the hope that it will be useful, but 17WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 18or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 19License for more details. 20 21You should have received a copy of the GNU Lesser General Public License 22along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. 23]]) 24 25AC_COPYRIGHT(GMP_COPYRIGHT) 26AH_TOP(/*GMP_COPYRIGHT*/) 27 28AC_REVISION($Revision: 1.1.1.1 $) 29AC_PREREQ(2.59) 30AC_INIT(GNU MP, GMP_VERSION, [gmp-bugs@gmplib.org, see http://gmplib.org/manual/Reporting-Bugs.html], gmp) 31AC_CONFIG_SRCDIR(gmp-impl.h) 32m4_pattern_forbid([^[ \t]*GMP_]) 33m4_pattern_allow(GMP_LDFLAGS) 34m4_pattern_allow(GMP_LIMB_BITS) 35m4_pattern_allow(GMP_MPARAM_H_SUGGEST) 36m4_pattern_allow(GMP_NAIL_BITS) 37m4_pattern_allow(GMP_NUMB_BITS) 38m4_pattern_allow(GMP_NONSTD_ABI) 39 40# If --target is not used then $target_alias is empty, but if say 41# "./configure athlon-pc-freebsd3.5" is used, then all three of 42# $build_alias, $host_alias and $target_alias are set to 43# "athlon-pc-freebsd3.5". 44# 45if test -n "$target_alias" && test "$target_alias" != "$host_alias"; then 46 AC_MSG_ERROR([--target is not appropriate for GMP 47Use --build=CPU-VENDOR-OS if you need to specify your CPU and/or system 48explicitly. Use --host if cross-compiling (see "Installing GMP" in the 49manual for more on this).]) 50fi 51 52GMP_INIT(config.m4) 53 54AC_CANONICAL_HOST 55 56dnl Automake "no-dependencies" is used because include file dependencies 57dnl are not useful to us. Pretty much everything depends just on gmp.h, 58dnl gmp-impl.h and longlong.h, and yet only rarely does everything need to 59dnl be rebuilt for changes to those files. 60dnl 61dnl "no-dependencies" also helps with the way we're setup to run 62dnl AC_PROG_CXX only conditionally. If dependencies are used then recent 63dnl automake (eg 1.7.2) appends an AM_CONDITIONAL to AC_PROG_CXX, and then 64dnl gets upset if it's not actually executed. 65dnl 66dnl Note that there's a copy of these options in the top-level Makefile.am, 67dnl so update there too if changing anything. 68dnl 69AM_INIT_AUTOMAKE([1.8 gnu no-dependencies]) 70AC_CONFIG_HEADERS(config.h:config.in) 71AM_MAINTAINER_MODE 72 73 74AC_ARG_ENABLE(assert, 75AC_HELP_STRING([--enable-assert],[enable ASSERT checking [[default=no]]]), 76[case $enableval in 77yes|no) ;; 78*) AC_MSG_ERROR([bad value $enableval for --enable-assert, need yes or no]) ;; 79esac], 80[enable_assert=no]) 81 82if test "$enable_assert" = "yes"; then 83 AC_DEFINE(WANT_ASSERT,1, 84 [Define to 1 to enable ASSERT checking, per --enable-assert]) 85 want_assert_01=1 86else 87 want_assert_01=0 88fi 89GMP_DEFINE_RAW(["define(<WANT_ASSERT>,$want_assert_01)"]) 90 91 92AC_ARG_ENABLE(alloca, 93AC_HELP_STRING([--enable-alloca],[how to get temp memory [[default=reentrant]]]), 94[case $enableval in 95alloca|malloc-reentrant|malloc-notreentrant) ;; 96yes|no|reentrant|notreentrant) ;; 97debug) ;; 98*) 99 AC_MSG_ERROR([bad value $enableval for --enable-alloca, need one of: 100yes no reentrant notreentrant alloca malloc-reentrant malloc-notreentrant debug]) ;; 101esac], 102[enable_alloca=reentrant]) 103 104 105# IMPROVE ME: The default for C++ is disabled. The tests currently 106# performed below for a working C++ compiler are not particularly strong, 107# and in general can't be expected to get the right setup on their own. The 108# most significant problem is getting the ABI the same. Defaulting CXXFLAGS 109# to CFLAGS takes only a small step towards this. It's also probably worth 110# worrying whether the C and C++ runtimes from say gcc and a vendor C++ can 111# work together. Some rather broken C++ installations were encountered 112# during testing, and though such things clearly aren't GMP's problem, if 113# --enable-cxx=detect were to be the default then some careful checks of 114# which, if any, C++ compiler on the system is up to scratch would be 115# wanted. 116# 117AC_ARG_ENABLE(cxx, 118AC_HELP_STRING([--enable-cxx],[enable C++ support [[default=no]]]), 119[case $enableval in 120yes|no|detect) ;; 121*) AC_MSG_ERROR([bad value $enableval for --enable-cxx, need yes/no/detect]) ;; 122esac], 123[enable_cxx=no]) 124 125 126AC_ARG_ENABLE(assembly, 127AC_HELP_STRING([--enable-assembly],[enable the use of assembly loops [[default=yes]]]), 128[case $enableval in 129yes|no) ;; 130*) AC_MSG_ERROR([bad value $enableval for --enable-assembly, need yes or no]) ;; 131esac], 132[enable_assembly=yes]) 133 134if test "$enable_assembly" = "yes"; then 135 AC_DEFINE(WANT_ASSEMBLY,1, 136 [Defined to 1 as per --enable-assembly]) 137fi 138 139 140AC_ARG_ENABLE(fft, 141AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [[default=yes]]]), 142[case $enableval in 143yes|no) ;; 144*) AC_MSG_ERROR([bad value $enableval for --enable-fft, need yes or no]) ;; 145esac], 146[enable_fft=yes]) 147 148if test "$enable_fft" = "yes"; then 149 AC_DEFINE(WANT_FFT,1, 150 [Define to 1 to enable FFTs for multiplication, per --enable-fft]) 151fi 152 153 154AC_ARG_ENABLE(old-fft-full, 155AC_HELP_STRING([--enable-old-fft-full],[enable old mpn_mul_fft_full for multiplication [[default=no]]]), 156[case $enableval in 157yes|no) ;; 158*) AC_MSG_ERROR([bad value $enableval for --enable-old-fft-full, need yes or no]) ;; 159esac], 160[enable_old_fft_full=no]) 161 162if test "$enable_old_fft_full" = "yes"; then 163 AC_DEFINE(WANT_OLD_FFT_FULL,1, 164 [Define to 1 to enable old mpn_mul_fft_full for multiplication, per --enable-old-fft-full]) 165fi 166 167 168AC_ARG_ENABLE(nails, 169AC_HELP_STRING([--enable-nails],[use nails on limbs [[default=no]]]), 170[case $enableval in 171[yes|no|[02468]|[0-9][02468]]) ;; 172[*[13579]]) 173 AC_MSG_ERROR([bad value $enableval for --enable-nails, only even nail sizes supported]) ;; 174*) 175 AC_MSG_ERROR([bad value $enableval for --enable-nails, need yes/no/number]) ;; 176esac], 177[enable_nails=no]) 178 179case $enable_nails in 180yes) GMP_NAIL_BITS=2 ;; 181no) GMP_NAIL_BITS=0 ;; 182*) GMP_NAIL_BITS=$enable_nails ;; 183esac 184AC_SUBST(GMP_NAIL_BITS) 185 186 187AC_ARG_ENABLE(profiling, 188AC_HELP_STRING([--enable-profiling], 189 [build with profiler support [[default=no]]]), 190[case $enableval in 191no|prof|gprof|instrument) ;; 192*) AC_MSG_ERROR([bad value $enableval for --enable-profiling, need no/prof/gprof/instrument]) ;; 193esac], 194[enable_profiling=no]) 195 196case $enable_profiling in 197 prof) 198 AC_DEFINE(WANT_PROFILING_PROF, 1, 199 [Define to 1 if --enable-profiling=prof]) 200 ;; 201 gprof) 202 AC_DEFINE(WANT_PROFILING_GPROF, 1, 203 [Define to 1 if --enable-profiling=gprof]) 204 ;; 205 instrument) 206 AC_DEFINE(WANT_PROFILING_INSTRUMENT, 1, 207 [Define to 1 if --enable-profiling=instrument]) 208 ;; 209esac 210 211GMP_DEFINE_RAW(["define(<WANT_PROFILING>,<\`$enable_profiling'>)"]) 212 213# -fomit-frame-pointer is incompatible with -pg on some chips 214if test "$enable_profiling" = gprof; then 215 fomit_frame_pointer= 216else 217 fomit_frame_pointer="-fomit-frame-pointer" 218fi 219 220 221AC_ARG_WITH(readline, 222AC_HELP_STRING([--with-readline], 223 [readline support in calc demo program [[default=detect]]]), 224[case $withval in 225yes|no|detect) ;; 226*) AC_MSG_ERROR([bad value $withval for --with-readline, need yes/no/detect]) ;; 227esac], 228[with_readline=detect]) 229 230 231AC_ARG_ENABLE(fat, 232AC_HELP_STRING([--enable-fat], 233 [build a fat binary on systems that support it [[default=no]]]), 234[case $enableval in 235yes|no) ;; 236*) AC_MSG_ERROR([bad value $enableval for --enable-fat, need yes or no]) ;; 237esac], 238[enable_fat=no]) 239 240 241AC_ARG_ENABLE(minithres, 242AC_HELP_STRING([--enable-minithres], 243 [choose minimal thresholds for testing [[default=no]]]), 244[case $enableval in 245yes|no) ;; 246*) AC_MSG_ERROR([bad value $enableval for --enable-minithres, need yes or no]) ;; 247esac], 248[enable_minithres=no]) 249 250 251if test $enable_fat = yes && test $enable_assembly = no ; then 252 AC_MSG_ERROR([when doing a fat build, disabling assembly will not work]) 253fi 254 255 256tmp_host=`echo $host_cpu | sed 's/\./_/'` 257AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_$tmp_host) 258GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_HOST_CPU_$tmp_host')", POST) 259 260dnl The HAVE_HOST_CPU_ list here only needs to have entries for those which 261dnl are going to be tested, not everything that can possibly be selected. 262dnl 263dnl The HAVE_HOST_CPU_FAMILY_ list similarly, and note that the AC_DEFINEs 264dnl for these are under the cpu specific setups below. 265 266AH_VERBATIM([HAVE_HOST_CPU_1], 267[/* Define one of these to 1 for the host CPU family. 268 If your CPU is not in any of these families, leave all undefined. 269 For an AMD64 chip, define "x86" in ABI=32, but not in ABI=64. */ 270#undef HAVE_HOST_CPU_FAMILY_alpha 271#undef HAVE_HOST_CPU_FAMILY_m68k 272#undef HAVE_HOST_CPU_FAMILY_power 273#undef HAVE_HOST_CPU_FAMILY_powerpc 274#undef HAVE_HOST_CPU_FAMILY_x86 275#undef HAVE_HOST_CPU_FAMILY_x86_64 276 277/* Define one of the following to 1 for the host CPU, as per the output of 278 ./config.guess. If your CPU is not listed here, leave all undefined. */ 279#undef HAVE_HOST_CPU_alphaev67 280#undef HAVE_HOST_CPU_alphaev68 281#undef HAVE_HOST_CPU_alphaev7 282#undef HAVE_HOST_CPU_m68020 283#undef HAVE_HOST_CPU_m68030 284#undef HAVE_HOST_CPU_m68040 285#undef HAVE_HOST_CPU_m68060 286#undef HAVE_HOST_CPU_m68360 287#undef HAVE_HOST_CPU_powerpc604 288#undef HAVE_HOST_CPU_powerpc604e 289#undef HAVE_HOST_CPU_powerpc750 290#undef HAVE_HOST_CPU_powerpc7400 291#undef HAVE_HOST_CPU_supersparc 292#undef HAVE_HOST_CPU_i386 293#undef HAVE_HOST_CPU_i586 294#undef HAVE_HOST_CPU_i686 295#undef HAVE_HOST_CPU_pentium 296#undef HAVE_HOST_CPU_pentiummmx 297#undef HAVE_HOST_CPU_pentiumpro 298#undef HAVE_HOST_CPU_pentium2 299#undef HAVE_HOST_CPU_pentium3 300#undef HAVE_HOST_CPU_s390_z900 301#undef HAVE_HOST_CPU_s390_z990 302#undef HAVE_HOST_CPU_s390_z9 303#undef HAVE_HOST_CPU_s390_z10 304#undef HAVE_HOST_CPU_s390_z196 305 306/* Define to 1 iff we have a s390 with 64-bit registers. */ 307#undef HAVE_HOST_CPU_s390_zarch]) 308 309 310# Table of compilers, options, and mpn paths. This code has various related 311# purposes 312# 313# - better default CC/CFLAGS selections than autoconf otherwise gives 314# - default CC/CFLAGS selections for extra CPU types specific to GMP 315# - a few tests for known bad compilers 316# - choice of ABIs on suitable systems 317# - selection of corresponding mpn search path 318# 319# After GMP specific searches and tests, the standard autoconf AC_PROG_CC is 320# called. User selections of CC etc are respected. 321# 322# Care is taken not to use macros like AC_TRY_COMPILE during the GMP 323# pre-testing, since they of course depend on AC_PROG_CC, and also some of 324# them cache their results, which is not wanted. 325# 326# The ABI selection mechanism is unique to GMP. All that reaches autoconf 327# is a different selection of CC/CFLAGS according to the best ABI the system 328# supports, and/or what the user selects. Naturally the mpn assembler code 329# selected is very dependent on the ABI. 330# 331# The closest the standard tools come to a notion of ABI is something like 332# "sparc64" which encodes a CPU and an ABI together. This doesn't seem to 333# scale well for GMP, where exact CPU types like "ultrasparc2" are wanted, 334# separate from the ABI used on them. 335# 336# 337# The variables set here are 338# 339# cclist the compiler choices 340# xx_cflags flags for compiler xx 341# xx_cflags_maybe flags for compiler xx, if they work 342# xx_cppflags cpp flags for compiler xx 343# xx_cflags_optlist list of sets of optional flags 344# xx_cflags_yyy set yyy of optional flags for compiler xx 345# xx_ldflags -Wc,-foo flags for libtool linking with compiler xx 346# ar_flags extra flags for $AR 347# nm_flags extra flags for $NM 348# limb limb size, can be "longlong" 349# path mpn search path 350# extra_functions extra mpn functions 351# fat_path fat binary mpn search path [if fat binary desired] 352# fat_functions fat functions 353# fat_thresholds fat thresholds 354# 355# Suppose xx_cflags_optlist="arch", then flags from $xx_cflags_arch are 356# tried, and the first flag that works will be used. An optlist like "arch 357# cpu optimize" can be used to get multiple independent sets of flags tried. 358# The first that works from each will be used. If no flag in a set works 359# then nothing from that set is added. 360# 361# For multiple ABIs, the scheme extends as follows. 362# 363# abilist set of ABI choices 364# cclist_aa compiler choices in ABI aa 365# xx_aa_cflags flags for xx in ABI aa 366# xx_aa_cflags_maybe flags for xx in ABI aa, if they work 367# xx_aa_cppflags cpp flags for xx in ABI aa 368# xx_aa_cflags_optlist list of sets of optional flags in ABI aa 369# xx_aa_cflags_yyy set yyy of optional flags for compiler xx in ABI aa 370# xx_aa_ldflags -Wc,-foo flags for libtool linking 371# ar_aa_flags extra flags for $AR in ABI aa 372# nm_aa_flags extra flags for $NM in ABI aa 373# limb_aa limb size in ABI aa, can be "longlong" 374# path_aa mpn search path in ABI aa 375# extra_functions_aa extra mpn functions in ABI aa 376# 377# As a convenience, the unadorned xx_cflags (etc) are used for the last ABI 378# in ablist, if an xx_aa_cflags for that ABI isn't given. For example if 379# abilist="64 32" then $cc_64_cflags will be used for the 64-bit ABI, but 380# for the 32-bit either $cc_32_cflags or $cc_cflags is used, whichever is 381# defined. This makes it easy to add some 64-bit compilers and flags to an 382# unadorned 32-bit set. 383# 384# limb=longlong (or limb_aa=longlong) applies to all compilers within that 385# ABI. It won't work to have some needing long long and some not, since a 386# single instantiated gmp.h will be used by both. 387# 388# SPEED_CYCLECOUNTER, cyclecounter_size and CALLING_CONVENTIONS_OBJS are 389# also set here, with an ABI suffix. 390# 391# 392# 393# A table-driven approach like this to mapping cpu type to good compiler 394# options is a bit of a maintenance burden, but there's not much uniformity 395# between options specifications on different compilers. Some sort of 396# separately updatable tool might be cute. 397# 398# The use of lots of variables like this, direct and indirect, tends to 399# obscure when and how various things are done, but unfortunately it's 400# pretty much the only way. If shell subroutines were portable then actual 401# code like "if this .. do that" could be written, but attempting the same 402# with full copies of GMP_PROG_CC_WORKS etc expanded at every point would 403# hugely bloat the output. 404 405 406AC_ARG_VAR(ABI, [desired ABI (for processors supporting more than one ABI)]) 407 408# abilist needs to be non-empty, "standard" is just a generic name here 409abilist="standard" 410 411# FIXME: We'd like to prefer an ANSI compiler, perhaps by preferring 412# c89 over cc here. But note that on HP-UX c89 provides a castrated 413# environment, and would want to be excluded somehow. Maybe 414# AC_PROG_CC_STDC already does enough to stick cc into ANSI mode and 415# we don't need to worry. 416# 417cclist="gcc cc" 418 419gcc_cflags="-O2 -pedantic" 420gcc_64_cflags="-O2 -pedantic" 421cc_cflags="-O" 422cc_64_cflags="-O" 423 424SPEED_CYCLECOUNTER_OBJ= 425cyclecounter_size=2 426 427AC_SUBST(HAVE_HOST_CPU_FAMILY_power, 0) 428AC_SUBST(HAVE_HOST_CPU_FAMILY_powerpc,0) 429 430case $host in 431 432 a29k*-*-*) 433 path="a29k" 434 ;; 435 436 437 alpha*-*-*) 438 AC_DEFINE(HAVE_HOST_CPU_FAMILY_alpha) 439 case $host_cpu in 440 alphaev5* | alphapca5*) 441 path="alpha/ev5 alpha" ;; 442 alphaev67 | alphaev68 | alphaev7*) 443 path="alpha/ev67 alpha/ev6 alpha" ;; 444 alphaev6) 445 path="alpha/ev6 alpha" ;; 446 *) 447 path="alpha" ;; 448 esac 449 extra_functions="cntlz" 450 gcc_cflags_optlist="asm cpu oldas" # need asm ahead of cpu, see below 451 gcc_cflags_oldas="-Wa,-oldas" # see GMP_GCC_WA_OLDAS. 452 453 # gcc 2.7.2.3 doesn't know any -mcpu= for alpha, apparently. 454 # gcc 2.95 knows -mcpu= ev4, ev5, ev56, pca56, ev6. 455 # gcc 3.0 adds nothing. 456 # gcc 3.1 adds ev45, ev67 (but ev45 is the same as ev4). 457 # gcc 3.2 adds nothing. 458 # 459 # gcc version "2.9-gnupro-99r1" under "-O2 -mcpu=ev6" strikes internal 460 # compiler errors too easily and is rejected by GMP_PROG_CC_WORKS. Each 461 # -mcpu=ev6 below has a fallback to -mcpu=ev56 for this reason. 462 # 463 case $host_cpu in 464 alpha) gcc_cflags_cpu="-mcpu=ev4" ;; 465 alphaev5) gcc_cflags_cpu="-mcpu=ev5" ;; 466 alphaev56) gcc_cflags_cpu="-mcpu=ev56" ;; 467 alphapca56 | alphapca57) 468 gcc_cflags_cpu="-mcpu=pca56" ;; 469 alphaev6) gcc_cflags_cpu="-mcpu=ev6 -mcpu=ev56" ;; 470 alphaev67 | alphaev68 | alphaev7*) 471 gcc_cflags_cpu="-mcpu=ev67 -mcpu=ev6 -mcpu=ev56" ;; 472 esac 473 474 # gcc version "2.9-gnupro-99r1" on alphaev68-dec-osf5.1 has been seen 475 # accepting -mcpu=ev6, but not putting the assembler in the right mode 476 # for what it produces. We need to do this for it, and need to do it 477 # before testing the -mcpu options. 478 # 479 # On old versions of gcc, which don't know -mcpu=, we believe an 480 # explicit -Wa,-mev5 etc will be necessary to put the assembler in 481 # the right mode for our .asm files and longlong.h asm blocks. 482 # 483 # On newer versions of gcc, when -mcpu= is known, we must give a -Wa 484 # which is at least as high as the code gcc will generate. gcc 485 # establishes what it needs with a ".arch" directive, our command line 486 # option seems to override that. 487 # 488 # gas prior to 2.14 doesn't accept -mev67, but -mev6 seems enough for 489 # ctlz and cttz (in 2.10.0 at least). 490 # 491 # OSF `as' accepts ev68 but stupidly treats it as ev4. -arch only seems 492 # to affect insns like ldbu which are expanded as macros when necessary. 493 # Insns like ctlz which were never available as macros are always 494 # accepted and always generate their plain code. 495 # 496 case $host_cpu in 497 alpha) gcc_cflags_asm="-Wa,-arch,ev4 -Wa,-mev4" ;; 498 alphaev5) gcc_cflags_asm="-Wa,-arch,ev5 -Wa,-mev5" ;; 499 alphaev56) gcc_cflags_asm="-Wa,-arch,ev56 -Wa,-mev56" ;; 500 alphapca56 | alphapca57) 501 gcc_cflags_asm="-Wa,-arch,pca56 -Wa,-mpca56" ;; 502 alphaev6) gcc_cflags_asm="-Wa,-arch,ev6 -Wa,-mev6" ;; 503 alphaev67 | alphaev68 | alphaev7*) 504 gcc_cflags_asm="-Wa,-arch,ev67 -Wa,-mev67 -Wa,-arch,ev6 -Wa,-mev6" ;; 505 esac 506 507 # It might be better to ask "cc" whether it's Cray C or DEC C, 508 # instead of relying on the OS part of $host. But it's hard to 509 # imagine either of those compilers anywhere except their native 510 # systems. 511 # 512 GMP_INCLUDE_MPN(alpha/alpha-defs.m4) 513 case $host in 514 *-cray-unicos*) 515 cc_cflags="-O" # no -g, it silently disables all optimizations 516 GMP_INCLUDE_MPN(alpha/unicos.m4) 517 # Don't perform any assembly syntax tests on this beast. 518 gmp_asm_syntax_testing=no 519 ;; 520 *-*-osf*) 521 GMP_INCLUDE_MPN(alpha/default.m4) 522 cc_cflags="" 523 cc_cflags_optlist="opt cpu" 524 525 # not sure if -fast works on old versions, so make it optional 526 cc_cflags_opt="-fast -O2" 527 528 # DEC C V5.9-005 knows ev4, ev5, ev56, pca56, ev6. 529 # Compaq C V6.3-029 adds ev67. 530 # 531 case $host_cpu in 532 alpha) cc_cflags_cpu="-arch~ev4~-tune~ev4" ;; 533 alphaev5) cc_cflags_cpu="-arch~ev5~-tune~ev5" ;; 534 alphaev56) cc_cflags_cpu="-arch~ev56~-tune~ev56" ;; 535 alphapca56 | alphapca57) 536 cc_cflags_cpu="-arch~pca56~-tune~pca56" ;; 537 alphaev6) cc_cflags_cpu="-arch~ev6~-tune~ev6" ;; 538 alphaev67 | alphaev68 | alphaev7*) 539 cc_cflags_cpu="-arch~ev67~-tune~ev67 -arch~ev6~-tune~ev6" ;; 540 esac 541 ;; 542 *) 543 GMP_INCLUDE_MPN(alpha/default.m4) 544 ;; 545 esac 546 547 case $host in 548 *-*-unicos*) 549 # tune/alpha.asm assumes int==4bytes but unicos uses int==8bytes 550 ;; 551 *) 552 SPEED_CYCLECOUNTER_OBJ=alpha.lo 553 cyclecounter_size=1 ;; 554 esac 555 ;; 556 557 558 # Cray vector machines. 559 # This must come after alpha* so that we can recognize present and future 560 # vector processors with a wildcard. 561 *-cray-unicos*) 562 gmp_asm_syntax_testing=no 563 cclist="cc" 564 # We used to have -hscalar0 here as a workaround for miscompilation of 565 # mpz/import.c, but let's hope Cray fixes their bugs instead, since 566 # -hscalar0 causes disastrously poor code to be generated. 567 cc_cflags="-O3 -hnofastmd -htask0 -Wa,-B" 568 path="cray" 569 ;; 570 571 572 arm*-*-*) 573 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 574 gcc_cflags_optlist="arch tune" 575 gcc_cflags_maybe="-marm" 576 gcc_testlist="gcc-arm-umodsi" 577 GMP_INCLUDE_MPN(arm/arm-defs.m4) 578 CALLING_CONVENTIONS_OBJS='arm32call.lo arm32check.lo' 579 580 case $host_cpu in 581 armsa1 | armv4*) 582 path="arm" 583 gcc_cflags_arch="-march=armv4" 584 ;; 585 armxscale | arm926 | arm946 | arm966 | arm1026 | armv5*) 586 path="arm/v5 arm" 587 gcc_cflags_arch="-march=armv5" 588 ;; 589 arm11mpcore | arm1136 | arm1176 | armv6*) 590 path="arm/v6 arm/v5 arm" 591 gcc_cflags_arch="-march=armv6" 592 ;; 593 arm1156) 594 path="arm/v6t2 arm/v6 arm/v5 arm" 595 gcc_cflags_arch="-march=armv6t2" 596 ;; 597 armcortexa9) 598 path="arm/v7a/cora9 arm/v6t2 arm/v6 arm/v5 arm" 599 gcc_cflags_arch="-march=armv7-a" 600 gcc_cflags_tune="-mtune=cortex-a9" 601 ;; 602 armcortexa15) 603 path="arm/v7a/cora15 arm/v6t2 arm/v6 arm/v5 arm" 604 gcc_cflags_arch="-march=armv7-a" 605 gcc_cflags_tune="-mtune=cortex-a15 -mtune=cortex-a9" 606 ;; 607 armcortexa5 | armcortexa8 | armv7a*) 608 path="arm/v6t2 arm/v6 arm/v5 arm" 609 gcc_cflags_arch="-march=armv7-a" 610 ;; 611 *) 612 path="arm" 613 ;; 614 esac 615 ;; 616 617 618 clipper*-*-*) 619 path="clipper" 620 ;; 621 622 623 # Fujitsu 624 [f30[01]-fujitsu-sysv*]) 625 cclist="gcc vcc" 626 # FIXME: flags for vcc? 627 vcc_cflags="-g" 628 path="fujitsu" 629 ;; 630 631 632 hppa*-*-*) 633 # HP cc (the one sold separately) is K&R by default, but AM_C_PROTOTYPES 634 # will add "-Ae", or "-Aa -D_HPUX_SOURCE", to put it into ansi mode, if 635 # possible. 636 # 637 # gcc for hppa 2.0 can be built either for 2.0n (32-bit) or 2.0w 638 # (64-bit), but not both, so there's no option to choose the desired 639 # mode, we must instead detect which of the two it is. This is done by 640 # checking sizeof(long), either 4 or 8 bytes respectively. Do this in 641 # ABI=1.0 too, in case someone tries to build that with a 2.0w gcc. 642 # 643 gcc_cflags_optlist="arch" 644 gcc_testlist="sizeof-long-4" 645 SPEED_CYCLECOUNTER_OBJ=hppa.lo 646 cyclecounter_size=1 647 648 # FIXME: For hppa2.0*, path should be "pa32/hppa2_0 pa32/hppa1_1 pa32". 649 # (Can't remember why this isn't done already, have to check what .asm 650 # files are available in each and how they run on a typical 2.0 cpu.) 651 # 652 case $host_cpu in 653 hppa1.0*) path="pa32" ;; 654 hppa7000*) path="pa32/hppa1_1 pa32" ;; 655 hppa2.0* | hppa64) 656 path="pa32/hppa2_0 pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;; 657 *) # default to 7100 658 path="pa32/hppa1_1/pa7100 pa32/hppa1_1 pa32" ;; 659 esac 660 661 # gcc 2.7.2.3 knows -mpa-risc-1-0 and -mpa-risc-1-1 662 # gcc 2.95 adds -mpa-risc-2-0, plus synonyms -march=1.0, 1.1 and 2.0 663 # 664 # We don't use -mpa-risc-2-0 in ABI=1.0 because 64-bit registers may not 665 # be saved by the kernel on an old system. Actually gcc (as of 3.2) 666 # only adds a few float instructions with -mpa-risc-2-0, so it would 667 # probably be safe, but let's not take the chance. In any case, a 668 # configuration like --host=hppa2.0 ABI=1.0 is far from optimal. 669 # 670 case $host_cpu in 671 hppa1.0*) gcc_cflags_arch="-mpa-risc-1-0" ;; 672 *) # default to 7100 673 gcc_cflags_arch="-mpa-risc-1-1" ;; 674 esac 675 676 case $host_cpu in 677 hppa1.0*) cc_cflags="+O2" ;; 678 *) # default to 7100 679 cc_cflags="+DA1.1 +O2" ;; 680 esac 681 682 case $host in 683 hppa2.0*-*-* | hppa64-*-*) 684 cclist_20n="gcc cc" 685 abilist="2.0n 1.0" 686 path_20n="pa64" 687 limb_20n=longlong 688 any_20n_testlist="sizeof-long-4" 689 SPEED_CYCLECOUNTER_OBJ_20n=hppa2.lo 690 cyclecounter_size_20n=2 691 692 # -mpa-risc-2-0 is only an optional flag, in case an old gcc is 693 # used. Assembler support for 2.0 is essential though, for our asm 694 # files. 695 gcc_20n_cflags="$gcc_cflags" 696 gcc_20n_cflags_optlist="arch" 697 gcc_20n_cflags_arch="-mpa-risc-2-0 -mpa-risc-1-1" 698 gcc_20n_testlist="sizeof-long-4 hppa-level-2.0" 699 700 cc_20n_cflags="+DA2.0 +e +O2 -Wl,+vnocompatwarnings" 701 cc_20n_testlist="hpc-hppa-2-0" 702 703 # ABI=2.0w is available for hppa2.0w and hppa2.0, but not for 704 # hppa2.0n, on the assumption that that the latter indicates a 705 # desire for ABI=2.0n. 706 case $host in 707 hppa2.0n-*-*) ;; 708 *) 709 # HPUX 10 and earlier cannot run 2.0w. Not sure about other 710 # systems (GNU/Linux for instance), but lets assume they're ok. 711 case $host in 712 [*-*-hpux[1-9] | *-*-hpux[1-9].* | *-*-hpux10 | *-*-hpux10.*]) ;; 713 [*-*-linux*]) abilist="1.0" ;; # due to linux permanent kernel bug 714 *) abilist="2.0w $abilist" ;; 715 esac 716 717 cclist_20w="gcc cc" 718 gcc_20w_cflags="$gcc_cflags -mpa-risc-2-0" 719 cc_20w_cflags="+DD64 +O2" 720 cc_20w_testlist="hpc-hppa-2-0" 721 path_20w="pa64" 722 any_20w_testlist="sizeof-long-8" 723 SPEED_CYCLECOUNTER_OBJ_20w=hppa2w.lo 724 cyclecounter_size_20w=2 725 ;; 726 esac 727 ;; 728 esac 729 ;; 730 731 732 i960*-*-*) 733 path="i960" 734 ;; 735 736 737 IA64_PATTERN) 738 abilist="64" 739 GMP_INCLUDE_MPN(ia64/ia64-defs.m4) 740 SPEED_CYCLECOUNTER_OBJ=ia64.lo 741 any_32_testlist="sizeof-long-4" 742 743 case $host_cpu in 744 itanium) path="ia64/itanium ia64" ;; 745 itanium2) path="ia64/itanium2 ia64" ;; 746 *) path="ia64" ;; 747 esac 748 749 gcc_64_cflags_optlist="tune" 750 gcc_32_cflags_optlist=$gcc_64_cflags_optlist 751 752 # gcc pre-release 3.4 adds -mtune itanium and itanium2 753 case $host_cpu in 754 itanium) gcc_cflags_tune="-mtune=itanium" ;; 755 itanium2) gcc_cflags_tune="-mtune=itanium2" ;; 756 esac 757 758 case $host in 759 *-*-linux*) 760 cclist="gcc icc" 761 icc_cflags="-no-gcc" 762 icc_cflags_optlist="opt" 763 # Don't use -O3, it is for "large data sets" and also miscompiles GMP. 764 # But icc miscompiles GMP at any optimization level, at higher levels 765 # it miscompiles more files... 766 icc_cflags_opt="-O2 -O1" 767 ;; 768 769 *-*-hpux*) 770 # HP cc sometimes gets internal errors if the optimization level is 771 # too high. GMP_PROG_CC_WORKS detects this, the "_opt" fallbacks 772 # let us use whatever seems to work. 773 # 774 abilist="32 64" 775 any_64_testlist="sizeof-long-8" 776 777 cclist_32="gcc cc" 778 path_32="ia64" 779 cc_32_cflags="" 780 cc_32_cflags_optlist="opt" 781 cc_32_cflags_opt="+O3 +O2 +O1" 782 gcc_32_cflags="$gcc_cflags -milp32" 783 limb_32=longlong 784 SPEED_CYCLECOUNTER_OBJ_32=ia64.lo 785 cyclecounter_size_32=2 786 787 # Must have +DD64 in CPPFLAGS to get the right __LP64__ for headers, 788 # but also need it in CFLAGS for linking programs, since automake 789 # only uses CFLAGS when linking, not CPPFLAGS. 790 # FIXME: Maybe should use cc_64_ldflags for this, but that would 791 # need GMP_LDFLAGS used consistently by all the programs. 792 # 793 cc_64_cflags="+DD64" 794 cc_64_cppflags="+DD64" 795 cc_64_cflags_optlist="opt" 796 cc_64_cflags_opt="+O3 +O2 +O1" 797 gcc_64_cflags="$gcc_cflags -mlp64" 798 ;; 799 esac 800 ;; 801 802 803 # Motorola 68k 804 # 805 M68K_PATTERN) 806 AC_DEFINE(HAVE_HOST_CPU_FAMILY_m68k) 807 GMP_INCLUDE_MPN(m68k/m68k-defs.m4) 808 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 809 gcc_cflags_optlist="arch" 810 811 # gcc 2.7.2 knows -m68000, -m68020, -m68030, -m68040. 812 # gcc 2.95 adds -mcpu32, -m68060. 813 # FIXME: Maybe "-m68020 -mnobitfield" would suit cpu32 on 2.7.2. 814 # 815 case $host_cpu in 816 m68020) gcc_cflags_arch="-m68020" ;; 817 m68030) gcc_cflags_arch="-m68030" ;; 818 m68040) gcc_cflags_arch="-m68040" ;; 819 m68060) gcc_cflags_arch="-m68060 -m68000" ;; 820 m68360) gcc_cflags_arch="-mcpu32 -m68000" ;; 821 *) gcc_cflags_arch="-m68000" ;; 822 esac 823 824 # FIXME: m68k/mc68020 looks like it's ok for cpu32, but this wants to be 825 # tested. Will need to introduce an m68k/cpu32 if m68k/mc68020 ever uses 826 # the bitfield instructions. 827 case $host_cpu in 828 [m680[234]0 | m68360]) path="m68k/mc68020 m68k" ;; 829 *) path="m68k" ;; 830 esac 831 ;; 832 833 834 # Motorola 88k 835 m88k*-*-*) 836 path="m88k" 837 ;; 838 m88110*-*-*) 839 gcc_cflags="$gcc_cflags -m88110" 840 path="m88k/mc88110 m88k" 841 ;; 842 843 844 # National Semiconductor 32k 845 ns32k*-*-*) 846 path="ns32k" 847 ;; 848 849 850 # IRIX 5 and earlier can only run 32-bit o32. 851 # 852 # IRIX 6 and up always has a 64-bit mips CPU can run n32 or 64. n32 is 853 # preferred over 64, but only because that's been the default in past 854 # versions of GMP. The two are equally efficient. 855 # 856 # Linux kernel 2.2.13 arch/mips/kernel/irixelf.c has a comment about not 857 # supporting n32 or 64. 858 # 859 # For reference, libtool (eg. 1.5.6) recognises the n32 ABI and knows the 860 # right options to use when linking (both cc and gcc), so no need for 861 # anything special from us. 862 # 863 mips*-*-*) 864 abilist="o32" 865 gcc_cflags_optlist="abi" 866 gcc_cflags_abi="-mabi=32" 867 gcc_testlist="gcc-mips-o32" 868 path="mips32" 869 cc_cflags="-O2 -o32" # no -g, it disables all optimizations 870 # this suits both mips32 and mips64 871 GMP_INCLUDE_MPN(mips32/mips-defs.m4) 872 873 case $host in 874 [mips64*-*-* | mips*-*-irix[6789]*]) 875 abilist="n32 64 o32" 876 877 cclist_n32="gcc cc" 878 gcc_n32_cflags="$gcc_cflags -mabi=n32" 879 cc_n32_cflags="-O2 -n32" # no -g, it disables all optimizations 880 limb_n32=longlong 881 path_n32="mips64" 882 883 cclist_64="gcc cc" 884 gcc_64_cflags="$gcc_cflags -mabi=64" 885 gcc_64_ldflags="-Wc,-mabi=64" 886 cc_64_cflags="-O2 -64" # no -g, it disables all optimizations 887 cc_64_ldflags="-Wc,-64" 888 path_64="mips64" 889 ;; 890 esac 891 ;; 892 893 894 # Darwin (powerpc-apple-darwin1.3) has it's hacked gcc installed as cc. 895 # Our usual "gcc in disguise" detection means gcc_cflags etc here gets 896 # used. 897 # 898 # The darwin pre-compiling preprocessor is disabled with -no-cpp-precomp 899 # since it doesn't like "__attribute__ ((mode (SI)))" etc in gmp-impl.h, 900 # and so always ends up running the plain preprocessor anyway. This could 901 # be done in CPPFLAGS rather than CFLAGS, but there's not many places 902 # preprocessing is done separately, and this is only a speedup, the normal 903 # preprocessor gets run if there's any problems. 904 # 905 # We used to use -Wa,-mppc with gcc, but can't remember exactly why. 906 # Presumably it was for old versions of gcc where -mpowerpc doesn't put 907 # the assembler in the right mode. In any case -Wa,-mppc is not good, for 908 # instance -mcpu=604 makes recent gcc use -m604 to get access to the 909 # "fsel" instruction, but a -Wa,-mppc overrides that, making code that 910 # comes out with fsel fail. 911 # 912 # (Note also that the darwin assembler doesn't accept "-mppc", so any 913 # -Wa,-mppc was used only if it worked. The right flag on darwin would be 914 # "-arch ppc" or some such, but that's already the default.) 915 # 916 [powerpc*-*-* | power[3-9]-*-*]) 917 AC_DEFINE(HAVE_HOST_CPU_FAMILY_powerpc) 918 HAVE_HOST_CPU_FAMILY_powerpc=1 919 abilist="32" 920 cclist="gcc cc" 921 cc_cflags="-O2" 922 gcc_32_cflags="$gcc_cflags -mpowerpc" 923 gcc_cflags_optlist="precomp subtype asm cpu" 924 gcc_cflags_precomp="-no-cpp-precomp" 925 gcc_cflags_subtype="-force_cpusubtype_ALL" # for vmx on darwin 926 gcc_cflags_asm="" 927 gcc_cflags_cpu="" 928 vmx_path="" 929 930 # grab this object, though it's not a true cycle counter routine 931 SPEED_CYCLECOUNTER_OBJ=powerpc.lo 932 cyclecounter_size=0 933 934 case $host_cpu in 935 powerpc740 | powerpc750) 936 path="powerpc32/750 powerpc32" ;; 937 powerpc7400 | powerpc7410) 938 path="powerpc32/vmx powerpc32/750 powerpc32" ;; 939 [powerpc74[45]?]) 940 path="powerpc32/vmx powerpc32" ;; 941 *) 942 path="powerpc32" ;; 943 esac 944 945 case $host_cpu in 946 powerpc401) gcc_cflags_cpu="-mcpu=401" ;; 947 powerpc403) gcc_cflags_cpu="-mcpu=403" 948 xlc_cflags_arch="-qarch=403 -qarch=ppc" ;; 949 powerpc405) gcc_cflags_cpu="-mcpu=405" ;; 950 powerpc505) gcc_cflags_cpu="-mcpu=505" ;; 951 powerpc601) gcc_cflags_cpu="-mcpu=601" 952 xlc_cflags_arch="-qarch=601 -qarch=ppc" ;; 953 powerpc602) gcc_cflags_cpu="-mcpu=602" 954 xlc_cflags_arch="-qarch=602 -qarch=ppc" ;; 955 powerpc603) gcc_cflags_cpu="-mcpu=603" 956 xlc_cflags_arch="-qarch=603 -qarch=ppc" ;; 957 powerpc603e) gcc_cflags_cpu="-mcpu=603e -mcpu=603" 958 xlc_cflags_arch="-qarch=603 -qarch=ppc" ;; 959 powerpc604) gcc_cflags_cpu="-mcpu=604" 960 xlc_cflags_arch="-qarch=604 -qarch=ppc" ;; 961 powerpc604e) gcc_cflags_cpu="-mcpu=604e -mcpu=604" 962 xlc_cflags_arch="-qarch=604 -qarch=ppc" ;; 963 powerpc620) gcc_cflags_cpu="-mcpu=620" ;; 964 powerpc630) gcc_cflags_cpu="-mcpu=630" 965 xlc_cflags_arch="-qarch=pwr3" 966 cpu_path="p3 p3-p7" ;; 967 powerpc740) gcc_cflags_cpu="-mcpu=740" ;; 968 powerpc7400 | powerpc7410) 969 gcc_cflags_asm="-Wa,-maltivec" 970 gcc_cflags_cpu="-mcpu=7400 -mcpu=750" ;; 971 [powerpc74[45]?]) 972 gcc_cflags_asm="-Wa,-maltivec" 973 gcc_cflags_cpu="-mcpu=7450" ;; 974 powerpc750) gcc_cflags_cpu="-mcpu=750" ;; 975 powerpc801) gcc_cflags_cpu="-mcpu=801" ;; 976 powerpc821) gcc_cflags_cpu="-mcpu=821" ;; 977 powerpc823) gcc_cflags_cpu="-mcpu=823" ;; 978 powerpc860) gcc_cflags_cpu="-mcpu=860" ;; 979 powerpc970) gcc_cflags_cpu="-mtune=970" 980 xlc_cflags_arch="-qarch=970 -qarch=pwr3" 981 vmx_path="powerpc64/vmx" 982 cpu_path="p4 p3-p7" ;; 983 power4) gcc_cflags_cpu="-mtune=power4" 984 xlc_cflags_arch="-qarch=pwr4" 985 cpu_path="p4 p3-p7" ;; 986 power5) gcc_cflags_cpu="-mtune=power5 -mtune=power4" 987 xlc_cflags_arch="-qarch=pwr5" 988 cpu_path="p5 p4 p3-p7" ;; 989 power6) gcc_cflags_cpu="-mtune=power6" 990 xlc_cflags_arch="-qarch=pwr6" 991 cpu_path="p6 p3-p7" ;; 992 power7) gcc_cflags_cpu="-mtune=power7 -mtune=power5" 993 xlc_cflags_arch="-qarch=pwr7 -qarch=pwr5" 994 cpu_path="p7 p5 p4 p3-p7" ;; 995 esac 996 997 case $host in 998 *-*-aix*) 999 cclist="gcc xlc cc" 1000 gcc_32_cflags_maybe="-maix32" 1001 xlc_cflags="-O2 -qmaxmem=20000" 1002 xlc_cflags_optlist="arch" 1003 xlc_32_cflags_maybe="-q32" 1004 ar_32_flags="-X32" 1005 nm_32_flags="-X32" 1006 esac 1007 1008 case $host in 1009 POWERPC64_PATTERN) 1010 case $host in 1011 *-*-aix*) 1012 # On AIX a true 64-bit ABI is available. 1013 # Need -Wc to pass object type flags through to the linker. 1014 abilist="mode64 $abilist" 1015 cclist_mode64="gcc xlc" 1016 gcc_mode64_cflags="$gcc_cflags -maix64 -mpowerpc64" 1017 gcc_mode64_cflags_optlist="cpu" 1018 gcc_mode64_ldflags="-Wc,-maix64" 1019 xlc_mode64_cflags="-O2 -q64 -qmaxmem=20000" 1020 xlc_mode64_cflags_optlist="arch" 1021 xlc_mode64_ldflags="-Wc,-q64" 1022 # Must indicate object type to ar and nm 1023 ar_mode64_flags="-X64" 1024 nm_mode64_flags="-X64" 1025 path_mode64="" 1026 p="" 1027 for i in $cpu_path 1028 do path_mode64="${path_mode64}powerpc64/mode64/$i " 1029 path_mode64="${path_mode64}powerpc64/$i " 1030 p="${p} powerpc32/$i " 1031 done 1032 path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" 1033 path="$p $path" 1034 # grab this object, though it's not a true cycle counter routine 1035 SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo 1036 cyclecounter_size_mode64=0 1037 ;; 1038 *-*-darwin*) 1039 # On Darwin we can use 64-bit instructions with a longlong limb, 1040 # but the chip still in 32-bit mode. 1041 # In theory this can be used on any OS which knows how to save 1042 # 64-bit registers in a context switch. 1043 # 1044 # Note that we must use -mpowerpc64 with gcc, since the 1045 # longlong.h macros expect limb operands in a single 64-bit 1046 # register, not two 32-bit registers as would be given for a 1047 # long long without -mpowerpc64. In theory we could detect and 1048 # accommodate both styles, but the proper 64-bit registers will 1049 # be fastest and are what we really want to use. 1050 # 1051 # One would think -mpowerpc64 would set the assembler in the right 1052 # mode to handle 64-bit instructions. But for that, also 1053 # -force_cpusubtype_ALL is needed. 1054 # 1055 # Do not use -fast for Darwin, it actually adds options 1056 # incompatible with a shared library. 1057 # 1058 abilist="mode64 mode32 $abilist" 1059 gcc_32_cflags_maybe="-m32" 1060 gcc_cflags_opt="-O3 -O2 -O1" # will this become used? 1061 cclist_mode32="gcc" 1062 gcc_mode32_cflags_maybe="-m32" 1063 gcc_mode32_cflags="-mpowerpc64" 1064 gcc_mode32_cflags_optlist="subtype cpu opt" 1065 gcc_mode32_cflags_subtype="-force_cpusubtype_ALL" 1066 gcc_mode32_cflags_opt="-O3 -O2 -O1" 1067 limb_mode32=longlong 1068 cclist_mode64="gcc" 1069 gcc_mode64_cflags="-m64" 1070 gcc_mode64_cflags_optlist="cpu opt" 1071 gcc_mode64_cflags_opt="-O3 -O2 -O1" 1072 path_mode64="" 1073 path_mode32="" 1074 p="" 1075 for i in $cpu_path 1076 do path_mode64="${path_mode64}powerpc64/mode64/$i " 1077 path_mode64="${path_mode64}powerpc64/$i " 1078 path_mode32="${path_mode32}powerpc64/mode32/$i " 1079 path_mode32="${path_mode32}powerpc64/$i " 1080 p="${p} powerpc32/$i " 1081 done 1082 path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" 1083 path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64" 1084 path="$p $path" 1085 SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo 1086 cyclecounter_size_mode64=0 1087 any_mode64_testlist="sizeof-long-8" 1088 ;; 1089 *-*-linux* | *-*-*bsd*) 1090 # On GNU/Linux, assume the processor is in 64-bit mode. Some 1091 # environments have a gcc that is always in 64-bit mode, while 1092 # others require -m64, hence the use of cflags_maybe. The 1093 # sizeof-long-8 test checks the mode is right (for the no option 1094 # case). 1095 # 1096 # -mpowerpc64 is not used, since it should be the default in 1097 # 64-bit mode. (We need its effect for the various longlong.h 1098 # asm macros to be right of course.) 1099 # 1100 # gcc64 was an early port of gcc to 64-bit mode, but should be 1101 # obsolete before too long. We prefer plain gcc when it knows 1102 # 64-bits. 1103 # 1104 abilist="mode64 mode32 $abilist" 1105 gcc_32_cflags_maybe="-m32" 1106 cclist_mode32="gcc" 1107 gcc_mode32_cflags_maybe="-m32" 1108 gcc_mode32_cflags="-mpowerpc64" 1109 gcc_mode32_cflags_optlist="cpu opt" 1110 gcc_mode32_cflags_opt="-O3 -O2 -O1" 1111 limb_mode32=longlong 1112 cclist_mode64="gcc gcc64" 1113 gcc_mode64_cflags_maybe="-m64" 1114 gcc_mode64_cflags_optlist="cpu opt" 1115 gcc_mode64_cflags_opt="-O3 -O2 -O1" 1116 path_mode64="" 1117 path_mode32="" 1118 p="" 1119 for i in $cpu_path 1120 do path_mode64="${path_mode64}powerpc64/mode64/$i " 1121 path_mode64="${path_mode64}powerpc64/$i " 1122 path_mode32="${path_mode32}powerpc64/mode32/$i " 1123 path_mode32="${path_mode32}powerpc64/$i " 1124 p="${p} powerpc32/$i " 1125 done 1126 path_mode64="${path_mode64}powerpc64/mode64 $vmx_path powerpc64" 1127 path_mode32="${path_mode32}powerpc64/mode32 $vmx_path powerpc64" 1128 path="$p $path" 1129 SPEED_CYCLECOUNTER_OBJ_mode64=powerpc64.lo 1130 cyclecounter_size_mode64=0 1131 any_mode64_testlist="sizeof-long-8" 1132 ;; 1133 esac 1134 ;; 1135 esac 1136 ;; 1137 1138 1139 # POWER 32-bit 1140 [power-*-* | power[12]-*-* | power2sc-*-*]) 1141 AC_DEFINE(HAVE_HOST_CPU_FAMILY_power) 1142 HAVE_HOST_CPU_FAMILY_power=1 1143 cclist="gcc" 1144 extra_functions="udiv_w_sdiv" 1145 path="power" 1146 1147 # gcc 2.7.2 knows rios1, rios2, rsc 1148 # 1149 # -mcpu=rios2 can tickle an AIX assembler bug (see GMP_PROG_CC_WORKS) so 1150 # there needs to be a fallback to just -mpower. 1151 # 1152 gcc_cflags_optlist="cpu" 1153 case $host in 1154 power-*-*) gcc_cflags_cpu="-mcpu=power -mpower" ;; 1155 power1-*-*) gcc_cflags_cpu="-mcpu=rios1 -mpower" ;; 1156 power2-*-*) gcc_cflags_cpu="-mcpu=rios2 -mpower" ;; 1157 power2sc-*-*) gcc_cflags_cpu="-mcpu=rsc -mpower" ;; 1158 esac 1159 case $host in 1160 *-*-aix*) 1161 cclist="gcc xlc" 1162 xlc_cflags="-O2 -qarch=pwr -qmaxmem=20000" 1163 ;; 1164 esac 1165 ;; 1166 1167 1168 pyramid-*-*) 1169 path="pyr" 1170 ;; 1171 1172 1173 # IBM System/390 and z/Architecture 1174 S390_PATTERN | S390X_PATTERN) 1175 abilist="32" 1176 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 1177 gcc_cflags_optlist="arch" 1178 path="s390_32" 1179 extra_functions="udiv_w_sdiv" 1180 gcc_32_cflags_maybe="-m31" 1181 1182 case $host_cpu in 1183 s390) 1184 ;; 1185 z900 | z900esa) 1186 cpu="z900" 1187 gccarch="$cpu" 1188 path="s390_32/esame/$cpu s390_32/esame s390_32" 1189 gcc_cflags_arch="-march=$gccarch" 1190 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) 1191 AC_DEFINE(HAVE_HOST_CPU_s390_zarch) 1192 extra_functions="" 1193 ;; 1194 z990 | z990esa) 1195 cpu="z990" 1196 gccarch="$cpu" 1197 path="s390_32/esame/$cpu s390_32/esame s390_32" 1198 gcc_cflags_arch="-march=$gccarch" 1199 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) 1200 AC_DEFINE(HAVE_HOST_CPU_s390_zarch) 1201 extra_functions="" 1202 ;; 1203 z9 | z9esa) 1204 cpu="z9" 1205 gccarch="z9-109" 1206 path="s390_32/esame/$cpu s390_32/esame s390_32" 1207 gcc_cflags_arch="-march=$gccarch" 1208 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) 1209 AC_DEFINE(HAVE_HOST_CPU_s390_zarch) 1210 extra_functions="" 1211 ;; 1212 z10 | z10esa) 1213 cpu="z10" 1214 gccarch="z10" 1215 path="s390_32/esame/$cpu s390_32/esame s390_32" 1216 gcc_cflags_arch="-march=$gccarch" 1217 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) 1218 AC_DEFINE(HAVE_HOST_CPU_s390_zarch) 1219 extra_functions="" 1220 ;; 1221 z196 | z196esa) 1222 cpu="z196" 1223 gccarch="z196" 1224 path="s390_32/esame/$cpu s390_32/esame s390_32" 1225 gcc_cflags_arch="-march=$gccarch" 1226 AC_DEFINE_UNQUOTED(HAVE_HOST_CPU_s390_$cpu) 1227 AC_DEFINE(HAVE_HOST_CPU_s390_zarch) 1228 extra_functions="" 1229 ;; 1230 esac 1231 1232 case $host in 1233 S390X_PATTERN) 1234 abilist="64 32" 1235 cclist_64="gcc" 1236 gcc_64_cflags_optlist="arch" 1237 gcc_64_cflags="$gcc_cflags -m64" 1238 path_64="s390_64/$host_cpu s390_64" 1239 extra_functions="" 1240 ;; 1241 esac 1242 ;; 1243 1244 1245 sh-*-*) path="sh" ;; 1246 [sh[2-4]-*-*]) path="sh/sh2 sh" ;; 1247 1248 1249 *sparc*-*-*) 1250 # sizeof(long)==4 or 8 is tested, to ensure we get the right ABI. We've 1251 # had various bug reports where users have set CFLAGS for their desired 1252 # mode, but not set our ABI. For some reason it's sparc where this 1253 # keeps coming up, presumably users there are accustomed to driving the 1254 # compiler mode that way. The effect of our testlist setting is to 1255 # reject ABI=64 in favour of ABI=32 if the user has forced the flags to 1256 # 32-bit mode. 1257 # 1258 abilist="32" 1259 cclist="gcc acc cc" 1260 any_testlist="sizeof-long-4" 1261 GMP_INCLUDE_MPN(sparc32/sparc-defs.m4) 1262 1263 case $host_cpu in 1264 sparcv8 | microsparc | turbosparc) 1265 path="sparc32/v8 sparc32" ;; 1266 supersparc) 1267 path="sparc32/v8/supersparc sparc32/v8 sparc32" ;; 1268 [sparc64 | sparcv9* | ultrasparc | ultrasparc[234]*]) 1269 path="sparc32/v9 sparc32/v8 sparc32" ;; 1270 [ultrasparct[12345]]) 1271 path="sparc32/ultrasparct1 sparc32/v8 sparc32" ;; 1272 *) 1273 path="sparc32" ;; 1274 esac 1275 1276 # gcc 2.7.2 doesn't know about v9 and doesn't pass -xarch=v8plus to the 1277 # assembler. Add it explicitly since the solaris assembler won't accept 1278 # our sparc32/v9 asm code without it. gas accepts -xarch=v8plus too, so 1279 # it can be in the cflags unconditionally (though gas doesn't need it). 1280 # 1281 # gcc -m32 is needed to force 32-bit mode on a dual-ABI system, but past 1282 # gcc doesn't know that flag, hence cflags_maybe. Note that -m32 cannot 1283 # be done through the optlist since the plain cflags would be run first 1284 # and we don't want to require the default mode (whatever it is) works. 1285 # 1286 # Note it's gcc_32_cflags_maybe and not gcc_cflags_maybe because the 1287 # latter would be used in the 64-bit ABI on systems like "*bsd" where 1288 # abilist="64" only. 1289 # 1290 case $host_cpu in 1291 [ultrasparct[345]]) 1292 gcc_32_cflags="$gcc_cflags -Wa,-xarch=v8plusd" ;; 1293 sparc64 | sparcv9* | ultrasparc*) 1294 gcc_32_cflags="$gcc_cflags -Wa,-xarch=v8plus" ;; 1295 esac 1296 gcc_32_cflags_maybe="-m32" 1297 gcc_cflags_optlist="cpu" 1298 1299 # gcc 2.7.2 knows -mcypress, -msupersparc, -mv8, -msparclite. 1300 # gcc 2.95 knows -mcpu= v7, hypersparc, sparclite86x, f930, f934, 1301 # sparclet, tsc701, v9, ultrasparc. A warning is given that the 1302 # plain -m forms will disappear. 1303 # gcc 3.0 adds nothing. 1304 # gcc 3.1 adds nothing. 1305 # gcc 3.2 adds nothing. 1306 # gcc 3.3 adds ultrasparc3. 1307 # 1308 case $host_cpu in 1309 supersparc) gcc_cflags_cpu="-mcpu=supersparc -msupersparc" ;; 1310 sparcv8 | microsparc | turbosparc) 1311 gcc_cflags_cpu="-mcpu=v8 -mv8" ;; 1312 sparc64 | sparcv9*) gcc_cflags_cpu="-mcpu=v9 -mv8" ;; 1313 ultrasparc3) gcc_cflags_cpu="-mcpu=ultrasparc3 -mcpu=ultrasparc -mv8" ;; 1314 ultrasparc*) gcc_cflags_cpu="-mcpu=ultrasparc -mv8" ;; 1315 *) gcc_cflags_cpu="-mcpu=v7 -mcypress" ;; 1316 esac 1317 1318 # SunPRO cc and acc, and SunOS bundled cc 1319 case $host in 1320 *-*-solaris* | *-*-sunos*) 1321 # Note no -g, it disables all optimizations. 1322 cc_cflags= 1323 cc_cflags_optlist="opt arch cpu" 1324 1325 # SunOS cc doesn't know -xO4, fallback to -O2. 1326 cc_cflags_opt="-xO4 -O2" 1327 1328 # SunOS cc doesn't know -xarch, apparently always generating v7 1329 # code, so make this optional 1330 case $host_cpu in 1331 sparcv8 | microsparc | supersparc | turbosparc) 1332 cc_cflags_arch="-xarch=v8" ;; 1333 [ultrasparct[345]]) cc_cflags_arch="-xarch=v8plusd" ;; 1334 sparc64 | sparcv9* | ultrasparc*) cc_cflags_arch="-xarch=v8plus" ;; 1335 *) cc_cflags_arch="-xarch=v7" ;; 1336 esac 1337 1338 # SunOS cc doesn't know -xchip and doesn't seem to have an equivalent. 1339 # SunPRO cc 5 recognises -xchip=generic, old, super, super2, micro, 1340 # micro2, hyper, hyper2, powerup, ultra, ultra2, ultra2i. 1341 # SunPRO cc 6 adds -xchip=ultra2e, ultra3cu. 1342 # 1343 # FIXME: Which of ultra, ultra2 or ultra2i is the best fallback for 1344 # ultrasparc3? 1345 # 1346 case $host_cpu in 1347 supersparc) cc_cflags_cpu="-xchip=super" ;; 1348 microsparc) cc_cflags_cpu="-xchip=micro" ;; 1349 turbosparc) cc_cflags_cpu="-xchip=micro2" ;; 1350 ultrasparc) cc_cflags_cpu="-xchip=ultra" ;; 1351 ultrasparc2) cc_cflags_cpu="-xchip=ultra2" ;; 1352 ultrasparc2i) cc_cflags_cpu="-xchip=ultra2i" ;; 1353 ultrasparc3) cc_cflags_cpu="-xchip=ultra3 -xchip=ultra" ;; 1354 *) cc_cflags_cpu="-xchip=generic" ;; 1355 esac 1356 esac 1357 1358 case $host_cpu in 1359 sparc64 | sparcv9* | ultrasparc*) 1360 case $host in 1361 # Solaris 6 and earlier cannot run ABI=64 since it doesn't save 1362 # registers properly, so ABI=32 is left as the only choice. 1363 # 1364 [*-*-solaris2.[0-6] | *-*-solaris2.[0-6].*]) ;; 1365 1366 # BSD sparc64 ports are 64-bit-only systems, so ABI=64 is the only 1367 # choice. In fact they need no special compiler flags, gcc -m64 1368 # is the default, but it doesn't hurt to add it. v9 CPUs always 1369 # use the sparc64 port, since the plain 32-bit sparc ports don't 1370 # run on a v9. 1371 # 1372 *-*-*bsd*) abilist="64" ;; 1373 1374 # For all other systems, we try both 64 and 32. 1375 # 1376 # GNU/Linux sparc64 has only recently gained a 64-bit user mode. 1377 # In the past sparc64 meant a v9 cpu, but there were no 64-bit 1378 # operations in user mode. We assume that if "gcc -m64" works 1379 # then the system is suitable. Hopefully even if someone attempts 1380 # to put a new gcc and/or glibc on an old system it won't run. 1381 # 1382 *) abilist="64 32" ;; 1383 esac 1384 1385 case $host_cpu in 1386 ultrasparc | ultrasparc2 | ultrasparc2i) 1387 path_64="sparc64/ultrasparc1234 sparc64" ;; 1388 [ultrasparc[34]]) 1389 path_64="sparc64/ultrasparc34 sparc64/ultrasparc1234 sparc64" ;; 1390 [ultrasparct[12345]]) 1391 path_64="sparc64/ultrasparct1 sparc64" ;; 1392 *) 1393 path_64="sparc64" 1394 esac 1395 1396 cclist_64="gcc" 1397 any_64_testlist="sizeof-long-8" 1398 1399 # gcc -mptr64 is probably implied by -m64, but we're not sure if 1400 # this was always so. On Solaris in the past we always used both 1401 # "-m64 -mptr64". 1402 # 1403 # gcc -Wa,-xarch=v9 is thought to be necessary in some cases on 1404 # solaris, but it would seem likely that if gcc is going to generate 1405 # 64-bit code it will have to add that option itself where needed. 1406 # An extra copy of this option should be harmless though, but leave 1407 # it until we're sure. (Might want -xarch=v9a or -xarch=v9b for the 1408 # higher cpu types instead.) 1409 # 1410 gcc_64_cflags="$gcc_cflags -m64 -mptr64" 1411 gcc_64_ldflags="-Wc,-m64" 1412 gcc_64_cflags_optlist="cpu" 1413 1414 case $host in 1415 *-*-solaris*) 1416 # Sun cc. 1417 # 1418 # We used to have -fast and some fixup options here, but it 1419 # recurrently caused problems with miscompilation. Of course, 1420 # -fast is documented as miscompiling things for the sake of speed. 1421 # 1422 cclist_64="$cclist_64 cc" 1423 cc_64_cflags="-xO3 -xarch=v9" 1424 cc_64_cflags_optlist="cpu" 1425 ;; 1426 esac 1427 1428 # using the v9 %tick register 1429 SPEED_CYCLECOUNTER_OBJ_32=sparcv9.lo 1430 SPEED_CYCLECOUNTER_OBJ_64=sparcv9.lo 1431 cyclecounter_size_32=2 1432 cyclecounter_size_64=2 1433 ;; 1434 esac 1435 ;; 1436 1437 1438 # VAX 1439 vax*-*-*elf*) 1440 # Use elf conventions (i.e., '%' register prefix, no global prefix) 1441 # 1442 GMP_INCLUDE_MPN(vax/elf.m4) 1443 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 1444 path="vax" 1445 extra_functions="udiv_w_sdiv" 1446 ;; 1447 vax*-*-*) 1448 # Default to aout conventions (i.e., no register prefix, '_' global prefix) 1449 # 1450 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 1451 path="vax" 1452 extra_functions="udiv_w_sdiv" 1453 ;; 1454 1455 1456 # AMD and Intel x86 configurations, including AMD64 1457 # 1458 # Rumour has it gcc -O2 used to give worse register allocation than just 1459 # -O, but lets assume that's no longer true. 1460 # 1461 # -m32 forces 32-bit mode on a bi-arch 32/64 amd64 build of gcc. -m64 is 1462 # the default in such a build (we think), so -m32 is essential for ABI=32. 1463 # This is, of course, done for any $host_cpu, not just x86_64, so we can 1464 # get such a gcc into the right mode to cross-compile to say i486-*-*. 1465 # 1466 # -m32 is not available in gcc 2.95 and earlier, hence cflags_maybe to use 1467 # it when it works. We check sizeof(long)==4 to ensure we get the right 1468 # mode, in case -m32 has failed not because it's an old gcc, but because 1469 # it's a dual 32/64-bit gcc without a 32-bit libc, or whatever. 1470 # 1471 X86_PATTERN | X86_64_PATTERN) 1472 abilist="32" 1473 cclist="gcc icc cc" 1474 gcc_cflags="$gcc_cflags $fomit_frame_pointer" 1475 gcc_32_cflags_maybe="-m32" 1476 icc_cflags="-no-gcc" 1477 icc_cflags_optlist="opt" 1478 icc_cflags_opt="-O3 -O2 -O1" 1479 any_32_testlist="sizeof-long-4" 1480 CALLING_CONVENTIONS_OBJS='x86call.lo x86check$U.lo' 1481 1482 # Availability of rdtsc is checked at run-time. 1483 SPEED_CYCLECOUNTER_OBJ=pentium.lo 1484 1485 # gcc 2.7.2 only knows i386 and i486, using -m386 or -m486. These 1486 # represent -mcpu= since -m486 doesn't generate 486 specific insns. 1487 # gcc 2.95 adds k6, pentium and pentiumpro, and takes -march= and -mcpu=. 1488 # gcc 3.0 adds athlon. 1489 # gcc 3.1 adds k6-2, k6-3, pentium-mmx, pentium2, pentium3, pentium4, 1490 # athlon-tbird, athlon-4, athlon-xp, athlon-mp. 1491 # gcc 3.2 adds winchip2. 1492 # gcc 3.3 adds winchip-c6. 1493 # gcc 3.3.1 from mandrake adds k8 and knows -mtune. 1494 # gcc 3.4 adds c3, c3-2, k8, and deprecates -mcpu in favour of -mtune. 1495 # 1496 # In gcc 2.95.[0123], -march=pentiumpro provoked a stack slot bug in an 1497 # old version of mpz/powm.c. Seems to be fine with the current code, so 1498 # no need for any restrictions on that option. 1499 # 1500 # -march=pentiumpro can fail if the assembler doesn't know "cmov" 1501 # (eg. solaris 2.8 native "as"), so always have -march=pentium after 1502 # that as a fallback. 1503 # 1504 # -march=pentium4 and -march=k8 enable SSE2 instructions, which may or 1505 # may not be supported by the assembler and/or the OS, and is bad in gcc 1506 # prior to 3.3. The tests will reject these if no good, so fallbacks 1507 # like "-march=pentium4 -mno-sse2" are given to try also without SSE2. 1508 # Note the relevant -march types are listed in the optflags handling 1509 # below, be sure to update there if adding new types emitting SSE2. 1510 # 1511 # -mtune is used at the start of each cpu option list to give something 1512 # gcc 3.4 will use, thereby avoiding warnings from -mcpu. -mcpu forms 1513 # are retained for use by prior gcc. For example pentium has 1514 # "-mtune=pentium -mcpu=pentium ...", the -mtune is for 3.4 and the 1515 # -mcpu for prior. If there's a brand new choice in 3.4 for a chip, 1516 # like k8 for x86_64, then it can be the -mtune at the start, no need to 1517 # duplicate anything. 1518 # 1519 gcc_cflags_optlist="cpu arch" 1520 case $host_cpu in 1521 i386*) 1522 gcc_cflags_cpu="-mtune=i386 -mcpu=i386 -m386" 1523 gcc_cflags_arch="-march=i386" 1524 path="x86" 1525 ;; 1526 i486*) 1527 gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486" 1528 gcc_cflags_arch="-march=i486" 1529 path="x86/i486 x86" 1530 ;; 1531 i586 | pentium) 1532 gcc_cflags_cpu="-mtune=pentium -mcpu=pentium -m486" 1533 gcc_cflags_arch="-march=pentium" 1534 path="x86/pentium x86" 1535 ;; 1536 pentiummmx) 1537 gcc_cflags_cpu="-mtune=pentium-mmx -mcpu=pentium-mmx -mcpu=pentium -m486" 1538 gcc_cflags_arch="-march=pentium-mmx -march=pentium" 1539 path="x86/pentium/mmx x86/pentium x86" 1540 ;; 1541 i686 | pentiumpro) 1542 gcc_cflags_cpu="-mtune=pentiumpro -mcpu=pentiumpro -mcpu=i486 -m486" 1543 gcc_cflags_arch="-march=pentiumpro -march=pentium" 1544 path="x86/p6 x86" 1545 ;; 1546 pentium2) 1547 gcc_cflags_cpu="-mtune=pentium2 -mcpu=pentium2 -mcpu=pentiumpro -mcpu=i486 -m486" 1548 gcc_cflags_arch="-march=pentium2 -march=pentiumpro -march=pentium" 1549 path="x86/p6/mmx x86/p6 x86" 1550 ;; 1551 pentium3) 1552 gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486" 1553 gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium" 1554 path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86" 1555 ;; 1556 pentiumm) 1557 gcc_cflags_cpu="-mtune=pentium3 -mcpu=pentium3 -mcpu=pentiumpro -mcpu=i486 -m486" 1558 gcc_cflags_arch="-march=pentium3 -march=pentiumpro -march=pentium" 1559 path="x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86" 1560 ;; 1561 k6) 1562 gcc_cflags_cpu="-mtune=k6 -mcpu=k6 -mcpu=i486 -m486" 1563 gcc_cflags_arch="-march=k6" 1564 path="x86/k6/mmx x86/k6 x86" 1565 ;; 1566 k62) 1567 gcc_cflags_cpu="-mtune=k6-2 -mcpu=k6-2 -mcpu=k6 -mcpu=i486 -m486" 1568 gcc_cflags_arch="-march=k6-2 -march=k6" 1569 path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86" 1570 ;; 1571 k63) 1572 gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486" 1573 gcc_cflags_arch="-march=k6-3 -march=k6" 1574 path="x86/k6/k62mmx x86/k6/mmx x86/k6 x86" 1575 ;; 1576 geode) 1577 gcc_cflags_cpu="-mtune=k6-3 -mcpu=k6-3 -mcpu=k6 -mcpu=i486 -m486" 1578 gcc_cflags_arch="-march=k6-3 -march=k6" 1579 path="x86/geode x86/k6/k62mmx x86/k6/mmx x86/k6 x86" 1580 ;; 1581 athlon) 1582 # Athlon instruction costs are close to P6 (3 cycle load latency, 1583 # 4-6 cycle mul, 40 cycle div, pairable adc, etc) so if gcc doesn't 1584 # know athlon (eg. 2.95.2 doesn't) then fall back on pentiumpro. 1585 gcc_cflags_cpu="-mtune=athlon -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486" 1586 gcc_cflags_arch="-march=athlon -march=pentiumpro -march=pentium" 1587 path="x86/k7/mmx x86/k7 x86" 1588 ;; 1589 i786 | pentium4) 1590 # pentiumpro is the primary fallback when gcc doesn't know pentium4. 1591 # This gets us cmov to eliminate branches. Maybe "athlon" would be 1592 # a possibility on gcc 3.0. 1593 # 1594 gcc_cflags_cpu="-mtune=pentium4 -mcpu=pentium4 -mcpu=pentiumpro -mcpu=i486 -m486" 1595 gcc_cflags_arch="-march=pentium4 -march=pentium4~-mno-sse2 -march=pentiumpro -march=pentium" 1596 gcc_64_cflags_cpu="-mtune=nocona" 1597 path="x86/pentium4/sse2 x86/pentium4/mmx x86/pentium4 x86" 1598 path_64="x86_64/pentium4 x86_64" 1599 ;; 1600 viac32) 1601 # Not sure of the best fallbacks here for -mcpu. 1602 # c3-2 has sse and mmx, so pentium3 is good for -march. 1603 gcc_cflags_cpu="-mtune=c3-2 -mcpu=c3-2 -mcpu=i486 -m486" 1604 gcc_cflags_arch="-march=c3-2 -march=pentium3 -march=pentiumpro -march=pentium" 1605 path="x86/p6/p3mmx x86/p6/mmx x86/p6 x86" 1606 ;; 1607 viac3*) 1608 # Not sure of the best fallbacks here. 1609 gcc_cflags_cpu="-mtune=c3 -mcpu=c3 -mcpu=i486 -m486" 1610 gcc_cflags_arch="-march=c3 -march=pentium-mmx -march=pentium" 1611 path="x86/pentium/mmx x86/pentium x86" 1612 ;; 1613 athlon64 | k8 | x86_64) 1614 gcc_cflags_cpu="-mtune=k8 -mcpu=athlon -mcpu=pentiumpro -mcpu=i486 -m486" 1615 gcc_cflags_arch="-march=k8 -march=k8~-mno-sse2 -march=athlon -march=pentiumpro -march=pentium" 1616 path="x86/k8 x86/k7/mmx x86/k7 x86" 1617 path_64="x86_64/k8 x86_64" 1618 ;; 1619 k10) 1620 gcc_cflags_cpu="-mtune=amdfam10 -mtune=k8" 1621 gcc_cflags_arch="-march=amdfam10 -march=k8 -march=k8~-mno-sse2" 1622 path="x86/k10 x86/k8 x86/k7/mmx x86/k7 x86" 1623 path_64="x86_64/k10 x86_64/k8 x86_64" 1624 ;; 1625 bobcat) 1626 gcc_cflags_cpu="-mtune=btver1 -mtune=amdfam10 -mtune=k8" 1627 gcc_cflags_arch="-march=btver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" 1628 path="x86/bobcat x86/k7/mmx x86/k7 x86" 1629 path_64="x86_64/bobcat x86_64/k10 x86_64/k8 x86_64" 1630 ;; 1631 bulldozer | bd1) 1632 gcc_cflags_cpu="-mtune=bdver1 -mtune=amdfam10 -mtune=k8" 1633 gcc_cflags_arch="-march=bdver1 -march=amdfam10 -march=k8 -march=k8~-mno-sse2" 1634 path="x86/bd1 x86/k7/mmx x86/k7 x86" 1635 path_64="x86_64/bd1 x86_64/k10 x86_64/k8 x86_64" 1636 ;; 1637 core2) 1638 gcc_cflags_cpu="-mtune=core2 -mtune=k8" 1639 gcc_cflags_arch="-march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" 1640 path="x86/core2 x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86" 1641 path_64="x86_64/core2 x86_64" 1642 ;; 1643 corei | coreinhm | coreiwsm) 1644 gcc_cflags_cpu="-mtune=corei7 -mtune=core2 -mtune=k8" 1645 gcc_cflags_arch="-march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" 1646 path="x86/coreinhm x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86" 1647 path_64="x86_64/coreinhm x86_64/core2 x86_64" 1648 ;; 1649 coreisbr | coreihwl | coreibwl) 1650 gcc_cflags_cpu="-mtune=corei7 -mtune=core2 -mtune=k8" 1651 gcc_cflags_arch="-march=corei7 -march=core2 -march=core2~-mno-sse2 -march=k8 -march=k8~-mno-sse2" 1652 path="x86/coreisbr x86/p6/sse2 x86/p6/p3mmx x86/p6/mmx x86/p6 x86" 1653 path_64="x86_64/coreisbr x86_64/coreinhm x86_64/core2 x86_64" 1654 ;; 1655 atom) 1656 gcc_cflags_cpu="-mtune=atom -mtune=pentium3" 1657 gcc_cflags_arch="-march=atom -march=pentium3" 1658 path="x86/atom/sse2 x86/atom/mmx x86/atom x86" 1659 path_64="x86_64/atom x86_64" 1660 ;; 1661 nano) 1662 gcc_cflags_cpu="-mtune=nano" 1663 gcc_cflags_arch="-march=nano" 1664 path="x86/nano x86" 1665 path_64="x86_64/nano x86_64" 1666 ;; 1667 *) 1668 gcc_cflags_cpu="-mtune=i486 -mcpu=i486 -m486" 1669 gcc_cflags_arch="-march=i486" 1670 path="x86" 1671 path_64="x86_64" 1672 ;; 1673 esac 1674 1675 case $host in 1676 X86_64_PATTERN) 1677 cclist_64="gcc" 1678 gcc_64_cflags="$gcc_cflags -m64" 1679 gcc_64_cflags_optlist="cpu arch" 1680 CALLING_CONVENTIONS_OBJS_64='amd64call.lo amd64check$U.lo' 1681 SPEED_CYCLECOUNTER_OBJ_64=x86_64.lo 1682 cyclecounter_size_64=2 1683 1684 cclist_x32="gcc" 1685 gcc_x32_cflags="$gcc_cflags -mx32" 1686 gcc_x32_cflags_optlist="$gcc_64_cflags_optlist" 1687 CALLING_CONVENTIONS_OBJS_x32="$CALLING_CONVENTIONS_OBJS_64" 1688 SPEED_CYCLECOUNTER_OBJ_x32="$SPEED_CYCLECOUNTER_OBJ_64" 1689 cyclecounter_size_x32="$cyclecounter_size_64" 1690 path_x32="$path_64" 1691 limb_x32=longlong 1692 any_x32_testlist="sizeof-long-4" 1693 1694 abilist="64 x32 32" 1695 if test "$enable_assembly" = "yes" ; then 1696 extra_functions_64="invert_limb_table" 1697 extra_functions_x32=$extra_functions_64 1698 fi 1699 1700 case $host in 1701 *-*-solaris*) 1702 # Sun cc. 1703 cclist_64="$cclist_64 cc" 1704 cc_64_cflags="-xO3 -m64" 1705 ;; 1706 *-*-mingw* | *-*-cygwin) 1707 limb_64=longlong 1708 CALLING_CONVENTIONS_OBJS_64="" 1709 AC_DEFINE(HOST_DOS64,1,[Define to 1 for Windos/64]) 1710 GMP_NONSTD_ABI_64=DOS64 1711 ;; 1712 esac 1713 ;; 1714 esac 1715 ;; 1716 1717 1718 # FIXME: z8kx won't get through config.sub. Could make 16 versus 32 bit 1719 # limb an ABI option perhaps. 1720 z8kx*-*-*) 1721 path="z8000x" 1722 extra_functions="udiv_w_sdiv" 1723 ;; 1724 z8k*-*-*) 1725 path="z8000" 1726 extra_functions="udiv_w_sdiv" 1727 ;; 1728 1729 1730 # Special CPU "none" used to select generic C, now this is obsolete. 1731 none-*-*) 1732 enable_assembly=no 1733 AC_MSG_WARN([the \"none\" host is obsolete, use --disable-assembly]) 1734 ;; 1735 1736esac 1737 1738# mingw can be built by the cygwin gcc if -mno-cygwin is added. For 1739# convenience add this automatically if it works. Actual mingw gcc accepts 1740# -mno-cygwin too, but of course is the default. mingw only runs on the 1741# x86s, but allow any CPU here so as to catch "none" too. 1742# 1743case $host in 1744 *-*-mingw*) 1745 gcc_cflags_optlist="$gcc_cflags_optlist nocygwin" 1746 gcc_cflags_nocygwin="-mno-cygwin" 1747 ;; 1748esac 1749 1750 1751CFLAGS_or_unset=${CFLAGS-'(unset)'} 1752CPPFLAGS_or_unset=${CPPFLAGS-'(unset)'} 1753 1754cat >&AC_FD_CC <<EOF 1755User: 1756ABI=$ABI 1757CC=$CC 1758CFLAGS=$CFLAGS_or_unset 1759CPPFLAGS=$CPPFLAGS_or_unset 1760MPN_PATH=$MPN_PATH 1761GMP: 1762abilist=$abilist 1763cclist=$cclist 1764EOF 1765 1766 1767test_CFLAGS=${CFLAGS+set} 1768test_CPPFLAGS=${CPPFLAGS+set} 1769 1770for abi in $abilist; do 1771 abi_last="$abi" 1772done 1773 1774# If the user specifies an ABI then it must be in $abilist, after that 1775# $abilist is restricted to just that choice. 1776# 1777if test -n "$ABI"; then 1778 found=no 1779 for abi in $abilist; do 1780 if test $abi = "$ABI"; then found=yes; break; fi 1781 done 1782 if test $found = no; then 1783 AC_MSG_ERROR([ABI=$ABI is not among the following valid choices: $abilist]) 1784 fi 1785 abilist="$ABI" 1786fi 1787 1788found_compiler=no 1789 1790for abi in $abilist; do 1791 1792 echo "checking ABI=$abi" 1793 1794 # Suppose abilist="64 32", then for abi=64, will have abi1="_64" and 1795 # abi2="_64". For abi=32, will have abi1="_32" and abi2="". This is how 1796 # $gcc_cflags becomes a fallback for $gcc_32_cflags (the last in the 1797 # abilist), but there's no fallback for $gcc_64_cflags. 1798 # 1799 abi1=[`echo _$abi | sed 's/[.]//g'`] 1800 if test $abi = $abi_last; then abi2=; else abi2="$abi1"; fi 1801 1802 # Compiler choices under this ABI 1803 eval cclist_chosen=\"\$cclist$abi1\" 1804 test -n "$cclist_chosen" || eval cclist_chosen=\"\$cclist$abi2\" 1805 1806 # If there's a user specified $CC then don't use a list for 1807 # $cclist_chosen, just a single value for $ccbase. 1808 # 1809 if test -n "$CC"; then 1810 1811 # The first word of $CC, stripped of any directory. For instance 1812 # CC="/usr/local/bin/gcc -pipe" will give "gcc". 1813 # 1814 for ccbase in $CC; do break; done 1815 ccbase=`echo $ccbase | sed 's:.*/::'` 1816 1817 # If this $ccbase is in $cclist_chosen then it's a compiler we know and 1818 # we can do flags defaulting with it. If not, then $cclist_chosen is 1819 # set to "unrecognised" so no default flags are used. 1820 # 1821 # "unrecognised" is used to avoid bad effects with eval if $ccbase has 1822 # non-symbol characters. For instance ccbase=my+cc would end up with 1823 # something like cflags="$my+cc_cflags" which would give 1824 # cflags="+cc_cflags" rather than the intended empty string for an 1825 # unknown compiler. 1826 # 1827 found=unrecognised 1828 for i in $cclist_chosen; do 1829 if test "$ccbase" = $i; then 1830 found=$ccbase 1831 break 1832 fi 1833 done 1834 cclist_chosen=$found 1835 fi 1836 1837 for ccbase in $cclist_chosen; do 1838 1839 # When cross compiling, look for a compiler with the $host_alias as a 1840 # prefix, the same way that AC_CHECK_TOOL does. But don't do this to a 1841 # user-selected $CC. 1842 # 1843 # $cross_compiling will be yes/no/maybe at this point. Do the host 1844 # prefixing for "maybe" as well as "yes". 1845 # 1846 if test "$cross_compiling" != no && test -z "$CC"; then 1847 cross_compiling_prefix="${host_alias}-" 1848 fi 1849 1850 for ccprefix in $cross_compiling_prefix ""; do 1851 1852 cc="$CC" 1853 test -n "$cc" || cc="$ccprefix$ccbase" 1854 1855 # If the compiler is gcc but installed under another name, then change 1856 # $ccbase so as to use the flags we know for gcc. This helps for 1857 # instance when specifying CC=gcc272 on Debian GNU/Linux, or the 1858 # native cc which is really gcc on NeXT or MacOS-X. 1859 # 1860 # FIXME: There's a slight misfeature here. If cc is actually gcc but 1861 # gcc is not a known compiler under this $abi then we'll end up 1862 # testing it with no flags and it'll work, but chances are it won't be 1863 # in the right mode for the ABI we desire. Let's quietly hope this 1864 # doesn't happen. 1865 # 1866 if test $ccbase != gcc; then 1867 GMP_PROG_CC_IS_GNU($cc,ccbase=gcc) 1868 fi 1869 1870 # Similarly if the compiler is IBM xlc but invoked as cc or whatever 1871 # then change $ccbase and make the default xlc flags available. 1872 if test $ccbase != xlc; then 1873 GMP_PROG_CC_IS_XLC($cc,ccbase=xlc) 1874 fi 1875 1876 # acc was Sun's first unbundled compiler back in the SunOS days, or 1877 # something like that, but today its man page says it's not meant to 1878 # be used directly (instead via /usr/ucb/cc). The options are pretty 1879 # much the same as the main SunPRO cc, so share those configs. 1880 # 1881 case $host in 1882 *sparc*-*-solaris* | *sparc*-*-sunos*) 1883 if test "$ccbase" = acc; then ccbase=cc; fi ;; 1884 esac 1885 1886 for tmp_cflags_maybe in yes no; do 1887 eval cflags=\"\$${ccbase}${abi1}_cflags\" 1888 test -n "$cflags" || eval cflags=\"\$${ccbase}${abi2}_cflags\" 1889 1890 if test "$tmp_cflags_maybe" = yes; then 1891 # don't try cflags_maybe when the user set CFLAGS 1892 if test "$test_CFLAGS" = set; then continue; fi 1893 eval cflags_maybe=\"\$${ccbase}${abi1}_cflags_maybe\" 1894 test -n "$cflags_maybe" || eval cflags_maybe=\"\$${ccbase}${abi2}_cflags_maybe\" 1895 # don't try cflags_maybe if there's nothing set 1896 if test -z "$cflags_maybe"; then continue; fi 1897 cflags="$cflags_maybe $cflags" 1898 fi 1899 1900 # Any user CFLAGS, even an empty string, takes precedence 1901 if test "$test_CFLAGS" = set; then cflags=$CFLAGS; fi 1902 1903 # Any user CPPFLAGS, even an empty string, takes precedence 1904 eval cppflags=\"\$${ccbase}${abi1}_cppflags\" 1905 test -n "$cppflags" || eval cppflags=\"\$${ccbase}${abi2}_cppflags\" 1906 if test "$test_CPPFLAGS" = set; then cppflags=$CPPFLAGS; fi 1907 1908 # --enable-profiling adds -p/-pg even to user-specified CFLAGS. 1909 # This is convenient, but it's perhaps a bit naughty to modify user 1910 # CFLAGS. 1911 case "$enable_profiling" in 1912 prof) cflags="$cflags -p" ;; 1913 gprof) cflags="$cflags -pg" ;; 1914 instrument) cflags="$cflags -finstrument-functions" ;; 1915 esac 1916 1917 GMP_PROG_CC_WORKS($cc $cflags $cppflags,,continue) 1918 1919 # If we're supposed to be using a "long long" for a limb, check that 1920 # it works. 1921 eval limb_chosen=\"\$limb$abi1\" 1922 test -n "$limb_chosen" || eval limb_chosen=\"\$limb$abi2\" 1923 if test "$limb_chosen" = longlong; then 1924 GMP_PROG_CC_WORKS_LONGLONG($cc $cflags $cppflags,,continue) 1925 fi 1926 1927 # The tests to perform on this $cc, if any 1928 eval testlist=\"\$${ccbase}${abi1}_testlist\" 1929 test -n "$testlist" || eval testlist=\"\$${ccbase}${abi2}_testlist\" 1930 test -n "$testlist" || eval testlist=\"\$any${abi1}_testlist\" 1931 test -n "$testlist" || eval testlist=\"\$any${abi2}_testlist\" 1932 1933 testlist_pass=yes 1934 for tst in $testlist; do 1935 case $tst in 1936 hpc-hppa-2-0) GMP_HPC_HPPA_2_0($cc,,testlist_pass=no) ;; 1937 gcc-arm-umodsi) GMP_GCC_ARM_UMODSI($cc,,testlist_pass=no) ;; 1938 gcc-mips-o32) GMP_GCC_MIPS_O32($cc,,testlist_pass=no) ;; 1939 hppa-level-2.0) GMP_HPPA_LEVEL_20($cc $cflags,,testlist_pass=no) ;; 1940 sizeof*) GMP_C_TEST_SIZEOF($cc $cflags,$tst,,testlist_pass=no) ;; 1941 esac 1942 if test $testlist_pass = no; then break; fi 1943 done 1944 1945 if test $testlist_pass = yes; then 1946 found_compiler=yes 1947 break 1948 fi 1949 done 1950 1951 if test $found_compiler = yes; then break; fi 1952 done 1953 1954 if test $found_compiler = yes; then break; fi 1955 done 1956 1957 if test $found_compiler = yes; then break; fi 1958done 1959 1960 1961# If we recognised the CPU, as indicated by $path being set, then insist 1962# that we have a working compiler, either from our $cclist choices or from 1963# $CC. We can't let AC_PROG_CC look around for a compiler because it might 1964# find one that we've rejected (for not supporting the modes our asm code 1965# demands, etc). 1966# 1967# If we didn't recognise the CPU (and this includes host_cpu=none), then 1968# fall through and let AC_PROG_CC look around for a compiler too. This is 1969# mostly in the interests of following a standard autoconf setup, after all 1970# we've already tested cc and gcc adequately (hopefully). As of autoconf 1971# 2.50 the only thing AC_PROG_CC really adds is a check for "cl" (Microsoft 1972# C on MS-DOS systems). 1973# 1974if test $found_compiler = no && test -n "$path"; then 1975 AC_MSG_ERROR([could not find a working compiler, see config.log for details]) 1976fi 1977 1978case $host in 1979 X86_PATTERN | X86_64_PATTERN) 1980 # If the user asked for a fat build, override the path and flags set above 1981 if test $enable_fat = yes; then 1982 gcc_cflags_cpu="" 1983 gcc_cflags_arch="" 1984 1985 fat_functions="add_n addmul_1 bdiv_dbm1c com copyd copyi dive_1 divrem_1 1986 gcd_1 lshift lshiftc mod_1 mod_1_1 mod_1_1_cps mod_1_2 1987 mod_1_2_cps mod_1_4 mod_1_4_cps mod_34lsub1 mode1o mul_1 1988 mul_basecase mullo_basecase pre_divrem_1 pre_mod_1 redc_1 1989 redc_2 rshift sqr_basecase sub_n submul_1" 1990 1991 if test "$abi" = 32; then 1992 extra_functions="$extra_functions fat fat_entry" 1993 path="x86/fat x86" 1994 fat_path="x86 x86/fat x86/i486 1995 x86/k6 x86/k6/mmx x86/k6/k62mmx 1996 x86/k7 x86/k7/mmx 1997 x86/k8 x86/k10 x86/bobcat 1998 x86/pentium x86/pentium/mmx 1999 x86/p6 x86/p6/mmx x86/p6/p3mmx x86/p6/sse2 2000 x86/pentium4 x86/pentium4/mmx x86/pentium4/sse2 2001 x86/core2 x86/coreinhm x86/coreisbr 2002 x86/atom x86/atom/mmx x86/atom/sse2 x86/nano" 2003 fi 2004 2005 if test "$abi" = 64; then 2006 gcc_64_cflags="" 2007 extra_functions_64="$extra_functions_64 fat fat_entry" 2008 path_64="x86_64/fat x86_64" 2009 fat_path="x86_64 x86_64/fat 2010 x86_64/k8 x86_64/k10 x86_64/bd1 x86_64/bobcat 2011 x86_64/pentium4 x86_64/core2 x86_64/coreinhm x86_64/coreisbr 2012 x86_64/atom x86_64/nano" 2013 fat_functions="$fat_functions addmul_2 addlsh1_n addlsh2_n sublsh1_n" 2014 fi 2015 2016 fat_thresholds="MUL_TOOM22_THRESHOLD MUL_TOOM33_THRESHOLD 2017 SQR_TOOM2_THRESHOLD SQR_TOOM3_THRESHOLD 2018 BMOD_1_TO_MOD_1_THRESHOLD" 2019 fi 2020 ;; 2021esac 2022 2023 2024if test $found_compiler = yes; then 2025 2026 # If we're creating CFLAGS, then look for optional additions. If the user 2027 # set CFLAGS then leave it alone. 2028 # 2029 if test "$test_CFLAGS" != set; then 2030 eval optlist=\"\$${ccbase}${abi1}_cflags_optlist\" 2031 test -n "$optlist" || eval optlist=\"\$${ccbase}${abi2}_cflags_optlist\" 2032 2033 for opt in $optlist; do 2034 eval optflags=\"\$${ccbase}${abi1}_cflags_${opt}\" 2035 test -n "$optflags" || eval optflags=\"\$${ccbase}${abi2}_cflags_${opt}\" 2036 test -n "$optflags" || eval optflags=\"\$${ccbase}_cflags_${opt}\" 2037 2038 for flag in $optflags; do 2039 2040 # ~ represents a space in an option spec 2041 flag=`echo "$flag" | tr '~' ' '` 2042 2043 case $flag in 2044 -march=pentium4 | -march=k8) 2045 # For -march settings which enable SSE2 we exclude certain bad 2046 # gcc versions and we need an OS knowing how to save xmm regs. 2047 # 2048 # This is only for ABI=32, any 64-bit gcc is good and any OS 2049 # knowing x86_64 will know xmm. 2050 # 2051 # -march=k8 was only introduced in gcc 3.3, so we shouldn't need 2052 # the GMP_GCC_PENTIUM4_SSE2 check (for gcc 3.2 and prior). But 2053 # it doesn't hurt to run it anyway, sharing code with the 2054 # pentium4 case. 2055 # 2056 if test "$abi" = 32; then 2057 GMP_GCC_PENTIUM4_SSE2($cc $cflags $cppflags,, continue) 2058 GMP_OS_X86_XMM($cc $cflags $cppflags,, continue) 2059 fi 2060 ;; 2061 -no-cpp-precomp) 2062 # special check, avoiding a warning 2063 GMP_GCC_NO_CPP_PRECOMP($ccbase,$cc,$cflags, 2064 [cflags="$cflags $flag" 2065 break], 2066 [continue]) 2067 ;; 2068 -Wa,-m*) 2069 case $host in 2070 alpha*-*-*) 2071 GMP_GCC_WA_MCPU($cc $cflags, $flag, , [continue]) 2072 ;; 2073 esac 2074 ;; 2075 -Wa,-oldas) 2076 GMP_GCC_WA_OLDAS($cc $cflags $cppflags, 2077 [cflags="$cflags $flag" 2078 break], 2079 [continue]) 2080 ;; 2081 esac 2082 2083 GMP_PROG_CC_WORKS($cc $cflags $cppflags $flag, 2084 [cflags="$cflags $flag" 2085 break]) 2086 done 2087 done 2088 fi 2089 2090 ABI="$abi" 2091 CC="$cc" 2092 CFLAGS="$cflags" 2093 CPPFLAGS="$cppflags" 2094 eval GMP_NONSTD_ABI=\"\$GMP_NONSTD_ABI_$ABI\" 2095 2096 # Could easily have this in config.h too, if desired. 2097 ABI_nodots=`echo $ABI | sed 's/\./_/'` 2098 GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_ABI_$ABI_nodots')", POST) 2099 2100 2101 # GMP_LDFLAGS substitution, selected according to ABI. 2102 # These are needed on libgmp.la and libmp.la, but currently not on 2103 # convenience libraries like tune/libspeed.la or mpz/libmpz.la. 2104 # 2105 eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\" 2106 test -n "$GMP_LDFLAGS" || eval GMP_LDFLAGS=\"\$${ccbase}${abi1}_ldflags\" 2107 AC_SUBST(GMP_LDFLAGS) 2108 AC_SUBST(LIBGMP_LDFLAGS) 2109 AC_SUBST(LIBGMPXX_LDFLAGS) 2110 2111 # extra_functions, selected according to ABI 2112 eval tmp=\"\$extra_functions$abi1\" 2113 test -n "$tmp" || eval tmp=\"\$extra_functions$abi2\" 2114 extra_functions="$tmp" 2115 2116 2117 # Cycle counter, selected according to ABI. 2118 # 2119 eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi1\" 2120 test -n "$tmp" || eval tmp=\"\$SPEED_CYCLECOUNTER_OBJ$abi2\" 2121 SPEED_CYCLECOUNTER_OBJ="$tmp" 2122 eval tmp=\"\$cyclecounter_size$abi1\" 2123 test -n "$tmp" || eval tmp=\"\$cyclecounter_size$abi2\" 2124 cyclecounter_size="$tmp" 2125 2126 if test -n "$SPEED_CYCLECOUNTER_OBJ"; then 2127 AC_DEFINE_UNQUOTED(HAVE_SPEED_CYCLECOUNTER, $cyclecounter_size, 2128 [Tune directory speed_cyclecounter, undef=none, 1=32bits, 2=64bits)]) 2129 fi 2130 AC_SUBST(SPEED_CYCLECOUNTER_OBJ) 2131 2132 2133 # Calling conventions checking, selected according to ABI. 2134 # 2135 eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi1\" 2136 test -n "$tmp" || eval tmp=\"\$CALLING_CONVENTIONS_OBJS$abi2\" 2137 if test "$enable_assembly" = "yes"; then 2138 CALLING_CONVENTIONS_OBJS="$tmp" 2139 else 2140 CALLING_CONVENTIONS_OBJS="" 2141 fi 2142 2143 if test -n "$CALLING_CONVENTIONS_OBJS"; then 2144 AC_DEFINE(HAVE_CALLING_CONVENTIONS,1, 2145 [Define to 1 if tests/libtests has calling conventions checking for the CPU]) 2146 fi 2147 AC_SUBST(CALLING_CONVENTIONS_OBJS) 2148 2149fi 2150 2151 2152# If the user gave an MPN_PATH, use that verbatim, otherwise choose 2153# according to the ABI and add "generic". 2154# 2155if test -n "$MPN_PATH"; then 2156 path="$MPN_PATH" 2157else 2158 eval tmp=\"\$path$abi1\" 2159 test -n "$tmp" || eval tmp=\"\$path$abi2\" 2160 path="$tmp generic" 2161fi 2162 2163 2164# Long long limb setup for gmp.h. 2165case $limb_chosen in 2166longlong) DEFN_LONG_LONG_LIMB="#define _LONG_LONG_LIMB 1" ;; 2167*) DEFN_LONG_LONG_LIMB="/* #undef _LONG_LONG_LIMB */" ;; 2168esac 2169AC_SUBST(DEFN_LONG_LONG_LIMB) 2170 2171 2172# The C compiler and preprocessor, put into ANSI mode if possible. 2173AC_PROG_CC 2174AC_PROG_CC_STDC 2175AC_PROG_CPP 2176 2177 2178# The C compiler on the build system, and associated tests. 2179GMP_PROG_CC_FOR_BUILD 2180GMP_PROG_CPP_FOR_BUILD 2181GMP_PROG_EXEEXT_FOR_BUILD 2182GMP_C_FOR_BUILD_ANSI 2183GMP_CHECK_LIBM_FOR_BUILD 2184 2185 2186# How to assemble, used with CFLAGS etc, see mpn/Makeasm.am. 2187# Using the compiler is a lot easier than figuring out how to invoke the 2188# assembler directly. 2189# 2190test -n "$CCAS" || CCAS="$CC -c" 2191AC_SUBST(CCAS) 2192 2193 2194# The C++ compiler, if desired. 2195want_cxx=no 2196if test $enable_cxx != no; then 2197 test_CXXFLAGS=${CXXFLAGS+set} 2198 AC_PROG_CXX 2199 2200 echo "CXXFLAGS chosen by autoconf: $CXXFLAGS" >&AC_FD_CC 2201 cxxflags_ac_prog_cxx=$CXXFLAGS 2202 cxxflags_list=ac_prog_cxx 2203 2204 # If the user didn't specify $CXXFLAGS, then try $CFLAGS, with -g removed 2205 # if AC_PROG_CXX thinks that doesn't work. $CFLAGS stands a good chance 2206 # of working, eg. on a GNU system where CC=gcc and CXX=g++. 2207 # 2208 if test "$test_CXXFLAGS" != set; then 2209 cxxflags_cflags=$CFLAGS 2210 cxxflags_list="cflags $cxxflags_list" 2211 if test "$ac_prog_cxx_g" = no; then 2212 cxxflags_cflags=`echo "$cxxflags_cflags" | sed -e 's/ -g //' -e 's/^-g //' -e 's/ -g$//'` 2213 fi 2214 fi 2215 2216 # See if the C++ compiler works. If the user specified CXXFLAGS then all 2217 # we're doing is checking whether AC_PROG_CXX succeeded, since it doesn't 2218 # give a fatal error, just leaves CXX set to a default g++. If on the 2219 # other hand the user didn't specify CXXFLAGS then we get to try here our 2220 # $cxxflags_list alternatives. 2221 # 2222 # Automake includes $CPPFLAGS in a C++ compile, so we do the same here. 2223 # 2224 for cxxflags_choice in $cxxflags_list; do 2225 eval CXXFLAGS=\"\$cxxflags_$cxxflags_choice\" 2226 GMP_PROG_CXX_WORKS($CXX $CPPFLAGS $CXXFLAGS, 2227 [want_cxx=yes 2228 break]) 2229 done 2230 2231 # If --enable-cxx=yes but a C++ compiler can't be found, then abort. 2232 if test $want_cxx = no && test $enable_cxx = yes; then 2233 AC_MSG_ERROR([C++ compiler not available, see config.log for details]) 2234 fi 2235fi 2236 2237AM_CONDITIONAL(WANT_CXX, test $want_cxx = yes) 2238 2239# FIXME: We're not interested in CXXCPP for ourselves, but if we don't do it 2240# here then AC_PROG_LIBTOOL will AC_REQUIRE it (via _LT_AC_TAGCONFIG) and 2241# hence execute it unconditionally, and that will fail if there's no C++ 2242# compiler (and no generic /lib/cpp). 2243# 2244if test $want_cxx = yes; then 2245 AC_PROG_CXXCPP 2246fi 2247 2248 2249# Path setups for Cray, according to IEEE or CFP. These must come after 2250# deciding the compiler. 2251# 2252GMP_CRAY_OPTIONS( 2253 [add_path="cray/ieee"], 2254 [add_path="cray/cfp"; extra_functions="mulwwc90"], 2255 [add_path="cray/cfp"; extra_functions="mulwwj90"]) 2256 2257 2258if test -z "$MPN_PATH"; then 2259 path="$add_path $path" 2260fi 2261 2262# For a nail build, also look in "nails" subdirectories. 2263# 2264if test $GMP_NAIL_BITS != 0 && test -z "$MPN_PATH"; then 2265 new_path= 2266 for i in $path; do 2267 case $i in 2268 generic) new_path="$new_path $i" ;; 2269 *) new_path="$new_path $i/nails $i" ;; 2270 esac 2271 done 2272 path=$new_path 2273fi 2274 2275 2276# Put all directories into CPUVEC_list so as to get a full set of 2277# CPUVEC_SETUP_$tmp_suffix defines into config.h, even if some of them are 2278# empty because mmx and/or sse2 had to be dropped. 2279# 2280for i in $fat_path; do 2281 GMP_FAT_SUFFIX(tmp_suffix, $i) 2282 CPUVEC_list="$CPUVEC_list CPUVEC_SETUP_$tmp_suffix" 2283done 2284 2285 2286# If there's any sse2 or mmx in the path, check whether the assembler 2287# supports it, and remove if not. 2288# 2289# We only need this in ABI=32, for ABI=64 on x86_64 we can assume a new 2290# enough assembler. 2291# 2292case $host in 2293 X86_PATTERN | X86_64_PATTERN) 2294 if test "$ABI" = 32; then 2295 case "$path $fat_path" in 2296 *mmx*) GMP_ASM_X86_MMX( , [GMP_STRIP_PATH(*mmx*)]) ;; 2297 esac 2298 case "$path $fat_path" in 2299 *sse2*) GMP_ASM_X86_SSE2( , [GMP_STRIP_PATH(sse2)]) ;; 2300 esac 2301 fi 2302 ;; 2303esac 2304 2305 2306if test "$enable_assembly" = "no"; then 2307 path="generic" 2308 CFLAGS="$CFLAGS -DNO_ASM" 2309# for abi in $abilist; do 2310# eval unset "path_\$abi" 2311# eval gcc_${abi}_cflags=\"\$gcc_${abi}_cflags -DNO_ASM\" 2312# done 2313fi 2314 2315 2316cat >&AC_FD_CC <<EOF 2317Decided: 2318ABI=$ABI 2319CC=$CC 2320CFLAGS=$CFLAGS 2321CPPFLAGS=$CPPFLAGS 2322GMP_LDFLAGS=$GMP_LDFLAGS 2323CXX=$CXX 2324CXXFLAGS=$CXXFLAGS 2325path=$path 2326EOF 2327echo "using ABI=\"$ABI\"" 2328echo " CC=\"$CC\"" 2329echo " CFLAGS=\"$CFLAGS\"" 2330echo " CPPFLAGS=\"$CPPFLAGS\"" 2331if test $want_cxx = yes; then 2332 echo " CXX=\"$CXX\"" 2333 echo " CXXFLAGS=\"$CXXFLAGS\"" 2334fi 2335echo " MPN_PATH=\"$path\"" 2336 2337 2338CL_AS_NOEXECSTACK 2339 2340GMP_PROG_AR 2341GMP_PROG_NM 2342 2343case $host in 2344 # FIXME: On AIX 3 and 4, $libname.a is included in libtool 2345 # $library_names_spec, so libgmp.a becomes a symlink to libgmp.so, making 2346 # it impossible to build shared and static libraries simultaneously. 2347 # Disable shared libraries by default, but let the user override with 2348 # --enable-shared --disable-static. 2349 # 2350 # FIXME: This $libname.a problem looks like it might apply to *-*-amigaos* 2351 # and *-*-os2* too, but wait for someone to test this before worrying 2352 # about it. If there is a problem then of course libtool is the right 2353 # place to fix it. 2354 # 2355 [*-*-aix[34]*]) 2356 if test -z "$enable_shared"; then enable_shared=no; fi ;; 2357esac 2358 2359 2360# Configs for Windows DLLs. 2361 2362AC_LIBTOOL_WIN32_DLL 2363 2364AC_SUBST(LIBGMP_DLL,0) 2365case $host in 2366 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) 2367 # By default, build only static. 2368 if test -z "$enable_shared"; then 2369 enable_shared=no 2370 fi 2371 # Don't allow both static and DLL. 2372 if test "$enable_shared" != no && test "$enable_static" != no; then 2373 AC_MSG_ERROR([cannot build both static and DLL, since gmp.h is different for each. 2374Use "--disable-static --enable-shared" to build just a DLL.]) 2375 fi 2376 2377 # "-no-undefined" is required when building a DLL, see documentation on 2378 # AC_LIBTOOL_WIN32_DLL. 2379 # 2380 # "-Wl,--export-all-symbols" is a bit of a hack, it gets all libgmp and 2381 # libgmpxx functions and variables exported. This is what libtool did 2382 # in the past, and it's convenient for us in the test programs. 2383 # 2384 # Maybe it'd be prudent to check for --export-all-symbols before using 2385 # it, but it seems to have been in ld since at least 2000, and there's 2386 # not really any alternative we want to take up at the moment. 2387 # 2388 # "-Wl,output-def" is used to get a .def file for use by MS lib to make 2389 # a .lib import library, described in the manual. libgmp-3.dll.def 2390 # corresponds to the libmp-3.dll.def generated by libtool (as a result 2391 # of -export-symbols on that library). 2392 # 2393 # Incidentally, libtool does generate an import library libgmp.dll.a, 2394 # but it's "ar" format and cannot be used by the MS linker. There 2395 # doesn't seem to be any GNU tool for generating or converting to .lib. 2396 # 2397 # FIXME: The .def files produced by -Wl,output-def include isascii, 2398 # iscsym, iscsymf and toascii, apparently because mingw ctype.h doesn't 2399 # inline isascii (used in gmp). It gives an extern inline for 2400 # __isascii, but for some reason not the plain isascii. 2401 # 2402 if test "$enable_shared" = yes; then 2403 GMP_LDFLAGS="$GMP_LDFLAGS -no-undefined -Wl,--export-all-symbols" 2404 LIBGMP_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmp-3.dll.def" 2405 LIBGMPXX_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmpxx-3.dll.def" 2406 LIBGMP_DLL=1 2407 fi 2408 ;; 2409esac 2410 2411 2412# Ensure that $CONFIG_SHELL is available for AC_LIBTOOL_SYS_MAX_CMD_LEN. 2413# It's often set already by _LT_AC_PROG_ECHO_BACKSLASH or 2414# _AS_LINENO_PREPARE, but not always. 2415# 2416# The symptom of CONFIG_SHELL unset is some "expr" errors during the test, 2417# and an empty result. This only happens when invoked as "sh configure", 2418# ie. no path, and can be seen for instance on ia64-*-hpux*. 2419# 2420# FIXME: Newer libtool should have it's own fix for this. 2421# 2422if test -z "$CONFIG_SHELL"; then 2423 CONFIG_SHELL=$SHELL 2424fi 2425 2426# Enable CXX in libtool only if we want it, and never enable GCJ, nor RC on 2427# mingw and cygwin. Under --disable-cxx this avoids some error messages 2428# from libtool arising from the fact we didn't actually run AC_PROG_CXX. 2429# Notice that any user-supplied --with-tags setting takes precedence. 2430# 2431# FIXME: Is this the right way to get this effect? Very possibly not, but 2432# the current _LT_AC_TAGCONFIG doesn't really suggest an alternative. 2433# 2434if test "${with_tags+set}" != set; then 2435 if test $want_cxx = yes; then 2436 with_tags=CXX 2437 else 2438 with_tags= 2439 fi 2440fi 2441 2442# The dead hand of AC_REQUIRE makes AC_PROG_LIBTOOL expand and execute 2443# AC_PROG_F77, even when F77 is not in the selected with_tags. This is 2444# probably harmless, but it's unsightly and bloats our configure, so pretend 2445# AC_PROG_F77 has been expanded already. 2446# 2447# FIXME: Rumour has it libtool will one day provide a way for a configure.in 2448# to say what it wants from among supported languages etc. 2449# 2450AC_PROVIDE([AC_PROG_F77]) 2451 2452AC_PROG_LIBTOOL 2453 2454# Generate an error here if attempting to build both shared and static when 2455# $libname.a is in $library_names_spec (as mentioned above), rather than 2456# wait for ar or ld to fail. 2457# 2458if test "$enable_shared" = yes && test "$enable_static" = yes; then 2459 case $library_names_spec in 2460 *libname.a*) 2461 AC_MSG_ERROR([cannot create both shared and static libraries on this system, --disable one of the two]) 2462 ;; 2463 esac 2464fi 2465 2466AM_CONDITIONAL(ENABLE_STATIC, test "$enable_static" = yes) 2467 2468 2469# Many of these library and header checks are for the benefit of 2470# supplementary programs. libgmp doesn't use anything too weird. 2471 2472AC_HEADER_STDC 2473AC_HEADER_TIME 2474 2475# Reasons for testing: 2476# float.h - not in SunOS bundled cc 2477# invent.h - IRIX specific 2478# langinfo.h - X/Open standard only, not in djgpp for instance 2479# locale.h - old systems won't have this 2480# nl_types.h - X/Open standard only, not in djgpp for instance 2481# (usually langinfo.h gives nl_item etc, but not on netbsd 1.4.1) 2482# sys/attributes.h - IRIX specific 2483# sys/iograph.h - IRIX specific 2484# sys/mman.h - not in Cray Unicos 2485# sys/param.h - not in mingw 2486# sys/processor.h - solaris specific, though also present in macos 2487# sys/pstat.h - HPUX specific 2488# sys/resource.h - not in mingw 2489# sys/sysctl.h - not in mingw 2490# sys/sysinfo.h - OSF specific 2491# sys/syssgi.h - IRIX specific 2492# sys/systemcfg.h - AIX specific 2493# sys/time.h - autoconf suggests testing, don't know anywhere without it 2494# sys/times.h - not in mingw 2495# machine/hal_sysinfo.h - OSF specific 2496# 2497# inttypes.h, stdint.h, unistd.h and sys/types.h are already in the autoconf 2498# default tests 2499# 2500AC_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) 2501 2502# On SunOS, sys/resource.h needs sys/time.h (for struct timeval) 2503AC_CHECK_HEADERS(sys/resource.h,,, 2504[#if TIME_WITH_SYS_TIME 2505# include <sys/time.h> 2506# include <time.h> 2507#else 2508# if HAVE_SYS_TIME_H 2509# include <sys/time.h> 2510# else 2511# include <time.h> 2512# endif 2513#endif]) 2514 2515# On NetBSD and OpenBSD, sys/sysctl.h needs sys/param.h for various constants 2516AC_CHECK_HEADERS(sys/sysctl.h,,, 2517[#if HAVE_SYS_PARAM_H 2518# include <sys/param.h> 2519#endif]) 2520 2521# On OSF 4.0, <machine/hal_sysinfo.h> must have <sys/sysinfo.h> for ulong_t 2522AC_CHECK_HEADERS(machine/hal_sysinfo.h,,, 2523[#if HAVE_SYS_SYSINFO_H 2524# include <sys/sysinfo.h> 2525#endif]) 2526 2527# Reasons for testing: 2528# optarg - not declared in mingw 2529# fgetc, fscanf, ungetc, vfprintf - not declared in SunOS 4 2530# sys_errlist, sys_nerr - not declared in SunOS 4 2531# 2532# optarg should be in unistd.h and the rest in stdio.h, both of which are 2533# in the autoconf default includes. 2534# 2535# sys_errlist and sys_nerr are supposed to be in <errno.h> on SunOS according 2536# to the man page (but aren't), in glibc they're in stdio.h. 2537# 2538AC_CHECK_DECLS([fgetc, fscanf, optarg, ungetc, vfprintf]) 2539AC_CHECK_DECLS([sys_errlist, sys_nerr], , , 2540[#include <stdio.h> 2541#include <errno.h>]) 2542 2543AC_TYPE_SIGNAL 2544 2545# Reasons for testing: 2546# intmax_t - C99 2547# long double - not in the HP bundled K&R cc 2548# long long - only in reasonably recent compilers 2549# ptrdiff_t - seems to be everywhere, maybe don't need to check this 2550# quad_t - BSD specific 2551# uint_least32_t - C99 2552# 2553# the default includes are sufficient for all these types 2554# 2555AC_CHECK_TYPES([intmax_t, long double, long long, ptrdiff_t, quad_t, 2556 uint_least32_t, intptr_t]) 2557 2558AC_C_STRINGIZE 2559 2560# FIXME: Really want #ifndef __cplusplus around the #define volatile 2561# replacement autoconf gives, since volatile is always available in C++. 2562# But we don't use it in C++ currently. 2563AC_C_VOLATILE 2564 2565AC_C_RESTRICT 2566 2567GMP_C_STDARG 2568GMP_C_ATTRIBUTE_CONST 2569GMP_C_ATTRIBUTE_MALLOC 2570GMP_C_ATTRIBUTE_MODE 2571GMP_C_ATTRIBUTE_NORETURN 2572 2573GMP_H_EXTERN_INLINE 2574 2575# from libtool 2576AC_CHECK_LIBM 2577AC_SUBST(LIBM) 2578 2579GMP_FUNC_ALLOCA 2580GMP_OPTION_ALLOCA 2581 2582GMP_H_HAVE_FILE 2583 2584AC_C_BIGENDIAN( 2585 [AC_DEFINE(HAVE_LIMB_BIG_ENDIAN, 1) 2586 GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_LIMB_BIG_ENDIAN')", POST)], 2587 [AC_DEFINE(HAVE_LIMB_LITTLE_ENDIAN, 1) 2588 GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_LIMB_LITTLE_ENDIAN')", POST) 2589 ], [:]) 2590AH_VERBATIM([HAVE_LIMB], 2591[/* Define one of these to 1 for the endianness of `mp_limb_t'. 2592 If the endianness is not a simple big or little, or you don't know what 2593 it is, then leave both undefined. */ 2594#undef HAVE_LIMB_BIG_ENDIAN 2595#undef HAVE_LIMB_LITTLE_ENDIAN]) 2596 2597GMP_C_DOUBLE_FORMAT 2598 2599 2600# Reasons for testing: 2601# alarm - not in mingw 2602# attr_get - IRIX specific 2603# clock_gettime - not in glibc 2.2.4, only very recent systems 2604# cputime - not in glibc 2605# getsysinfo - OSF specific 2606# getrusage - not in mingw 2607# gettimeofday - not in mingw 2608# mmap - not in mingw, djgpp 2609# nl_langinfo - X/Open standard only, not in djgpp for instance 2610# obstack_vprintf - glibc specific 2611# processor_info - solaris specific 2612# pstat_getprocessor - HPUX specific (10.x and up) 2613# raise - an ANSI-ism, though probably almost universal by now 2614# read_real_time - AIX specific 2615# sigaction - not in mingw 2616# sigaltstack - not in mingw, or old AIX (reputedly) 2617# sigstack - not in mingw 2618# strerror - not in SunOS 2619# strnlen - glibc extension (some other systems too) 2620# syssgi - IRIX specific 2621# times - not in mingw 2622# 2623# AC_FUNC_STRNLEN is not used because we don't want the AC_LIBOBJ 2624# replacement setups it gives. It detects a faulty strnlen on AIX, but 2625# missing out on that test is ok since our only use of strnlen is in 2626# __gmp_replacement_vsnprintf which is not required on AIX since it has a 2627# vsnprintf. 2628# 2629AC_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) 2630 2631# clock_gettime is in librt on *-*-osf5.1 and on glibc, so att -lrt to 2632# TUNE_LIBS if needed. On linux (tested on x86_32, 2.6.26), 2633# clock_getres reports ns accuracy, while in a quick test on osf 2634# clock_getres said only 1 millisecond. 2635 2636old_LIBS="$LIBS" 2637AC_SEARCH_LIBS(clock_gettime, rt, [ 2638 AC_DEFINE([HAVE_CLOCK_GETTIME],1,[Define to 1 if you have the `clock_gettime' function])]) 2639TUNE_LIBS="$LIBS" 2640LIBS="$old_LIBS" 2641 2642AC_SUBST(TUNE_LIBS) 2643 2644GMP_FUNC_VSNPRINTF 2645GMP_FUNC_SSCANF_WRITABLE_INPUT 2646 2647# Reasons for checking: 2648# pst_processor psp_iticksperclktick - not in hpux 9 2649# 2650AC_CHECK_MEMBER(struct pst_processor.psp_iticksperclktick, 2651 [AC_DEFINE(HAVE_PSP_ITICKSPERCLKTICK, 1, 2652[Define to 1 if <sys/pstat.h> `struct pst_processor' exists 2653and contains `psp_iticksperclktick'.])],, 2654 [#include <sys/pstat.h>]) 2655 2656# C++ tests, when required 2657# 2658if test $enable_cxx = yes; then 2659 AC_LANG_PUSH(C++) 2660 2661 # Reasons for testing: 2662 # <sstream> - not in g++ 2.95.2 2663 # std::locale - not in g++ 2.95.4 2664 # 2665 AC_CHECK_HEADERS([sstream]) 2666 AC_CHECK_TYPES([std::locale],,,[#include <locale>]) 2667 2668 AC_LANG_POP(C++) 2669fi 2670 2671 2672# Pick the correct source files in $path and link them to mpn/. 2673# $gmp_mpn_functions lists all functions we need. 2674# 2675# The rule is to find a file with the function name and a .asm, .S, 2676# .s, or .c extension. Certain multi-function files with special names 2677# can provide some functions too. (mpn/Makefile.am passes 2678# -DOPERATION_<func> to get them to generate the right code.) 2679 2680# Note: $gmp_mpn_functions must have mod_1 before pre_mod_1 so the former 2681# can optionally provide the latter as an extra entrypoint. Likewise 2682# divrem_1 and pre_divrem_1. 2683 2684gmp_mpn_functions_optional="umul udiv \ 2685 invert_limb sqr_diagonal sqr_diag_addlsh1 \ 2686 mul_2 mul_3 mul_4 mul_5 mul_6 \ 2687 addmul_2 addmul_3 addmul_4 addmul_5 addmul_6 addmul_7 addmul_8 \ 2688 addlsh1_n sublsh1_n rsblsh1_n rsh1add_n rsh1sub_n \ 2689 addlsh2_n sublsh2_n rsblsh2_n \ 2690 addlsh_n sublsh_n rsblsh_n \ 2691 add_n_sub_n addaddmul_1msb0" 2692 2693gmp_mpn_functions="$extra_functions \ 2694 add add_1 add_n sub sub_1 sub_n addcnd_n subcnd_n neg com \ 2695 mul_1 addmul_1 submul_1 \ 2696 add_err1_n add_err2_n add_err3_n sub_err1_n sub_err2_n sub_err3_n \ 2697 lshift rshift dive_1 diveby3 divis divrem divrem_1 divrem_2 \ 2698 fib2_ui mod_1 mod_34lsub1 mode1o pre_divrem_1 pre_mod_1 dump \ 2699 mod_1_1 mod_1_2 mod_1_3 mod_1_4 lshiftc \ 2700 mul mul_fft mul_n sqr mul_basecase sqr_basecase nussbaumer_mul \ 2701 mulmid_basecase toom42_mulmid mulmid_n mulmid \ 2702 random random2 pow_1 \ 2703 rootrem sqrtrem get_str set_str scan0 scan1 popcount hamdist cmp \ 2704 perfsqr perfpow \ 2705 gcd_1 gcd gcdext_1 gcdext gcd_subdiv_step \ 2706 gcdext_lehmer \ 2707 div_q tdiv_qr jacbase jacobi_2 jacobi get_d \ 2708 matrix22_mul matrix22_mul1_inverse_vector \ 2709 hgcd_matrix hgcd2 hgcd_step hgcd_reduce hgcd hgcd_appr \ 2710 hgcd2_jacobi hgcd_jacobi \ 2711 mullo_n mullo_basecase \ 2712 toom22_mul toom32_mul toom42_mul toom52_mul toom62_mul \ 2713 toom33_mul toom43_mul toom53_mul toom54_mul toom63_mul \ 2714 toom44_mul \ 2715 toom6h_mul toom6_sqr toom8h_mul toom8_sqr \ 2716 toom_couple_handling \ 2717 toom2_sqr toom3_sqr toom4_sqr \ 2718 toom_eval_dgr3_pm1 toom_eval_dgr3_pm2 \ 2719 toom_eval_pm1 toom_eval_pm2 toom_eval_pm2exp toom_eval_pm2rexp \ 2720 toom_interpolate_5pts toom_interpolate_6pts toom_interpolate_7pts \ 2721 toom_interpolate_8pts toom_interpolate_12pts toom_interpolate_16pts \ 2722 invertappr invert binvert mulmod_bnm1 sqrmod_bnm1 \ 2723 div_qr_2 div_qr_2n_pi1 div_qr_2u_pi1 \ 2724 sbpi1_div_q sbpi1_div_qr sbpi1_divappr_q \ 2725 dcpi1_div_q dcpi1_div_qr dcpi1_divappr_q \ 2726 mu_div_qr mu_divappr_q mu_div_q \ 2727 bdiv_q_1 \ 2728 sbpi1_bdiv_q sbpi1_bdiv_qr \ 2729 dcpi1_bdiv_q dcpi1_bdiv_qr \ 2730 mu_bdiv_q mu_bdiv_qr \ 2731 bdiv_q bdiv_qr broot brootinv bsqrt bsqrtinv \ 2732 divexact bdiv_dbm1c redc_1 redc_2 redc_n powm powlo powm_sec \ 2733 sb_div_qr_sec sb_div_r_sec sbpi1_div_qr_sec sbpi1_div_r_sec \ 2734 trialdiv remove \ 2735 and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n \ 2736 copyi copyd zero tabselect \ 2737 comb_tables \ 2738 $gmp_mpn_functions_optional" 2739 2740define(GMP_MULFUNC_CHOICES, 2741[# functions that can be provided by multi-function files 2742tmp_mulfunc= 2743case $tmp_fn in 2744 add_n|sub_n) tmp_mulfunc="aors_n" ;; 2745 add_err1_n|sub_err1_n) 2746 tmp_mulfunc="aors_err1_n" ;; 2747 add_err2_n|sub_err2_n) 2748 tmp_mulfunc="aors_err2_n" ;; 2749 add_err3_n|sub_err3_n) 2750 tmp_mulfunc="aors_err3_n" ;; 2751 addcnd_n|subcnd_n) tmp_mulfunc="aorscnd_n" ;; 2752 addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;; 2753 popcount|hamdist) tmp_mulfunc="popham" ;; 2754 and_n|andn_n|nand_n | ior_n|iorn_n|nior_n | xor_n|xnor_n) 2755 tmp_mulfunc="logops_n" ;; 2756 lshift|rshift) tmp_mulfunc="lorrshift";; 2757 addlsh1_n) 2758 tmp_mulfunc="aorslsh1_n aorrlsh1_n";; 2759 sublsh1_n) 2760 tmp_mulfunc="aorslsh1_n sorrlsh1_n";; 2761 rsblsh1_n) 2762 tmp_mulfunc="aorrlsh1_n sorrlsh1_n";; 2763 addlsh2_n) 2764 tmp_mulfunc="aorslsh2_n aorrlsh2_n";; 2765 sublsh2_n) 2766 tmp_mulfunc="aorslsh2_n sorrlsh2_n";; 2767 rsblsh2_n) 2768 tmp_mulfunc="aorrlsh2_n sorrlsh2_n";; 2769 addlsh_n) 2770 tmp_mulfunc="aorslsh_n aorrlsh_n";; 2771 sublsh_n) 2772 tmp_mulfunc="aorslsh_n sorrlsh_n";; 2773 rsblsh_n) 2774 tmp_mulfunc="aorrlsh_n sorrlsh_n";; 2775 rsh1add_n|rsh1sub_n) 2776 tmp_mulfunc="rsh1aors_n";; 2777 sb_div_qr_sec|sb_div_r_sec) 2778 tmp_mulfunc="sb_div_sec";; 2779 sbpi1_div_qr_sec|sbpi1_div_r_sec) 2780 tmp_mulfunc="sbpi1_div_sec";; 2781esac 2782]) 2783 2784# the list of all object files used by mpn/Makefile.in and the 2785# top-level Makefile.in, respectively 2786mpn_objects= 2787mpn_objs_in_libgmp= 2788 2789# links from the sources, to be removed by "make distclean" 2790gmp_srclinks= 2791 2792 2793# mpn_relative_top_srcdir is $top_srcdir, but for use from within the mpn 2794# build directory. If $srcdir is relative then we use a relative path too, 2795# so the two trees can be moved together. 2796case $srcdir in 2797 [[\\/]* | ?:[\\/]*]) # absolute, as per autoconf 2798 mpn_relative_top_srcdir=$srcdir ;; 2799 *) # relative 2800 mpn_relative_top_srcdir=../$srcdir ;; 2801esac 2802 2803 2804define(MPN_SUFFIXES,[asm S s c]) 2805 2806dnl Usage: GMP_FILE_TO_FUNCTION_BASE(func,file) 2807dnl 2808dnl Set $func to the function base name for $file, eg. dive_1 gives 2809dnl divexact_1. 2810dnl 2811define(GMP_FILE_TO_FUNCTION, 2812[case $$2 in 2813 dive_1) $1=divexact_1 ;; 2814 diveby3) $1=divexact_by3c ;; 2815 pre_divrem_1) $1=preinv_divrem_1 ;; 2816 mode1o) $1=modexact_1c_odd ;; 2817 pre_mod_1) $1=preinv_mod_1 ;; 2818 mod_1_1) $1=mod_1_1p ;; 2819 mod_1_1_cps) $1=mod_1_1p_cps ;; 2820 mod_1_2) $1=mod_1s_2p ;; 2821 mod_1_2_cps) $1=mod_1s_2p_cps ;; 2822 mod_1_3) $1=mod_1s_3p ;; 2823 mod_1_3_cps) $1=mod_1s_3p_cps ;; 2824 mod_1_4) $1=mod_1s_4p ;; 2825 mod_1_4_cps) $1=mod_1s_4p_cps ;; 2826 *) $1=$$2 ;; 2827esac 2828]) 2829 2830# Fat binary setups. 2831# 2832# We proceed through each $fat_path directory, and look for $fat_function 2833# routines there. Those found are incorporated in the build by generating a 2834# little mpn/<foo>.asm or mpn/<foo>.c file in the build directory, with 2835# suitable function renaming, and adding that to $mpn_objects (the same as a 2836# normal mpn file). 2837# 2838# fat.h is generated with macros to let internal calls to each $fat_function 2839# go directly through __gmpn_cpuvec, plus macros and declarations helping to 2840# setup that structure, on a per-directory basis ready for 2841# mpn/<cpu>/fat/fat.c. 2842# 2843# fat.h includes thresholds listed in $fat_thresholds, extracted from 2844# gmp-mparam.h in each directory. An overall maximum for each threshold is 2845# established, for use in making fixed size arrays of temporary space. 2846# (Eg. MUL_TOOM33_THRESHOLD_LIMIT used by mpn/generic/mul.c.) 2847# 2848# It'd be possible to do some of this manually, but when there's more than a 2849# few functions and a few directories it becomes very tedious, and very 2850# prone to having some routine accidentally omitted. On that basis it seems 2851# best to automate as much as possible, even if the code to do so is a bit 2852# ugly. 2853# 2854 2855if test -n "$fat_path"; then 2856 # Usually the mpn build directory is created with mpn/Makefile 2857 # instantiation, but we want to write to it sooner. 2858 mkdir mpn 2>/dev/null 2859 2860 echo "/* fat.h - setups for fat binaries." >fat.h 2861 echo " Generated by configure - DO NOT EDIT. */" >>fat.h 2862 2863 AC_DEFINE(WANT_FAT_BINARY, 1, [Define to 1 when building a fat binary.]) 2864 GMP_DEFINE(WANT_FAT_BINARY, yes) 2865 2866 # Don't want normal copies of fat functions 2867 for tmp_fn in $fat_functions; do 2868 GMP_REMOVE_FROM_LIST(gmp_mpn_functions, $tmp_fn) 2869 GMP_REMOVE_FROM_LIST(gmp_mpn_functions_optional, $tmp_fn) 2870 done 2871 2872 for tmp_fn in $fat_functions; do 2873 GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) 2874 echo " 2875#ifndef OPERATION_$tmp_fn 2876#undef mpn_$tmp_fbase 2877#define mpn_$tmp_fbase (*__gmpn_cpuvec.$tmp_fbase) 2878#endif 2879DECL_$tmp_fbase (__MPN(${tmp_fbase}_init));" >>fat.h 2880 # encourage various macros to use fat functions 2881 AC_DEFINE_UNQUOTED(HAVE_NATIVE_mpn_$tmp_fbase) 2882 done 2883 2884 echo "" >>fat.h 2885 echo "/* variable thresholds */" >>fat.h 2886 for tmp_tn in $fat_thresholds; do 2887 echo "#undef $tmp_tn" >>fat.h 2888 echo "#define $tmp_tn CPUVEC_THRESHOLD (`echo $tmp_tn | tr [A-Z] [a-z]`)" >>fat.h 2889 done 2890 2891 echo " 2892/* Copy all fields into __gmpn_cpuvec. 2893 memcpy is not used because it might operate byte-wise (depending on its 2894 implementation), and we need the function pointer writes to be atomic. 2895 "volatile" discourages the compiler from trying to optimize this. */ 2896#define CPUVEC_INSTALL(vec) \\ 2897 do { \\ 2898 volatile struct cpuvec_t *p = &__gmpn_cpuvec; \\" >>fat.h 2899 for tmp_fn in $fat_functions; do 2900 GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) 2901 echo " p->$tmp_fbase = vec.$tmp_fbase; \\" >>fat.h 2902 done 2903 for tmp_tn in $fat_thresholds; do 2904 tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` 2905 echo " p->$tmp_field_name = vec.$tmp_field_name; \\" >>fat.h 2906 done 2907 echo " } while (0)" >>fat.h 2908 2909 echo " 2910/* A helper to check all fields are filled. */ 2911#define ASSERT_CPUVEC(vec) \\ 2912 do { \\" >>fat.h 2913 for tmp_fn in $fat_functions; do 2914 GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) 2915 echo " ASSERT (vec.$tmp_fbase != NULL); \\" >>fat.h 2916 done 2917 for tmp_tn in $fat_thresholds; do 2918 tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` 2919 echo " ASSERT (vec.$tmp_field_name != 0); \\" >>fat.h 2920 done 2921 echo " } while (0)" >>fat.h 2922 2923 echo " 2924/* Call ITERATE(field) for each fat threshold field. */ 2925#define ITERATE_FAT_THRESHOLDS() \\ 2926 do { \\" >>fat.h 2927 for tmp_tn in $fat_thresholds; do 2928 tmp_field_name=`echo $tmp_tn | tr [[A-Z]] [[a-z]]` 2929 echo " ITERATE ($tmp_tn, $tmp_field_name); \\" >>fat.h 2930 done 2931 echo " } while (0)" >>fat.h 2932 2933 for tmp_dir in $fat_path; do 2934 CPUVEC_SETUP= 2935 THRESH_ASM_SETUP= 2936 echo "" >>fat.h 2937 GMP_FAT_SUFFIX(tmp_suffix, $tmp_dir) 2938 2939 # In order to keep names unique on a DOS 8.3 filesystem, use a prefix 2940 # (rather than a suffix) for the generated file names, and abbreviate. 2941 case $tmp_suffix in 2942 pentium) tmp_prefix=p ;; 2943 pentium_mmx) tmp_prefix=pm ;; 2944 p6_mmx) tmp_prefix=p2 ;; 2945 p6_p3mmx) tmp_prefix=p3 ;; 2946 pentium4) tmp_prefix=p4 ;; 2947 pentium4_mmx) tmp_prefix=p4m ;; 2948 pentium4_sse2) tmp_prefix=p4s ;; 2949 k6_mmx) tmp_prefix=k6m ;; 2950 k6_k62mmx) tmp_prefix=k62 ;; 2951 k7_mmx) tmp_prefix=k7m ;; 2952 *) tmp_prefix=$tmp_suffix ;; 2953 esac 2954 2955 # Extract desired thresholds from gmp-mparam.h file in this directory, 2956 # if present. 2957 tmp_mparam=$srcdir/mpn/$tmp_dir/gmp-mparam.h 2958 if test -f $tmp_mparam; then 2959 for tmp_tn in $fat_thresholds; do 2960 tmp_thresh=`sed -n "s/^#define $tmp_tn[ ]*\\([0-9][0-9]*\\).*$/\\1/p" $tmp_mparam` 2961 if test -n "$tmp_thresh"; then 2962 THRESH_ASM_SETUP=["${THRESH_ASM_SETUP}define($tmp_tn,$tmp_thresh) 2963"] 2964 CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.`echo $tmp_tn | tr [[A-Z]] [[a-z]]` = $tmp_thresh; \\ 2965" 2966 eval tmp_limit=\$${tmp_tn}_LIMIT 2967 if test -z "$tmp_limit"; then 2968 tmp_limit=0 2969 fi 2970 if test $tmp_thresh -gt $tmp_limit; then 2971 eval ${tmp_tn}_LIMIT=$tmp_thresh 2972 fi 2973 fi 2974 done 2975 fi 2976 2977 for tmp_fn in $fat_functions; do 2978 GMP_MULFUNC_CHOICES 2979 2980 for tmp_base in $tmp_fn $tmp_mulfunc; do 2981 for tmp_ext in MPN_SUFFIXES; do 2982 tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext 2983 if test -f $tmp_file; then 2984 2985 # If the host uses a non-standard ABI, check if tmp_file supports it 2986 # 2987 if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then 2988 abi=[`sed -n 's/^[ ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file `] 2989 if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then 2990 true 2991 else 2992 continue 2993 fi 2994 fi 2995 2996 mpn_objects="$mpn_objects ${tmp_prefix}_$tmp_fn.lo" 2997 mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_prefix}_$tmp_fn.lo" 2998 2999 GMP_FILE_TO_FUNCTION(tmp_fbase,tmp_fn) 3000 3001 # carry-in variant, eg. divrem_1c or modexact_1c_odd 3002 case $tmp_fbase in 3003 *_1*) tmp_fbasec=`echo $tmp_fbase | sed 's/_1/_1c/'` ;; 3004 *) tmp_fbasec=${tmp_fbase}c ;; 3005 esac 3006 3007 # Create a little file doing an include from srcdir. The 3008 # OPERATION and renamings aren't all needed all the time, but 3009 # they don't hurt if unused. 3010 # 3011 # FIXME: Should generate these via config.status commands. 3012 # Would need them all in one AC_CONFIG_COMMANDS though, since 3013 # that macro doesn't accept a set of separate commands generated 3014 # by shell code. 3015 # 3016 case $tmp_ext in 3017 asm) 3018 # hide the d-n-l from autoconf's error checking 3019 tmp_d_n_l=d""nl 3020 echo ["$tmp_d_n_l mpn_$tmp_fbase - from $tmp_dir directory for fat binary. 3021$tmp_d_n_l Generated by configure - DO NOT EDIT. 3022 3023define(OPERATION_$tmp_fn) 3024define(__gmpn_$tmp_fbase, __gmpn_${tmp_fbase}_$tmp_suffix) 3025define(__gmpn_$tmp_fbasec,__gmpn_${tmp_fbasec}_${tmp_suffix}) 3026define(__gmpn_preinv_${tmp_fbase},__gmpn_preinv_${tmp_fbase}_${tmp_suffix}) 3027define(__gmpn_${tmp_fbase}_cps,__gmpn_${tmp_fbase}_cps_${tmp_suffix}) 3028 3029$tmp_d_n_l For k6 and k7 gcd_1 calling their corresponding mpn_modexact_1_odd 3030ifdef(\`__gmpn_modexact_1_odd',, 3031\`define(__gmpn_modexact_1_odd,__gmpn_modexact_1_odd_${tmp_suffix})') 3032 3033$THRESH_ASM_SETUP 3034include][($mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.asm) 3035"] >mpn/${tmp_prefix}_$tmp_fn.asm 3036 ;; 3037 c) 3038 echo ["/* mpn_$tmp_fbase - from $tmp_dir directory for fat binary. 3039 Generated by configure - DO NOT EDIT. */ 3040 3041#define OPERATION_$tmp_fn 1 3042#define __gmpn_$tmp_fbase __gmpn_${tmp_fbase}_$tmp_suffix 3043#define __gmpn_$tmp_fbasec __gmpn_${tmp_fbasec}_${tmp_suffix} 3044#define __gmpn_preinv_${tmp_fbase} __gmpn_preinv_${tmp_fbase}_${tmp_suffix} 3045#define __gmpn_${tmp_fbase}_cps __gmpn_${tmp_fbase}_cps_${tmp_suffix} 3046 3047#include \"$mpn_relative_top_srcdir/mpn/$tmp_dir/$tmp_base.c\" 3048"] >mpn/${tmp_prefix}_$tmp_fn.c 3049 ;; 3050 esac 3051 3052 # Prototype, and append to CPUVEC_SETUP for this directory. 3053 echo "DECL_$tmp_fbase (__gmpn_${tmp_fbase}_$tmp_suffix);" >>fat.h 3054 CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.$tmp_fbase = __gmpn_${tmp_fbase}_${tmp_suffix}; \\ 3055" 3056 # Ditto for any preinv variant (preinv_divrem_1, preinv_mod_1). 3057 if grep "^PROLOGUE(mpn_preinv_$tmp_fn)" $tmp_file >/dev/null; then 3058 echo "DECL_preinv_$tmp_fbase (__gmpn_preinv_${tmp_fbase}_$tmp_suffix);" >>fat.h 3059 CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.preinv_$tmp_fbase = __gmpn_preinv_${tmp_fbase}_${tmp_suffix}; \\ 3060" 3061 fi 3062 3063 # Ditto for any mod_1...cps variant 3064 if grep "^PROLOGUE(mpn_${tmp_fbase}_cps)" $tmp_file >/dev/null; then 3065 echo "DECL_${tmp_fbase}_cps (__gmpn_${tmp_fbase}_cps_$tmp_suffix);" >>fat.h 3066 CPUVEC_SETUP="$CPUVEC_SETUP decided_cpuvec.${tmp_fbase}_cps = __gmpn_${tmp_fbase}_cps_${tmp_suffix}; \\ 3067" 3068 fi 3069 fi 3070 done 3071 done 3072 done 3073 3074 # Emit CPUVEC_SETUP for this directory 3075 echo "" >>fat.h 3076 echo "#define CPUVEC_SETUP_$tmp_suffix \\" >>fat.h 3077 echo " do { \\" >>fat.h 3078 echo "$CPUVEC_SETUP } while (0)" >>fat.h 3079 done 3080 3081 # Emit threshold limits 3082 echo "" >>fat.h 3083 for tmp_tn in $fat_thresholds; do 3084 eval tmp_limit=\$${tmp_tn}_LIMIT 3085 echo "#define ${tmp_tn}_LIMIT $tmp_limit" >>fat.h 3086 done 3087fi 3088 3089 3090# Normal binary setups. 3091# 3092 3093for tmp_ext in MPN_SUFFIXES; do 3094 eval found_$tmp_ext=no 3095done 3096 3097for tmp_fn in $gmp_mpn_functions; do 3098 for tmp_ext in MPN_SUFFIXES; do 3099 test "$no_create" = yes || rm -f mpn/$tmp_fn.$tmp_ext 3100 done 3101 3102 # mpn_preinv_divrem_1 might have been provided by divrem_1.asm, likewise 3103 # mpn_preinv_mod_1 by mod_1.asm. 3104 case $tmp_fn in 3105 pre_divrem_1) 3106 if test "$HAVE_NATIVE_mpn_preinv_divrem_1" = yes; then continue; fi ;; 3107 pre_mod_1) 3108 if test "$HAVE_NATIVE_mpn_preinv_mod_1" = yes; then continue; fi ;; 3109 esac 3110 3111 GMP_MULFUNC_CHOICES 3112 3113 found=no 3114 for tmp_dir in $path; do 3115 for tmp_base in $tmp_fn $tmp_mulfunc; do 3116 for tmp_ext in MPN_SUFFIXES; do 3117 tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext 3118 if test -f $tmp_file; then 3119 3120 # For a nails build, check if the file supports our nail bits. 3121 # Generic code always supports all nails. 3122 # 3123 # FIXME: When a multi-function file is selected to provide one of 3124 # the nails-neutral routines, like logops_n for and_n, the 3125 # PROLOGUE grepping will create HAVE_NATIVE_mpn_<foo> defines for 3126 # all functions in that file, even if they haven't all been 3127 # nailified. Not sure what to do about this, it's only really a 3128 # problem for logops_n, and it's not too terrible to insist those 3129 # get nailified always. 3130 # 3131 if test $GMP_NAIL_BITS != 0 && test $tmp_dir != generic; then 3132 case $tmp_fn in 3133 and_n | ior_n | xor_n | andn_n | \ 3134 copyi | copyd | \ 3135 popcount | hamdist | \ 3136 udiv | udiv_w_sdiv | umul | \ 3137 cntlz | invert_limb) 3138 # these operations are either unaffected by nails or defined 3139 # to operate on full limbs 3140 ;; 3141 *) 3142 nails=[`sed -n 's/^[ ]*NAILS_SUPPORT(\(.*\))/\1/p' $tmp_file `] 3143 for n in $nails; do 3144 case $n in 3145 *-*) 3146 n_start=`echo "$n" | sed -n 's/\(.*\)-.*/\1/p'` 3147 n_end=`echo "$n" | sed -n 's/.*-\(.*\)/\1/p'` 3148 ;; 3149 *) 3150 n_start=$n 3151 n_end=$n 3152 ;; 3153 esac 3154 if test $GMP_NAIL_BITS -ge $n_start && test $GMP_NAIL_BITS -le $n_end; then 3155 found=yes 3156 break 3157 fi 3158 done 3159 if test $found != yes; then 3160 continue 3161 fi 3162 ;; 3163 esac 3164 fi 3165 3166 # If the host uses a non-standard ABI, check if tmp_file supports it 3167 # 3168 if test -n "$GMP_NONSTD_ABI" && test $tmp_ext != "c"; then 3169 abi=[`sed -n 's/^[ ]*ABI_SUPPORT(\(.*\))/\1/p' $tmp_file `] 3170 if echo "$abi" | grep -q "\\b${GMP_NONSTD_ABI}\\b"; then 3171 true 3172 else 3173 continue 3174 fi 3175 fi 3176 3177 found=yes 3178 eval found_$tmp_ext=yes 3179 3180 if test $tmp_ext = c; then 3181 tmp_u='$U' 3182 else 3183 tmp_u= 3184 fi 3185 3186 mpn_objects="$mpn_objects $tmp_fn$tmp_u.lo" 3187 mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/$tmp_fn$tmp_u.lo" 3188 AC_CONFIG_LINKS(mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext) 3189 gmp_srclinks="$gmp_srclinks mpn/$tmp_fn.$tmp_ext" 3190 3191 # Duplicate AC_DEFINEs are harmless, so it doesn't matter 3192 # that multi-function files get grepped here repeatedly. 3193 # The PROLOGUE pattern excludes the optional second parameter. 3194 gmp_ep=[` 3195 sed -n 's/^[ ]*MULFUNC_PROLOGUE(\(.*\))/\1/p' $tmp_file ; 3196 sed -n 's/^[ ]*PROLOGUE(\([^,]*\).*)/\1/p' $tmp_file 3197 `] 3198 for gmp_tmp in $gmp_ep; do 3199 AC_DEFINE_UNQUOTED(HAVE_NATIVE_$gmp_tmp) 3200 eval HAVE_NATIVE_$gmp_tmp=yes 3201 done 3202 3203 case $tmp_fn in 3204 sqr_basecase) sqr_basecase_source=$tmp_file ;; 3205 esac 3206 3207 break 3208 fi 3209 done 3210 if test $found = yes; then break ; fi 3211 done 3212 if test $found = yes; then break ; fi 3213 done 3214 3215 if test $found = no; then 3216 for tmp_optional in $gmp_mpn_functions_optional; do 3217 if test $tmp_optional = $tmp_fn; then 3218 found=yes 3219 fi 3220 done 3221 if test $found = no; then 3222 AC_MSG_ERROR([no version of $tmp_fn found in path: $path]) 3223 fi 3224 fi 3225done 3226 3227# All cycle counters are .asm files currently 3228if test -n "$SPEED_CYCLECOUNTER_OBJ"; then 3229 found_asm=yes 3230fi 3231 3232dnl The following list only needs to have templates for those defines which 3233dnl are going to be tested by the code, there's no need to have every 3234dnl possible mpn routine. 3235 3236AH_VERBATIM([HAVE_NATIVE], 3237[/* Define to 1 each of the following for which a native (ie. CPU specific) 3238 implementation of the corresponding routine exists. */ 3239#undef HAVE_NATIVE_mpn_add_n 3240#undef HAVE_NATIVE_mpn_add_n_sub_n 3241#undef HAVE_NATIVE_mpn_add_nc 3242#undef HAVE_NATIVE_mpn_addaddmul_1msb0 3243#undef HAVE_NATIVE_mpn_addcnd_n 3244#undef HAVE_NATIVE_mpn_addlsh1_n 3245#undef HAVE_NATIVE_mpn_addlsh2_n 3246#undef HAVE_NATIVE_mpn_addlsh_n 3247#undef HAVE_NATIVE_mpn_addlsh1_nc 3248#undef HAVE_NATIVE_mpn_addlsh2_nc 3249#undef HAVE_NATIVE_mpn_addlsh_nc 3250#undef HAVE_NATIVE_mpn_addlsh1_n_ip1 3251#undef HAVE_NATIVE_mpn_addlsh2_n_ip1 3252#undef HAVE_NATIVE_mpn_addlsh_n_ip1 3253#undef HAVE_NATIVE_mpn_addlsh1_nc_ip1 3254#undef HAVE_NATIVE_mpn_addlsh2_nc_ip1 3255#undef HAVE_NATIVE_mpn_addlsh_nc_ip1 3256#undef HAVE_NATIVE_mpn_addlsh1_n_ip2 3257#undef HAVE_NATIVE_mpn_addlsh2_n_ip2 3258#undef HAVE_NATIVE_mpn_addlsh_n_ip2 3259#undef HAVE_NATIVE_mpn_addlsh1_nc_ip2 3260#undef HAVE_NATIVE_mpn_addlsh2_nc_ip2 3261#undef HAVE_NATIVE_mpn_addlsh_nc_ip2 3262#undef HAVE_NATIVE_mpn_addmul_1c 3263#undef HAVE_NATIVE_mpn_addmul_2 3264#undef HAVE_NATIVE_mpn_addmul_3 3265#undef HAVE_NATIVE_mpn_addmul_4 3266#undef HAVE_NATIVE_mpn_addmul_5 3267#undef HAVE_NATIVE_mpn_addmul_6 3268#undef HAVE_NATIVE_mpn_addmul_7 3269#undef HAVE_NATIVE_mpn_addmul_8 3270#undef HAVE_NATIVE_mpn_addmul_2s 3271#undef HAVE_NATIVE_mpn_and_n 3272#undef HAVE_NATIVE_mpn_andn_n 3273#undef HAVE_NATIVE_mpn_bdiv_dbm1c 3274#undef HAVE_NATIVE_mpn_bdiv_q_1 3275#undef HAVE_NATIVE_mpn_pi1_bdiv_q_1 3276#undef HAVE_NATIVE_mpn_com 3277#undef HAVE_NATIVE_mpn_copyd 3278#undef HAVE_NATIVE_mpn_copyi 3279#undef HAVE_NATIVE_mpn_div_qr_2 3280#undef HAVE_NATIVE_mpn_divexact_1 3281#undef HAVE_NATIVE_mpn_divexact_by3c 3282#undef HAVE_NATIVE_mpn_divrem_1 3283#undef HAVE_NATIVE_mpn_divrem_1c 3284#undef HAVE_NATIVE_mpn_divrem_2 3285#undef HAVE_NATIVE_mpn_gcd_1 3286#undef HAVE_NATIVE_mpn_hamdist 3287#undef HAVE_NATIVE_mpn_invert_limb 3288#undef HAVE_NATIVE_mpn_ior_n 3289#undef HAVE_NATIVE_mpn_iorn_n 3290#undef HAVE_NATIVE_mpn_lshift 3291#undef HAVE_NATIVE_mpn_lshiftc 3292#undef HAVE_NATIVE_mpn_lshsub_n 3293#undef HAVE_NATIVE_mpn_mod_1 3294#undef HAVE_NATIVE_mpn_mod_1_1p 3295#undef HAVE_NATIVE_mpn_mod_1c 3296#undef HAVE_NATIVE_mpn_mod_1s_2p 3297#undef HAVE_NATIVE_mpn_mod_1s_4p 3298#undef HAVE_NATIVE_mpn_mod_34lsub1 3299#undef HAVE_NATIVE_mpn_modexact_1_odd 3300#undef HAVE_NATIVE_mpn_modexact_1c_odd 3301#undef HAVE_NATIVE_mpn_mul_1 3302#undef HAVE_NATIVE_mpn_mul_1c 3303#undef HAVE_NATIVE_mpn_mul_2 3304#undef HAVE_NATIVE_mpn_mul_3 3305#undef HAVE_NATIVE_mpn_mul_4 3306#undef HAVE_NATIVE_mpn_mul_5 3307#undef HAVE_NATIVE_mpn_mul_6 3308#undef HAVE_NATIVE_mpn_mul_basecase 3309#undef HAVE_NATIVE_mpn_nand_n 3310#undef HAVE_NATIVE_mpn_nior_n 3311#undef HAVE_NATIVE_mpn_popcount 3312#undef HAVE_NATIVE_mpn_preinv_divrem_1 3313#undef HAVE_NATIVE_mpn_preinv_mod_1 3314#undef HAVE_NATIVE_mpn_redc_1 3315#undef HAVE_NATIVE_mpn_redc_2 3316#undef HAVE_NATIVE_mpn_rsblsh1_n 3317#undef HAVE_NATIVE_mpn_rsblsh2_n 3318#undef HAVE_NATIVE_mpn_rsblsh_n 3319#undef HAVE_NATIVE_mpn_rsblsh1_nc 3320#undef HAVE_NATIVE_mpn_rsblsh2_nc 3321#undef HAVE_NATIVE_mpn_rsblsh_nc 3322#undef HAVE_NATIVE_mpn_rsh1add_n 3323#undef HAVE_NATIVE_mpn_rsh1add_nc 3324#undef HAVE_NATIVE_mpn_rsh1sub_n 3325#undef HAVE_NATIVE_mpn_rsh1sub_nc 3326#undef HAVE_NATIVE_mpn_rshift 3327#undef HAVE_NATIVE_mpn_sqr_basecase 3328#undef HAVE_NATIVE_mpn_sqr_diagonal 3329#undef HAVE_NATIVE_mpn_sqr_diag_addlsh1 3330#undef HAVE_NATIVE_mpn_sub_n 3331#undef HAVE_NATIVE_mpn_sub_nc 3332#undef HAVE_NATIVE_mpn_subcnd_n 3333#undef HAVE_NATIVE_mpn_sublsh1_n 3334#undef HAVE_NATIVE_mpn_sublsh2_n 3335#undef HAVE_NATIVE_mpn_sublsh_n 3336#undef HAVE_NATIVE_mpn_sublsh1_nc 3337#undef HAVE_NATIVE_mpn_sublsh2_nc 3338#undef HAVE_NATIVE_mpn_sublsh_nc 3339#undef HAVE_NATIVE_mpn_sublsh1_n_ip1 3340#undef HAVE_NATIVE_mpn_sublsh2_n_ip1 3341#undef HAVE_NATIVE_mpn_sublsh_n_ip1 3342#undef HAVE_NATIVE_mpn_sublsh1_nc_ip1 3343#undef HAVE_NATIVE_mpn_sublsh2_nc_ip1 3344#undef HAVE_NATIVE_mpn_sublsh_nc_ip1 3345#undef HAVE_NATIVE_mpn_submul_1c 3346#undef HAVE_NATIVE_mpn_tabselect 3347#undef HAVE_NATIVE_mpn_udiv_qrnnd 3348#undef HAVE_NATIVE_mpn_udiv_qrnnd_r 3349#undef HAVE_NATIVE_mpn_umul_ppmm 3350#undef HAVE_NATIVE_mpn_umul_ppmm_r 3351#undef HAVE_NATIVE_mpn_xor_n 3352#undef HAVE_NATIVE_mpn_xnor_n]) 3353 3354 3355# Don't demand an m4 unless it's actually needed. 3356if test $found_asm = yes; then 3357 GMP_PROG_M4 3358 GMP_M4_M4WRAP_SPURIOUS 3359# else 3360# It's unclear why this m4-not-needed stuff was ever done. 3361# if test -z "$M4" ; then 3362# M4=m4-not-needed 3363# fi 3364fi 3365 3366# Only do the GMP_ASM checks if there's a .S or .asm wanting them. 3367if test $found_asm = no && test $found_S = no; then 3368 gmp_asm_syntax_testing=no 3369fi 3370 3371if test "$gmp_asm_syntax_testing" != no; then 3372 GMP_ASM_TEXT 3373 GMP_ASM_DATA 3374 GMP_ASM_LABEL_SUFFIX 3375 GMP_ASM_GLOBL 3376 GMP_ASM_GLOBL_ATTR 3377 GMP_ASM_UNDERSCORE 3378 GMP_ASM_RODATA 3379 GMP_ASM_TYPE 3380 GMP_ASM_SIZE 3381 GMP_ASM_LSYM_PREFIX 3382 GMP_ASM_W32 3383 GMP_ASM_ALIGN_LOG 3384 3385 case $host in 3386 hppa*-*-*) 3387 # for both pa32 and pa64 3388 GMP_INCLUDE_MPN(pa32/pa-defs.m4) 3389 ;; 3390 IA64_PATTERN) 3391 GMP_ASM_IA64_ALIGN_OK 3392 ;; 3393 M68K_PATTERN) 3394 GMP_ASM_M68K_INSTRUCTION 3395 GMP_ASM_M68K_ADDRESSING 3396 GMP_ASM_M68K_BRANCHES 3397 ;; 3398 [powerpc*-*-* | power[3-9]-*-*]) 3399 GMP_ASM_POWERPC_PIC_ALWAYS 3400 GMP_ASM_POWERPC_R_REGISTERS 3401 GMP_INCLUDE_MPN(powerpc32/powerpc-defs.m4) 3402 case $host in 3403 *-*-aix*) 3404 case $ABI in 3405 mode64) GMP_INCLUDE_MPN(powerpc64/aix.m4) ;; 3406 *) GMP_INCLUDE_MPN(powerpc32/aix.m4) ;; 3407 esac 3408 ;; 3409 *-*-linux* | *-*-*bsd*) 3410 case $ABI in 3411 mode64) GMP_INCLUDE_MPN(powerpc64/elf.m4) ;; 3412 mode32 | 32) GMP_INCLUDE_MPN(powerpc32/elf.m4) ;; 3413 esac 3414 ;; 3415 *-*-darwin*) 3416 case $ABI in 3417 mode64) GMP_INCLUDE_MPN(powerpc64/darwin.m4) ;; 3418 mode32 | 32) GMP_INCLUDE_MPN(powerpc32/darwin.m4) ;; 3419 esac 3420 ;; 3421 *) 3422 # Assume unrecognized operating system is the powerpc eABI 3423 GMP_INCLUDE_MPN(powerpc32/eabi.m4) 3424 ;; 3425 esac 3426 ;; 3427 power*-*-aix*) 3428 GMP_INCLUDE_MPN(powerpc32/aix.m4) 3429 ;; 3430 *sparc*-*-*) 3431 case $ABI in 3432 64) 3433 GMP_ASM_SPARC_REGISTER 3434 ;; 3435 esac 3436 ;; 3437 X86_PATTERN | X86_64_PATTERN) 3438 GMP_ASM_ALIGN_FILL_0x90 3439 case $ABI in 3440 32) 3441 GMP_INCLUDE_MPN(x86/x86-defs.m4) 3442 AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86) 3443 GMP_ASM_COFF_TYPE 3444 GMP_ASM_X86_GOT_UNDERSCORE 3445 GMP_ASM_X86_SHLDL_CL 3446 case $enable_profiling in 3447 prof | gprof) GMP_ASM_X86_MCOUNT ;; 3448 esac 3449 case $host in 3450 *-*-darwin*) 3451 GMP_INCLUDE_MPN(x86/darwin.m4) ;; 3452 esac 3453 ;; 3454 64|x32) 3455 GMP_INCLUDE_MPN(x86_64/x86_64-defs.m4) 3456 AC_DEFINE(HAVE_HOST_CPU_FAMILY_x86_64) 3457 case $host in 3458 *-*-darwin*) 3459 GMP_INCLUDE_MPN(x86_64/darwin.m4) ;; 3460 *-*-mingw* | *-*-cygwin) 3461 GMP_INCLUDE_MPN(x86_64/dos64.m4) ;; 3462 esac 3463 ;; 3464 esac 3465 ;; 3466 esac 3467fi 3468 3469# For --enable-minithres, prepend "minithres" to path so that its special 3470# gmp-mparam.h will be used. 3471if test $enable_minithres = yes; then 3472 path="minithres $path" 3473fi 3474 3475# Create link for gmp-mparam.h. 3476gmp_mparam_source= 3477for gmp_mparam_dir in $path; do 3478 test "$no_create" = yes || rm -f gmp-mparam.h 3479 tmp_file=$srcdir/mpn/$gmp_mparam_dir/gmp-mparam.h 3480 if test -f $tmp_file; then 3481 AC_CONFIG_LINKS(gmp-mparam.h:mpn/$gmp_mparam_dir/gmp-mparam.h) 3482 gmp_srclinks="$gmp_srclinks gmp-mparam.h" 3483 gmp_mparam_source=$tmp_file 3484 break 3485 fi 3486done 3487if test -z "$gmp_mparam_source"; then 3488 AC_MSG_ERROR([no version of gmp-mparam.h found in path: $path]) 3489fi 3490 3491# For a helpful message from tune/tuneup.c 3492gmp_mparam_suggest=$gmp_mparam_source 3493if test "$gmp_mparam_dir" = generic; then 3494 for i in $path; do break; done 3495 if test "$i" != generic; then 3496 gmp_mparam_suggest="new file $srcdir/mpn/$i/gmp-mparam.h" 3497 fi 3498fi 3499AC_DEFINE_UNQUOTED(GMP_MPARAM_H_SUGGEST, "$gmp_mparam_source", 3500[The gmp-mparam.h file (a string) the tune program should suggest updating.]) 3501 3502 3503# Copy relevant parameters from gmp-mparam.h to config.m4. 3504# We only do this for parameters that are used by some assembly files. 3505# Fat binaries do this on a per-file basis, so skip in that case. 3506# 3507if test -z "$fat_path"; then 3508 for i in SQR_TOOM2_THRESHOLD BMOD_1_TO_MOD_1_THRESHOLD SHLD_SLOW SHRD_SLOW; do 3509 value=`sed -n 's/^#define '$i'[ ]*\([0-9][0-9]*\).*$/\1/p' $gmp_mparam_source` 3510 if test -n "$value"; then 3511 GMP_DEFINE_RAW(["define(<$i>,<$value>)"]) 3512 fi 3513 done 3514fi 3515 3516 3517# Sizes of some types, needed at preprocessing time. 3518# 3519# FIXME: The assumption that GMP_LIMB_BITS is 8*sizeof(mp_limb_t) might 3520# be slightly rash, but it's true everywhere we know of and ought to be true 3521# of any sensible system. In a generic C build, grepping LONG_BIT out of 3522# <limits.h> might be an alternative, for maximum portability. 3523# 3524AC_CHECK_SIZEOF(void *) 3525AC_CHECK_SIZEOF(unsigned short) 3526AC_CHECK_SIZEOF(unsigned) 3527AC_CHECK_SIZEOF(unsigned long) 3528AC_CHECK_SIZEOF(mp_limb_t, , GMP_INCLUDE_GMP_H) 3529if test "$ac_cv_sizeof_mp_limb_t" = 0; then 3530 AC_MSG_ERROR([Oops, mp_limb_t doesn't seem to work]) 3531fi 3532AC_SUBST(GMP_LIMB_BITS, `expr 8 \* $ac_cv_sizeof_mp_limb_t`) 3533GMP_DEFINE_RAW(["define(<SIZEOF_UNSIGNED>,<$ac_cv_sizeof_unsigned>)"]) 3534 3535# Check compiler limb size matches gmp-mparam.h 3536# 3537# FIXME: Some of the cycle counter objects in the tune directory depend on 3538# the size of ulong, it'd be possible to check that here, though a mismatch 3539# probably wouldn't want to be fatal, none of the libgmp assembler code 3540# depends on ulong. 3541# 3542mparam_bits=[`sed -n 's/^#define GMP_LIMB_BITS[ ][ ]*\([0-9]*\).*$/\1/p' $gmp_mparam_source`] 3543if test -n "$mparam_bits" && test "$mparam_bits" -ne $GMP_LIMB_BITS; then 3544 if test "$test_CFLAGS" = set; then 3545 AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code 3546in this configuration expects $mparam_bits bits. 3547You appear to have set \$CFLAGS, perhaps you also need to tell GMP the 3548intended ABI, see "ABI and ISA" in the manual.]) 3549 else 3550 AC_MSG_ERROR([Oops, mp_limb_t is $GMP_LIMB_BITS bits, but the assembler code 3551in this configuration expects $mparam_bits bits.]) 3552 fi 3553fi 3554 3555GMP_DEFINE_RAW(["define(<GMP_LIMB_BITS>,$GMP_LIMB_BITS)"]) 3556GMP_DEFINE_RAW(["define(<GMP_NAIL_BITS>,$GMP_NAIL_BITS)"]) 3557GMP_DEFINE_RAW(["define(<GMP_NUMB_BITS>,eval(GMP_LIMB_BITS-GMP_NAIL_BITS))"]) 3558 3559 3560AC_SUBST(mpn_objects) 3561AC_SUBST(mpn_objs_in_libgmp) 3562AC_SUBST(gmp_srclinks) 3563 3564 3565# A recompiled sqr_basecase for use in the tune program, if necessary. 3566TUNE_SQR_OBJ= 3567test -d tune || mkdir tune 3568case $sqr_basecase_source in 3569 *.asm) 3570 sqr_max=[`sed -n 's/^def...(SQR_TOOM2_THRESHOLD_MAX, *\([0-9]*\))/\1/p' $sqr_basecase_source`] 3571 if test -n "$sqr_max"; then 3572 TUNE_SQR_OBJ=sqr_asm.o 3573 AC_DEFINE_UNQUOTED(TUNE_SQR_TOOM2_MAX,$sqr_max, 3574 [Maximum size the tune program can test for SQR_TOOM2_THRESHOLD]) 3575 fi 3576 cat >tune/sqr_basecase.c <<EOF 3577/* not sure that an empty file can compile, so put in a dummy */ 3578int sqr_basecase_dummy; 3579EOF 3580 ;; 3581 *.c) 3582 TUNE_SQR_OBJ= 3583 AC_DEFINE(TUNE_SQR_TOOM2_MAX,SQR_TOOM2_MAX_GENERIC) 3584 cat >tune/sqr_basecase.c <<EOF 3585#define TUNE_PROGRAM_BUILD 1 3586#define TUNE_PROGRAM_BUILD_SQR 1 3587#include "mpn/sqr_basecase.c" 3588EOF 3589 ;; 3590esac 3591AC_SUBST(TUNE_SQR_OBJ) 3592 3593 3594# Configs for demos/pexpr.c. 3595# 3596AC_CONFIG_FILES(demos/pexpr-config.h:demos/pexpr-config-h.in) 3597GMP_SUBST_CHECK_FUNCS(clock, cputime, getrusage, gettimeofday, sigaction, sigaltstack, sigstack) 3598GMP_SUBST_CHECK_HEADERS(sys/resource.h) 3599AC_CHECK_TYPES([stack_t], HAVE_STACK_T_01=1, HAVE_STACK_T_01=0, 3600 [#include <signal.h>]) 3601AC_SUBST(HAVE_STACK_T_01) 3602 3603# Configs for demos/calc directory 3604# 3605# AC_SUBST+AC_CONFIG_FILES is used for calc-config.h, rather than AC_DEFINE+ 3606# AC_CONFIG_HEADERS, since with the latter automake (1.8) will then put the 3607# directory (ie. demos/calc) into $(DEFAULT_INCLUDES) for every Makefile.in, 3608# which would look very strange. 3609# 3610# -lcurses is required by libreadline. On a typical SVR4 style system this 3611# normally doesn't have to be given explicitly, since libreadline.so will 3612# have a NEEDED record for it. But if someone for some reason is using only 3613# a static libreadline.a then we must give -lcurses. Readline (as of 3614# version 4.3) doesn't use libtool, so we can't rely on a .la to cover 3615# necessary dependencies. 3616# 3617# On a couple of systems we've seen libreadline available, but the headers 3618# not in the default include path, so check for readline/readline.h. We've 3619# also seen readline/history.h missing, not sure if that's just a broken 3620# install or a very old version, but check that too. 3621# 3622AC_CONFIG_FILES(demos/calc/calc-config.h:demos/calc/calc-config-h.in) 3623LIBCURSES= 3624if test $with_readline != no; then 3625 AC_CHECK_LIB(ncurses, tputs, [LIBCURSES=-lncurses], 3626 [AC_CHECK_LIB(curses, tputs, [LIBCURSES=-lcurses])]) 3627fi 3628AC_SUBST(LIBCURSES) 3629use_readline=$with_readline 3630if test $with_readline = detect; then 3631 use_readline=no 3632 AC_CHECK_LIB(readline, readline, 3633 [AC_CHECK_HEADER(readline/readline.h, 3634 [AC_CHECK_HEADER(readline/history.h, use_readline=yes)])], 3635 , $LIBCURSES) 3636 AC_MSG_CHECKING(readline detected) 3637 AC_MSG_RESULT($use_readline) 3638fi 3639if test $use_readline = yes; then 3640 AC_SUBST(WITH_READLINE_01, 1) 3641 AC_SUBST(LIBREADLINE, -lreadline) 3642else 3643 WITH_READLINE_01=0 3644fi 3645AC_PROG_YACC 3646AM_PROG_LEX 3647 3648# Configs for demos/expr directory 3649# 3650# Libtool already runs an AC_CHECK_TOOL for ranlib, but we give 3651# AC_PROG_RANLIB anyway since automake is supposed to complain if it's not 3652# called. (Automake 1.8.4 doesn't, at least not when the only library is in 3653# an EXTRA_LIBRARIES.) 3654# 3655AC_PROG_RANLIB 3656 3657 3658# Create config.m4. 3659GMP_FINISH 3660 3661# Create Makefiles 3662# FIXME: Upcoming version of autoconf/automake may not like broken lines. 3663# Right now automake isn't accepting the new AC_CONFIG_FILES scheme. 3664 3665AC_OUTPUT(Makefile \ 3666 mpf/Makefile mpn/Makefile mpq/Makefile \ 3667 mpz/Makefile printf/Makefile scanf/Makefile rand/Makefile cxx/Makefile \ 3668 tests/Makefile tests/devel/Makefile \ 3669 tests/mpf/Makefile tests/mpn/Makefile tests/mpq/Makefile \ 3670 tests/mpz/Makefile tests/rand/Makefile tests/misc/Makefile \ 3671 tests/cxx/Makefile \ 3672 doc/Makefile tune/Makefile \ 3673 demos/Makefile demos/calc/Makefile demos/expr/Makefile \ 3674 gmp.h:gmp-h.in) 3675 3676AC_MSG_NOTICE([summary of build options: 3677 3678 Version: ${PACKAGE_STRING} 3679 Host type: ${host} 3680 ABI: ${ABI} 3681 Install prefix: ${prefix} 3682 Compiler: ${CC} 3683 Static libraries: ${enable_static} 3684 Shared libraries: ${enable_shared} 3685]) 3686 3687if test x$cross_compiling = xyes ; then 3688 case "$host" in 3689 *-*-mingw* | *-*-cygwin) 3690 if test x$ABI = x64 ; then 3691 AC_MSG_NOTICE([If wine64 is installed, use make check TESTS_ENVIRONMENT=wine64.]) 3692 else 3693 AC_MSG_NOTICE([If wine is installed, use make check TESTS_ENVIRONMENT=wine.]) 3694 fi 3695 ;; 3696 esac 3697fi 3698