OpenOCDをビルドする

出典: Wikimura

ARM開発環境構築手順 」でOpenOCDのインストールについて書いたのですが、少し困ったことになりました。 OpenOCDのバージョンが0.1.0から0.2.0に上がったことに伴って、0.1.0のWindowsインストーラが入手できなくなってしまったようです。 何でもライセンスの都合だとかで...

OpenOCDは頻繁に修正が加えらているため、どうせなら自分でビルドできた方が都合が良さそうです。 ちょうどSVNクライアントを持っていたので、SVNでデータを持ってくることにしました。


目次

資料1: README.Win32

SVNから持ってきたソース「README.Win32」というファイルが添付されていました。 まずはこれから読んでみます。訳はもちろん適当です。

OpenOCDをWindows用にビルドする

Windows上でビルドするには、Cygwinが必要となる。 PATH環境変数が他のUnixユーティリティ(UnxUtils等)を含まないことを確認すること。 こうしたツールはCygwinパス(cygdriveなどのことだと思われる)を取り扱うことができないため、obscure dependancyエラーを引き起こす。 これはあるユーザのログを下にまとめられたものであるため、間違っていたら訂正していただきたい。

下記のURLはOpenOCDをCygwin上でビルドする際に役立つ参考資料である。

他にも、WindowsバイナリをLinux上で、MinGWクロスコンパイラを使用することでビルドすることもできる。 下記の文書は、クロスビルドをする上でのコツも含んでいる。

libusb-win32

libusb-win32バイナリ配布は、SourceForgeのページから選ぶことができる。 この文書が書かれた時点での最新バージョンは、0.1.12.2である。 FTDIチップを使用したJTAGデバッガで重要なUSB composite deviceに関する問題を修正していることから、このバージョンの使用が推奨される。


  • libusb-win32-device-bin-0.1.12.2.tar.gzパッケージをダウンロードし、テンポラリディレクトリに展開する。
  • libusb-win32-device-bin-0.1.12.2\include\usb.hをMinGWのインクルードディレクトリにコピーする。
  • libusb-win32-device-bin-0.1.12.2\lib\gcc\libusb.aをMinGWのライブラリディレクトリにコピーする。

なお、異なるLinuxディストリビューションは、MinGWインストールディレクトリが異なる場合がある。 更に、ライブラリとインクルードディレクトリが別々のsys-rootディレクトリに入っていることもある。

以下はlibusb-win32 Makefile に載っている手順である。

クロスコンパイルを行うとき、mingw32ツールにi586-mingw32msvc-gccを使用する場合、 libusb-win32は以下を実行することでコンパイルすることができる。
make host_prefix=i586-mingw32msvc all

libftdi

この作者はWindowsバイナリを提供していない。 これはtarballやgitツリーからリリースされているソースからビルドすることができる。

gitツリーを使う場合、手順はREADME.mingwに載っている以下のようになる。 なお、これにはcmakeユーティリティがインストールされていることが必要となる。

  1. Toolchain-mingw32.cmakeを正しいMinGWインストールを指すように編集する
  2. mkdir build-win32のように、ビルドディレクトリを作成する(例えば../libftdi/)
  3. 作成したディレクトリに移動し、以下のコマンドを実行する
    • cmake -DCMAKE_TOOLCHAIN_FILE=../Toolchain-mingw32.cmake ..
  4. src/ftdi.hをMinGWインクルードディレクトリへコピーする
  5. build-win32/src/*.aをMinGWライブラリディレクトリへコピーする(ディレクトリ名は[2]の例を使用)


libftd2xx

Cygwin/Win32 ZIPファイルにはftd2xx.win32というディレクトリが入っている。 これを展開すると、ディレクトリは以降の準備では不要となる。 その代わり、以降の節で示すように、このファイルへのパスは--with-ftd2xx-win32-zipdirコンフィギュレーションオプションで提供されなくてはならない。


OpenOCD

これでOpenOCDをMinGWを使ってLinux上でビルドすることができるようになる。 --build--hostオプションを使用すること。


libftdiを使う場合

./configure --build=i686-pc-linux-gnu --host=i586-mingw32msvc \
        --enable-ft2232_libftdi \
        ... other options ...


ftd2xxを使う場合

./configure --build=i686-pc-linux-gnu --host=i586-mingw32msvc \
        --enable-ft2232_ftd2xx \
        --with-ftd2xx-win32-zipdir=/path/to/libftd2xx-win32 \
        ... other options ...


資料2: How to build OpenOCD for windows

Windows用のビルドについて必要なものはわかりましたが、少し足りないようです。付属のREADMEは少し重いので、SparkFun Electronicsの記事を先に読みます。 TBD