-
Notifications
You must be signed in to change notification settings - Fork 79
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ci: try to make faster #996
Conversation
Signed-off-by: Henry Schreiner <[email protected]>
21720b0
to
7cec773
Compare
And, is it faster? |
Yes, though not quite as much as I hoped. mold saves about 6 seconds in linking, but takes a couple of seconds to install. uv drops the install time to 0 seconds, but most of the install time is taken up in the coverage job, which is all tangled up in make (make is my pet peeve, I can't stand it, IMO it's the wrong answer to everything it's used for). I'll try to see if I can come up with a way to do the coverage job and get uv to install. PS: Would you be interested in having a noxfile? I could even set up make to call it, but would you be okay to have nox installed? I use that on most of my repos, and it natively supports enabling uv. |
I think it is very versatile and one can use it for so much more than building code. It is nice because it can automatically parallelize workloads.
|
But there are better solutions for all those things (IMO). Latex is better handled by latexmk. Python is better handled by anything that understands virtual environments. Compiling is better handled by a CMake and Ninja - make cannot parallelize past the target boundary, which is ridiculous; why should you wait for target "a"'s files to build to start building target "b"'s files? That alone makes ninja much faster. And the syntax literally requires tabs. 🤮 Even Rake is superior; at least it's using a real programming language's (Ruby) syntax. There's also "invoke", which make-like with Python syntax. Though I haven't really used it. "doit" is the underlying Python library and provides make-style rebuild logic for Python, and that looks really useful. Though again, haven't really used it, but have seen it used in other tools. And yes, it's installed almost everywhere, but comes in different flavors and actually writing an advanced makefile that's portable is painful. The good (relative) features are tied to things like gmake. Those are just some of my complaints; I'm fine with people using it if they like it, I just really, really don't like it. The two best uses are IMO as a "common commands" list (like you are using it), and for setting up a this-generates-that workflow (but I think things like snakemake or luigi might be better?). But I think I'm allowed at least one pet peeve and it's make so I avoid it. :)
I can try a nox-based solution, then if you don't like it, I can avoid it. I should be able to keep the makefile commands the same. :) (I technically already have a noxfile for iminuit that I use locally for development) |
Actually, after saying all that, I think I'll just fix |
FYI, with a warm cache, |
By the way, one of the slowest parts is the ~40 second checkout due to needing to clone all of ROOT. |
66ae0e2
to
a450374
Compare
Signed-off-by: Henry Schreiner <[email protected]>
a450374
to
8d7cedf
Compare
This basically removes all the penalty for installing the full test dependency set (uv lumps building into downloading, but it's under a second I believe), so I enabled everything. That exposes one error (and two warnings) on macOS ARM:
Might be nice to fix. I'll come back to this later. |
Those are all fair points. I admit that I don't use make for these purposes for the same reasons, but I don't hate it. Before snakemake became the build-your-analysis tool of choice at my institute, I used make to generate scientific outputs in a parallel pipeline. For that purpose, make was the right tool. It is a low-level tool, so it is very flexible and one can use it for all kinds of purposes. High-level tools are better for specific jobs, but then you need to learn N tools. Like everything in life, it is a trade-off.
Ok now I found the right webpage for nox, and you are one of the maintainers of course. :) I would be happy to have a look at your nox file in another PR, since you made it already. It is probably better readable than the makefile for iminuit. |
Yes, but it is not easy to fix. It is a random numerical thing that happens on the ARM architecture. |
Let me try to pull out the best bits. Currently recovering from conjunctivitis so might be a few days. |
@henryiii I fixed the failing test. I cannot fix the issue on PyPy-3.9, it is related to the meson build of scipy. |
I also cannot fix the segfaults on Windows. I thought it is because of numba, but that does not seem to be the case. |
Trying this out.