From 59918fa4f925c063c8beec7142f786eda5746cc4 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sun, 10 Oct 2021 14:22:31 +0200 Subject: Add ulisp-arm derivation --- ulisp.nix | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 ulisp.nix (limited to 'ulisp.nix') diff --git a/ulisp.nix b/ulisp.nix new file mode 100644 index 0000000..6fc6e33 --- /dev/null +++ b/ulisp.nix @@ -0,0 +1,65 @@ +{ pkgs, teensy-core, ... }: + +let + # hacky usage of arduino-cli to preprocess ulisp "ino" source into compilable C++ code + preprocessed-ulisp-arm = pkgs.stdenv.mkDerivation rec { + name = "preprocessed-ulisp-arm.cpp"; + + src = pkgs.fetchFromGitHub { + owner = "technoblogy"; + repo = "ulisp-arm"; + rev = "a25fff3ef1072bdc2733d8064fcf0738579ab7ed"; + sha256 = "p6H9To9vccHrP46Cv5m+cAFDVPXDCORUWcqOz18c3kg="; + }; + + outputHashMode = "flat"; + outputHashAlgo = "sha256"; + outputHash = "mutVLBFSpTXgUzu594zZ3akR/Z7e9n5SytU6WoQ6rKA="; + + buildInputs = with pkgs; [ + cacert + arduino-cli + ]; + + buildPhase = '' + export HOME=/tmp/arduino + arduino-cli core install arduino:samd + mv ulisp-arm.ino source.ino + arduino-cli compile --fqbn arduino:samd:arduino_zero_native --preprocess > ulisp-arm.cpp + echo 'extern "C" int main(void) { setup(); while(true) { loop(); } }' >> ulisp-arm.cpp + ''; + + installPhase = '' + cp ulisp-arm.cpp $out + ''; + }; + +in pkgs.stdenv.mkDerivation rec { + name = "teensy-ulisp"; + + buildInputs = with pkgs; [ + gcc-arm-embedded + teensy-core + ]; + + phases = [ "buildPhase" "installPhase" ]; + + buildPhase = '' + cp ${./test/Makefile} Makefile + cp ${preprocessed-ulisp-arm} ulisp-arm.cpp + + export CC=arm-none-eabi-gcc + export CXX=arm-none-eabi-g++ + export OBJCOPY=arm-none-eabi-objcopy + export SIZE=arm-none-eabi-size + + export TEENSY_PATH=${teensy-core} + + make + ''; + + installPhase = '' + mkdir $out + cp *.hex $out/ + ''; +} -- cgit v1.2.3