feat(pkg): use the relocatable compiler#14357
Conversation
dba99db to
10f294f
Compare
|
Can you fill me in with the current state? The way I was explained this many months ago is that OCaml 5.5 is relocatable by default and the relocatable patches will be backported to older compilers in point releases. in such case it would just work out of the box for everyone without need for more overlays. Is that not the case anymore? |
|
@Leonidas-from-XIV That is the case for OCaml 5.5 which is yet to be released. You can constrain your dependencies to use it. The support provided by David's repository is for older versions to at least 4.14. It takes time for patches to make their way to the compiler branch, and I'm not even certain that it has been agreed yet that this will be the case. For users of dune pkg, we can and should make use of it however. |
|
Yes, but my question was about the backports to older compiler releases. Are these not planned anymore? |
|
I don't know. I don't know if it has been discussed with the compiler developers yet and I also don't know if these discussions have happened with opam. My point is that we don't need to know any of this to make use of it in dune. |
|
@dra27 could you provide us with some insight on what the plan is for the backporting (or lack thereof) for older compilers? |
9bd5654 to
53584cc
Compare
ElectreAAS
left a comment
There was a problem hiding this comment.
Just tested this with DUNE_TRACE=+cache DUNE_CACHE=enabled, and it works! 🎉
More specifically, what works:
After building the compiler once and then deleting the build directory, the next build is instantaneous!
This also applies when completely changing projects
One thing to note is that when building with dev-tools (ocamllsp and the like), it doesn't seem to work, the compiler is rebuilt. This isn't a regression, just an existing bug in dev-tools from what I understand. However once I have a normal compiler and a "dev-tool compiler" in the cache, installing more dev tools doesn't need to rebuild the compiler, just the new dev tools
|
I've tested this on Ran |
Add ocaml-dune/opam-repository-relocatable as a default repository for package management. This is a mirror of dra27/opam-repository#relocatable which provides overlay packages for building a relocatable OCaml compiler. When this repository is included, the solver will pick up the relocatable-compiler meta-package, allowing toolchain builds to be cached as regular packages instead of using the toolchain cache. Signed-off-by: Ali Caglayan <alizter@gmail.com>
The relocatable-compiler package installs libraries (including threads, str, unix) under target/lib/ocaml/, matching the layout of other compiler packages. Without being listed in compiler_package_names, install_roots did not append the /ocaml subdirectory to its lib_root, causing dev-tools like utop to fail with "Library threads not found". Signed-off-by: Ali Caglayan <alizter@gmail.com>
5c47d0f to
28794a4
Compare
file_async opens an fd eagerly and for large files holds it open across a fiber yield while queued for the background thread pool. When called via unbounded parallel_map over many targets (e.g. the relocatable compiler with thousands of files), fds accumulate faster than they are closed, exhausting the process fd limit. Add a global Fiber.Throttle in file_async to bound the number of concurrent digest operations. Signed-off-by: Ali Caglayan <alizter@gmail.com>
|
The basic test worked for me on a pet project depending on fstar (which also shows the fruits of @Alizter and @ElectreAAS's work on #13792)! I'll also try a more involved test exercising the dev tools and report back. But great work! |
This is because dev tools use non-portable lock directories. I'm tracking this issue here. #14456. As you've said it just means you have to build one compiler with the portable lock dir and one without but both are cached. |
This PR enables the relocatable compiler by making it the default. It does so by using (a mirror of) David's relocatable opam-repository as a second set of overlays.
The order is now
overlay,relocatable,upstream.This is part of the work on:
The following need to be done:
In order to test,
Ensure you have build dune from source using this branch or
opam pin dune.dev git@github.com:Alizter/dune.git#push-vkkkwyxwsotwinto your switch. ThenDUNE_TRACE=+cacheandDUNE_CACHE=enableddune build --pkg enabledand wait._build/trace.sexpfile astrace.sexp.oldand delete_build/If all goes well (and your cache is actually enabled) it should restore from cache.
Any issues please report here together with your first and second trace files.
_build/trace.csexpand the backed-uptrace.csexp.old.