さくせいちゅう


*Standalone Toolchainでlibgmp (NDK) [#root]

今回はgmpは5.1.1、gmpbenchは0.2を使用しています。動作環境は[[Tips/Standalone ToolchainでHello World (NDK)]]を参考に。

-[[The GNU MP Bignum Library:http://gmplib.org/]]~
gmp(libgmp)本拠地。gmpbench、gmp-chudnovsky.cも同サイトに置いてあります。

GMPのSourceの中にARM固有のチューニングコードが入っていて、もしかして工夫すればすげえ早くなるんじゃね?という期待により弄っています。丁寧にもベンチマークプログラムも用意されているので、気が向いたらツールも作ってみたい所存。

**1. configureの実行 [#e7bde902]

 cd $HOME/gmp-5.1.1/
 ./configure --build=i686-pc-linux-gnu --host=arm-linux-androideabi --with-sysroot=$SYSROOT


**2. make & make install [#oa1bec8d]

 make
 make install DESTDIR=$HOME/armeabi

~/armeabi/usr/local/libに「libgmp.a」があれば概ね成功。


**3. gmpbenchのmake [#t1496e7f]

gmpbenchはクロスコンパイルまで考慮してくれないらしくとっとと実行に移してしまうので具合が悪い。よって予めmakeしたのを
実行環境で実行する方式を採用。取り合えずmakeから。


 $CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer gcd.c -o gcd ~/armeabi/usr/local/lib/libgmp.a
 $CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer gcdext.c -o gcdext ~/armeabi/usr/local/lib/libgmp.a
 $CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer multiply.c -o multiply ~/armeabi/usr/local/lib/libgmp.a
 $CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer divide.c -o divide ~/armeabi/usr/local/lib/libgmp.a
 $CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer rsa.c -o rsa ~/armeabi/usr/local/lib/libgmp.a
 $CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer pi.c -o pi -lm ~/armeabi/usr/local/lib/libgmp.a


**4. 実機にコピー [#f2bfbd3b]
 
 adb push runbench /data/local/tmp/gmpbench

、、、ここまでやったがどうも標準のshellがしょぼいのとsed等のツールが足りなくて素直に実行できず。仕方がないので実行ファイルを個々に実行してみたがイマイチ面白みがないので、ツールを変えてみた。


**5. すずきひろのぶさんのquick start pi benchmarkを改造 [#q2078cd3]

ベンチマークの中身はgmp+gmp-chudnovsky.c。なので取り敢えずgmp-chudnovsky.cをmakeすることに。

-[[GNU/Linux上で円周率の計算をおこなう:http://h2np.net/pi/]]



Key : [[NDK]]

*あとでつかう [#jaf5b3f2]


-[[Android NDK compile gmp library - Stack Overflow:http://stackoverflow.com/questions/4285605/android-ndk-compile-gmp-library]]
-[[Cross-compiling GMP for Android:http://gmplib.org/list-archives/gmp-bugs/2011-January/002170.html]]
-[[Rupan/gmp · GitHub:https://github.com/Rupan/gmp]]



// EOF