/* doc/configuration (in Emacs -*-outline-*- format). */ * How to add a new file ** A file in the `mpn' subdirectory The way we build libmpn (in the `mpn' subdirectory) is quite special. There is (currently) only one ``generic'' file, one that is truly target independent. That is `mp_bases.c'. All other files are kept in subdirectories of `mpn' with the subdirectory names indicating the target processor. For example, in the `alpha' subdirectory, code specific to the Alpha processor is found. When running `configure', a bunch of symbolic links are made in the `mpn' subdirectory. If the the build host doesn't support symlinks then either hard links or copying is used. 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, possibly with more than one entry point. ii) Multi-function files that generate one of a set of functions according to build options. When adding a new implementation of an existing function, i) Put it in the appropriate mpn subdirectory. It'll be detected and used. ii) If it's a .asm or .S, be sure to have a PROLOGUE(func) entry point since configure greps for that to set up the HAVE_NATIVE_func defines in config.h. When adding 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, then MULFUNC_PROLOGUE isn't necessary (but this is usually not the case). When adding a new style of multi-function file, in addition do the following, i) Add to the "case" statement in configure.in which lists each multi-function filename and what function files it can provide. When adding a completely new mpn function file, do the following, i) 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. add_n) 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 will generally look for the target, but HAVE_NATIVE_func can be used if desired. ii) If you want `HAVE_NATIVE_func' defined in config.h, add `#undef HAVE_NATIVE_func' to acconfig.h. iii) If the function can be provided by a multi-function file, then follow the directions above for them too. ** Add a file in any other directory When adding a top-level file, i) Add it to libgmp_la_SOURCES in Makefile.am. ii) If libmp.la needs it, then add it to libmp_la_SOURCES too. When adding an mpz file, i) Add file.c to libmpz_la_SOURCES in mpz/Makefile.am. ii) Add mpz/file.lo to MPZ_OBJECTS in the top-level Makefile.am. If a multi-function mpz file is being added, i) In mpz/Makefile.am, a) Add the file to EXTRA_DIST. b) Add rules copying the file at build time to duplicates with appropriate names. c) Add each such func.c to nodist_libmpz_la_SOURCES. ii) Add each c) above also as mpz/func.lo in MPZ_OBJECTS in the top-level Makefile.am. iii) In the multi-function file, expect a preprocessor symbol OPERATION_func to indicate what form is being compiled. The same applies to mpf and mpq (except that multi-function support doesn't exist in mpq/Makefile.am at the moment). See mpz/mul_siui.c or mpf/integer.c for example multi-function files. * Selecting compiler and its flags by hand Specifying CC on the configure command line, will result in a default set of compiler flags, CFLAGS; `-g' for all compilers plus `-O2' for gcc. Specify CFLAGS to set better flags. Example $ configure CC=my-gcc will give CFLAGS = -g -O2 Specifying CC on the configure command line will make configure believe it's a 32-bit compiler and not choose a source path with 64-bit assembly code. Specify CC64 as well as CC to make configure pick 64-bit assembly code. $ configure CC=my64bit-cc CC64=my64bit-cc CFLAGS="-my -flags" * The configure system ** What we use We use the tools in . ** How to install new versions of Autoconf / Automake / Libtool *** Build Libtool With a fresh CVS checkout, run the bootstrap script with released versions (not CVS versions) of Autoconf and Automake in PATH. *** Update gmp directory gmp$ rm ltconfig ltmain.sh gmp$ libtoolize --copy gmp$ automake --add-missing --copy ** How it works During development: Input files Tool Output files ------------------------------------------ aclocal acinclude.m4 --------------> aclocal.m4 autoconf configure.in \ -------------> configure aclocal.m4 / automake Makefile.am \ -------------> Makefile.in configure.in / autoheader configure.in \ -------------> config.in acconfig.h / At build time: Input files Tool Output files ------------------------------------------ configure Makefile.in \ -------------> / Makefile config.in / | config.h \ config.m4 /* eof doc/configuration */