From 4d8af366eaf709c14c62df22851de9df169fa779 Mon Sep 17 00:00:00 2001
From: q3k <q3k@q3k.org>
Date: Thu, 25 Jul 2019 03:22:19 +0200
Subject: [PATCH] feat: Add a nix expression

We provide a nix expression to build card10 firmware.

On Linux/Darwin with Nix and NixOS, this can be used as follows:

  $ git submodule update --init
  $ nix build
  $ ls result/
  result/bootloader:
  bootloader.elf

  result/epicardium:
  epicardium.elf

  result/pycardium:
  pycardium.elf  pycardium_epicardium.bin

This derivation can also be used for development:

  $ nix-shell
  $ meson --cross-file card10-cross.ini build/
  $ ninja -C build/ -j8
  $ # hack on things
  $ ninja -C build/ -j 8
  $ ls build/
  [ ... ]
---
 default.nix | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)
 create mode 100644 default.nix

diff --git a/default.nix b/default.nix
new file mode 100644
index 000000000..b3dc9eeef
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,50 @@
+with import <nixpkgs> {};
+
+let
+  py = python36;
+  # crc16 does not exist in pythonPackages - bring in our own.
+  crc16 = py.pkgs.buildPythonPackage rec {
+    pname = "crc16";
+    version = "0.1.1";
+
+    src = py.pkgs.fetchPypi {
+      inherit pname version;
+      sha256 = "15nkx0pa4lskwin84flpk8fsw3jqg6wic6v3s83syjqg76h6my61";
+    };
+  };
+in stdenv.mkDerivation rec {
+  name = "card10";
+  nativeBuildInputs = [
+    bash
+    crc16
+    gcc-arm-embedded
+    meson
+    ninja
+    py
+  ];
+  src = ./.;
+  buildCommand = ''
+    build=$(pwd)/build
+
+    # Copy source over, as dev sources from '.' thend to have odd permissions.
+    cp -r $src $(pwd)/src
+    cd $(pwd)/src
+    # Ensure we have write right to patch shebangs.
+    chmod -R +w .
+
+    # The nix sandbox does not have /usr/bin/env bash, patch things up.
+    for f in lib/micropython/*.sh; do
+      patchShebangs "$f"
+    done
+
+    # Actually run the build.
+    meson --cross-file card10-cross.ini "$build"
+    ninja -C "$build" -j $NIX_BUILD_CORES
+
+    # Copy artifacts to derivation outputs.
+    install -D -m 444 "$build/bootloader/bootloader.elf" -t "$out/bootloader"
+    install -D -m 444 "$build/pycardium/pycardium_epicardium.bin" -t "$out/pycardium"
+    install -D -m 444 "$build/epicardium/epicardium.elf" -t "$out/epicardium"
+    install -D -m 444 "$build/pycardium/pycardium.elf" -t "$out/pycardium"
+  '';
+}
-- 
GitLab