Nix Flakeでpico-sdk開発環境構築
Nix Packagesにpico-sdkがあるので、これを使えるのですが、submoduleの扱いに注意しないとTinyUSBとかが使えなくなります。
{
description = "Raspberry Pi Pico development environment";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
local-pico-sdk = pkgs.pico-sdk.override {
withSubmodules = true;
};
in
{
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
git
cmake
ninja
gcc-arm-embedded
local-pico-sdk
openocd-rp2040
minicom
python3
pkg-config
llvmPackages_20.clang-tools
];
shellHook = ''
export GCC_ARM_PATH=${pkgs.gcc-arm-embedded}
export PICO_SDK_PATH=${local-pico-sdk}/lib/pico-sdk
echo "Pico SDK environment loaded!"
echo "PICO_SDK_PATH: $PICO_SDK_PATH"
'';
};
}
);
}あとはいつも通りVSCodeでディレクトリを開いて、direnvでFlakeで定義されたdevShellの環境を読み込めばOK。withSubmodules = true;あたりがTinyUSBとか使うのに必要なところになります。
あと、自分はC/C++を書くときにclangdを使いたいので、その関係でNinjaやclang-toolsが入っていたり、GCC_ARM_PATH でgccのパスを取得できるようにしています。
clangdを使うための.vscode/settings.jsonはこんな感じ
{
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}/build",
"--header-insertion=never",
"--clang-tidy",
"--enable-config",
"--query-driver=${env:GCC_ARM_PATH}/bin/arm-none-eabi*"
],
"cmake.generator": "Ninja"
}もちろん CMakeLists.txt に set(CMAKE_EXPORT_COMPILE_COMMANDS ON) も必要です。
