$OpenXM: OpenXM/doc/HOWTO/asir2000-autoconf-note-ja,v 1.2 2003/03/08 09:58:02 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 が上書きされてしまいます。なぜかとい うと、新規作成される Makefile.in は Makefile.am から $OpenXM: OpenXM/doc/HOWTO/asir2000-autoconf-note-ja,v 1.2 2003/03/08 09:58:02 ohara Exp $ タグ(た だのコメント)を継承しますから、元からあるものと $OpenXM: OpenXM/doc/HOWTO/asir2000-autoconf-note-ja,v 1.2 2003/03/08 09:58:02 ohara Exp $ タグだけ違っ てしまい、上書きの必要ありと automake が判断するからです。したがって commit するときは、あらかじめ cvs diff で確認して本当に変更されたファ イルだけを commit してください。 いまのところ configure スクリプトは FreeBSD 4.7 上の autoconf 2.53 で 生成しています。autoconf のバージョンが変わると、生成されるスクリプト がかなり違います。付属の config.guess などは automake 1.5 のものです。 スクリプトの一貫性を保持するために、この環境以外で生成した configure を commit しないようにお願いします。 configure のクロスコンパイルへの対応について クロスコンパイルについては、現在、その環境がないので実験できていません。 クロスコンパイルに対応するためには、新しいシステムに対応する場合と同じ く、configure.in と Makefile.am を書き直す必要がありますが、問題になる のは、asm サブディレクトリでしょう。asir2000 付属の configure.in の中 では、${target} でターゲットの GNU 的ホスト型が参照できます。したがっ て、asm サブディレクトリ以外は、configure.in の中の ${host} を ${target} で置き換えれば、クロスコンパイルにすぐに対応できるはずです。 asm サブディレクトリでも、クロスコンパイル用の cc を用いて、アセンブル が出来る場合には、すぐに対応できることでしょう。結局、Solaris のような 独自のアセンブラを必要とするシステムが残ります。独自のアセンブラを必要 とするシステムでも、真にジェネリックに出来れば asmalpha.c を使って代用 するという手もありますね(当然、効率は落ちます)。