ocaml-android 3.12 版 †

  • NO WARRANTY - 無保証

このビルドでできること †

  • Androidのターミナル (adb shellやTerminal Emulatorなど) から ocamlトップレベルが起動できる。
  • ocamlc/ocamloptで生成したバイナリをアプリに組み込むことはできない(多分)。
    • .soが生成できるかどうかわからない(試す価値はある)。もしできれば Android のアプリに組み込めるかもしれない

準備 †

  1. Android NDK をダウンロードしてどこかに展開する.
  2. 展開したNDKからmemory.h を削除する。
  3. C標準ライブラリのヘッダから memory.h をincludeしている行を削除する。

ビルド †

  1. ocaml-3.12.0をダウンロードし、ホストのocamlrunとocamlyaccをビルド. 注意:32bit版をビルドすること
    • 32bit版のビルド方法は http://caml.inria.fr/pub/distrib/ocaml-3.12/notes/INSTALL を参照
      tar jxf ocaml-3.12.0.tar.bz2
      mv ocaml-3.12.0 ocaml-host
      cd ocaml-host
      ./configure -cc "gcc -m32" -as "as -arch i386" -aspp "gcc -m32 -c" # Snow Leopardの場合。
      pushd . && cd byterun && make all && cp ocamlrun ../.. && cd ../yacc && make all && cp ocamlyacc ../.. && popd
  2. 別のocaml-3.12.0のツリーを展開し、パッチをあてる
    tar jxf ocaml-3.12.0.tar.bz2
    mv ocaml-3.12.0 ocaml-target
    cd ocaml-target
    patch -p1 <../ocaml-android-3.12.0.diff
  3. Makefileを修正する
    vi config/Makefile
  4. ターゲットのocamlrunとocamlyaccをビルドして、退避させ、ホストのものに置き換える
     pushd . && cd byterun && make all && mv ocamlrun ocamlrun.target && cd ../yacc && make all && mv ocamlyacc ocamlyacc.target && popd
    cp ../ocamlrun byterun && cp ../ocamlyacc yacc
  5. makeする (configureしてはいけない)
    make world
    make opt

インストール &dagger;

  • ここでは /data/local/tmp/ocaml に置いて起動を確認するが、実行可能属性を付加できないファイルシステム (/sdcardなど) では動かない
    adb shell mkdir /data/local/tmp/ocaml
    adb push byterun/ocamlrun.target /data/local/tmp/ocaml
    adb push ocaml /data/local/tmp/ocaml
    for FILE in stdlib/*.cm[ia]; do adb push $FILE /data/local/tmp/ocaml; done
  • 実行してみる
    adb shell
    cd /data/local/tmp/ocaml
    ./ocamlrun.target ./ocaml
    
             Objective Caml version 3.12.0
    
    # 1. +. 1.;;
    - : float = 2.
    #
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS