blob: 6fc6e33909d32a721fe783c2ad8017cddc2fa069 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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/
'';
}
|