Index: gcc/gmp/doc/configuration |
diff --git a/gcc/gmp/doc/configuration b/gcc/gmp/doc/configuration |
deleted file mode 100644 |
index fbd3b960d2d21675af238c6cac455a175954ca61..0000000000000000000000000000000000000000 |
--- a/gcc/gmp/doc/configuration |
+++ /dev/null |
@@ -1,434 +0,0 @@ |
-/* doc/configuration (in Emacs -*-outline-*- format). */ |
- |
-Copyright 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. |
- |
-This file is part of the GNU MP Library. |
- |
-The GNU MP Library is free software; you can redistribute it and/or modify |
-it under the terms of the GNU Lesser General Public License as published by |
-the Free Software Foundation; either version 3 of the License, or (at your |
-option) any later version. |
- |
-The GNU MP Library is distributed in the hope that it will be useful, but |
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public |
-License for more details. |
- |
-You should have received a copy of the GNU Lesser General Public License |
-along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. |
- |
- |
- |
-* Adding a new file |
- |
-** Adding a top-level file |
- |
- i) Add it to libgmp_la_SOURCES in Makefile.am. |
- |
- ii) If libmp.la needs it (usually doesn't), then add it to |
- libmp_la_SOURCES too. |
- |
-** Adding a subdirectory file |
- |
-For instance for mpz, |
- |
- i) Add file.c to libmpz_la_SOURCES in mpz/Makefile.am. |
- |
- ii) Add mpz/file$U.lo to MPZ_OBJECTS in the top-level Makefile.am |
- |
- iii) If for some reason libmp.la needs it (usually doesn't) then add |
- mpz/file$U.lo to libmp_la_DEPENDENCIES in the top-level |
- Makefile.am too. |
- |
-The same applies to mpf, mpq, scanf and printf. |
- |
-** Adding an mpn file |
- |
-The way we build libmpn (in the `mpn' subdirectory) is quite special. |
- |
-Currently only mpn/mp_bases.c is truely generic and included in every |
-configuration. All other files are linked at build time into the mpn |
-build directory from one of the CPU specific sub-directories, or from |
-the mpn/generic directory. |
- |
-There are four types of mpn source files. |
- |
- .asm Assembly code preprocessed with m4 |
- .S Assembly code preprocessed with cpp |
- .s Assembly code not preprocessed at all |
- .c C code |
- |
-There are two types of .asm files. |
- |
- i) ``Normal'' files containing one function, though possibly with |
- more than one entry point. |
- |
- ii) Multi-function files that generate one of a set of functions |
- according to build options. |
- |
-To add a new implementation of an existing function, |
- |
- i) Put it in the appropriate CPU-specific mpn subdirectory, it'll be |
- detected and used. |
- |
- ii) Any entrypoints tested by HAVE_NATIVE_func in other code must |
- have PROLOGUE(func) for configure to grep. This is normal for |
- .asm or .S files, but for .c files a dummy comment like the |
- following will be needed. |
- |
- /* |
- PROLOGUE(func) |
- */ |
- |
-To add a new implementation using a multi-function file, in addition |
-do the following, |
- |
- i) Use a MULFUNC_PROLOGUE(func1 func2 ...) in the .asm, declaring |
- all the functions implemented, including carry-in variants. |
- |
- If there's a separate PROLOGUE(func) for each possible function |
- (but this is usually not the case), then MULFUNC_PROLOGUE isn't |
- necessary. |
- |
-To add a new style of multi-function file, in addition do the |
-following, |
- |
- i) Add to the GMP_MULFUNC_CHOICES "case" statement in configure.in |
- which lists each multi-function filename and what function files |
- it can provide. |
- |
-To add a completely new mpn function file, do the following, |
- |
- i) Ensure the filename is a valid C identifier, due to the |
- -DOPERATION_$* used to support multi-function files. This means |
- "-" can't be used (but "_" can). |
- |
- ii) Add it to configure.in under one of the following |
- |
- a) `gmp_mpn_functions' if it exists for every target. This |
- means there must be a C version in mpn/generic. (Eg. mul_1) |
- |
- b) `gmp_mpn_functions_optional' if it's a standard function, but |
- doesn't need to exist for every target. Code wanting to use |
- this will test HAVE_NATIVE_func to see if it's available. |
- (Eg. copyi) |
- |
- c) `extra_functions' for some targets, if it's a special |
- function that only ever needs to exist for certain targets. |
- Code wanting to use it can test either HAVE_NATIVE_func or |
- HAVE_HOST_CPU_foo, as desired. |
- |
- iii) If HAVE_NATIVE_func is going to be used, then add a #undef to |
- the AH_VERBATIM([HAVE_NATIVE] block in configure.in. |
- |
- iv) Add file.c to nodist_libdummy_la_SOURCES in mpn/Makefile.am (in |
- order to get an ansi2knr rule). If the file is only in |
- assembler then this step is unnecessary, but do it anyway so as |
- not to forget if later a .c version is added. |
- |
- v) If the function can be provided by a multi-function file, then |
- add to the "case" statement in configure.in which lists each |
- multi-function filename and what function files it can provide. |
- |
- |
-** Adding a test program |
- |
- i) Tests to be run early in the testing can be added to the main |
- "tests" sub-directory. |
- |
- ii) Tests for mpn, mpz, mpq and mpf can be added under the |
- corresponding tests subdirectory. |
- |
- iii) Generic tests for late in the testing can be added to |
- "tests/misc". printf and scanf tests currently live there too. |
- |
- iv) Random number function tests can be added to "tests/rand". That |
- directory has some development-time programs too. |
- |
- v) C++ test programs can be added to "tests/cxx". A line like the |
- following must be added for each, since by default automake looks |
- for a .c file. |
- |
- t_foo_SOURCES = t-foo.cc |
- |
-In all cases the name of the program should be added to check_PROGRAMS |
-in the Makefile.am. TESTS is equal to check_PROGRAMS, so all those |
-programs get run. |
- |
-"tests/devel" has a number of programs which are only for development |
-purposes and are not for use in "make check". These should be listed |
-in EXTRA_PROGRAMS to get Makefile rules created, but they're never |
-built or run unless an explicit "make someprog" is used. |
- |
-** Macos directory |
- |
-The macos/configure script will automatically pick up additions to |
-gmp_mpn_functions, MPZ_OBJECTS, etc, but currently test programs need |
-to be added to Makefile.in manually. |
- |
-When modifying the top-level configure.in ensure that it doesn't upset |
-the macos/configure script heuristics. |
- |
-Unfortunately there's no way to test this stuff without getting an |
-actual MacOS 9 system. |
- |
- |
-* Adding a new CPU |
- |
-In general it's policy to use proper names for each CPU type |
-supported. If two CPUs are quite similar and perhaps don't have any |
-actual differences in GMP then they're still given separate names, for |
-example alphaev67 and alphaev68. |
- |
-Canonical names: |
- |
- i) Decide the canonical CPU names GMP will accept. |
- |
- ii) Add these to the config.sub wrapper if configfsf.sub doesn't |
- already accept them. |
- |
- iii) Document the names in gmp.texi. |
- |
-Aliases (optional): |
- |
- i) Any aliases can be added to the config.sub wrapper, unless |
- configfsf.sub already does the right thing with them. |
- |
- ii) Leave configure.in and everywhere else using only the canonical |
- names. Aliases shouldn't appear anywhere except config.sub. |
- |
- iii) Document in gmp.texi, if desired. Usually this isn't a good |
- idea, better encourage users to know just the canonical |
- names. |
- |
-Configure: |
- |
- i) Add patterns to configure.in for the new CPU names. Include the |
- following (see configure.in for the variables to set up), |
- |
- a) ABI choices (if any). |
- b) Compiler choices. |
- c) mpn path for CPU specific code. |
- d) Good default CFLAGS for each likely compiler. |
- d) Any special tests necessary on the compiler or assembler |
- capabilities. |
- |
- ii) M4 macros to be shared by asm files in a CPU family are by |
- convention in a foo-defs.m4 like mpn/x86/x86-defs.m4. They're |
- likely to use settings from config.m4 generated by configure. |
- |
-Fat binaries: |
- |
- i) In configure.in, add CPU specific directory(s) to fat_path. |
- |
- ii) In mpn/<cpu>/fat.c, identify the CPU at runtime and use suitable |
- CPUVEC_SETUP_subdir macros to select the function pointers for it. |
- |
- iii) For the x86s, add to the "$tmp_prefix" setups in configure.in |
- which abbreviates subdirectory names to fit an 8.3 filesystem. |
- (No need to restrict to 8.3, just ensure uniqueness when |
- truncated.) |
- |
- |
-* The configure system |
- |
-** Installing tools |
- |
-The current versions of automake, autoconf and libtool in use can be |
-checked in the ChangeLog. Look for "Update to ...". Patches may have |
-been applied, look for "Regenerate ...". |
- |
-The GMP build system is in places somewhat dependent on the internals |
-of the build tools. Obviously that's avoided as much as possible, but |
-where it can't it creates a problem when upgrading or attempting to |
-use different tools versions. |
- |
-** Updating gmp |
- |
-The following files need to be updated when going to a new version of |
-the build tools. Unfortunately the tools generally don't identify |
-when an out-of-date version is present. |
- |
-aclocal.m4 is updated by running "aclocal". (Only needed for a new |
-automake or libtool.) |
- |
-INSTALL.autoconf can be copied from INSTALL in autoconf. |
- |
-ltmain.sh comes from libtool. Remove it and run "libtoolize --copy", |
-or just copy the file by hand. |
- |
-ansi2knr.c, ansi2knr.1, install-sh and doc/mdate-sh come from automake |
-and can be updated by copying or by removing and running "automake |
---add-missing --copy". |
- |
-texinfo.tex can be updated from ftp.gnu.org. Check it still works |
-with "make gmp.dvi", "make gmp.ps" and "make gmp.pdf". |
- |
-configfsf.guess and configfsf.sub can be updated from ftp.gnu.org (or |
-from the "config" cvs module at subversions.gnu.org). The gmp |
-config.guess and config.sub wrappers are supposed to make such an |
-update fairly painless. |
- |
-depcomp from automake is not needed because configure.in specifies |
-automake with "no-dependencies". |
- |
-** How it works |
- |
-During development: |
- |
- Input files Tool Output files |
- --------------------------------------------------------- |
- |
- aclocal |
- $prefix/share/aclocal*/*.m4 ----------------> aclocal.m4 |
- |
- |
- configure.in \ autoconf |
- aclocal.m4 / -----------------------------> configure |
- |
- |
- */Makefile.am \ automake |
- configure.in | ----------------------------> Makefile.in |
- aclocal.m4 / |
- |
- configure.in \ autoheader |
- aclocal.m4 / -----------------------------> config.in |
- |
-At build time: |
- |
- Input files Tool Output files |
- -------------------------------------------- |
- |
- */Makefile.in \ configure / */Makefile |
- config.in | -------------> | config.h |
- gmp-h.in | | config.m4 |
- mp-h.in / | gmp.h |
- | mp.h |
- \ fat.h (fat binary build only) |
- |
-When configured with --enable-maintainer-mode the Makefiles include |
-rules to re-run the necessary tools if the input files are changed. |
-This can end up running a lot more things than are really necessary. |
- |
-If a build tree is in too much of a mess for those rules to work |
-properly then a bootstrap can be done from the source directory with |
- |
- aclocal |
- autoconf |
- automake |
- autoheader |
- |
-The autom4te.cache directory is created by autoconf to save some work |
-in subsequent automake or autoheader runs. It's recreated |
-automatically if removed, it doesn't get distributed. |
- |
-** C++ configuration |
- |
-It's intended that the contents of libgmp.la won't vary according to |
-whether --enable-cxx is selected. This means that if C++ shared |
-libraries don't work properly then a shared+static with --disable-cxx |
-can be done for the C parts, then a static-only with --enable-cxx to |
-get libgmpxx. |
- |
-libgmpxx.la uses some internals from libgmp.la, in order to share code |
-between C and C++. It's intended that libgmpxx can only be expected |
-to work with libgmp from the same version of GMP. If some of the |
-shared internals change their interface, then it's proposed to rename |
-them, for instance __gmp_doprint2 or the like, so as to provoke link |
-errors rather than mysterious failures from a mismatch. |
- |
-* Development setups |
- |
-** General |
- |
---disable-shared will make builds go much faster, though of course |
-shared or shared+static should be tested too. |
- |
---enable-mpbsd grabs various bits of mpz, which might need to be |
-adjusted if things in those routines are changed. Building mpbsd all |
-the time doesn't cost much. |
- |
---prefix to a dummy directory followed by "make install" will show |
-what's installed. |
- |
-"make check" acts on the libgmp just built, and will ignore any other |
-/usr/lib/libgmp, or at least it should do. Libtool does various hairy |
-things to ensure it hits the just-built library. |
- |
-** Long long limb testing |
- |
-On systems where gcc supports long long, but a limb is normally just a |
-long, the following can be used to force long long for testing |
-purposes. It will probably run quite slowly. |
- |
- ./configure --host=none ABI=longlong |
- |
-** Function argument conversions |
- |
-When using gcc, configuring with something like |
- |
- ./configure CFLAGS="-g -Wall -Wconversion -Wno-sign-compare" |
- |
-can show where function parameters are being converted due to having |
-function prototypes available, which won't happen in a K&R compiler. |
-Doing this in combination with the long long limb setups above is |
-good. |
- |
-Conversions between int and long aren't warned about by gcc when |
-they're the same size, which is unfortunate because casts should be |
-used in such cases, for the benefit of K&R compilers with int!=long |
-and where the difference matters in function calls. |
- |
-** K&R support |
- |
-Function definitions must be in the GNU stylized form to work. See |
-the ansi2knr.1 man page (included in the GMP sources). |
- |
-__GMP_PROTO is used for function prototypes, other ANSI / K&R |
-differences are conditionalized in various places. |
- |
-Proper testing of the K&R support requires a compiler which gives an |
-error for ANSI-isms. Configuring with --host=none is a good idea, to |
-test all the generic C code. |
- |
-When using an ANSI compiler, the ansi2knr setups can be partially |
-tested with |
- |
- ./configure am_cv_prog_cc_stdc=no ac_cv_prog_cc_stdc=no |
- |
-This will test the use of $U and the like in the makefiles, but not |
-much else. |
- |
-Forcing the cache variables can be used with a compiler like HP C |
-which is K&R by default but to which configure normally adds ANSI mode |
-flags. This then should be a good full K&R test. |
- |
-* Other Notes |
- |
-** Compatibility |
- |
-compat.c is the home of functions retained for binary compatibility, |
- but now done by other means (like a macro). |
- |
-struct __mpz_struct etc - this must be retained for C++ compatibility. |
- C++ applications defining functions taking mpz_t etc parameters |
- will get this in the mangled name because C++ "sees though" the |
- typedef mpz_t to the underlying struct. |
- |
- Incidentally, this probably means for C++ that our mp.h is not |
- compatible with an original BSD mp.h, since we use struct |
- __mpz_struct for MINT in ours. Maybe we could change to whatever |
- the original did, but it seems unlikely anyone would be using C++ |
- with mp.h. |
- |
-__gmpn - note that glibc defines some __mpn symbols, old versions of |
- some mpn routines, which it uses for floating point printfs. |
- |
- |
- |
- |
-Local variables: |
-mode: outline |
-fill-column: 70 |
-End: |
-/* eof doc/configuration */ |