tvl-depot/nix
sterni 02566cdcfb feat(nix/buildLisp): add ecl
Adds ECL as a second supported implementation, specifically a statically
linked ECL. This is interesting because we can create statically linked
binaries, but has a few drawbacks which doesn't make it generally
useful:

* Loading things is very slow: The statically linked ECL only has byte
  compilation available, so when we do load things or use the REPL it is
  significantly worse than with e. g. SBCL.

* We can't load shared objects via the FFI since ECL's dffi is not
  available when linked statically. This means that as it stands, we
  can't build a statically linked //web/panettone for example.

Since ECL is quite slow anyways, I think these drawbacks are worth it
since the biggest reason for using ECL would be to get a statically
linked binary. If we change our minds, it shouldn't be too hard to
provide ecl-static and ecl-dynamic as separate implementations.

ECL is LGPL and some libraries it uses as part of its runtime are as
well. I've outlined in the ecl-static overlay why this should be of no
concern in the context of depot even though we are statically linking.

Currently everything is building except projects that are using cffi to
load shared libaries which have gotten an appropriate
`badImplementations` entry. To get the rest building the following
changes were made:

* Anywhere a dependency on UIOP is expressed as `bundled "uiop"` we now
  use `bundled "asdf"` for all implementations except SBCL. From my
  testing, SBCL seems to be the only implementation to support using
  `(require 'uiop)` to only load the UIOP package. Where both a
  dependency on ASDF and UIOP exists, we just delete the UIOP one.
  `(require 'asdf)` always causes UIOP to be available.

* Where appropriate only conditionally compile SBCL-specific code and
  if any build the corresponding files for ECL.

* //lisp/klatre: Use the standard condition parse-error for all
  implementations except SBCL in try-parse-integer.

* //3p/lisp/ironclad: disable SBCL assembly optimization hack for all
  other platforms as it may interfere with compilation.

* //3p/lisp/trivial-mimes: prevent call to asdf function by substituting
  it out of the source since it always errors out in ECL and we hardcode
  the correct path elsewhere anyways.

As it stands ECL still suffers from a very weird problem which happens
when compiling postmodern and moptilities:
https://gitlab.com/embeddable-common-lisp/ecl/-/issues/651

Change-Id: I0285924f92ac154126b4c42145073c3fb33702ed
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3297
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Reviewed-by: eta <tvl@eta.st>
2021-08-24 22:00:15 +00:00
..
binify refactor(nix): use our own writeScript(Bin) 2020-06-30 00:19:27 +00:00
bufCheck refactor: Replace 'depotPath' with 'depot.path' 2021-04-12 21:55:07 +00:00
buildGo feat(nix/buildGo): add the import position to errmsg 2021-04-23 16:35:57 +00:00
buildLisp feat(nix/buildLisp): add ecl 2021-08-24 22:00:15 +00:00
buildManPages refactor(sterni): use pkgs over third_party to import from nixpkgs 2021-04-10 11:40:18 +00:00
drvSeqL feat(nix/drvSeqL): make build of a drv depend on unrelated drvs 2021-02-14 12:40:06 +00:00
emptyDerivation feat(nix/emptyDerivation) add emptyDerivation 2020-06-28 17:59:46 +00:00
escapeExecline chore(OWNERS): move Profpatsch up to nix/ 2021-01-01 19:03:15 +00:00
getBins chore(OWNERS): move Profpatsch up to nix/ 2021-01-01 19:03:15 +00:00
mergePatch feat(nix): add mergePatch 2021-01-01 19:03:02 +00:00
netstring feat(nix): add basic netstring nix generation functions 2021-04-24 09:54:34 +00:00
readTree refactor(readTree): Initialise repo roots without recursing 2021-04-12 21:55:07 +00:00
runExecline feat(users/Profpatsch/blog): implement blog engine lol 2021-04-30 21:47:42 +00:00
runTestsuite fix(nix/runTestsuite): use s6-portable-utils 2021-03-26 11:01:20 +00:00
tag feat(nix): add nix.tag, a way of discriminating via tagged unions 2021-01-30 15:41:08 +00:00
tailscale refactor: Replace some uses of builtins.toFile with pkgs.writeText 2021-03-25 19:14:36 +00:00
utils refactor(users/grfn/gws.fyi): implement isDirectory in pure nix 2021-08-24 12:13:06 +00:00
writeElispBin chore(writeElispBin): Move from //overrides to //nix 2020-12-01 12:55:59 +00:00
writeExecline chore(OWNERS): move Profpatsch up to nix/ 2021-01-01 19:03:15 +00:00
writers fix(nix/writers/rust): remove args override 2021-05-17 23:00:57 +00:00
writeScript refactor(nix): use our own writeScript(Bin) 2020-06-30 00:19:27 +00:00
writeScriptBin refactor(nix): use our own writeScript(Bin) 2020-06-30 00:19:27 +00:00
yants fix(nix/yants): make (typedef …).checkType return a result set 2021-02-19 16:14:55 +00:00
OWNERS chore(OWNERS): move Profpatsch up to nix/ 2021-01-01 19:03:15 +00:00