OpenOCDをMinGWでコンパイルする
昨日はOpenOCDをWSL2で動くようにビルドしてみたのですが、ホストのWindows上で接続されたUSBをWSL2から認識させるにはかなり面倒くさい手続きが必要なので、Windowsのネイティブのアプリとしてビルドしたほうが便利だと気が付きました。
そこで、VisualC++でOpenOCDがコンパイルできるように移植をしようとしてみたのですが、すぐに挫折しました。contains_ofなどのLinuxカーネル系のマクロの扱いがGCCとVCで何か違うらしく、修正するのが馬鹿らしくなってきたためです。
↓こういうマクロです。
そこでMinGWを使うことにしました。MinGWやMSYSは古臭いという印象があったのですが、いろいろアップデートされているらしくmingw-w64とMSYS2という環境が最新のようです。
MSYS2は本家のページからダウンロードします。現時点での最新は msys2-x86_64-20231026.exe であるようです。
パッケージの管理はDebianやUbuntuではaptですが、MSYS2ではpacmanというのを使うそうです。世の中知らないことばかりです。
ダウンロードしたら
pacman -Syuu
をデータベースの更新がなくなるまで繰り返します。
この時点ではgccすら入っていないので、
pacman -S unzip bzip2 base-devel mingw-w64-x86_64-toolchain
pacman -S git
で基本的なツールをインストールします。
そして、
git clone git://git.code.sf.net/p/openocd/code openocd-code
でgitからクローンして、
cd openocd-code/
./bootstrap
をしてみますといろいろと足りないものが出てくるので、
pacman -S libtool
pacman -S pkg-config
pacman -S automake
pacman -S autoconf
で必要なツール類をインストールします。
これでbootstrapが通るようになりました。
ところが、MSYS2 MSYS(紫アイコン)の環境で./configureをしてみるとエラーで止まってしまいます。
どうやらMSYS2の環境にはいろいろあるらしく、
MSYS2-mingw64(青アイコン)の環境では無事にconfigureが通りました。
気にせずに青アイコンのMSYS2で続けます。
pacman -S mingw-w64-x86_64-libusb
pacman -S mingw-w64-x86_64-libhidapi
pacman -S mingw-w64-x86_64-libftdi
で、USBまわりのドライバと開発環境を入れて再びconfigureを行います
ちゃんとUSB関係のドライバも入りました。
これで、
make
ができるようになりました。
WSL2と比べるとものすごく時間がかかるのですが、仕方ないですね。
出来上がったopenocd.exeは、Windowsの環境に、libusb-1.0.dllと、ibftdi1.dllとlibhidapi-0.dllを持っていけば起動することが確認されました。
DependencyWalkerで見てみると、kernel32やMSVCRT.dllなどのDLLがあれば動くらしく、
使い勝手に関してはWSL2上で動かすよりも良いと言えます。
| 固定リンク
コメント