Mona への gmp 移植メモ

まず安定版の gmp-4.3.2 を入手。次に Mona のビルド環境に近いパラメータでクロスコンパイルしてみる。

% ./configure --enable-assert=yes --enable-cxx=no --build=i586 --host=i586-mingw32msvc


トップディレクトリにある .c ファイルのビルド assert.c のビルド例から CFLAGS を見る。

-std=gnu99 -DHAVE_CONFIG_H -I. -I. -I. -D__GMP_WITHIN_GMP -m32 -O2 -pedantic -fomit-frame-pointe

というわけで上のフラグをつけて *.c をビルドしてみると invalid.c で SIG_FPE がどうのこうの言われるので Mona 用にエラー処理を書き換える。


mpn ディレクトリの *.asm なファイルは m4 で更新されてからビルドされるようだ、これらもそのままパクって使う。add の定義で sub も生成するみたいな事をやっているっぽい。
関係ないけど mpn ディレクトリはアーキテクチャ毎にシンボリックリンクでファイルが置き換わって面白い。同じ演算でもアーキテクチャ依存 *.asm 版と generic/*.c 版がある。


そんなこんなでビルドが通った。算術演算ライブラリなだけあって貧弱なライブラリしか持たないマイナ OS でもビルドできる。Mosh に組み込んでテストしていたところ一部のテストが合わない。config.h で #define WANT_TMP_ALLOCA 1 としていたのが。#define alloca __builtin_alloca してて悪さしていたので WANT_TMP_REENTRANT にして回避した。


結局ソースコード自体への変更はこれだけ。後は独自に config.h や Makefile をつっこんだ。