🔖

Windows用 RaspberryPi Pico コンパイル環境(C言語)の作り方

2022/07/27に公開
16

更新履歴

  • update 2022/10/03 : msys、Windowsのcmdのどちらを使うのかわかりにくい個所を修正
  • update 2022/10/05 : 飛べないリンクを修正
  • update 2022/10/05 : 環境変数の追加
  • update 2022/10/09 : MSYSのコンソールからパッケージを追加する場合の注意点を追加

■これは?


Windows10でRaspberryPi Pico用の開発環境を作るメモです。
Windowsのコマンドウィンドウから実行可能な以下のソフトをインストールして、 pico-sdkと、pico-examples の blink(Lチカ)がコンパイル、動作確認までできることを目指します。

  • ARM用コンパイラ
  • CMake
  • MSYS2(以下を追加インストール)
    • make
    • Python
    • git

●インストール時のフォルダ構成

この説明では、RaspberryPi Pico(とか、マイコン用)に使用するツール類は、Cドライブ直下に DevTool フォルダを作成してインストールします。(C:\Program Files にはインストールしません)

■ソフトのインストール

基本的には公式のpdf「Getting started with Raspberry Pi Pico: C/C++ development」の手順に従います。
pdfは下記のURLを開いて、真ん中くらいまでスクロールしたあたりにある Documents の Getting started with Raspberry Pi Pico: C/C++ development をクリックします。
https://www.raspberrypi.com/products/raspberry-pi-pico/

pdfの Chapter 9. Building on other platforms の Windows の手順を参照してください。
pdfの説明では、以下の内容をインストールしますが、この説明では、※の部分をMSYS2でインストールします。

  • Arm GNU Toolchain
  • CMake
  • Build Tools for Visual Studio 2022 ※
  • Python 3.10 ※
  • Git ※

●ARM用コンパイラをインストール

ARM用コンパイラをダウンロードします。

●CMakeをインストール

CMakeをダウンロード、インストールします。
(cmake-3.24.0-rc3-windows-x86_64.msi を使いました。)
インストール時の変更箇所

●MSYS2をインストール

MSYS2をダウンロード、インストールします。
(msys2-x86_64-20220603.exe を使いました。)
インストール時の変更箇所

●Python、make、gitをインストール

MSYS2のコンソールを起動して追加インストールします。

MSYS2のコンソールで以下を順番に実行してください。

pacman -Syu
pacman -S base-devel
pacman -S mingw-w64-x86_64-toolchain
pacman -S git
pacman -S make

■バッチファイルの作成

インストールしたCMake、MSYS2、ARM用コンパイラのプログラムが起動できるようにバッチファイルをエディタ等で作成します。
pico-sdkコンパイル用の設定も含んでいます。

setPath.bat
set CMAKE_ROOT = C:\DevTool\tool\CMake\bin\
set PICO_SDK_PATH = ..\..\pico-sdk
set CMAKE_C_COMPILER = C:\DevTool\arm\gnu\bin\arm-none-eabi-gcc
set CMAKE_CXX_COMPILER = C:\DevTool\arm\gnu\bin\arm-none-eabi-g++.exe
PATH = C:\DevTool\arm\gnu\arm-none-eabi\bin;C:\DevTool\arm\gnu\bin;C:\DevTool\tool\CMake\bin;C:\DevTool\tool\msys64\mingw64\bin;C:\DevTool\tool\msys64\usr\bin;%PATH%;

■環境変数の追加

環境変数の変数に「PICO_SDK_PATH」を、値に「..\..\pico-sdk」を設定してください。

■pico-sdkとpico-examplesのダウンロード

まずは、pico-sdkとpico-examplesをgitで取得するためのフォルダを作成します。
フォルダの作成は、Windowsのコマンドウィンドウまたはエクスプローラーで、Cドライブ直下にwork-picoフォルダを作成します。
あらかじめ作っておいたバッチファイルをエクスプローラー等でコピーします。


(例では、Windowsのコマンドウィンドウでフォルダを作り、前項目で作成したバッチファイルをエクスプローラーでコピー)

●pico-sdk取得

Windowsのコマンドウィンドウで以下を順番に実行してください。

git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
cd ..

●pico-examples取得

前項目で使用したWindowsのコマンドウィンドウで以下を実行してください。

git clone -b master https://github.com/raspberrypi/pico-examples.git

この時点で、以下の様なフォルダ構成になっていることを確認します。

■pico-sdkとpico-examplesのコンパイル

(前項目のWindowsのコマンドウィンドウを閉じないで実行する場合は以下のsetPath.batの実行操作は不要です)
Windowsのコマンドウィンドウで work-pico フォルダに移動して、setPath.batを実行してください。

Windowsのコマンドウィンドウで pico-examples フォルダに移動して、以下のコマンドを実行してください。(setPath.batでうまくパスが設定されていればmakeコマンド以降は添付のWindowsのコマンドウィンドウのようにコンパイルが進みます。)

cd pico-examples
mkdir build
cd build
cmake -G "MSYS Makefiles" ..
make

●cmake -G "MSYS Makefiles" ..コマンド入力以降の画面が以下になります。

●makeコマンド入力以降の画面が以下になります。

■動作確認

blink.uf2をRaspberryPi Picoに書き込み、LEDが点滅したら完了です。

Discussion

yasuiyasui

#windows側か、msys側かで悩みました
記事をありがとうございます。でも 最終的な cmake -G "MSYS Makefiles" .. と make は windows の cmd ウインドウの上で行うのですね。 msys側で行っていて、動かないなと悩んでました。
とは言え、今は なぜか、-- Configuring incomplete, errors occurred! で怒られています。
もう少し悩んでみます。

ozeoze

こんにちは。
手順で分かりにくい部分のご指摘ありがとうございます。
msysなのか、cmdなのか解るように修正しようと思います。
結構ややこしい構成になってしまったのは、nmakeを使いたく無かったという点です。

一度cmakeを動かした後は、一度buildフォルダの中を消して再実行するとうまくいくことがあります。

エラーに関しては現時点でなんとも…なところがありますので、こちらでも再度掲載の手順をやり直して問題がない確認します。(自分用のメモですので自分ができないと困ってしまうのです。)

ozeoze

お手数おかけしております。エラーの原因がわかりました。
OSを一度まっらさな状態にして記載の手順を確認したところ、環境変数の追加が抜けていました。
修正本文では、バッチファイル作成の後に、環境変数追加の手順をいれました。
対策として変数に「PICO_SDK_PATH」を、値に「....\pico-sdk」を設定してください。
サンプルフォルダに作成したbuildフォルダの中身はエクスプローラなどで消してください。
Windowsのコマンドウィンドウより所定の場所で「cmake -G "MSYS Makefiles" .. 」を実行することでコンパイルできると思います。

記事を書いた後は、まっさらにしたOSで手順の確認後、問題なく同じことができたことを確認してから公開するようにします。

yasuiyasui

早速の確認ありがとうございます。おかげさまでcmake までは通るようになりました。そのあとのmakeで引っかかってます。
CMakeError.log を見ると
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.
Compiler: CMAKE_CXX_COMPILER-NOTFOUND
Build flags:
Id flags:
と吐いています。
環境変数 CMAKE_CXX_COMPILER=C:\DevTool\arm\gnu\bin\arm-none-eabi-g++.exe はあるし、
C:\DevTool\arm\gnu\bin のディレクトリ
2021/10/18 04:13 2,129,736 arm-none-eabi-g++.exe
ものもあるのですが。not found ?このエラーは何かとまだ悩んでいます。

ozeoze

今回やり直した時は、エラーが出ていなかったので、再度確認してみます。

ozeoze

こちらでもログの内容を確認しました。
同じように「"CMakeCXXCompilerId.cpp" failed.」は出力されていますが、
「CMAKE_CXX_COMPILER-NOTFOUND」は出力されていません。

このページの掲載の手順と説明ではわかりにくいですが・・・setPath.batを実行したコマンドウィンドウを閉じずに続けてcmakeやmakeを行ったか。くらいが思い当たります。

確認として、cmake実行前に図のように「arm-none-eabi-g++.exe」をコマンドウィンドウから実行してパスが通っていることと、

setコマンドで設定した環境変数が見えていることが考えられます。

yasuiyasui

ありがとうございます。先ほどは下記をお伝えしていませんでしたが、g++ は見つかります。
C:\work-pico\pico-examples\build>arm-none-eabi-g++.exe
arm-none-eabi-g++.exe: fatal error: no input files
compilation terminated.
おかしなことが起きているのは下記なので、手動では見つかっているコンパイラが make では見つからないとは
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:2 (project):
No CMAKE_CXX_COMPILER could be found.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.

先ほどまで、cmake は cmake-3.24.2-windows-x86_64.msi を使用していましたが。こちらのサイトで使用されている cmake-3.24.0-rc3-windows-x86_64.msi にしてみましたが、同じ
No CMAKE_CXX_COMPILER could be found.
まぁ、パスの指定にはあまり関係なかったかと。

ozeoze

こんばんは。
情報ありがとうございます。
投稿の手順を書いているときには出ていたかもしれないエラーな気がしてきましたので、記憶をたどってみようと思います。

ozeoze

手順を書いていた時の記憶では・・・以下の点が注意が必要でした。
もしかすると、的外れな感じかもしれませんが、下記をお試しいただけないでしょうか?

  • buildフォルダ内に、前回のcmakeに失敗したときのファイルなどが残っていると、後続の手順が失敗することがあるため、環境変数を設定しなおした後は、buildフォルダの中身は全削除してからcmakeを実行する必要がある。
      →私は環境的を変えた場合、念のため毎回buildフォルダーの中を全部消すようにしています。

  • MSYSインストール終了後に開くコンソールではなく、メニューから紫色っぽいMSYSを選択してMSYS2のコンソールを起動し、「pacman -S base-devel」と「pacman -S mingw-w64-x86_64-toolchain」実行する。(MSYSインストール完了時に表示されているコンソール画面では期待した動作にならない可能性があります)
      また、ここに記載してある手順のほとんどはWindowsのコンソールからcmakeなどを起動する手順ですが、通しているパスからMSYSのプログラム等も呼び出すため、MSYS側にある程度インストールが必要です。

yasuiyasui

おお!cmake を一度 uninstall して、再インストールしてから「(windows)メニューから紫色っぽいMSYSを選択してMSYS2のコンソールを起動し」て pacman でいくつかインストールしてから、
build の下を全部消して cmake と make を行ったら、build (なぜか そこにある全部のsrc を(笑))してくれています。いつ終わるんだコレ(笑)。あ、下記の別スレッドの「blink以外もビルドされています」の事なのですね。
今 mcp9808とやらを処理中。CMakeList.txt で add されている sub directory を全部buildしているのですか。
途中ですが、エクスプローラーで 出来たファイルを見ると build\blink の下に blink.uf2 は出来ていましたので、問題なさそうです。
ありがとうございました。

ozeoze

こんにちは。
うまく動いてそうでよかったです。
私の手順確認用PCは超遅いので(加えてソースコード量も多いため)数時間かかります。

yasuiyasui

昔のUNIXカーネルのbuildを思い出してしまいました。R3000 25MHzで一晩とか。

ozeoze

確かに、昔はCPU(や、いろいろなリソース)も非力な割にはソースコードはたくさんあったり・・・
私も昔はmicroSPARCのSPARC Stationで携帯の開発をやっていて、フルビルドに8時間とか・・・
今はCPU(や、周辺も)性能がよくなったので良い時代になったと思っています。
 (掲載内容は趣味なので数時間かかっても「寝てつ待つか~」ですが、仕事だと「あぁ⤵終わったorz」と思うかもです)

yasuiyasui

でも 別の不思議なことが。
mkdir build をして、どこにも blink の指定がないのに、何故 blink( でしょうか?)のbuildが行われるのでしょう。

ozeoze

こんにちは。
pico-sampleをcmakeすると、pico-sampleのCMakeList.txtに書かれているサンプルコードがビルドされるためかと思います。
ちなみに、blink以外もビルドされていますが、「Lチカは基本」という観点で、blinkを対象にしています。

yasuiyasui

なるほど、動くようになったら、そのCMakeList.txtも良く見てみます。
ありがとうございます。