🌊

Logue SDK 2.0をWindowsから使う時のメモ

2023/02/14に公開

Logue SDKは2.0からDockerベースになった。READMEに従えばほぼ困るところはなかったけど、いちおうメモ。

https://github.com/korginc/logue-sdk/tree/master/platform/drumlogue

WSLをインストール

(ここはググれば最新のやり方が出てくると思うのでスキップ)

wsl --install Ubuntu-22.04
wsl --set-default Ubuntu-22.04

Dockerをインストール

ほぼここに書かれてる通りだけど、ユーザー追加はsudo usermod -aG dockerじゃなくてsudo usermod -aG docker $USERなので注意(書かれなくてもわかるようなものだけど、Linux使うの久々すぎて何もかも忘れていた)。

https://dev.classmethod.jp/articles/docker-cli-without-dockerdesktop-on-windows/

いちおう全部書いておくと、こんな感じだった。

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を送ったのでマージされるかもしれない。

https://github.com/korginc/logue-sdk/pull/67

VS Code の C/C++ 拡張機能の設定

ホスト側にも Arm GNU Toolchain を入れれば、だいたいコードの補完とかそれっぽくなるかな?と思ってやってみた。まずはバージョンはあまり気にせず、ここからツールチェーンをダウンロードしてインストールする。

https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

「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