« WSL2で動作するOpenOCDを構築する | トップページ | OpenOCDはなぜFTDIのドライバを使わずにlibusbやlibftdiを使うのか? »

2024.01.07

OpenOCDをMinGWでコンパイルする

昨日はOpenOCDをWSL2で動くようにビルドしてみたのですが、ホストのWindows上で接続されたUSBをWSL2から認識させるにはかなり面倒くさい手続きが必要なので、Windowsのネイティブのアプリとしてビルドしたほうが便利だと気が付きました。

そこで、VisualC++でOpenOCDがコンパイルできるように移植をしようとしてみたのですが、すぐに挫折しました。contains_ofなどのLinuxカーネル系のマクロの扱いがGCCとVCで何か違うらしく、修正するのが馬鹿らしくなってきたためです。

↓こういうマクロです。

Gcc_list

そこでMinGWを使うことにしました。MinGWやMSYSは古臭いという印象があったのですが、いろいろアップデートされているらしくmingw-w64とMSYS2という環境が最新のようです。

MSYS2は本家のページからダウンロードします。現時点での最新は msys2-x86_64-20231026.exe であるようです。

パッケージの管理はDebianやUbuntuではaptですが、MSYS2ではpacmanというのを使うそうです。世の中知らないことばかりです。

ダウンロードしたら

pacman -Syuu

をデータベースの更新がなくなるまで繰り返します。

Pacman1

この時点では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が通るようになりました。

Bootstrap

ところが、MSYS2 MSYS(紫アイコン)の環境で./configureをしてみるとエラーで止まってしまいます。

Msys2msys

どうやらMSYS2の環境にはいろいろあるらしく、

Msys2

MSYS2-mingw64(青アイコン)の環境では無事にconfigureが通りました。

Msys2mingw32

気にせずに青アイコンのMSYS2で続けます。

pacman -S mingw-w64-x86_64-libusb
pacman -S mingw-w64-x86_64-libhidapi
pacman -S mingw-w64-x86_64-libftdi

で、USBまわりのドライバと開発環境を入れて再びconfigureを行います

Libftdi

ちゃんとUSB関係のドライバも入りました。

これで、

make

ができるようになりました。

WSL2と比べるとものすごく時間がかかるのですが、仕方ないですね。

出来上がったopenocd.exeは、Windowsの環境に、libusb-1.0.dllと、ibftdi1.dllとlibhidapi-0.dllを持っていけば起動することが確認されました。

Openocdmingw64

DependencyWalkerで見てみると、kernel32やMSVCRT.dllなどのDLLがあれば動くらしく、

Mingwopenocd

使い勝手に関してはWSL2上で動かすよりも良いと言えます。

 

|

« WSL2で動作するOpenOCDを構築する | トップページ | OpenOCDはなぜFTDIのドライバを使わずにlibusbやlibftdiを使うのか? »

コメント

コメントを書く



(ウェブ上には掲載しません)




« WSL2で動作するOpenOCDを構築する | トップページ | OpenOCDはなぜFTDIのドライバを使わずにlibusbやlibftdiを使うのか? »