TL;DR

どっかからビルド済みのバイナリを拾うと簡単。ただし古いかも。

Bash on WindowsのUbuntu 16.04LTSでビルドしてみている。

libusb-devが入っているとコンパイルエラーが出る

In file included from src/jtag/drivers/arm-jtag-ew.c:26:0:
src/jtag/drivers/usb_common.h:24:10: error: ‘struct usb_dev_handle’ declared inside parameter list [-Werror]
 struct usb_dev_handle **out);
 ^
src/jtag/drivers/usb_common.h:24:10: error: its scope is only this definition or declaration, which is probably not what you want [-Werror]
src/jtag/drivers/arm-jtag-ew.c: In function ‘armjtagew_usb_open’:
src/jtag/drivers/arm-jtag-ew.c:681:2: error: implicit declaration of function ‘usb_init’ [-Werror=implicit-function-declaration]
 usb_init();
 ^
src/jtag/drivers/arm-jtag-ew.c:686:32: error: passing argument 3 of ‘jtag_usb_open’ from incompatible pointer type [-Werror=incompatible-pointer-types]
 if (jtag_usb_open(vids, pids, &dev) != ERROR_OK)
 ^
In file included from src/jtag/drivers/arm-jtag-ew.c:26:0:
src/jtag/drivers/usb_common.h:23:5: note: expected ‘struct usb_dev_handle **’ but argument is of type ‘struct usb_dev_handle **’
 int jtag_usb_open(const uint16_t vids[], const uint16_t pids[],
 ^
src/jtag/drivers/arm-jtag-ew.c:696:2: error: implicit declaration of function ‘usb_claim_interface’ [-Werror=implicit-function-declaration]
 usb_claim_interface(dev, 0);
 ^
src/jtag/drivers/arm-jtag-ew.c: In function ‘armjtagew_usb_close’:
src/jtag/drivers/arm-jtag-ew.c:709:2: error: implicit declaration of function ‘usb_close’ [-Werror=implicit-function-declaration]
 usb_close(armjtagew->usb_handle);
 ^
src/jtag/drivers/arm-jtag-ew.c: In function ‘armjtagew_usb_write’:
src/jtag/drivers/arm-jtag-ew.c:746:11: error: implicit declaration of function ‘usb_bulk_write’ [-Werror=implicit-function-declaration]
 result = usb_bulk_write(armjtagew->usb_handle, ARMJTAGEW_EPT_BULK_OUT, \
 ^
src/jtag/drivers/arm-jtag-ew.c: In function ‘armjtagew_usb_read’:
src/jtag/drivers/arm-jtag-ew.c:760:15: error: implicit declaration of function ‘usb_bulk_read’ [-Werror=implicit-functMakefile:3202: ターゲット 'src/jtag/drivers/src_jtag_drivers_libocdjtagdrivers_la-arm-jtag-ew.lo' のレシピで失敗しました
make[2]: *** [src/jtag/drivers/src_jtag_drivers_libocdjtagdrivers_la-arm-jtag-ew.lo] エラー 1
make[2]: *** 未完了のジョブを待っています....
mv -f src/jtag/drivers/.deps/src_jtag_drivers_libocdjtagdrivers_la-vsllink.Tpo src/jtag/drivers/.deps/src_jtag_drivers_l
ibocdjtagdrivers_la-vsllink.Plo

libusb-1.0-0-devを入れて、libusb-devを消したらうまくいった??

[情報源]

libusbが見つからない

mingwでWindowsのバイナリをコンパイルしようとしてもlibusbが見つからない様でこける。

仕方がないのでlibusbのソースを落としてきて、展開した場所で下記を実行した。

情報源

./configure --host=i686-w64-mingw32 --prefix=/usr/i686-w64-mingw32
sudo make install

USB-Blasterに非対応

とりあえずビルドは通ったが、configureの結果からみてUSB-Blasterに非対応の模様。libFTDIを入れれば解決するっぽい。あとでやる

バイナリが走らん

---------------------------
openocd.exe - システム エラー
---------------------------
libgcc_s_sjlj-1.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。 
---------------------------
OK 
--------------------------

らしい。

./configure --host=i686-w64-mingw32 --prefix=/usr/i686-w64-mingw32 C_FLAGS="-static-libgcc"でやり直している。

CFLAGS="-static-libgcc -static-libstdc++" CPPFLAGS="-static-libgcc -static-libstdc++"
CXXFLAGS="-static-libgcc -static-libstdc++" LDFLAGS="-static-libgcc -static-libstdc++" ./configure --host=i686-w64-mingw32 --prefix=/usr/i686-w64-mingw32でやってみたが、objdump -pで見たら、DLLの依存が取れない。

参考情報

libgcc_s_sjlj-1.dllがあった

/usr/lib/gcc/i686-w64-mingw32/5.3-win32/libgcc_s_sjlj-1.dllに転がっていた。openocd.exeやlibusb-1.0.dllと一緒のところにコピーしたら普通に動いた。ただし、JTAGアダプタをつないでテストしていないので動くかどうかは謎。

MSYS2使えばよかったのでは?

MSYS2のパッケージマネージャを使えば一発で入るらしい情報を目にした。最初からこれを使えばよかったかもしれない。

MSYS2でpacmanを使えば一発で入るが、安定版なので少し古い。結局、自分でビルドした。