aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix73
1 files changed, 57 insertions, 16 deletions
diff --git a/flake.nix b/flake.nix
index c85db6e..2e717b8 100644
--- a/flake.nix
+++ b/flake.nix
@@ -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}