Skip to content

Commit e781301

Browse files
authored
Merge pull request #97 from mlabs-haskell/bladyjoker/ctl-integration
CTL integration
2 parents f4644d9 + c989c09 commit e781301

File tree

62 files changed

+22216
-277
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+22216
-277
lines changed

extras/lbf-haskell-plutus.nix

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
let
2+
utils = import ./utils.nix;
3+
in
4+
lbf: lbg-haskell: lbfHaskellOpts: (import ./lbf-haskell.nix) lbf lbg-haskell (utils.overrideAttrs
5+
{
6+
"imports" = {
7+
default = [ ];
8+
override = imps: imps ++ [ ../libs/lbf-plutus ../libs/lbf-prelude ];
9+
};
10+
"dependencies" = {
11+
default = [ ];
12+
override = deps: deps ++ [ "lbf-prelude" "lbr-prelude" "lbf-plutus" "lbr-plutus" ];
13+
};
14+
"classes" = {
15+
default = [ ];
16+
override = classes: classes ++ [ "Plutus.V1.PlutusData" "Prelude.Eq" "Prelude.Json" ];
17+
};
18+
}
19+
lbfHaskellOpts
20+
)
21+
22+

extras/lbf-haskell.nix

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@ lbg-haskell:
55
{
66
# Nixpkgs
77
pkgs
8-
, # Source that are passed to `lbf` as the `--import-path` flag and used to find `files`.
9-
# Examples: src = [ ./api ]
8+
, # Source that is passed to `lbf` as the `--import-path` flag and used to find `files`.
9+
# Examples: src = ./api
1010
src
1111
, # Additional sources that are passed to `lbf` as the `--import-path` flag.
1212
# Examples: imports = [ lbf-prelude ]
1313
imports ? [ ]
1414
, # .lbf files in `src` to compile and codegen.
1515
# Examples: files = [ "Foo.lbf" "Foo/Bar.lbf" ]
1616
files
17+
# Classes for which to generate implementations for (default lbf-prelude classes).
18+
, classes ? [ "Prelude.Eq" "Prelude.Json" ]
1719
, # Dependencies to include in the Cabal's `build-depends` stanza.
1820
# examples: dependencies = [ "lbf-prelude" "lbr-prelude" ]
1921
dependencies ? [ ]
@@ -25,6 +27,7 @@ lbg-haskell:
2527
version ? "0.1.0.0"
2628
}:
2729
let
30+
utils = import ./utils.nix;
2831
cabalTemplate = pkgs.writeTextFile {
2932
name = "lambda-buffers-cabal-template";
3033
text = ''
@@ -55,10 +58,11 @@ pkgs.stdenv.mkDerivation {
5558
pkgs.jq
5659
];
5760
buildPhase = ''
61+
set -vox
5862
mkdir autogen
5963
mkdir .work
6064
ls
61-
lbf build ${builtins.concatStringsSep " " (builtins.map (src: "--import-path ${src}") ([src] ++ imports))} \
65+
lbf build ${utils.mkFlags "import-path" ([src] ++ imports)} ${utils.mkFlags "gen-class" classes} \
6266
--work-dir .work \
6367
--gen ${lbg-haskell}/bin/lbg-haskell \
6468
--gen-dir autogen \

extras/lbf-purescript-plutus.nix

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
let
2+
utils = import ./utils.nix;
3+
in
4+
lbf: lbg-purescript: lbfPurescriptOpts: (import ./lbf-purescript.nix) lbf lbg-purescript (utils.overrideAttrs
5+
{
6+
"imports" = {
7+
default = [ ];
8+
override = imps: imps ++ [ ../libs/lbf-plutus ../libs/lbf-prelude ];
9+
};
10+
"dependencies" = {
11+
default = [ ];
12+
override = deps: deps ++ [ "lbf-prelude" "lbr-prelude" "lbf-plutus" "lbr-plutus" ];
13+
};
14+
# TODO(https://github.com/mlabs-haskell/lambda-buffers/issues/98): Add Prelude.Json once the issue is resolved
15+
"classes" = {
16+
default = [ ];
17+
override = classes: classes ++ [ "Plutus.V1.PlutusData" "Prelude.Eq" ];
18+
};
19+
}
20+
lbfPurescriptOpts
21+
)

extras/lbf-purescript.nix

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@ lbg-purescript:
55
{
66
# Nixpkgs
77
pkgs
8-
, # Source that are passed to `lbf` as the `--import-path` flag and used to find `files`.
9-
# Examples: src = [ ./api ]
8+
, # Source that is passed to `lbf` as the `--import-path` flag and used to find `files`.
9+
# Examples: src = ./api
1010
src
1111
, # Additional sources that are passed to `lbf` as the `--import-path` flag.
1212
# Examples: imports = [ lbf-prelude ]
1313
imports ? [ ]
1414
, # .lbf files in `src` to compile and codegen.
1515
# Examples: files = [ "Foo.lbf" "Foo/Bar.lbf" ]
1616
files
17+
# Classes for which to generate implementations for.
18+
, classes ? [ "Prelude.Eq" "Prelude.Json" ]
1719
, # TODO(bladyjoker): Dependencies to include in the `build` output
1820
# examples: dependencies = [ "lbf-prelude" "lbr-prelude" ]
1921
dependencies ? [ ]
@@ -24,6 +26,9 @@ lbg-purescript:
2426
# Examples: version = "0.1.0.0"
2527
version ? "0.1.0.0"
2628
}:
29+
let
30+
utils = import ./utils.nix;
31+
in
2732
pkgs.stdenv.mkDerivation {
2833
inherit src version;
2934
pname = name;
@@ -36,7 +41,7 @@ pkgs.stdenv.mkDerivation {
3641
buildPhase = ''
3742
mkdir autogen
3843
mkdir .work
39-
lbf build ${builtins.concatStringsSep " " (builtins.map (src: "--import-path ${src}") ([src] ++ imports))} \
44+
lbf build ${utils.mkFlags "import-path" ([src] ++ imports)} ${utils.mkFlags "gen-class" classes} \
4045
--work-dir .work \
4146
--gen ${lbg-purescript}/bin/lbg-purescript \
4247
--gen-dir autogen \

extras/utils.nix

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
overrideAttrs = overrides: attrs:
3+
builtins.mapAttrs
4+
(name: val:
5+
if overrides?${name}
6+
then overrides.${name}.override val
7+
else val
8+
)
9+
((builtins.mapAttrs (name: val: if attrs?${name} then attrs.${name} else val.default) overrides) // attrs);
10+
mkFlags = flag: xs: builtins.concatStringsSep " " (builtins.map (x: "--${flag} ${x}") xs);
11+
}

flake.nix

Lines changed: 55 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@
150150

151151
lbfHaskell = import ./extras/lbf-haskell.nix clis.lbf clis.lbg-haskell;
152152
lbfPurescript = import ./extras/lbf-purescript.nix clis.lbf clis.lbg-purescript;
153+
lbfHaskellPlutus = import ./extras/lbf-haskell-plutus.nix clis.lbf clis.lbg-haskell;
154+
lbfPurescriptPlutus = import ./extras/lbf-purescript-plutus.nix clis.lbf clis.lbg-purescript;
153155
pursFlake = import ./extras/flake-purescript.nix;
154156

155157
# Runtimes
@@ -175,12 +177,22 @@
175177

176178
## Plutus runtime - lbr-plutus
177179

180+
### Haskell
178181
lbrPlutusHsBuild = buildAbstraction {
179182
import-location = ./runtimes/haskell/lbr-plutus/build.nix;
180183
additional = { lbr-prelude = ./runtimes/haskell/lbr-prelude; };
181184
};
182185
lbrPlutusHsFlake = flakeAbstraction lbrPlutusHsBuild;
183186

187+
### Purescript
188+
189+
lbrPlutusPurs = pursFlake (
190+
import ./runtimes/purescript/lbr-plutus/build.nix {
191+
inherit pkgs commonTools;
192+
shellHook = config.pre-commit.installationScript;
193+
}
194+
);
195+
184196
# Schema libs
185197

186198
lbfLibs = {
@@ -209,15 +221,14 @@
209221
dependencies = [ "lbr-plutus" "lbf-prelude" "lbr-prelude" ];
210222
};
211223

212-
# TODO
213-
# lbf-plutus-purs = lbfPurescript {
214-
# inherit pkgs;
215-
# name = "lbf-plutus";
216-
# src = ./libs/lbf-plutus;
217-
# imports = [ ./libs/lbf-prelude ];
218-
# files = [ "Plutus/V1.lbf" "Plutus/V2.lbf" ];
219-
# dependencies = [ "lbr-plutus" "lbf-prelude" "lbr-prelude" ];
220-
# };
224+
lbf-plutus-purs = lbfPurescript {
225+
inherit pkgs;
226+
name = "lbf-plutus";
227+
src = ./libs/lbf-plutus;
228+
imports = [ ./libs/lbf-prelude ];
229+
files = [ "Plutus/V1.lbf" "Plutus/V2.lbf" ];
230+
dependencies = [ "lbr-plutus" "lbf-prelude" "lbr-prelude" ];
231+
};
221232
};
222233

223234
# Test Suites
@@ -239,20 +250,37 @@
239250

240251
### Purescript
241252

253+
lbrPurs = {
254+
lbr-prelude-purs = pkgs.stdenv.mkDerivation {
255+
name = "lbr-prelude";
256+
src = ./runtimes/purescript/lbr-prelude;
257+
phases = "installPhase";
258+
installPhase = "ln -s $src $out";
259+
};
260+
lbr-plutus-purs = pkgs.stdenv.mkDerivation {
261+
name = "lbr-plutus";
262+
src = ./runtimes/purescript/lbr-plutus;
263+
phases = "installPhase";
264+
installPhase = "ln -s $src $out";
265+
};
266+
267+
};
242268
lbtPreludePursFlake = pursFlake (
243269
import ./testsuites/lbt-prelude/lbt-prelude-purescript/build.nix {
244270
inherit pkgs commonTools shellHook lbfPurescript;
245-
lbr-prelude-purs = pkgs.stdenv.mkDerivation { name = "lbr-prelude"; src = ./runtimes/purescript/lbr-prelude; phases = "installPhase"; installPhase = "ln -s $src $out"; };
271+
inherit (lbrPurs) lbr-prelude-purs;
246272
inherit (lbfLibs) lbf-prelude-purs;
247273
}
248274
);
249275

250276
## Plutus test suite - lbt-plutus
251277

278+
### Haskell
279+
252280
lbtPlutusHsBuild = buildAbstraction {
253281
import-location = ./testsuites/lbt-plutus/lbt-plutus-haskell/build.nix;
254282
additional = {
255-
inherit lbfHaskell;
283+
inherit lbfHaskellPlutus;
256284
lbf-prelude = ./libs/lbf-prelude;
257285
lbr-prelude-hs = ./runtimes/haskell/lbr-prelude;
258286
lbf-plutus = ./libs/lbf-plutus;
@@ -262,6 +290,16 @@
262290
};
263291
lbtPlutusHsFlake = flakeAbstraction lbtPlutusHsBuild;
264292

293+
### Purescript
294+
295+
lbtPlutusPursFlake = pursFlake (
296+
import ./testsuites/lbt-plutus/lbt-plutus-purescript/build.nix {
297+
inherit pkgs commonTools shellHook lbfPurescriptPlutus;
298+
inherit (lbrPurs) lbr-prelude-purs lbr-plutus-purs;
299+
inherit (lbfLibs) lbf-prelude-purs lbf-plutus-purs;
300+
}
301+
);
302+
265303
# Utilities
266304
renameAttrs = rnFn: pkgs.lib.attrsets.mapAttrs' (n: value: { name = rnFn n; inherit value; });
267305
in
@@ -277,9 +315,11 @@
277315
// lbrPreludeHsFlake.packages
278316
// lbrPreludePurs.packages
279317
// lbrPlutusHsFlake.packages
318+
// lbrPlutusPurs.packages
280319
// lbtPreludeHsFlake.packages
281320
// lbtPreludePursFlake.packages
282321
// lbtPlutusHsFlake.packages
322+
// lbtPlutusPursFlake.packages
283323
// clis
284324
// lbfLibs;
285325

@@ -293,17 +333,21 @@
293333
dev-lbr-prelude-haskell = lbrPreludeHsFlake.devShell;
294334
dev-lbr-prelude-purescript = lbrPreludePurs.devShell;
295335
dev-lbr-plutus-haskell = lbrPlutusHsFlake.devShell;
336+
dev-lbr-plutus-purescript = lbrPlutusPurs.devShell;
296337
dev-lbt-prelude-haskell = lbtPreludeHsFlake.devShell;
297338
dev-lbt-prelude-purescript = lbtPreludePursFlake.devShell;
298339
dev-lbt-plutus-haskell = lbtPlutusHsFlake.devShell;
340+
dev-lbt-plutus-purescript = lbtPlutusPursFlake.devShell;
299341
lb = lbEnv;
300342
};
301343

302344
# nix flake check
303345
checks = devShells //
304346
packages //
305347
lbrPreludePurs.checks //
348+
lbrPlutusPurs.checks //
306349
lbtPreludePursFlake.checks //
350+
lbtPlutusPursFlake.checks //
307351
renameAttrs (n: "check-${n}") (
308352
compilerFlake.checks //
309353
frontendFlake.checks //

0 commit comments

Comments
 (0)