-{ pkgs ? import ~/devel/nixpkgs { }, }:
+{ pkgs ? import <nixpkgs> { }, }:
let
- cc = pkgs.pkgsCross.arm-embedded.stdenv.cc;
- tattlekey = { lib, stdenv, cmake, pico-sdk, python3 }:
+
+ tattlekey = { lib, stdenv, cmake, pico-sdk, pico-examples, python3 }:
stdenv.mkDerivation {
pname = "tattlekey";
- version = "0.0.1";
+ version = "0.1.0";
src = lib.cleanSource ./.;
nativeBuildInputs = [ cmake python3 ];
+ postUnpack = ''
+ # Per https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-pico-w.pdf page 9
+ cp ${pico-examples}/pico_w/wifi/lwipopts_examples_common.h lwipopts.h
+ '';
cmakeFlags = [
- "-DCMAKE_C_COMPILER=${cc}/bin/arm-none-eabi-cc"
- "-DCMAKE_CXX_COMPILER=${cc}/bin/arm-none-eabi-c++"
+ "-DCMAKE_C_COMPILER=/usr/bin/arm-none-eabi-gcc"
+ "-DCMAKE_CXX_COMPILER=/usr/bin/arm-none-eabi-c++"
"-DPICO_BOARD=pico_w"
- "-DPICO_SDK_PATH=${pico-sdk.override { minimal = false; }}/lib/pico-sdk"
- "-DPICO_TOOLCHAIN_PATH=${cc}/bin"
+ "-DPICO_SDK_PATH=${pico-sdk}/lib/pico-sdk"
];
+ diskImage = debImage;
+ diskImageFormat = "qcow2";
};
-in pkgs.callPackage tattlekey {}
+
+ pico-sdk-version = "1.5.1";
+
+ pico-sdk = pkgs.pico-sdk.overrideAttrs (old: {
+ version = pico-sdk-version;
+ src = pkgs.fetchFromGitHub {
+ fetchSubmodules = true;
+ owner = "raspberrypi";
+ repo = "pico-sdk";
+ rev = pico-sdk-version;
+ hash = "sha256-GY5jjJzaENL3ftuU5KpEZAmEZgyFRtLwGVg3W1e/4Ho=";
+ };
+ });
+
+ pico-examples = pkgs.fetchFromGitHub {
+ fetchSubmodules = true;
+ owner = "raspberrypi";
+ repo = "pico-examples";
+ rev = "sdk-${pico-sdk-version}";
+ hash = "sha256-mJIOWUqsQJcg7FUWZePf+pA/YblZskDtIVnUJiz7szU=";
+ };
+
+ distro = "debian11x86_64";
+
+ extraPackages = [
+ "build-essential"
+ "cmake"
+ "gcc-arm-none-eabi"
+ "libnewlib-arm-none-eabi"
+ "libstdc++-arm-none-eabi-newlib"
+ ];
+
+ debImage = pkgs.vmTools.diskImageFuns."${distro}" { inherit extraPackages; };
+
+in pkgs.vmTools.runInLinuxImage
+(pkgs.callPackage tattlekey { inherit pico-examples pico-sdk; })