今回はネイティブな Java コンパイラである Jikes を Windows Mobile に移植して、Advanced W-ZERO3 [es](以下、アドエス)以外の W-ZERO3 でも Java ファイルをコンパイル出来る環境を構築します。
Jikes の移植には Windows Mobile 用クロスコンパイラ「CeGCC」を使用しました。
「jikes-1.22-wince.zip」をダウンロード
展開された「jikes.exe」、「cegcc.dll」、「cegccthrd.dll」を任意のフォルダにコピーしてください(microSD カード上でも OK)。
既に「cegcc.dll」と「cegccthrd.dll」が Windows フォルダなどに存在する場合はコピー不要です。
「jikes-1.22-mswince」フォルダ以下には Windows Mobile 用に修正したソース一式が入っていますので必要ない方は削除して下さい。
ソース一式はこちら。
移植した Jikes の注意点ですが、
- 「-encoding」オプションに指定できるのは「MS932」と「UTF-8」の 2 種類のみ。
これは文字コード変換に libiconv ではなく MultiByteToWideChar を使用しているため。
※ こちらのページで公開されている iconv.lzh を使用させて頂きました。
オプションを指定しない場合は「MS932」として処理されます。
- 引数などで指定するパスには日本語などのマルチバイト文字は使用できない。
CeGCC では opendir 関数や FindFirstFile 関数がマルチバイト文字が含まれるパスに対応していないため。
(もし対応する方法があればコメントください)
それと、Jikes を移植する際に Windows Mobile 用の native2ascii と ascii2native も作成しました。
「native2ascii-mswince.lzh」をダウンロード
展開された「ascii2native.exe」、「native2ascii.exe」を任意のフォルダにコピーしてください。
こちらの注意点は、
- Sun の native2ascii と異なりオプションの指定はできません。
文字コードは「MS932」固定です(手抜き)。
- 引数も指定できず、リダイレクトのみ。
「native2ascii 入力ファイル > 出力ファイル」のようにして実行します。
では、早速 Jikes でコンパイルしてみます。以下ようなバッチファイルを用意しておくと簡単に Jikes を実行できます。
@ECHO OFF
SET JIKES_BIN=\microSDカード\Java\jikes.exe
SET BOOT_CLASSPATH=\Java\sun-jre1.6.0_04-rt.jar
SET JIKES_OPTION=-bootclasspath "%BOOT_CLASSPATH%" -source 1.5
"%JIKES_BIN%" %JIKES_OPTION% %1 %2 %3 %4 %5 %6 %7 %8 %9
@ECHO ON
テキストエディタを起動して以下の HelloJikes.java を作成します。
public class HelloJikes {
public static void main(String[] args) throws Exception {
System.out.println("こんにちは、Jikes!");
String circledDigit
= "①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳";
for (char digit : circledDigit.toCharArray()) {
System.out.print(digit);
}
}
}
DOS窓Openを起動して Jikes でコンパイルしてみます。
コンパイルは数秒で完了します。ecj とは雲泥の差です。
これで ecj とはオサラバです。
…といきたいところですが、Jikes は JDK 5 の新機能にほとんど対応していません。
対応しているのは拡張 for 文のみで、Enum、 Boxing/Unboxing、Static Import、可変長引数、Generics は使えません... orz
どこかに ecj のコードを Jikes に移植してくれるツワモノはいないですかね…。
最近のコメント