x2_3aa5ec1.jpeg

OCaml トップレベル on Android ソース †

http://bitbucket.org/keigoi/ocaml-toplevel-android/

  • 下の OCaml on Android が必要

O'Caml on Android 3.12 版 †

  • NO WARRANTY - 無保証

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

  • Androidネイティブの実行形式を生成できる
    • ただし、Androidアプリ(.apk)からの呼び出しは(rootedでないと)できない
    • Androidのターミナル (adb shellやTerminal Emulatorなど) から起動可能
    • たとえば ocamlトップレベルが adb shellから起動できる(後述)。
  • .soファイルを生成できる。やり方は普通のOCamlと同じ。 C共有ライブラリの作成 を参照
    • 適切なスタブを用意すれば AndroidアプリからOCamlコードを呼び出せる(はず)

パッチのダウンロード †

準備 †

  1. Android NDK 1.6r4 をダウンロードしてどこかに展開する.
  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;

make install

テスト &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.
    #

履歴 &dagger;

  • ocamloptで生成したバイナリが動作しない不具合を修正(MKEXEにリンカオプションが渡されていなかった) (2010/12/7 23:35)
  • 共有ライブラリが一応ビルドできるようになった (2010/12/8 0:16)
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS