github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/doc/configuration (about) 1 /* doc/configuration (in Emacs -*-outline-*- format). */ 2 3 Copyright 2000-2004 Free Software Foundation, Inc. 4 5 This file is part of the GNU MP Library. 6 7 The GNU MP Library is free software; you can redistribute it and/or modify 8 it under the terms of either: 9 10 * the GNU Lesser General Public License as published by the Free 11 Software Foundation; either version 3 of the License, or (at your 12 option) any later version. 13 14 or 15 16 * the GNU General Public License as published by the Free Software 17 Foundation; either version 2 of the License, or (at your option) any 18 later version. 19 20 or both in parallel, as here. 21 22 The GNU MP Library is distributed in the hope that it will be useful, but 23 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 24 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 25 for more details. 26 27 You should have received copies of the GNU General Public License and the 28 GNU Lesser General Public License along with the GNU MP Library. If not, 29 see https://www.gnu.org/licenses/. 30 31 32 33 * Adding a new file 34 35 ** Adding a top-level file 36 37 i) Add it to libgmp_la_SOURCES in Makefile.am. 38 39 ii) If libmp.la needs it (usually doesn't), then add it to 40 libmp_la_SOURCES too. 41 42 ** Adding a subdirectory file 43 44 For instance for mpz, 45 46 i) Add file.c to libmpz_la_SOURCES in mpz/Makefile.am. 47 48 ii) Add mpz/file$U.lo to MPZ_OBJECTS in the top-level Makefile.am 49 50 iii) If for some reason libmp.la needs it (usually doesn't) then add 51 mpz/file$U.lo to libmp_la_DEPENDENCIES in the top-level 52 Makefile.am too. 53 54 The same applies to mpf, mpq, scanf and printf. 55 56 ** Adding an mpn file 57 58 The way we build libmpn (in the `mpn' subdirectory) is quite special. 59 60 Currently only mpn/mp_bases.c is truly generic and included in every 61 configuration. All other files are linked at build time into the mpn 62 build directory from one of the CPU specific sub-directories, or from 63 the mpn/generic directory. 64 65 There are four types of mpn source files. 66 67 .asm Assembly code preprocessed with m4 68 .S Assembly code preprocessed with cpp 69 .s Assembly code not preprocessed at all 70 .c C code 71 72 There are two types of .asm files. 73 74 i) ``Normal'' files containing one function, though possibly with 75 more than one entry point. 76 77 ii) Multi-function files that generate one of a set of functions 78 according to build options. 79 80 To add a new implementation of an existing function, 81 82 i) Put it in the appropriate CPU-specific mpn subdirectory, it'll be 83 detected and used. 84 85 ii) Any entrypoints tested by HAVE_NATIVE_func in other code must 86 have PROLOGUE(func) for configure to grep. This is normal for 87 .asm or .S files, but for .c files a dummy comment like the 88 following will be needed. 89 90 /* 91 PROLOGUE(func) 92 */ 93 94 To add a new implementation using a multi-function file, in addition 95 do the following, 96 97 i) Use a MULFUNC_PROLOGUE(func1 func2 ...) in the .asm, declaring 98 all the functions implemented, including carry-in variants. 99 100 If there's a separate PROLOGUE(func) for each possible function 101 (but this is usually not the case), then MULFUNC_PROLOGUE isn't 102 necessary. 103 104 To add a new style of multi-function file, in addition do the 105 following, 106 107 i) Add to the GMP_MULFUNC_CHOICES "case" statement in configure.in 108 which lists each multi-function filename and what function files 109 it can provide. 110 111 To add a completely new mpn function file, do the following, 112 113 i) Ensure the filename is a valid C identifier, due to the 114 -DOPERATION_$* used to support multi-function files. This means 115 "-" can't be used (but "_" can). 116 117 ii) Add it to configure.in under one of the following 118 119 a) `gmp_mpn_functions' if it exists for every target. This 120 means there must be a C version in mpn/generic. (Eg. mul_1) 121 122 b) `gmp_mpn_functions_optional' if it's a standard function, but 123 doesn't need to exist for every target. Code wanting to use 124 this will test HAVE_NATIVE_func to see if it's available. 125 (Eg. copyi) 126 127 c) `extra_functions' for some targets, if it's a special 128 function that only ever needs to exist for certain targets. 129 Code wanting to use it can test either HAVE_NATIVE_func or 130 HAVE_HOST_CPU_foo, as desired. 131 132 iii) If HAVE_NATIVE_func is going to be used, then add a #undef to 133 the AH_VERBATIM([HAVE_NATIVE] block in configure.in. 134 135 iv) If the function can be provided by a multi-function file, then 136 add to the "case" statement in configure.in which lists each 137 multi-function filename and what function files it can provide. 138 139 140 ** Adding a test program 141 142 i) Tests to be run early in the testing can be added to the main 143 "tests" sub-directory. 144 145 ii) Tests for mpn, mpz, mpq and mpf can be added under the 146 corresponding tests subdirectory. 147 148 iii) Generic tests for late in the testing can be added to 149 "tests/misc". printf and scanf tests currently live there too. 150 151 iv) Random number function tests can be added to "tests/rand". That 152 directory has some development-time programs too. 153 154 v) C++ test programs can be added to "tests/cxx". A line like the 155 following must be added for each, since by default automake looks 156 for a .c file. 157 158 t_foo_SOURCES = t-foo.cc 159 160 In all cases the name of the program should be added to check_PROGRAMS 161 in the Makefile.am. TESTS is equal to check_PROGRAMS, so all those 162 programs get run. 163 164 "tests/devel" has a number of programs which are only for development 165 purposes and are not for use in "make check". These should be listed 166 in EXTRA_PROGRAMS to get Makefile rules created, but they're never 167 built or run unless an explicit "make someprog" is used. 168 169 170 * Adding a new CPU 171 172 In general it's policy to use proper names for each CPU type 173 supported. If two CPUs are quite similar and perhaps don't have any 174 actual differences in GMP then they're still given separate names, for 175 example alphaev67 and alphaev68. 176 177 Canonical names: 178 179 i) Decide the canonical CPU names GMP will accept. 180 181 ii) Add these to the config.sub wrapper if configfsf.sub doesn't 182 already accept them. 183 184 iii) Document the names in gmp.texi. 185 186 Aliases (optional): 187 188 i) Any aliases can be added to the config.sub wrapper, unless 189 configfsf.sub already does the right thing with them. 190 191 ii) Leave configure.in and everywhere else using only the canonical 192 names. Aliases shouldn't appear anywhere except config.sub. 193 194 iii) Document in gmp.texi, if desired. Usually this isn't a good 195 idea, better encourage users to know just the canonical 196 names. 197 198 Configure: 199 200 i) Add patterns to configure.in for the new CPU names. Include the 201 following (see configure.in for the variables to set up), 202 203 a) ABI choices (if any). 204 b) Compiler choices. 205 c) mpn path for CPU specific code. 206 d) Good default CFLAGS for each likely compiler. 207 d) Any special tests necessary on the compiler or assembler 208 capabilities. 209 210 ii) M4 macros to be shared by asm files in a CPU family are by 211 convention in a foo-defs.m4 like mpn/x86/x86-defs.m4. They're 212 likely to use settings from config.m4 generated by configure. 213 214 Fat binaries: 215 216 i) In configure.in, add CPU specific directory(s) to fat_path. 217 218 ii) In mpn/<cpu>/fat.c, identify the CPU at runtime and use suitable 219 CPUVEC_SETUP_subdir macros to select the function pointers for it. 220 221 iii) For the x86s, add to the "$tmp_prefix" setups in configure.in 222 which abbreviates subdirectory names to fit an 8.3 filesystem. 223 (No need to restrict to 8.3, just ensure uniqueness when 224 truncated.) 225 226 227 * The configure system 228 229 ** Installing tools 230 231 The current versions of automake, autoconf and libtool in use can be 232 checked in the ChangeLog. Look for "Update to ...". Patches may have 233 been applied, look for "Regenerate ...". 234 235 The GMP build system is in places somewhat dependent on the internals 236 of the build tools. Obviously that's avoided as much as possible, but 237 where it can't it creates a problem when upgrading or attempting to 238 use different tools versions. 239 240 ** Updating gmp 241 242 The following files need to be updated when going to a new version of 243 the build tools. Unfortunately the tools generally don't identify 244 when an out-of-date version is present. 245 246 aclocal.m4 is updated by running "aclocal". (Only needed for a new 247 automake or libtool.) 248 249 INSTALL.autoconf can be copied from INSTALL in autoconf. 250 251 ltmain.sh comes from libtool. Remove it and run "libtoolize --copy", 252 or just copy the file by hand. 253 254 texinfo.tex can be updated from ftp.gnu.org. Check it still works 255 with "make gmp.dvi", "make gmp.ps" and "make gmp.pdf". 256 257 configfsf.guess and configfsf.sub can be updated from ftp.gnu.org (or 258 from the "config" cvs module at subversions.gnu.org). The gmp 259 config.guess and config.sub wrappers are supposed to make such an 260 update fairly painless. 261 262 depcomp from automake is not needed because configure.in specifies 263 automake with "no-dependencies". 264 265 ** How it works 266 267 During development: 268 269 Input files Tool Output files 270 --------------------------------------------------------- 271 272 aclocal 273 $prefix/share/aclocal*/*.m4 ----------------> aclocal.m4 274 275 276 configure.in \ autoconf 277 aclocal.m4 / -----------------------------> configure 278 279 280 */Makefile.am \ automake 281 configure.in | ----------------------------> Makefile.in 282 aclocal.m4 / 283 284 configure.in \ autoheader 285 aclocal.m4 / -----------------------------> config.in 286 287 At build time: 288 289 Input files Tool Output files 290 -------------------------------------------- 291 292 */Makefile.in \ configure / */Makefile 293 config.in | -------------> | config.h 294 gmp-h.in / | config.m4 295 | gmp.h 296 \ fat.h (fat binary build only) 297 298 When configured with --enable-maintainer-mode the Makefiles include 299 rules to re-run the necessary tools if the input files are changed. 300 This can end up running a lot more things than are really necessary. 301 302 If a build tree is in too much of a mess for those rules to work 303 properly then a bootstrap can be done from the source directory with 304 305 aclocal 306 autoconf 307 automake 308 autoheader 309 310 The autom4te.cache directory is created by autoconf to save some work 311 in subsequent automake or autoheader runs. It's recreated 312 automatically if removed, it doesn't get distributed. 313 314 ** C++ configuration 315 316 It's intended that the contents of libgmp.la won't vary according to 317 whether --enable-cxx is selected. This means that if C++ shared 318 libraries don't work properly then a shared+static with --disable-cxx 319 can be done for the C parts, then a static-only with --enable-cxx to 320 get libgmpxx. 321 322 libgmpxx.la uses some internals from libgmp.la, in order to share code 323 between C and C++. It's intended that libgmpxx can only be expected 324 to work with libgmp from the same version of GMP. If some of the 325 shared internals change their interface, then it's proposed to rename 326 them, for instance __gmp_doprint2 or the like, so as to provoke link 327 errors rather than mysterious failures from a mismatch. 328 329 * Development setups 330 331 ** General 332 333 --disable-shared will make builds go much faster, though of course 334 shared or shared+static should be tested too. 335 336 --prefix to a dummy directory followed by "make install" will show 337 what's installed. 338 339 "make check" acts on the libgmp just built, and will ignore any other 340 /usr/lib/libgmp, or at least it should do. Libtool does various hairy 341 things to ensure it hits the just-built library. 342 343 ** Long long limb testing 344 345 On systems where gcc supports long long, but a limb is normally just a 346 long, the following can be used to force long long for testing 347 purposes. It will probably run quite slowly. 348 349 ./configure --host=none ABI=longlong 350 351 ** Function argument conversions 352 353 When using gcc, configuring with something like 354 355 ./configure CFLAGS="-g -Wall -Wconversion -Wno-sign-compare" 356 357 can show where function parameters are being converted due to having 358 function prototypes available, which won't happen in a K&R compiler. 359 Doing this in combination with the long long limb setups above is 360 good. 361 362 Conversions between int and long aren't warned about by gcc when 363 they're the same size, which is unfortunate because casts should be 364 used in such cases, for the benefit of K&R compilers with int!=long 365 and where the difference matters in function calls. 366 367 * Other Notes 368 369 ** Compatibility 370 371 compat.c is the home of functions retained for binary compatibility, 372 but now done by other means (like a macro). 373 374 struct __mpz_struct etc - this must be retained for C++ compatibility. 375 C++ applications defining functions taking mpz_t etc parameters 376 will get this in the mangled name because C++ "sees though" the 377 typedef mpz_t to the underlying struct. 378 379 __gmpn - note that glibc defines some __mpn symbols, old versions of 380 some mpn routines, which it uses for floating point printfs. 381 382 383 384 385 Local variables: 386 mode: outline 387 fill-column: 70 388 End: 389 /* eof doc/configuration */