All, I am sponsoring this case for Stefan Teleman of the SFW group. I have set the timer for Tuesday, October 21st, 2008. The case directory contains this proposal.
This project proposes to integrate the GNU Multiple Precision library (GNU MP) into a Patch release of Solaris. The interfaces are being declared as Uncommitted. This library does arbitrary precision arithmetic on integers, rational numbers and floating point numbers. Thanks, John Including The GNU Multiple Precision Library [GNU MP] with Solaris Stefan Teleman <Stefan.Teleman at Sun.COM> 25 August 2008 1. Summary and motivation The GNU MP Bignum Library [1] is described as "[...] a portable library written in C for arbitrary precision arithmetic on integers, rational numbers, and floating-point numbers. It aims to provide the fastest possible arithmetic for all applications that need higher precision than is directly supported by the basic C types. Many applications use just a few hundred bits of precision; but some applications may need thousands or even millions of bits. GMP is designed to give good performance for both, by choosing algorithms based on the sizes of the operands, and by carefully keeping the overhead at a minimum." The inclusion of the GNU MP Library in Solaris will provide Solaris software developers with a recognized and widely used multiple precision math library. The GNU MP Library borrows ideas from Richard P. Brent's "MP, A Fortran Multiple-Precision Arithmetic Package" [3], and implements extensions to the IEEE 754-1985 [4] Standard for floating-point arithmetic. Several other MP Libraries have been developed on top of GNU MP, most notably MPFR [5]. The code of the GNU MP Library emphasizes speed over simplicity and elegance. This case seeks Mirco/Patch relase Binding. 2. Technical issues 2.1. Key objects /usr/lib/libgmp.so.3.4.2 /usr/lib/libgmp.so.3 -> /usr/lib/libgmp.so.3.4.2 /usr/lib/libgmp.so -> /usr/lib/libgmp.so.3.4.2 /usr/lib/libgmpxx.so.4.0.2 /usr/lib/libgmpxx.so.4 -> /usr/lib/libgmpxx.so.4.0.2 /usr/lib/libgmpxx.so -/> usr/lib/libgmpxx.so.4.0.2 /usr/lib/libmp.so.3.1.11 /usr/lib/libmp.so.3 -> /usr/lib/libmp.so.3.1.11 /usr/lib/libmp.so -> /usr/lib/libmp.so.3.1.11 /usr/lib/pkgconfig/gmp.pc /usr/lib/pkgconfig/gmpxx.pc /usr/lib/${MACH64}/libgmp.so.3.4.2 /usr/lib/${MACH64}/libgmp.so.3 -> /usr/lib/${MACH64}/libgmp.so.3.4.2 /usr/lib/${MACH64}/libgmp.so -> /usr/lib/${MACH64}/libgmp.so.3.4.2 /usr/lib/${MACH64}/libgmpxx.so.4.0.2 /usr/lib/${MACH64}/libgmpxx.so.4 -> /usr/lib/${MACH64}/libgmpxx.so.4.0.2 /usr/lib/${MACH64}/libgmpxx.so -> /usr/lib/${MACH64}/libgmpxx.so.4.0.2 /usr/lib/${MACH64}/libmp.so.3.1.11 /usr/lib/${MACH64}/libmp.so.3 -> /usr/lib/${MACH64}/libmp.so.3.1.11 /usr/lib/${MACH64}/libmp.so -> /usr/lib/${MACH64}/libmp.so.3.1.11 /usr/lib/${MACH64}/pkgconfig/gmp.pc /usr/lib/${MACH64}/pkgconfig/gmpxx.pc /usr/include/gmp/gmp.h /usr/include/gmp/gmpxx.h /usr/include/gmp/mp.h /usr/share/doc/gmp/html/index.html /usr/share/doc/gmp/html/Algorithms.html /usr/share/doc/gmp/html/BSD-Compatible-Functions.html /usr/share/doc/gmp/html/C_002b_002b-Class-Interface.html /usr/share/doc/gmp/html/Concept-Index.html /usr/share/doc/gmp/html/Contributors.html /usr/share/doc/gmp/html/Copying.html /usr/share/doc/gmp/html/Custom-Allocation.html /usr/share/doc/gmp/html/Floating_002dpoint-Functions.html /usr/share/doc/gmp/html/Formatted-Input.html /usr/share/doc/gmp/html/Formatted-Output.html /usr/share/doc/gmp/html/Function-Index.html /usr/share/doc/gmp/html/GMP-Basics.html /usr/share/doc/gmp/html/GNU-Free-Documentation-License.html /usr/share/doc/gmp/html/Installing-GMP.html /usr/share/doc/gmp/html/Integer-Functions.html /usr/share/doc/gmp/html/Internals.html /usr/share/doc/gmp/html/Introduction-to-GMP.html /usr/share/doc/gmp/html/Language-Bindings.html /usr/share/doc/gmp/html/Low_002dlevel-Functions.html /usr/share/doc/gmp/html/Random-Number-Functions.html /usr/share/doc/gmp/html/Rational-Number-Functions.html /usr/share/doc/gmp/html/References.html /usr/share/doc/gmp/html/Reporting-Bugs.html /usr/share/info/gmp.info /usr/share/info/gmp.info-1 /usr/share/info/gmp.info-2 /usr/share/man/man3/gmp.3 This case proposes the integration of GNU MP Version 4.2.2. The version of GNU MP [4.2.2] proposed for Integration is 64-bit clean and largefile aware. The 64-bit GNU MP libraries will be delivered with this Integration. By default, GNU MP installs its header files under /usr/include. We propose changing this default installation location to a more suitable /usr/include/gmp, for the purpose of avoiding namespace pollution in /usr/include. GNU MP does not provide documentation in UNIX man format. A wrapper man page, to be delivered in Section 3 of the Manual, will provide pointers to the HTML and Texinfo documentation delivered by GNU MP. 2.2. Programmatic Facilities GNU MP provides a large set of arithmetic and mathematical functions. The documentation provided by GNU MP[2] categorizes several high-level subsets for these functions: - Integer Functions - Rational Number Functions - Floating-point Functions - Low-level Functions - Random Number Functions - Formatted Output - Formatted Input - C++ Class Interface - Berkeley MP Compatible Functions - Custom Allocation - Language Bindings - Algorithms - Internals Key aspects of GNU MP's functionality are discussed below. libgmp.so.3.4.2 is the C implementation of the GNU MP Bignum Library. This shared object delivers the API's implementing the functions contained in the subclassing enumerated above. libmp.so.3.1.11 is the C wrapper providing the BSD MP Compatibility API Layer. This library does not implement any new functionality in GNU MP; its purpose is restricted to API compatibility. libgmpxx.so.4.0.2 is the C++ Library in GNU MP. It provides iostream operator overloading, as well as a class hierarchy interface to GNU MP's fundamental types [mpz_t, mpq_t and mpf_t]. Its purpose is to provide a native C++ language binding. 2.3. Build and ABI Considerations Several aspects of the build system configuration for GNU MP, affecting GNU MP's ABI, are discussed below. GNU MP's build system is based on the auto*tools/configure shell script. In addition to the standard ./configure arguments, GNU MP provides specific options for handling temporary memory allocations: --enable-alloca=<value> The allowed options are: --enable-alloca=alloca --enable-alloca=malloc-reentrant --enable-alloca=malloc-notreentrant This option is particularily relevant when the consumer of the GNU MP interfaces must allocate very large temporary objects. For the purposes of this Integration, GNU MP will be built with the --enable-alloca=malloc-reentrant option. In addition to the memory allocation options, GNU MP provides specific options for enabling FFT [Fast Fourier Transform] multiplications. By default, multiplications in GNU MP are done using either Karatsuba, 3-way Toom, or Fermat FFT. The Fermat FFT option is used on large to very large operands. This integration will enable the use of Fermat FFT: --enable-fft This Integration of GNU MP will also enable the BSD MP compatibility layer library [libmp.so.3.1.11]: --enable-mpbsd 2.4. Language Bindings The GNU MP Library is written in ANSI C and ISA-specific assembler. Additionally, the GNU MP distribution provides a C++ Library. The C++ GNU MP Library will be included with this Integration: --enable-cxx 2.5. Documentation GNU MP provides documentation in texinfo and html formats. UNIX man pages are not provided, by default, by GNU MP. For the purposes of this Integration, a generic man page will be provided, in Section 3 of the manual [gmp.3]. This man page will only include pointers to the installed documentation [in texinfo and html formats]. [6] 3. Interfaces 3.1. Interface Stability The development and release schedules of the GNU MP Library are controlled by a group of developers external to SMI [http://gmplib.org/] [1]. Although GNU MP attempts to maintain API and ABI compatibility between releases, ABI and API breakage between releases may occur, especially within the C++ library and the experimental features of GNU MP. 3.2. Imported Interfaces GNU MP imports interfaces from the Standard C Library and the Standard Math Library. In addition, the C++ GNU MP Library imports interfaces from the C++ run-time Library [libCrun.so.1] and from the Standard C++ Library [libCstd.so.1]. 3.3. Exported Interfaces NAME STABILITY NOTES SUNWgnu-mp Uncommitted Package Name /usr/lib/libgmp.so.3.4.2 Uncommitted Shared Library /usr/lib/libgmp.so.3 Uncommitted Symbolic Link /usr/lib/libgmp.so Uncommitted Symbolic Link /usr/lib/libgmpxx.so.4.0.2 Uncommitted Shared Library /usr/lib/libgmpxx.so.4 Uncommitted Symbolic Link /usr/lib/libgmpxx.so Uncommitted Symbolic Link /usr/lib/libmp.so.3.1.11 Uncommitted Shared Library /usr/lib/libmp.so.3 Uncommitted Symbolic Link /usr/lib/libmp.so Uncommitted Symbolic Link /usr/lib/${MACH64}/libgmp.so.3.4.2 Uncommitted Shared Library /usr/lib/${MACH64}/libgmp.so.3 Uncommitted Symbolic Link /usr/lib/${MACH64}/libgmp.so Uncommitted Symbolic Link /usr/lib/${MACH64}/libgmpxx.so.4.0.2 Uncommitted Shared Library /usr/lib/${MACH64}/libgmpxx.so.4 Uncommitted Symbolic Link /usr/lib/${MACH64}/libgmpxx.so Uncommitted Symbolic Link /usr/lib/${MACH64}/libmp.so.3.1.11 Uncommitted Shared Library /usr/lib/${MACH64}/libmp.so.3 Uncommitted Symbolic Link /usr/lib/${MACH64}/libmp.so Uncommitted Symbolic Link /usr/include/gmp/gmp.h Uncommitted Header file /usr/include/gmp/gmpxx.h Uncommitted Header file /usr/include/gmp/mp.h Uncommitted Header file /usr/share/man/man3/gmp.3 Uncommitted Manual Page /usr/share/info/gmp.info Uncommitted Texinfo Page /usr/share/info/gmp.info-1 Uncommitted Texinfo Page /usr/share/info/gmp.info-2 Uncommitted Texinfo Page /usr/share/doc/gmp/html/index.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Algorithms.html Uncommitted HTML Doc /usr/share/doc/gmp/html/BSD-Compatible-Functions.html Uncommitted HTML Doc /usr/share/doc/gmp/html/C_002b_002b-Class-Interface.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Concept-Index.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Contributors.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Copying.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Custom-Allocation.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Floating_002dpoint-Functions.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Formatted-Input.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Formatted-Output.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Function-Index.html Uncommitted HTML Doc /usr/share/doc/gmp/html/GMP-Basics.html Uncommitted HTML Doc /usr/share/doc/gmp/html/GNU-Free-Documentation-License.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Installing-GMP.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Integer-Functions.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Internals.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Introduction-to-GMP.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Language-Bindings.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Low_002dlevel-Functions.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Random-Number-Functions.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Rational-Number-Functions.html Uncommitted HTML Doc /usr/share/doc/gmp/html/References.html Uncommitted HTML Doc /usr/share/doc/gmp/html/Reporting-Bugs.html Uncommitted HTML Doc 4. References [1] http://www.gmplib.org/ [2] http://gmplib.org/gmp-man-4.2.2.pdf [3] http://portal.acm.org/citation.cfm?id=355776 [4] http://grouper.ieee.org/groups/754/ http://www.psc.edu/general/software/packages/ieee/ieee.html [5] http://www.loria.fr/~hanrot/Papers/toms.pdf [6] /shared/sac/PSARC/2007/166 6. Resources and Schedule 6.4. Steering Committee requested information 6.4.1. Consolidation C-team Name: SFW 6.5. ARC review type: FastTrack 6.6. ARC Exposure: open