diff --git a/cl-cc-javascript.asd b/cl-cc-javascript.asd index 825fb60..fad4656 100644 --- a/cl-cc-javascript.asd +++ b/cl-cc-javascript.asd @@ -157,8 +157,19 @@ :homepage "https://github.com/nerima-lisp/cl-cc-javascript" :bug-tracker "https://github.com/nerima-lisp/cl-cc-javascript/issues" :source-control (:git "https://github.com/nerima-lisp/cl-cc-javascript.git") + ;; NOT :cl-cc, the full umbrella: :cl-cc's own :depends-on ends in + ;; (... :cl-cc-php :cl-cc-javascript), so depending on the umbrella here + ;; would pull this very system in through :cl-cc as well as directly, plus + ;; cl-cc-php, cl-cc-selfhost, cl-cc-repl, cl-cc-cli and every other + ;; sibling frontend/tool cl-cc's umbrella carries -- none of which this + ;; suite touches. :cl-cc-pipeline is cl-cc-php.asd's own precedent for + ;; this: its /test system's comment says depending on cl-cc-pipeline (not + ;; :cl-cc) is deliberate, "folding cl-cc-pipeline into the main system + ;; would make every consumer of the PHP frontend drag along + ;; codegen/optimize/regalloc/emit for no reason" -- same reasoning here, + ;; minus the self-reference cl-cc-php doesn't have to worry about. ;; cl-weave is the org's test framework everywhere. - :depends-on (:cl-cc :cl-weave :cl-cc-javascript) + :depends-on (:cl-cc-pipeline :cl-weave :cl-cc-javascript) :pathname "t" :serial t :components diff --git a/docs/src/project/development.md b/docs/src/project/development.md index 2447181..be220b4 100644 --- a/docs/src/project/development.md +++ b/docs/src/project/development.md @@ -67,9 +67,9 @@ see [Architecture](../reference/architecture.md)). |---|---| | `CL_CC_JAVASCRIPT_CL_CC_ROOT` | `cl-cc` | | `CL_CC_JAVASCRIPT_CL_WEAVE_ROOT` | `cl-weave` | -| `CL_CC_JAVASCRIPT_CL_PROLOG_ROOT` | `cl-prolog` | +| `CL_CC_JAVASCRIPT_CL_PROLOG_KIT_ROOT` | `cl-prolog-kit` | | `CL_CC_JAVASCRIPT_CL_PARSER_KIT_ROOT` | `cl-parser-kit` | -| `CL_CC_JAVASCRIPT_CL_DATAFLOW_ROOT` | `cl-dataflow` | +| `CL_CC_JAVASCRIPT_CL_DATAFLOW_KIT_ROOT` | `cl-dataflow-kit` | | `CL_CC_JAVASCRIPT_CL_BOUNDARY_KIT_ROOT` | `cl-boundary-kit` | | `CL_CC_JAVASCRIPT_CL_CLI_ROOT` | `cl-cli` | | `CL_CC_JAVASCRIPT_CL_TTY_KIT_ROOT` | `cl-tty-kit` | diff --git a/flake.lock b/flake.lock index 85dd413..d5332da 100644 --- a/flake.lock +++ b/flake.lock @@ -20,17 +20,221 @@ "cl-cc": { "flake": false, "locked": { - "lastModified": 1785012697, - "narHash": "sha256-OHO3FUugO5odhJZL5b2t91RZnCnHY8jNE/GLymifeuw=", + "lastModified": 1786972317, + "narHash": "sha256-RZ0NvI92ra7wWx241uQ2ihbE+Xu++cR8f7/Q02f1Iao=", "owner": "nerima-lisp", "repo": "cl-cc", - "rev": "594456c6671356508a9393a97761be41e4ef8f1f", + "rev": "ce67ffd62647985cf72947b34075d8b20a351d0e", "type": "github" }, "original": { "owner": "nerima-lisp", "repo": "cl-cc", - "rev": "594456c6671356508a9393a97761be41e4ef8f1f", + "rev": "ce67ffd62647985cf72947b34075d8b20a351d0e", + "type": "github" + } + }, + "cl-cc-ast": { + "flake": false, + "locked": { + "lastModified": 1785484061, + "narHash": "sha256-UkonaEkOJr6SDHcu9vooVqY5X3kWK0+9vYps1K2sMhg=", + "owner": "nerima-lisp", + "repo": "cl-cc-ast", + "rev": "25375954dd13037d608b8e427a6dd86588207153", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.2.0", + "repo": "cl-cc-ast", + "type": "github" + } + }, + "cl-cc-binary": { + "flake": false, + "locked": { + "lastModified": 1785473747, + "narHash": "sha256-H60dHCE2Pv4mm4yeNT+KABCUb8knJ3i/YgCV2oM3Piw=", + "owner": "nerima-lisp", + "repo": "cl-cc-binary", + "rev": "6ca146c188f779d22746a35c1a526d52dbb1b983", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.2.0", + "repo": "cl-cc-binary", + "type": "github" + } + }, + "cl-cc-bootstrap": { + "flake": false, + "locked": { + "lastModified": 1786993824, + "narHash": "sha256-cob17nI1Fwq0yvbUEqA4f6qNcAlTRwmAMxP8GZcE8HQ=", + "owner": "nerima-lisp", + "repo": "cl-cc-bootstrap", + "rev": "88d61be01658bc247ae2889cb08f1e7c6c2c9b33", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "repo": "cl-cc-bootstrap", + "rev": "88d61be01658bc247ae2889cb08f1e7c6c2c9b33", + "type": "github" + } + }, + "cl-cc-codegen-native": { + "flake": false, + "locked": { + "lastModified": 1785502408, + "narHash": "sha256-zZ5b3Ovuu2aNjeQyUuoixUp5Ww4W33+WtJLKkYoXik4=", + "owner": "nerima-lisp", + "repo": "cl-cc-codegen-native", + "rev": "90dd6aefe0757388da775a682a1a8e60990568a0", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.2.0", + "repo": "cl-cc-codegen-native", + "type": "github" + } + }, + "cl-cc-cps": { + "flake": false, + "locked": { + "lastModified": 1785575449, + "narHash": "sha256-0Co8OVzZOgd4whUmMjYLY/MvCZXce7IEuv/lplBMfF4=", + "owner": "nerima-lisp", + "repo": "cl-cc-cps", + "rev": "7ff8044c8cfe0b6d4cbd2023ba10be78cdb6cbc1", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.1.0", + "repo": "cl-cc-cps", + "type": "github" + } + }, + "cl-cc-expand": { + "flake": false, + "locked": { + "lastModified": 1786147602, + "narHash": "sha256-NmawkBvbAIL6HlsJ4YVPJf++pHjyEp/2g7L57NIijbA=", + "owner": "nerima-lisp", + "repo": "cl-cc-expand", + "rev": "df72247b33514740e604472edea208ebb31cf84a", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "repo": "cl-cc-expand", + "rev": "df72247b33514740e604472edea208ebb31cf84a", + "type": "github" + } + }, + "cl-cc-mir": { + "flake": false, + "locked": { + "lastModified": 1786372739, + "narHash": "sha256-nZGCcEpK8YhM77eZwgwhOjPJ/g2NUFPK4dDUdrjHnKg=", + "owner": "nerima-lisp", + "repo": "cl-cc-mir", + "rev": "663c4c01c800ca7e64d444c53204645173e84854", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "repo": "cl-cc-mir", + "rev": "663c4c01c800ca7e64d444c53204645173e84854", + "type": "github" + } + }, + "cl-cc-optimize": { + "flake": false, + "locked": { + "lastModified": 1786971492, + "narHash": "sha256-vMtcOuQa8XG7coe+Lkh9UjVOwLnUPkI0pxNC40Dyukg=", + "owner": "nerima-lisp", + "repo": "cl-cc-optimize", + "rev": "51c0db63ff125413568ec08c79e33dcf34f00fbf", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "repo": "cl-cc-optimize", + "rev": "51c0db63ff125413568ec08c79e33dcf34f00fbf", + "type": "github" + } + }, + "cl-cc-parse": { + "flake": false, + "locked": { + "lastModified": 1785095912, + "narHash": "sha256-eAlz2VoCQC7hog6RPrLJGpXAx5mTW+sI+BLeQpJCAYA=", + "owner": "nerima-lisp", + "repo": "cl-cc-parse", + "rev": "7316dd82137290082fa1fe03300d3aa388d84117", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.1.0", + "repo": "cl-cc-parse", + "type": "github" + } + }, + "cl-cc-runtime": { + "flake": false, + "locked": { + "lastModified": 1786971526, + "narHash": "sha256-6NRM+02corr9V+4nYm+MylG6Sf1E8FDaibyu5Pcc4/M=", + "owner": "nerima-lisp", + "repo": "cl-cc-runtime", + "rev": "488a7788c707b384ba3ed4f877d5149e24bc178d", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "repo": "cl-cc-runtime", + "rev": "488a7788c707b384ba3ed4f877d5149e24bc178d", + "type": "github" + } + }, + "cl-cc-type": { + "flake": false, + "locked": { + "lastModified": 1785487710, + "narHash": "sha256-oenA9WafiIt//qh7eV53h+lxKRNeZBXmtqZlw18AT2E=", + "owner": "nerima-lisp", + "repo": "cl-cc-type", + "rev": "93200bdc24123940dc52b7f916d0cb8f0ebf0993", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.2.0", + "repo": "cl-cc-type", + "type": "github" + } + }, + "cl-cc-vm": { + "flake": false, + "locked": { + "lastModified": 1786372763, + "narHash": "sha256-izbY5i+pIfy7KhOiFJj2buKXYYHNI5AXh8wJqCB7uQo=", + "owner": "nerima-lisp", + "repo": "cl-cc-vm", + "rev": "8634a8e8764fb7d4419b173db38a927638ac4b44", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "repo": "cl-cc-vm", + "rev": "8634a8e8764fb7d4419b173db38a927638ac4b44", "type": "github" } }, @@ -51,6 +255,23 @@ "type": "github" } }, + "cl-codec-kit": { + "flake": false, + "locked": { + "lastModified": 1785920269, + "narHash": "sha256-gdpeurD7tMtJdk5X87I9v/cDWHvkplaWHAeVUMCkyFU=", + "owner": "nerima-lisp", + "repo": "cl-codec-kit", + "rev": "e30be513f5f8e936e968ff8d7910f43ef986ba6f", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v0.5.0", + "repo": "cl-codec-kit", + "type": "github" + } + }, "cl-concurrent-kit": { "flake": false, "locked": { @@ -68,20 +289,20 @@ "type": "github" } }, - "cl-dataflow": { + "cl-dataflow-kit": { "flake": false, "locked": { - "lastModified": 1785657612, - "narHash": "sha256-uvbaAJ6Q3f9VSRfe71ASckDfLWobpD8VdPsmSeIkWO0=", + "lastModified": 1786949793, + "narHash": "sha256-26KT1QL7KJ2soRppDDoYwgXyzLKOZjPu0Un0eJBL5M4=", "owner": "nerima-lisp", - "repo": "cl-dataflow", - "rev": "e3297e6c0ee5812de73bb71d19763140dcd39356", + "repo": "cl-dataflow-kit", + "rev": "c4770c3b757bc40a9d5ecfc5de53871ec5da26c8", "type": "github" }, "original": { "owner": "nerima-lisp", - "ref": "v1.1.1", - "repo": "cl-dataflow", + "ref": "v1.2.0", + "repo": "cl-dataflow-kit", "type": "github" } }, @@ -192,20 +413,54 @@ "type": "github" } }, - "cl-prolog": { + "cl-process-kit": { + "flake": false, + "locked": { + "lastModified": 1786979456, + "narHash": "sha256-C7UvR9S0s2z8yM9fXg9FAWMUu8UIPIIp6kxHa9Lq6d8=", + "owner": "nerima-lisp", + "repo": "cl-process-kit", + "rev": "07ddd1adb6fd94f7fe81197150bdef5b3793b459", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "repo": "cl-process-kit", + "rev": "07ddd1adb6fd94f7fe81197150bdef5b3793b459", + "type": "github" + } + }, + "cl-prolog-kit": { + "flake": false, + "locked": { + "lastModified": 1786948477, + "narHash": "sha256-3qn9W1Jmbxnr0Si77J7Klo26oX/zjgBVwb5ye74NsTY=", + "owner": "nerima-lisp", + "repo": "cl-prolog-kit", + "rev": "239368e1001bc3a8576d45770c9e91da11515d09", + "type": "github" + }, + "original": { + "owner": "nerima-lisp", + "ref": "v1.5.0", + "repo": "cl-prolog-kit", + "type": "github" + } + }, + "cl-regex-kit": { "flake": false, "locked": { - "lastModified": 1785656951, - "narHash": "sha256-szDf+Sg5RDex/VC/2h9tt9TQYyxwOgPjTR4PpKB9To8=", + "lastModified": 1786517019, + "narHash": "sha256-l8Yv7qmf+1VCTjEQ1RQCtV3HFztLiKdM5OMs08jaIjA=", "owner": "nerima-lisp", - "repo": "cl-prolog", - "rev": "c78f2c34792d01b653721d6b12427f98ef4235d7", + "repo": "cl-regex-kit", + "rev": "308375445bafcafdbc32d2347154d13ee765c4c4", "type": "github" }, "original": { "owner": "nerima-lisp", - "ref": "v1.3.0", - "repo": "cl-prolog", + "ref": "v2.0.0", + "repo": "cl-regex-kit", "type": "github" } }, @@ -302,16 +557,31 @@ "inputs": { "cl-boundary-kit": "cl-boundary-kit", "cl-cc": "cl-cc", + "cl-cc-ast": "cl-cc-ast", + "cl-cc-binary": "cl-cc-binary", + "cl-cc-bootstrap": "cl-cc-bootstrap", + "cl-cc-codegen-native": "cl-cc-codegen-native", + "cl-cc-cps": "cl-cc-cps", + "cl-cc-expand": "cl-cc-expand", + "cl-cc-mir": "cl-cc-mir", + "cl-cc-optimize": "cl-cc-optimize", + "cl-cc-parse": "cl-cc-parse", + "cl-cc-runtime": "cl-cc-runtime", + "cl-cc-type": "cl-cc-type", + "cl-cc-vm": "cl-cc-vm", "cl-cli": "cl-cli", + "cl-codec-kit": "cl-codec-kit", "cl-concurrent-kit": "cl-concurrent-kit", - "cl-dataflow": "cl-dataflow", + "cl-dataflow-kit": "cl-dataflow-kit", "cl-date-kit": "cl-date-kit", "cl-host-kit": "cl-host-kit", "cl-json-kit": "cl-json-kit", "cl-log-kit": "cl-log-kit", "cl-nix-forge": "cl-nix-forge", "cl-parser-kit": "cl-parser-kit", - "cl-prolog": "cl-prolog", + "cl-process-kit": "cl-process-kit", + "cl-prolog-kit": "cl-prolog-kit", + "cl-regex-kit": "cl-regex-kit", "cl-tty-kit": "cl-tty-kit", "cl-weave": "cl-weave", "nixpkgs": "nixpkgs", diff --git a/flake.nix b/flake.nix index bde710f..2006535 100644 --- a/flake.nix +++ b/flake.nix @@ -22,16 +22,18 @@ # system with exactly `(require "asdf") (asdf:load-system "")`, # with no hook to run arbitrary Lisp first. cl-cc-javascript's production # system `:depends-on (:cl-cc-ast :cl-cc-bootstrap :cl-cc-parse - # :cl-cc-vm)` -- four systems with no discoverable .asd of their own; - # they exist only because cl-cc.asd registers them (as an eval-when side - # effect) when IT is loaded. scripts/dependency-roots.lisp's - # `initialize-dependency-source-registry` does exactly that extra - # `(load ".../cl-cc.asd")` step before anything else runs -- a step - # `lispDerivation` has no argument to express. Forcing the main package - # through it would build a derivation whose own build phase cannot - # resolve its dependencies, so the hand-rolled buildPhase below (which - # runs the same dependency-roots.lisp bootstrap CI and a contributor's - # shell both already rely on) stays. Re-check this reasoning against + # :cl-cc-vm)`, and its /test system's much wider transitive closure (see + # the standalone cl-cc-* inputs below), are each their own flake input now + # -- but dependency-roots.lisp's `initialize-dependency-source-registry` + # still ends with an extra `(load ".../cl-cc.asd")` step: that is what + # registers cl-cc-compile/cl-cc-stdlib/cl-cc-pipeline (in-tree inside the + # cl-cc checkout, no .asd of their own anywhere else) onto the source + # registry, and `lispDerivation` has no argument to express an extra load + # before `asdf:load-system`. Forcing the main package through it would + # build a derivation whose own build phase cannot resolve its + # dependencies, so the hand-rolled buildPhase below (which runs the same + # dependency-roots.lisp bootstrap CI and a contributor's shell both + # already rely on) stays. Re-check this reasoning against # lib/core/asdf-derivation.nix before revisiting it on a future # cl-nix-forge upgrade. # @@ -43,15 +45,14 @@ }; # cl-cc-javascript is a plugin frontend: its production system depends on - # cl-cc-ast/-bootstrap/-parse/-vm, which still live inside the cl-cc - # monorepo checkout, and cl-cc's own umbrella system transitively pulls in - # cl-prolog/cl-parser-kit (optimize's e-graph rules), cl-boundary-kit/ - # cl-cli/cl-tty-kit (cli/repl), and cl-log-kit (boundary-kit). cl-date-kit - # gives the Temporal runtime real IANA time zone support (host zone - # discovery and instant -> local-zone projection; see - # docs/src/reference/compatibility.md for what that does and does not cover). - # cl-json-kit replaces the JSON.parse/JSON.stringify runtime's own ad hoc - # parser/writer with an RFC-8259-conformant one (95/95 JSONTestSuite + # cl-cc-ast/-bootstrap/-parse/-vm, and cl-cc's own umbrella system + # transitively pulls in cl-prolog-kit/cl-parser-kit (optimize's e-graph + # rules), cl-boundary-kit/cl-cli/cl-tty-kit (cli/repl), and cl-log-kit + # (boundary-kit). cl-date-kit gives the Temporal runtime real IANA time + # zone support (host zone discovery and instant -> local-zone projection; + # see docs/src/reference/compatibility.md for what that does and does not + # cover). cl-json-kit replaces the JSON.parse/JSON.stringify runtime's own + # ad hoc parser/writer with an RFC-8259-conformant one (95/95 JSONTestSuite # must-accept, 188/188 must-reject) — adopted directly through its own # null-value/false-value/true-value/number-encoder hooks, not an adapter; # see runtime-json.lisp for what those hooks are used for. cl-concurrent- @@ -60,6 +61,23 @@ # hand-rolled mutex+condvar+turn-tracking for its suspend/resume coroutine # hand-off; see runtime-generator.lisp. cl-weave is the test framework. # + # NEITHER cl-cc-ast/-bootstrap/-parse/-vm NOR any of the standalone cl-cc-* + # inputs further below "still live inside the cl-cc monorepo checkout" — + # a prior version of this comment said so, and it was wrong by the time it + # was written: cl-cc.asd deliberately carries no in-tree packages/{ast, + # bootstrap,parse,vm,type,binary,mir,cps,expand,optimize,runtime}, or a + # packages/codegen-native equivalent — every one of them is an external + # repository only, reached as a flake input exactly like cl-cc itself. + # `find packages/ -iname '*.asd'` on the pinned cl-cc checkout + # confirms each is empty of its own .asd. The four production deps were + # the only ones this file supplied before; see the standalone cl-cc-* + # input group below for the rest, needed because cl-cc-javascript.asd's + # own /test system depends on cl-cc-pipeline (not the full cl-cc + # umbrella — see that .asd's comment, which quotes cl-cc-php's own + # precedent for the same choice), and cl-cc-pipeline's :depends-on pulls + # in cl-cc-type/-optimize/-expand/-binary/-mir/-codegen(-native)/-runtime/ + # -cps transitively. + # # Every one of these is consumed as a plain source tree (`flake = false`) # rather than as a flake, because scripts/dependency-roots.lisp locates # them through CL_CC_JAVASCRIPT_*_ROOT environment variables and hands the @@ -89,7 +107,7 @@ # branch and would break this repository on an unrelated upstream push. # Move to `/vX.Y.Z` once cl-cc's suite is green and it releases. cl-cc = { - url = "github:nerima-lisp/cl-cc/594456c6671356508a9393a97761be41e4ef8f1f"; + url = "github:nerima-lisp/cl-cc/ce67ffd62647985cf72947b34075d8b20a351d0e"; flake = false; }; # v1.0.0 -> v1.1.0: internal reorg (org package-standard adoption, file @@ -103,9 +121,9 @@ }; # v1.0.1 -> v1.1.0: internal performance work (indexed substitution, # tabled-answer replay, hash-table dispatch) plus a coverage report - # target. No public API change — checked against cl-prolog's CHANGELOG.md. - cl-prolog = { - url = "github:nerima-lisp/cl-prolog/v1.3.0"; + # target. No public API change — checked against cl-prolog-kit's CHANGELOG.md. + cl-prolog-kit = { + url = "github:nerima-lisp/cl-prolog-kit/v1.5.0"; flake = false; }; # v1.0.0 -> v1.0.1: org package-standard conformance only (file renames, @@ -121,8 +139,8 @@ # v1.0.0 -> v1.1.0: additive-only `:parallel` keyword on run-pipeline/ # map-pipeline (default nil, backward compatible); CHANGELOG.md states # "No public API changed or removed" explicitly. - cl-dataflow = { - url = "github:nerima-lisp/cl-dataflow/v1.1.1"; + cl-dataflow-kit = { + url = "github:nerima-lisp/cl-dataflow-kit/v1.2.0"; flake = false; }; # v0.6.0 -> v1.0.0: CHANGELOG.md states "No exported symbol, protocol, or @@ -204,6 +222,112 @@ flake = false; }; + # --- Standalone cl-cc-* subsystems, needed only for cl-cc-javascript/test --- + # + # cl-cc-javascript.asd's /test system depends on cl-cc-pipeline (see that + # .asd's comment), not on the full cl-cc umbrella; cl-cc-pipeline's own + # :depends-on is (:cl-cc-bootstrap :cl-cc-ast :cl-cc-parse :cl-cc-type + # :cl-cc-optimize :cl-cc-vm :cl-cc-expand :cl-cc-emit :cl-cc-stdlib + # :cl-cc-binary :cl-cc-mir :cl-cc-codegen :cl-cc-compile). cl-cc-stdlib and + # cl-cc-compile are in-tree inside the cl-cc checkout (loaded by cl-cc.asd's + # own eval-when, see the cl-cc input's comment above); every other name in + # that list is one of the inputs below, plus what each pulls in + # transitively (cl-cc-vm needs cl-cc-runtime/cl-regex-kit; cl-cc-runtime + # and cl-cc-binary need cl-process-kit; cl-process-kit needs cl-codec-kit; + # cl-cc-compile needs cl-cc-cps). + # + # Pin choice per input: a release tag when the tag and origin/main agree + # on :depends-on, otherwise the current main revision with a comment + # saying what changed. This whole family of repos went through the same + # in-flight migration wave (org-wide cl-prolog -> cl-prolog-kit rename, + # cl-host-kit adoption) at different paces, so several latest tags predate + # it while main does not — checked with `git show origin/main:.asd` + # against `git show :.asd` for each, not assumed. + cl-cc-ast = { + url = "github:nerima-lisp/cl-cc-ast/v0.2.0"; + flake = false; + }; + cl-cc-bootstrap = { + url = "github:nerima-lisp/cl-cc-bootstrap/88d61be01658bc247ae2889cb08f1e7c6c2c9b33"; + flake = false; + }; + cl-cc-parse = { + url = "github:nerima-lisp/cl-cc-parse/v0.1.0"; + flake = false; + }; + # v0.1.0's :depends-on is missing cl-host-kit, which origin/main has + # gained since (cl-cc-vm now reads through it directly, not just + # transitively via cl-boundary-kit) -- main revision, not the tag. + cl-cc-vm = { + url = "github:nerima-lisp/cl-cc-vm/8634a8e8764fb7d4419b173db38a927638ac4b44"; + flake = false; + }; + cl-cc-type = { + url = "github:nerima-lisp/cl-cc-type/v0.2.0"; + flake = false; + }; + # v0.5.1's :depends-on still says :cl-prolog; origin/main says + # :cl-prolog-kit (the org-wide rename) and has also gained :cl-host-kit. + # Same revision cl-cc's own flake.nix already pins for this input. + cl-cc-optimize = { + url = "github:nerima-lisp/cl-cc-optimize/51c0db63ff125413568ec08c79e33dcf34f00fbf"; + flake = false; + }; + # v0.1.0's :depends-on is missing cl-host-kit; main has it -- main + # revision, not the tag, same reasoning as cl-cc-vm above. + cl-cc-expand = { + url = "github:nerima-lisp/cl-cc-expand/df72247b33514740e604472edea208ebb31cf84a"; + flake = false; + }; + cl-cc-binary = { + url = "github:nerima-lisp/cl-cc-binary/v0.2.0"; + flake = false; + }; + # No tags cut yet; also provides the cl-cc-target system (same source + # tree, both cl-cc-mir.asd and cl-cc-target.asd live at the repo root) -- + # one CL_CC_JAVASCRIPT_CL_CC_MIR_ROOT directory entry below reaches both. + cl-cc-mir = { + url = "github:nerima-lisp/cl-cc-mir/663c4c01c800ca7e64d444c53204645173e84854"; + flake = false; + }; + # One source tree, three systems, none of them at the repo root: + # cl-cc-codegen-native.asd (repo root, unused here), codegen/cl-cc-codegen.asd, + # emit/cl-cc-emit.asd, regalloc/cl-cc-regalloc.asd. dependency-roots.lisp's + # source-registry entries are non-recursive `:directory` scans (see its own + # comment on why), so this repo needs three separate ROOT env vars below, + # each pointing at a subdirectory of this one checkout -- not three inputs. + cl-cc-codegen-native = { + url = "github:nerima-lisp/cl-cc-codegen-native/v0.2.0"; + flake = false; + }; + # v0.1.0's :depends-on is missing cl-host-kit; main has it -- main + # revision, not the tag, same reasoning as cl-cc-vm above. + cl-cc-runtime = { + url = "github:nerima-lisp/cl-cc-runtime/488a7788c707b384ba3ed4f877d5149e24bc178d"; + flake = false; + }; + cl-cc-cps = { + url = "github:nerima-lisp/cl-cc-cps/v0.1.0"; + flake = false; + }; + # cl-cc-vm's dependency, not consumed by this repo's own src/. + cl-regex-kit = { + url = "github:nerima-lisp/cl-regex-kit/v2.0.0"; + flake = false; + }; + # cl-cc-runtime's and cl-cc-binary's dependency. v3.2.0's :depends-on is + # missing cl-concurrent-kit, which origin/main has gained -- main + # revision, not the tag, same reasoning as cl-cc-vm above. + cl-process-kit = { + url = "github:nerima-lisp/cl-process-kit/07ddd1adb6fd94f7fe81197150bdef5b3793b459"; + flake = false; + }; + # cl-process-kit's dependency, not consumed by this repo's own src/. + cl-codec-kit = { + url = "github:nerima-lisp/cl-codec-kit/v0.5.0"; + flake = false; + }; + treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; @@ -232,9 +356,9 @@ cl-nix-forge, cl-cc, cl-weave, - cl-prolog, + cl-prolog-kit, cl-parser-kit, - cl-dataflow, + cl-dataflow-kit, cl-boundary-kit, cl-cli, cl-tty-kit, @@ -243,6 +367,21 @@ cl-json-kit, cl-concurrent-kit, cl-host-kit, + cl-cc-ast, + cl-cc-bootstrap, + cl-cc-parse, + cl-cc-vm, + cl-cc-type, + cl-cc-optimize, + cl-cc-expand, + cl-cc-binary, + cl-cc-mir, + cl-cc-codegen-native, + cl-cc-runtime, + cl-cc-cps, + cl-regex-kit, + cl-process-kit, + cl-codec-kit, treefmt-nix, paredit-cli, }: @@ -279,9 +418,9 @@ dependencyEnv = { CL_CC_JAVASCRIPT_CL_CC_ROOT = toString cl-cc; CL_CC_JAVASCRIPT_CL_WEAVE_ROOT = toString cl-weave; - CL_CC_JAVASCRIPT_CL_PROLOG_ROOT = toString cl-prolog; + CL_CC_JAVASCRIPT_CL_PROLOG_KIT_ROOT = toString cl-prolog-kit; CL_CC_JAVASCRIPT_CL_PARSER_KIT_ROOT = toString cl-parser-kit; - CL_CC_JAVASCRIPT_CL_DATAFLOW_ROOT = toString cl-dataflow; + CL_CC_JAVASCRIPT_CL_DATAFLOW_KIT_ROOT = toString cl-dataflow-kit; CL_CC_JAVASCRIPT_CL_BOUNDARY_KIT_ROOT = toString cl-boundary-kit; CL_CC_JAVASCRIPT_CL_CLI_ROOT = toString cl-cli; CL_CC_JAVASCRIPT_CL_TTY_KIT_ROOT = toString cl-tty-kit; @@ -290,6 +429,27 @@ CL_CC_JAVASCRIPT_CL_JSON_KIT_ROOT = toString cl-json-kit; CL_CC_JAVASCRIPT_CL_CONCURRENT_KIT_ROOT = toString cl-concurrent-kit; CL_CC_JAVASCRIPT_CL_HOST_KIT_ROOT = toString cl-host-kit; + CL_CC_JAVASCRIPT_CL_CC_AST_ROOT = toString cl-cc-ast; + CL_CC_JAVASCRIPT_CL_CC_BOOTSTRAP_ROOT = toString cl-cc-bootstrap; + CL_CC_JAVASCRIPT_CL_CC_PARSE_ROOT = toString cl-cc-parse; + CL_CC_JAVASCRIPT_CL_CC_VM_ROOT = toString cl-cc-vm; + CL_CC_JAVASCRIPT_CL_CC_TYPE_ROOT = toString cl-cc-type; + CL_CC_JAVASCRIPT_CL_CC_OPTIMIZE_ROOT = toString cl-cc-optimize; + CL_CC_JAVASCRIPT_CL_CC_EXPAND_ROOT = toString cl-cc-expand; + CL_CC_JAVASCRIPT_CL_CC_BINARY_ROOT = toString cl-cc-binary; + # Also reaches cl-cc-target.asd -- see the cl-cc-mir input's comment. + CL_CC_JAVASCRIPT_CL_CC_MIR_ROOT = toString cl-cc-mir; + # Three subdirectories of the same cl-cc-codegen-native checkout, not + # three inputs -- see that input's comment on why the .asd files + # aren't at the repo root a plain :directory scan would reach. + CL_CC_JAVASCRIPT_CL_CC_CODEGEN_ROOT = "${cl-cc-codegen-native}/codegen"; + CL_CC_JAVASCRIPT_CL_CC_EMIT_ROOT = "${cl-cc-codegen-native}/emit"; + CL_CC_JAVASCRIPT_CL_CC_REGALLOC_ROOT = "${cl-cc-codegen-native}/regalloc"; + CL_CC_JAVASCRIPT_CL_CC_RUNTIME_ROOT = toString cl-cc-runtime; + CL_CC_JAVASCRIPT_CL_CC_CPS_ROOT = toString cl-cc-cps; + CL_CC_JAVASCRIPT_CL_REGEX_KIT_ROOT = toString cl-regex-kit; + CL_CC_JAVASCRIPT_CL_PROCESS_KIT_ROOT = toString cl-process-kit; + CL_CC_JAVASCRIPT_CL_CODEC_KIT_ROOT = toString cl-codec-kit; }; exportDependencyEnv = nixpkgs.lib.concatStrings ( nixpkgs.lib.mapAttrsToList ( @@ -390,9 +550,9 @@ # `nix build .#coverage-report`: runs the regression suite under # SB-COVER via scripts/run-coverage.lisp (pre-existing, previously # unwired into flake.nix — CI and `nix flake check` never ran it) and - # publishes the HTML report as $out, matching the shape cl-prolog's + # publishes the HTML report as $out, matching the shape cl-prolog-kit's # v1.1.0 established. `checks.coverage` below only asserts the - # report exists, the same restraint cl-prolog's docs give for the + # report exists, the same restraint cl-prolog-kit's docs give for the # same reason: SB-COVER's HTML output isn't a numeric gate without # its own parser, which this repository does not have yet. coverage-report = pkgs.stdenvNoCC.mkDerivation { diff --git a/scripts/dependency-roots.lisp b/scripts/dependency-roots.lisp index 5a1abc5..32b9a2b 100644 --- a/scripts/dependency-roots.lisp +++ b/scripts/dependency-roots.lisp @@ -1,17 +1,25 @@ ;;;; scripts/dependency-roots.lisp — locate this repo's nerima-lisp siblings. ;;;; -;;;; cl-cc-javascript is a plugin frontend for the cl-cc umbrella compiler: it -;;;; depends on packages that still live inside the cl-cc monorepo checkout -;;;; (cl-cc-ast/-bootstrap/-parse/-vm, plus everything cl-cc's own umbrella -;;;; system pulls in transitively — optimize needs cl-prolog/cl-parser-kit, -;;;; cli/repl need cl-boundary-kit/cl-cli/cl-tty-kit, boundary-kit needs -;;;; cl-log-kit and, as of its v2.0.0, cl-host-kit too), on cl-date-kit for -;;;; the Temporal runtime's IANA time zone support, on cl-json-kit for -;;;; JSON.parse/JSON.stringify, on cl-concurrent-kit for the generator -;;;; runtime's suspend/resume coroutine channel, and on cl-weave for tests. -;;;; cl-host-kit is needed both transitively (cl-boundary-kit v2.0.0 requires -;;;; it) and directly: the Temporal runtime reads the host TZ variable through -;;;; host-kit:getenv -- see runtime-temporal.lisp. +;;;; cl-cc-javascript is a plugin frontend for the cl-cc umbrella compiler. +;;;; Its production system depends on cl-cc-ast/-bootstrap/-parse/-vm; its +;;;; /test system depends on cl-cc-pipeline instead of the full cl-cc umbrella +;;;; (see cl-cc-javascript.asd's own comment on that choice, and cl-cc-php's +;;;; precedent for it), which pulls in cl-cc-type/-optimize/-expand/-binary/ +;;;; -mir/-codegen(-native)/-runtime/-cps transitively. None of these eleven +;;;; cl-cc-* names has a .asd anywhere except its own standalone repository — +;;;; cl-cc.asd carries no in-tree copy of any of them. cl-cc's own umbrella +;;;; system separately pulls in cl-prolog-kit/cl-parser-kit (optimize's +;;;; e-graph rules), cl-boundary-kit/cl-cli/cl-tty-kit (cli/repl), and +;;;; cl-log-kit (boundary-kit). cl-regex-kit and cl-process-kit are cl-cc-vm's +;;;; and cl-cc-runtime's/cl-cc-binary's own dependencies respectively, and +;;;; cl-codec-kit is cl-process-kit's. On top of the compiler graph, this repo +;;;; needs cl-date-kit for the Temporal runtime's IANA time zone support, +;;;; cl-json-kit for JSON.parse/JSON.stringify, cl-concurrent-kit for the +;;;; generator runtime's suspend/resume coroutine channel, and cl-weave for +;;;; tests. cl-host-kit is needed both transitively (cl-boundary-kit v2.0.0 +;;;; requires it, and so now do cl-cc-vm/-expand/-runtime) and directly: the +;;;; Temporal runtime reads the host TZ variable through host-kit:getenv -- +;;;; see runtime-temporal.lisp. ;;;; Each is located via an environment variable, falling back to a sibling ;;;; checkout beside this repo (the ghq layout every nerima-lisp repo ;;;; already assumes). @@ -21,9 +29,9 @@ (defparameter *dependency-specs* '(("CL_CC_JAVASCRIPT_CL_CC_ROOT" "cl-cc") ("CL_CC_JAVASCRIPT_CL_WEAVE_ROOT" "cl-weave") - ("CL_CC_JAVASCRIPT_CL_PROLOG_ROOT" "cl-prolog") + ("CL_CC_JAVASCRIPT_CL_PROLOG_KIT_ROOT" "cl-prolog-kit") ("CL_CC_JAVASCRIPT_CL_PARSER_KIT_ROOT" "cl-parser-kit") - ("CL_CC_JAVASCRIPT_CL_DATAFLOW_ROOT" "cl-dataflow") + ("CL_CC_JAVASCRIPT_CL_DATAFLOW_KIT_ROOT" "cl-dataflow-kit") ("CL_CC_JAVASCRIPT_CL_BOUNDARY_KIT_ROOT" "cl-boundary-kit") ("CL_CC_JAVASCRIPT_CL_CLI_ROOT" "cl-cli") ("CL_CC_JAVASCRIPT_CL_TTY_KIT_ROOT" "cl-tty-kit") @@ -31,7 +39,38 @@ ("CL_CC_JAVASCRIPT_CL_DATE_KIT_ROOT" "cl-date-kit") ("CL_CC_JAVASCRIPT_CL_JSON_KIT_ROOT" "cl-json-kit") ("CL_CC_JAVASCRIPT_CL_CONCURRENT_KIT_ROOT" "cl-concurrent-kit") - ("CL_CC_JAVASCRIPT_CL_HOST_KIT_ROOT" "cl-host-kit")) + ("CL_CC_JAVASCRIPT_CL_HOST_KIT_ROOT" "cl-host-kit") + ;; Standalone cl-cc-* subsystems and their own dependencies, needed only + ;; by cl-cc-javascript/test (via cl-cc-pipeline). See this file's header + ;; comment and cl-cc-javascript.asd's /test comment for why these exist + ;; and why they are not folded into the production system's own set above. + ("CL_CC_JAVASCRIPT_CL_CC_AST_ROOT" "cl-cc-ast") + ("CL_CC_JAVASCRIPT_CL_CC_BOOTSTRAP_ROOT" "cl-cc-bootstrap") + ("CL_CC_JAVASCRIPT_CL_CC_PARSE_ROOT" "cl-cc-parse") + ("CL_CC_JAVASCRIPT_CL_CC_VM_ROOT" "cl-cc-vm") + ("CL_CC_JAVASCRIPT_CL_CC_TYPE_ROOT" "cl-cc-type") + ("CL_CC_JAVASCRIPT_CL_CC_OPTIMIZE_ROOT" "cl-cc-optimize") + ("CL_CC_JAVASCRIPT_CL_CC_EXPAND_ROOT" "cl-cc-expand") + ("CL_CC_JAVASCRIPT_CL_CC_BINARY_ROOT" "cl-cc-binary") + ;; Also reaches cl-cc-target.asd: both it and cl-cc-mir.asd live at this + ;; same repository's root. + ("CL_CC_JAVASCRIPT_CL_CC_MIR_ROOT" "cl-cc-mir") + ;; cl-cc-codegen-native is one checkout holding three systems, none at + ;; its root (codegen/cl-cc-codegen.asd, emit/cl-cc-emit.asd, + ;; regalloc/cl-cc-regalloc.asd) -- each needs its own entry here because + ;; `dependency-source-registry-directives` below does a non-recursive + ;; :directory scan per root, so a single root at the checkout's top would + ;; find none of the three. flake.nix sets each of the three env vars to a + ;; subpath of the one cl-cc-codegen-native input; the local-checkout + ;; fallback below does the same relative to a single sibling directory. + ("CL_CC_JAVASCRIPT_CL_CC_CODEGEN_ROOT" "cl-cc-codegen-native/codegen") + ("CL_CC_JAVASCRIPT_CL_CC_EMIT_ROOT" "cl-cc-codegen-native/emit") + ("CL_CC_JAVASCRIPT_CL_CC_REGALLOC_ROOT" "cl-cc-codegen-native/regalloc") + ("CL_CC_JAVASCRIPT_CL_CC_RUNTIME_ROOT" "cl-cc-runtime") + ("CL_CC_JAVASCRIPT_CL_CC_CPS_ROOT" "cl-cc-cps") + ("CL_CC_JAVASCRIPT_CL_REGEX_KIT_ROOT" "cl-regex-kit") + ("CL_CC_JAVASCRIPT_CL_PROCESS_KIT_ROOT" "cl-process-kit") + ("CL_CC_JAVASCRIPT_CL_CODEC_KIT_ROOT" "cl-codec-kit")) "(ENV-VAR SIBLING-DIRECTORY-NAME) pairs for every source-tree dependency.") (defparameter *project-root*