diff options
Diffstat (limited to 'flake.nix')
-rw-r--r-- | flake.nix | 73 |
1 files changed, 57 insertions, 16 deletions
@@ -8,23 +8,67 @@ | |||
8 | let | 8 | let |
9 | pkgs = nixpkgs.legacyPackages."${system}"; | 9 | pkgs = nixpkgs.legacyPackages."${system}"; |
10 | nativeBuildInputs = with pkgs; [ | 10 | nativeBuildInputs = with pkgs; [ |
11 | gcc | ||
11 | flex | 12 | flex |
12 | bison | 13 | bison |
13 | ]; | 14 | ]; |
15 | defs = [ | ||
16 | { name = "1"; yacc = false; } | ||
17 | { name = "2"; yacc = false; } | ||
18 | { name = "3"; yacc = false; } | ||
19 | { name = "4"; yacc = false; } | ||
20 | { name = "5"; yacc = false; } | ||
21 | { name = "6"; yacc = true; } | ||
22 | { name = "7"; yacc = true; } | ||
23 | { name = "8"; yacc = true; } | ||
24 | ]; | ||
25 | apps = builtins.listToAttrs (builtins.map | ||
26 | (def: | ||
27 | let | ||
28 | builder = pkgs.stdenv.mkDerivation { | ||
29 | name = "${def.name}-v0.1.0"; | ||
30 | src = ./.; | ||
31 | buildInputs = nativeBuildInputs; | ||
32 | unpackCmd = '' | ||
33 | cp -r $src/${def.name} . | ||
34 | ''; | ||
35 | buildPhase = '' | ||
36 | flex -o ${def.name}.yy.cc main.l | ||
37 | if [[ ${pkgs.lib.trivial.boolToString def.yacc} = true ]]; then | ||
38 | yacc -d main.y | ||
39 | gcc -o exec y* ${def.name}.yy.cc | ||
40 | else | ||
41 | gcc -o exec ${def.name}.yy.cc | ||
42 | fi | ||
43 | ''; | ||
44 | installPhase = '' | ||
45 | mkdir -p $out/bin | ||
46 | install -m 755 -D exec -t $out/bin/ | ||
47 | ''; | ||
48 | }; | ||
49 | in | ||
50 | { | ||
51 | name = def.name; | ||
52 | value = { | ||
53 | type = "app"; | ||
54 | program = "${builder}/bin/exec"; | ||
55 | }; | ||
56 | }) | ||
57 | defs); | ||
58 | # buildYacc = pkgs.writeScriptBin "build-yacc" | ||
59 | # '' | ||
60 | # set -e | ||
61 | # prog_name="$1" | ||
62 | # outdir="outputs/$prog_name" | ||
63 | # mkdir -p "$outdir" | ||
14 | 64 | ||
15 | buildScript = pkgs.writeScriptBin "build-script" | 65 | # ${pkgs.flex}/bin/flex -o "$outdir"/lex.yy.cc "$prog_name"/main.l |
16 | '' | 66 | # ${pkgs.bison}/bin/yacc -b "$outdir"/y -d "$prog_name"/main.y |
17 | set -e | 67 | # ${pkgs.gcc}/bin/gcc -o "$outdir"/exec "$outdir"/y.* |
18 | prog_name="$1" | ||
19 | outdir="outputs/$prog_name" | ||
20 | mkdir -p "$outdir" | ||
21 | |||
22 | ${pkgs.flex}/bin/flex -o "$outdir"/lex.yy.cc "$prog_name"/main.l | ||
23 | ${pkgs.gcc}/bin/gcc "$outdir"/lex.yy.cc -o "$outdir"/exec | ||
24 | 68 | ||
25 | ./"$outdir"/exec < "$prog_name"/input | 69 | # ./"$outdir"/exec < "$prog_name"/input |
26 | rm -r outputs | 70 | # rm -r outputs |
27 | ''; | 71 | # ''; |
28 | 72 | ||
29 | in | 73 | in |
30 | rec { | 74 | rec { |
@@ -33,9 +77,6 @@ | |||
33 | gcc | 77 | gcc |
34 | ]); | 78 | ]); |
35 | }; | 79 | }; |
36 | defaultApp = { | 80 | inherit apps; |
37 | type = "app"; | ||
38 | program = "${buildScript}/bin/build-script"; | ||
39 | }; | ||
40 | }); | 81 | }); |
41 | } | 82 | } |