公開日: 2023年11月30日

FreeBSD で Raspberry Pi Pico SDK をビルドする

Raspberry Pi Pico (以下 Pico) 公式の SDK (pico-sdk) およびサンプルプログラム (pico-examples) はいまのところ利用する予定はありませんが、資料としては第一級であり大いに参考になると思います。そこで、これらをビルドして実行できる開発環境を作っておくことにします。ビルドにあたっては libstdc++ というライブラリが必要です。これを、以前別の記事で FreeBSD 上に構築したクロス開発環境に追加インストールします。

libstdc++ のありか

pico-sdk と pico-examples のビルド方法は Raspberry Pi 公式のドキュメント Getting started with Raspberry Pi Pico に簡潔に書かれています。ただ一点、よくわからないところがあって、2.2 節 Install the Toolchain に「Ubuntu や Debian では libstdc++-arm-none-eabi-newlib もインストールせよ」との記載があります。なんぞこれ?? FreeBSD の ports/packages を検索してもそれらしいものは見当たりません。「FreeBSD は Ubuntu や Debian ではないから、既にインストールされているのかな?」と都合よく考えて pico-examples のビルドを強行しても返り討ちに遭います。いろいろ調べたところ、灯台下暗しとでもいいますか、GCC のソースコードに同梱されていることがわかりました。

libstdc++ のビルドとインストール

という訳で、既にインストール済みのクロス開発用 GCC と同様にして libstdc++ もビルドとインストールを行います。クロス開発用 GCC のビルドとインストールについては次の記事を参照してください。

この記事の手順と同じように GCC のソースコード取得から configure スクリプトの実行まで行います (前回の作業結果が残っていれば、この作業は不要です)。ビルド用のディレクトリやインストール先ディレクトリも前回と同じです。また、configure のオプションはとりあえず GCC をビルドしたときと同じにしていますが、これで必要十分かは精査していません。

% cd ~/pico/arm-none-eabi-build/
% wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.xz
%tar Jxf gcc-13.2.0.tar.xz
% cd ~/pico/arm-none-eabi-build/gcc-build
% ../gcc-13.2.0/configure --target=arm-none-eabi --prefix=/home/mijinco/pico/arm-none-eabi --with-cpu=cortex-m0plus --enable-languages=c,c++ --without-headers --with-newlib --with-no-thumb-interwork --with-mode=thumb

あとは次のようにしてビルドとインストールを行います。

% gmake all-target-libstdc++-v3 install-target-libstdc++-v3

libstdc++ のインストール前後でインストール先ディレクトリ (上記の例では ~/pico/arm-none-eabi/) の内容を比較したところ、次のように更新と新規作成が行われていました。ぱっと見た感じ、問題なさそうかなと思います。

  • [新規] arm-none-eabi/include/c++/
  • [新規] arm-none-eabi/include/c++/
  • [新規] arm-none-eabi/lib/arm/autofp/v5te/fpu/libstdc++.*
  • [新規] arm-none-eabi/lib/arm/autofp/v5te/fpu/libstdc++exp.*
  • [新規] arm-none-eabi/lib/arm/autofp/v5te/fpu/libsupc++.*
  • [新規] arm-none-eabi/lib/thumb/autofp/v7/fpu/libstdc++.*
  • [新規] arm-none-eabi/lib/thumb/autofp/v7/fpu/libstdc++exp.*
  • [新規] arm-none-eabi/lib/thumb/autofp/v7/fpu/libsupc++.*
  • [新規] arm-none-eabi/lib/thumb/libstdc++.*
  • [新規] arm-none-eabi/lib/thumb/libstdc++exp.*
  • [新規] arm-none-eabi/lib/thumb/libsupc++.*
  • [更新] lib/gcc/arm-none-eabi/13.2.0/arm/autofp/v5te/fpu/libgcc.a
  • [更新] lib/gcc/arm-none-eabi/13.2.0/arm/autofp/v5te/fpu/libgcov.a
  • [更新] lib/gcc/arm-none-eabi/13.2.0/thumb/autofp/v7/fpu/libgcc.a
  • [更新] lib/gcc/arm-none-eabi/13.2.0/thumb/autofp/v7/fpu/libgcov.a
  • [更新] lib/gcc/arm-none-eabi/13.2.0/thumb/libgcc.a
  • [更新] lib/gcc/arm-none-eabi/13.2.0/thumb/libgcov.a
  • [更新] lib/gcc/arm-none-eabi/13.2.0/libgcc.a
  • [更新] lib/gcc/arm-none-eabi/13.2.0/libgccov.a
  • [新規] share/gcc-13.2.0/

pico-sdk と pico-examples をビルドする

それでは前出の Getting started にしたがって pico-sdk と pico-examples をビルドしてみましょう。あらかじめ CMake を ports/packages からインストールしておいてください。

まずはソースコードを取得します。clone 先は ~/pico/repo/ としています。

% cd ~/pico/repo/
% git clone https://github.com/raspberrypi/pico-sdk.git --branch master
$ cd pico-sdk
$ git submodule update --init
$ cd ..
$ git clone https://github.com/raspberrypi/pico-examples.git --branch master

pico-sdk ディレクトリへのパスを通しておきます。

% export PICO_SDK_PATH=../../pico-sdk

サンプルプログラムの中からとりあえず L チカを選んでビルドします。

% cd pico-examples
% mkdir build
% cd build
% cmake ..
% cd blink
% gmake

ビルドに成功すると blink.uf2 が出力されます。あとはこのファイルをこれまでと同様にして Pico に書き込み、LED がチカチカすることを確認します。

Raspberry Pi Pico 実験室