OpenOCDをビルドする w/ Bash on Windows
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を使えば一発で入るが、安定版なので少し古い。結局、自分でビルドした。