Maxima で綴る数学の旅

紙と鉛筆の代わりに、数式処理システムMaxima / Macsyma を使って、数学を楽しみましょう

-Android- 新しいECLで最新のMaximaをコンパイル

f:id:jurupapa:20200325150700j:plain

 

4月24日にECL (Embeddable Common Lisp)の開発者メーリングリストで、メジャーリリース20.4.24版のリリースアナウンスがありました。4年ぶりくらいのリリースでおめでたいことでもあります。
https://common-lisp.net/project/ecl/posts/ECL-20424-release.html

 

早速ECL20.4.24のソースコードをダウンロードしてビルドしてみました。MacOS XDebian Linux 10ではさくっとビルドできました。

当然問題なくいけるだろう、という期待のもとMaxima 5.43.2のソースコードをダウンロードして、出来立てのECL20.4.24を使ってビルドすると、、、こけます。あれ?なんで?

調べてみると、いきなり、srcディレクトリのファイルをコンパイルする前にこけてます。lisp-utilsディレクトリの中のdefsystem.lispを読み込むところです。"LISP"パッケージなんて定義されていないのに使おうとしている、というエラーメッセージです。コードを調べると1箇所、lisp:requireという記述がありました。このlisp:をcl:に直すと無事にdefsystem.lispの読み込みに成功!

あとは楽勝、と思って再度ビルドを実行すると、、、ビルドは無事に成功。早速出来上がったmaximaを実行してみると、、、こけます。(require :defsystem)というコードが処理できない、というエラーです。一体誰がmaxima実行時に(require :defsystem)なんて呼び出すのだろう、、、と調べてみるとsrc/maxima.systemというコンパイル全体を統制するファイルの中で、ECLのビルドイメージを作成する部分で、イメージ起動時に最初に実行するコード(epilogueと呼ばれます)の中にありました。

Maximaの実行時にはdefsystemは不要なはずなのでこの呼び出し部分を削除。もう一度ビルド。出来たイメージを実行してみると、今度は無事にmaximaが起動しました。テストプログラムを実行すると1万ケース以上をテストして失敗は3つ。悪くありません。

上記2つの変更は実はいずれもMaximaソースコードの問題なので、そっちのメーリングリストに報告。Robertさんと意見交換をして、修正することに決定。

久しぶりにバグレポ書いて、コードをメインツリーからgit pullして修正してテストして、git pushしてバグレポをクローズまで行いました。

 

ついでにAndroid用にECLをarm cpuをターゲットにしてクロスコンパイルしてみました。欲張ってNDKを最新のr21を選択したため、ツールとsysrootの指定で悩みましたが、無事に解決! ARM版Androidで動作するECL 20.4.24を作ることができました。

 

次はECL20.4.24を使って、ARM版Androidで動作するMaxima 5.43.2を作ることなのですが、、、最も美しくクロスコンパイルする方法を模索中です。