$OpenXM: OpenXM/doc/HOWTO/asir2000-autoconf-note-ja,v 1.5 2009/02/04 12:17:34 ohara Exp $ autoconf 版 asir2000 を新しいオペレーティングシステムに対応させる方法 基本的には OpenXM_contrib2/asir2000 の configure.in と各サブディレクト リの Makefile.am を編集することになります。システム毎に変更しなければ ならないのは、適切な cpp のマクロの定義と、asm サブディレクトリの処理 です。asm サブディレクトリでは、システム毎に異なるソースから、libasm.a が作成されます。 0. 新しいシステムの GNU 的ホスト型を調べる。 configure の出力を観察していればいいのですが、一応ツールを用意しま した。http://air.s.kanazawa-u.ac.jp/~ohara/openxm/host_checker.tgz をとってきて、展開します。その後、 (cd host_checker ; configure) をすると、host_checker/host にホスト型が出力されます。 1. configure.in の書き換え configure.in はシェルスクリプトの雛形で、autoconf によって変換され なかった部分はそのままシェルスクリプトに出力されます。asir2000 付属 の configure.in では、${host} で GNU 的ホスト型を参照できるので、シェ ルスクリプトだと思って、case で分岐します。case のラベルにシェルパ ターン [...] はそのままでは使用できないことに注意してください。これ は、autoconf において、[...] が引用符であるからです。case の分岐先 では、アセンブル対象のオブジェクト asm_obj を指定します。${asm_obj} は libasm.a を作成するのに必要なアセンブル済みオブジェクトのうちシ ステム依存のものの名前です。Solaris のように、configure.in の中で、 uname を用いて CPU 種別を判定する手が使える場合もあります。また、 システム依存の cpp のマクロは AC_DEFINE([__DARWIN__]) のように指定 します。こうすれば、cc のオプション -D__DARWIN__=1 が、最終的に configure によって、Makefile.in の @DEFS@ に渡されます。 2. libasm.a への対応 asm サブディレクトリにおいて、システム依存のオブジェクトを用意する 必要があります。用意できない場合には asmalpha.c をカスタマイズして 代用することになるでしょう。カスタマイズしなければならない理由は、 現在の asmalpha.c ではプラットホーム毎の条件分岐をしているからです。 これはあまりよくないので、いずれ完全にジェネリックにするために修正 する必要があります。アセンブリ言語のソースが用意できたら、 asm/Makefile.am を修正して、明示的にルールを書きます。可能ならば、 as を使うのではなくて、cc にアセンブルの作業を押し付けるのがよいで しょう。拡張子 .S で cpp 利用可能なアセンブラソースになります。 3. configure の生成 修正がすべて完了すれば OpenXM_contrib2/asir2000 で automake ; autoconf を走らせて configure を作り直します。autoconf は 2.53 以上、 automake は 1.5 以上が必要です。 configure に修正を加えるには まだまだ問題が残っていますので Makefile.am や configure.in を修正する 必要が出てきます。Makefile.am や configure.in を修正した後には、 automake や autoconf を走らせて Makefile.in や configure を生成しなけ ればなりません。しかしながら automake をかけると、Makefile.am が変更さ れていなくても、必ず Makefile.in が上書きされてしまいます。したがって commit するときは、あらかじめ cvs diff で確認して本当に変更されたファ イルだけを commit してください。 いまのところ configure スクリプトは FreeBSD 4.7 上の autoconf 2.53 で 生成しています。autoconf のバージョンが変わると、生成されるスクリプト がかなり違います。付属の config.guess などは automake 1.5 のものです。 スクリプトの一貫性を保持するために、この環境以外で生成した configure を commit しないようにお願いします。 (2009年2月4日追記) 現在の開発環境は、FreeBSD 7.1-RELEASE-p2 上の autoconf 2.62, automake 1.10.1 です。現在の開発環境では、変更を行った後に autoreconf を実行すれ ば、すべてのスクリプトに変更が反映されます。 configure のクロスコンパイルへの対応について クロスコンパイルについては、現在、その環境がないので実験できていません。 クロスコンパイルに対応するためには、新しいシステムに対応する場合と同じ く、configure.in と Makefile.am を書き直す必要がありますが、問題になる のは、asm サブディレクトリでしょう。クロス環境では、セルフ環境と異なり、 GNU 的ホスト型だけで、対象となるシステムを知ることができません。例えば、 Sparc MPU のバージョン(v7,v8,...)を知るためには、セルフ環境で uname -m コマンドを実行する必要があるからです。configure の引数を用いて追加の情 報を渡すという手もあります。しかし、sparc-*-solaris* のように、アセン ブラとして、OS 付属のものを必要とする場合は、それも困難でしょう。この 場合、ジェネリックな asmalpha.c を用いて代用することが考えられますが、 当然、効率は落ちます。