Skip to content

Exydor/gmp

Repository files navigation

GMP 5 for Android

This repository contains a prebuilt copy of GMP 5.1.3 compiled with the Android NDK r9b against API level 14 (which corresponds to Android "Ice Cream Sandwich" 4.0).

The C++ bindings are now included; they depend on libgmp.so, so you will need to ship *both* in your APK for each platform you support.

Installation and usage in an Android project:

 1. Check out a copy of this repository into your jni folder, using something like this:
    $ git submodule add git://github.com/Rupan/gmp.git jni/gmp
 2. Add "gmp" to APP_MODULES in jni/Application.mk
 3. Add "gmp" to LOCAL_SHARED_LIBRARIES in your module's Android.mk as required.
 4. Use GMP as normal by including gmp.h in your source files where required.
 5. Build the rest of your native code as you would normally:
    $ ndk-build

Usage at runtime:

The GMP library must be loaded prior to other dependent modules.  This is an apparent shortcoming / limitation of Android.  To handle this condition, do something like the following in your Java source code:

  ...
  System.loadLibrary("gmp");
  System.loadLibrary("myBNmodule");
  ...

The scripts used to compile and package the prebuilt libraries is named "compile-gmp-{arm,mips,x86}.sh".  The build procedure is documented therein.

Notes:

The testsuite cannot be easily run on a target device.  The autoconf system which runs the test binaries cannot simply be copied from the build host to the target device and run.  The next best thing is to copy the compiled binaries onto a target and run them by hand - but apparently this does not fully run the test suite.  Still, it is better than nothing since it exercises various GMP code paths and proves that the library will not crash when used in an APK.  prep-tests.sh and run-tests.sh are now provided; using them is left as an exercise to the reader.

An armeabi-v7a-neon build is now provided.  To use it, move the shared object from the armeabi-v7a-neon directory into the armeabi-v7a directory as e.g. "libgmp-neon.so".  You'll have to hack up Android.mk so it copies the new shared object together with the existing one.  Then the correct shared object must be selected at runtime by the application using the cpufeatures static library.  See the NDK documentation, or just stick with the armeabi-v7a build.

About

A prebuilt GMP module for Android

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 98.1%
  • Shell 1.9%