AntとGCJによるNative Java アプリケーションの開発

まったく、えらそうなタイトルだ(w

単にEclipseGCJを使おうと思った時にどうすればいいか調べていたんだが、結局普通にJavaでプログラミングをして最後の最後にAnt+GCJでnative codeに変換した方が楽チンだということに気づいたのでそのメモです。

GCJは、thisiscool.comから持ってくるのが吉。

いったんコンパイルしてjarにした後、gcjコンパイルするという手順を取っているが、こうしておくと、ファイル数とか文字コードの問題を気にしなくてすむ。

<project name="swtapp" basedir="." default="build">
  <property name="gcj.path" location="C:/thisiscool-gcc/gcc-ecj/bin" />
  <property name="swt.path" location="C:/thisiscool-gcc/swt/win32/3218" />
  <property name="src" location="src/main"/>
  <property name="bin" location="bin" />
  <property name="dist" location="." />

  <target name="init">
    <tstamp />
  </target>

  <target name="build" depends="init">
    <jar basedir="${bin}" destfile="swtapp.jar" update="true"/>
    <exec executable="cmd" failonerror="true">
      <arg value="/c" />
      <arg value="${gcj.path}/gcj" />
      <arg value="--main=swtapp.Main"/>
      <arg value="--classpath=${swt.path}/swt.jar"/>
      <arg value="-mwindows" />
      <arg line="-s" /> <!-- stripを自動でかける -->
      <arg line="-Os" /> <!-- ファイルサイズ優先で最適化 -->
      <arg line="-o swtapp.exe" />
      <arg value="swtapp.jar" />
      <arg value="${swt.path}/libswt.a" />
      <arg value="${swt.path}/libswtimgloader.a" />
    </exec>
  </target>
</project>

swtアプリだと、Hello World程度でも14MB近くあるなぁ……