Logue SDK 2.0をWindowsから使う時のメモ
Logue SDKは2.0からDockerベースになった。READMEに従えばほぼ困るところはなかったけど、いちおうメモ。
WSLをインストール
(ここはググれば最新のやり方が出てくると思うのでスキップ)
wsl --install Ubuntu-22.04
wsl --set-default Ubuntu-22.04
Dockerをインストール
ほぼここに書かれてる通りだけど、ユーザー追加はsudo usermod -aG docker
じゃなくてsudo usermod -aG docker $USER
なので注意(書かれなくてもわかるようなものだけど、Linux使うの久々すぎて何もかも忘れていた)。
いちおう全部書いておくと、こんな感じだった。
sudo apt update
sudo apt upgrade
sudo apt install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
sudo service docker start
sudo usermod -aG docker $USER
これでDockerが使えるようになってるはず。ちなみにWindowsの側からdockerを使うには、
wsl --exec docker run hello-world
みたいにすればいける。
ビルド用のDockerイメージをビルド
Logue SDKのレポジトリをクローンしてきて、以下を実行。何が起こってるのかはわからないけど、イメージがビルドされる。
wsl --exec ./docker/build_image.sh
logue-sdk-dev-env
というイメージができていればOK。
❯ wsl --exec docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
logue-sdk-dev-env 0.5.12 d70b14d6b9f6 9 minutes ago 2.89GB
logue-sdk-dev-env latest d70b14d6b9f6 9 minutes ago 2.89GB
hello-world latest feb5d9fea6a5 16 months ago 13.3kB
ちなみに、パスが\
になってるとエラーになる。てっきりWSLが勝手に変換してくれると思って10分くらい悩んでしまった。
❯ wsl --exec .\docker\build_image.sh
<3>WSL (5875) ERROR: CreateProcessEntryCommon:570: execvpe .\docker\build_image.sh failed 2
<3>WSL (5875) ERROR: CreateProcessEntryCommon:579: Create process not expected to return
ビルド
READMEに従えばビルドできる。
wsl --exec ./docker/run_interactive.sh
ちなみに、ビルド中に一時ファイルがつくられてちょっと邪魔。コミットする必要はないので、.gitignore
に入れてしまうとよさそう。pull requestを送ったのでマージされるかもしれない。
VS Code の C/C++ 拡張機能の設定
ホスト側にも Arm GNU Toolchain を入れれば、だいたいコードの補完とかそれっぽくなるかな?と思ってやってみた。まずはバージョンはあまり気にせず、ここからツールチェーンをダウンロードしてインストールする。
「C/C++: Select IntelliSense Configuration...」からインストールしたツールチェーンを選ぶ。
すると、こういう感じの .vscode/c_cpp_properties.json
を生成してくれるはず。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "windows-gcc-arm",
"compilerPath": "c:/Program Files (x86)/Arm GNU Toolchain arm-none-eabi/13.3 rel1/bin/arm-none-eabi-gcc.exe"
}
],
"version": 4
}
ただし、これだけでは不十分で、こういう赤線があちこちで出ている。
調べた結果、どうやらこれは、コアの種類に応じてマクロが define される個所があって、ビルドするときは自分でやらなくても勝手にいい感じにやってくれるけど、IntelliSense で動くようにするには自分で定義しないといけないらしい。ということで、今回は NTS-3(Cortex M7 シリーズ)なので、↑の .vscode/c_cpp_properties.json
の "defines"
に "ARM_MATH_CM7"
と "__ARM_FP"
を追加したらうまくいった。
#if defined(ARM_MATH_CM7)
#include "core_cm7.h"
#elif defined (ARM_MATH_CM4)
#include "core_cm4.h"
#elif defined (ARM_MATH_CM3)
#include "core_cm3.h"
#elif defined (ARM_MATH_CM0)
#include "core_cm0.h"
#define ARM_MATH_CM0_FAMILY
#elif defined (ARM_MATH_CM0PLUS)
#include "core_cm0plus.h"
#define ARM_MATH_CM0_FAMILY
#else
#error "Define according the used Cortex core ARM_MATH_CM7, ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS or ARM_MATH_CM0"
#endif
Discussion