2010年7月10日土曜日

windows vista 64bit で JOGL 2.x をコンパイル

JOGL 2.x の 64bit 版コンパイルに、なんとか成功したようなので、手順を書いておくことにする。
以下の手順は、Java Binding for the OpenGLR API Wiki(JOGL) FAQHow To Build が元になっている。

コンパイル環境
  • Windows Vista 64bit
  • Microsoft Visual C++ 2008 Express Edition SP1
  • Java SDK 1.6.0_16 64bit
  • Ant 1.8.1
  • ANTLR 3.2
  • Git for Windows 1.0.7.2

環境の構築
OS、Visual C++ および Java は、インストール済みとする。
  1. Ant
    Ant は、このページのダウンロードサイトからダウンロードして、解凍し適当なディレクトリへインストールする。
    環境変数 path にAntをインストールした場所の bin ディレクトリを追加。
    コマンドラインで、 ant -version でバージョンが表示されればOK。
  2. ANTLR
    ANTLR は、このページのダウンロードサイトから「Complete ANTLR 3.2 jar; all tools, runtime, etc...」となっているものをダウンロードし、Ant をインストールしたディレクトリの lib ディレクトリの中へコピーする。
  3. Git for Windows
    Git for Windowsは、このページからダウンロードして、インストール


ソースのダウンロード
  1. 作業用のディレクトリを作成する。
  2. コマンドプロンプトで作業用ディレクトリに移動する。以後このディレクトリを基準とする。
  3. 以下のコマンドを入力して、Git リポジトリをクローンする
> git clone git://kenai.com/gluegen~gluegen-git gluegen
> git clone git://kenai.com/jogl~jogl-git jogl 
> git clone git://kenai.com/jogl~jogl-demos-git jogl-demos

ビルド用プロパティの修正
  1. Windows ログインユーザーのホームディレクトリに、以下のファイルをコピーする
    gluegen\make\gluegen.properties
  2. コピーした gluegen.properties ファイルの以下の箇所を修正する。antlr.jar には、上記で ANTLR をインストールしたパスとファイル名を指定すること。
antlr.jar=c:/appli/Java/ant-1.8.1/lib/antlr-3.2.jar
win32.c.compiler=vc9

ソースの修正
64bit でコンパイルをするために、以下の修正をおこなう。
gluegen\make\gluegen-cpptasks.xml ファイルの 640行目
<linkerarg if="isVC9" value="/MACHINE:X86">       <!-- explicity set target platform --></linkerarg>
を以下のように変更 
<linkerarg if="isVC9" value="/MACHINE:X64">       <!-- explicity set target platform --></linkerarg>

ビルド
  1. コマンドラインで、jogl\make ディレクトリに移動。
  2. Ant で ClassNotFoundException が出ないように CLASSPATH 環境変数をクリア


    > set CLASSPATH=
    
  3. Visual C++ のコンパイル環境設定バッチ(64 bit 用)を実行


    > "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.bat"
    
  4. Ant を実行


    > ant 

ビルドが完了すると、jogl\build ディレクトリに
jogl-2.0-windows-amd64.zip ファイルが生成される。


実は、コンパイルは MinGW 64bit 版で行おうとしていたのだが、丸二日程悶絶した挙句失敗。
MinGW 64bit 環境は、悶絶しながらもできたのだが、Ant で antlr.classpath が定義されないとか、C のコンパイルをするとヘッダのエラーがでるとか、手に負えなかったので断念した。