クロスコンパイラなどのクロスツールチェインを作るためのツールとして、crosstool-ngが便利です。
Ubuntuなどではこれを利用してクロス環境を整えるのがとても手軽だと思っています。
今回はそのcrosstool-ngをWindowsのcygwinで生成できないかを試してみました。
そもそも、crosstool-ng は http://crosstool-ng.org/ で入手できます。
これを cygwin で使用するためには以下のパッチを適用します。このパッチはここで紹介されていましたが、パッチファイルがダウンロードできないようだったので、ここにテキストとして貼り付けておきます。
diff -rupN crosstool-ng-1.18.0.old/kconfig/Makefile crosstool-ng-1.18.0/kconfig/Makefile --- crosstool-ng-1.18.0.old/kconfig/Makefile 2013-01-31 21:07:52.000000000 +0100 +++ crosstool-ng-1.18.0/kconfig/Makefile 2013-07-02 19:02:07.990701900 +0200 @@ -35,20 +35,21 @@ conf_SRC = conf.c conf_OBJ = $(patsubst %.c,%.o,$(conf_SRC)) conf_DEP = $(patsubst %.o,%.dep,$(conf_OBJ)) $(conf_OBJ) $(conf_DEP): CFLAGS += $(INTL_CFLAGS) +conf: LDFLAGS += -lintl # What's needed to build 'mconf' mconf_SRC = mconf.c mconf_OBJ = $(patsubst %.c,%.o,$(mconf_SRC)) mconf_DEP = $(patsubst %.c,%.dep,$(mconf_SRC)) $(mconf_OBJ) $(mconf_DEP): CFLAGS += $(NCURSES_CFLAGS) $(INTL_CFLAGS) -mconf: LDFLAGS += $(NCURSES_LDFLAGS) +mconf: LDFLAGS += $(NCURSES_LDFLAGS) -lintl # What's needed to build 'nconf' nconf_SRC = nconf.c nconf.gui.c nconf_OBJ = $(patsubst %.c,%.o,$(nconf_SRC)) nconf_DEP = $(patsubst %.c,%.dep,$(nconf_SRC)) $(nconf_OBJ) $(nconf_DEP): CFLAGS += $(INTL_CFLAGS) -I/usr/include/ncurses -nconf: LDFLAGS += -lmenu -lpanel -lncurses +nconf: LDFLAGS += -lmenu -lpanel -lncurses -lintl # Under Cygwin, we need to auto-import some libs (which ones, exactly?) # for mconf and nconf to lin properly. diff -rupN crosstool-ng-1.18.0.old/kconfig/nconf.c crosstool-ng-1.18.0/kconfig/nconf.c --- crosstool-ng-1.18.0.old/kconfig/nconf.c 2013-01-31 21:07:52.000000000 +0100 +++ crosstool-ng-1.18.0/kconfig/nconf.c 2013-07-02 19:02:07.994701500 +0200 @@ -1518,7 +1518,7 @@ int main(int ac, char **av) } notimeout(stdscr, FALSE); - ESCDELAY = 1; + set_escdelay(1); /* set btns menu */ curses_menu = new_menu(curses_menu_items);
このパッチを適用してmakeする例としてはこんな感じで。
$ cd crosstool-ng-1.18.0 $ patch -p1 < ../ct-ng.patch $ ./configure --prefix=/opt/cross $ make $ make install
実際に動かす際には、Windowsのファイルシステムにおいて大文字小文字を区別するように変更する必要があるようです。
レジストリの次の場所を書き換えます。
場所: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel キー: obcaseinsensitive を 0 に変更する
実行とまとめ
/opt/cross/bin/ct-ng が実行可能状態になっていると思います。
あとはパスを通して実行できるように下上で、 ct-ng menuconfig や ct-ng build でツールチェインのビルドが可能だと思います。ただし、手元の環境ではどうもgccのmake途中でエラーになってしまいうまくいきませんでした。設定関連がわるい可能性があるので、それは調査中です