Copyright 2008 William Hart This file is part of the MPIR Library. The MPIR library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The MPIR Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the MPIR Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -define MPIR_COPYRIGHT to GPL text -Initialise autotools -Various command line options to configure, including: --enable-assert enables asserts --enable_alloca use alloca for memory allocation --enable-cxx want c++ headers --enable-fft want FFT for large integer multiplication --enable-mpbsd enable berkeley mp functions --enable-nails enable nails --enable-profiling enable profiling (prof, gprof or instrumentation) set fomit_frame_pointer to -fomit-frame-pointer unless profiling is gprof --with-readline (mainly for readline support in calc demo) --enable-fat build a fat binary -set tmp_host to $host_cpu with .'s replaced by _'s -#undef all the HAVE_HOST_CPU possibilities (that will be tested) -set cclist to "gcc cc" -set gcc-cflags and gcc_64_cflags to -O3 -set cc-cflags and cc_64_cflags to -O -set cyclecounter_size 2 -substitute HAVE_HOST_CPU_FAMILY_power and HAVE_HOST_CPU_FAMILY_powerpc with 0 -go through each architecture and set things like: X86_PATTERN | athlon64-*-* | core2-*-* | x86_64-*-*) -abilist 32 -cclist gcc icc cc -gcc_cflags -O2 $fomit_frame_pointer -gcc_32_cflags_maybe -m32 icc_cflags -no-gcc icc_cflags_optlist opt icc_cflags_opt -O3 -O2 -O1 any_32_testlist sizeof-long-4 CALLING_CONVENTIONS_OBJS x86call.lo c86check$U.lo SPEED_CYCLECOUNTER_OBJ pentium.lo -set gcc_cflags_cpu and gcc_cflags_arch for each of $host_cpu in i386*, i486*, i586, pentiummmx, i686, pentiumpro, pentium2, pentium3, k6, k62, k63, athlon, i787, pentium4, viac32, viac3*, athlon64, core2, x86_64 (default to i486 options) -set path to correct mpn directory according to type processor -override the settings above if a fat binary was selected (path becomes x86/fat) - for $host_cpu in athlon64, core2, pentium4, x86_64 (i.e. 64 bit machines) set 64 bit only options cclist_64 gcc gcc_64_cflags -O2 -m64 gcc_64_cflags_optlist cpu CALLING_CONVENTIONS_OBJS_6 amd64call.lo amd64check$U.lo SPEED_CYCLECOUNTER_OBJ_64 x86_64.lo cyclecounter_size_64 2 abilist 64 32 path x86_64 / x86_64/pentium4 / x86_64/core2 on pentium4 only gcc is available for cclist_64 -set options for none-*-* for generic C only -if $host in *-*-mingw set gcc_cflags_optlist gcc_cflags_nocygwin appropriately -write a file(?) AC_FD_CC with User options ABI, CC, CFLAGS, CPPFLAGS, MPN_PATH and GMP: abilist, cclist -test that the CFLAGS work -set abi_last to the last thing in abilist -set ABI to the ABI the user specified if it is a valid option -set abi1, abi2 to the different possibilities -set cclist_chosen to the right cclist for this abi and default to what the user specified if they specified one -set up the CC and CFLAGS and check it works -check if longlong works for a limb if we are supposed to be using it -do various test on the CC (not relevant to x86) -exclude various bad compilers and operating systems that don't save XMM registers properly -#define HAVE_ABI_32 or 64 according to the ABI -set extra_functions according to ABI -set SPEED_CYCLECOUNTER_OBJ and cyclecounter_size according to ABI -if SPEED_CYCLECOUNTER_OBJ is defined #define HAVE_SPEED_CYCLECOUNTER to cyclecounter_size -set CALLING_CONVENTIONS_OBJS according to ABI -if CALLING_CONVENTIONS_OBJS is defined #define #HAVE_CALLING_CONVENTIONS 1 -choose MPN_PATH according to ABI or use the user defined path -if limbchosen is longlong then DEFN_LONG_LONG_LIMB is set to #define _LONG_LONG_LIMB 1 else to #undef _LONG_LONG_LIMB -run the standard autoconf things for CC, etc -GMP_H_ANSI puts C compiler into ANSI mode if possible -various GMP macros which check whether CC, CPP work for build, PROG_EXTEXT works for build (??), whether ANSI C works, whether LIBM is available for build -the assembler is invoked via CC or we use yasm for .as files -check CPP compiler works and set WANT_CXX if C++ is wanted -some path setups for the Cray -if asked for a NAILS build add the nails directory to path -if there is any sse2 or mmx in the path, remove it if the assembler doesn't support it -update the file AC_FD_CC with: ABI, CC, CFLAGS, CPPFLAGS, GMP_LDFLAGS, CXX, CXXFLAGS, path -configuration for windows dlls -enable CXX in libtool only if we want it, by setting with_tags appropriately -error if trying to build static and shared libraries at the same time when $libname.a is in $library_names_spec -check for a whole load of system specific header files, like float.h, sys/time.h, etc -check various C functions are available -check various types are available -AC_C_STRINGIZE -AC_C_VOLATILE -AC_C_RESTRICT -GMP_C_STDARG -GMP_C_ATTRIBUTE_CONST -GMP_C_ATTRIBUTE_MALLOC -GMP_C_ATTRIBUTE_MODE -GMP_C_ATTRIBUTE_NORETURN -GMP_H_EXTERN_INLINE -These various macros above set various things that end up being substituted into files, e.g. all instances of _extern_inline_ get replaced with something like inline where they occur in header files, etc. -AC_CHECK_LIBM -AC_SUBST(LIBM) -GMP_FUNC_ALLOCA -GMP_OPTION_ALLOCA -GMP_H_HAVE_FILE -AC_C_BIGENDIAN sets HAVE_LIMB_BIG_ENDIAN or HAVE_LIMB_LITTLE_ENDIAN -GMP_C_DOUBLE_FORMAT -check for a pile of functions known to be missing in certain configurations -enable C++ tests when required -create symlinks to the required assembly files in path and link them to mpn/ -take care of functions that can be provided by multifunction files, e.g. aorsmul_1 -define possible mpn suffixes to S s c as -GMP_FILE_TO_FUNCTION associates the various mpn functions to actual files -pile of setups for fat binaries -for each mpn suffix, set tmp_ext to no -for each gmp_mpn_function do: GMP_MULFUNC_CHOICES find the appropriate file check if it supports the nails specified add the appropriate object file name to mpn_objects and mpn_objs_in_libgmp AC_CONFIG_LINKS add the filename to gmp_srclinks define the right HAVE_NATIVE_fn's deal with sqr_basecase if found -set up autoheader stuff to undef all the HAVE_NATIVE_* -if assembler is going to be needed, check for M4, or use yasm -the following macros are for ASM syntax checking and for various macros defined for .asm assembly files the macros are defined in acinclude.m4: GMP_ASM_TEXT GMP_ASM_DATA GMP_ASM_LABEL_SUFFIX GMP_ASM_GLOBL - global symbol prefix GMP_ASM_GLOBL_ATTR GMP_ASM_UNDERSCORE GMP_ASM_RODATA GMP_ASM_TYPE GMP_ASM_SIZE GMP_ASM_LSYM_PREFIX - local symbol prefix GMP_ASM_W32 GMP_ASM_ALIGN_LOG - whether alignment is logarithmic -include various m4 files and do various assembly defines per host cpu -create a link to the appropriate gmp-mparam.h file and set gmp_mparam_source and gmp_srclinks appropriately -copy SQR_KARATSUBA_THRESHOLD into config.m4 -check size of some types, e.g. unsigned short, and appropriately define BITS_PER_MP_LIMB and SIZEOF_UNSIGNED -check compiler limb size matches gmp-mparam.h -define GMP_LIMB_BITS, GMP_NAIL_BITS and GMP_NUMB_BITS -exclude the mpn random functions from mpbsd -make the file tune/sqr_basecase.c if needed according to whether sqr_basecase is an assembly or C file -various configurations for the demo programs -GMP_FINISH creates config.m4 -create makefiles from the Makefile.in's