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 00000000..b3dc9eee --- /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