| 16 Dec 2025 |
aleksi | The musl build system is simpler than musl and has fewer dependencies afaik. For example we don't need Python in musl, which glibc does need. It might be feasible to build Python with mes-libc and avoid musl in that way, but mes-libc is pretty buggy. I'm curious if you all know of any alternative paths | 17:20:19 |
dish [Fox/It/She] | we need some sort of libc to build glibc, and it is way way way easier to build a gcc that targets musl then build glibc, then rebuild gcc to target glibc, than it is to use mes-libc or similar to build glibc and its deps | 17:49:33 |
dish [Fox/It/She] | thats what I was thinking of doing, that way we don't have to rebuild yet another GCC, and instead can just make a wrapper that passes the appropriate gcc flags to link to glibc instead. Plus, this gcc wouldn't be used in actual stdenv, its just used to build the stdenv tools, so using musl or gcc in bootstrap shouldn't matter, since the whole point of the early stdenv stages is to not have any bootstrap tools leaking into stdenv proper | 17:51:38 |
| 17 Dec 2025 |
aleksi | Ok, I think here's a gcc that targets glibc: https://github.com/NixOS/nixpkgs/pull/471642/changes/1f77d59c3450ac97333d9048dc13185ede164788 | 12:02:55 |
aleksi | It's not very thoroughly tested, but gcc and g++ both seemed to work with simple programs | 12:03:19 |
dish [Fox/It/She] | as much as I don't like doing this, we probably want to build all the bootstrap tools into a tarball at the end of it, that way we have a single blessed bootstrap path where all platforms get a tarball and busybox and go from there, and we're not special-casing platforms that use minimal-bootstrap into a different code path. | 17:45:32 |
dish [Fox/It/She] | Simplicity is the way to go here, after all | 17:45:38 |
K900 | Actually kinda disagree, I think it makes sense to cross-bootstrap the other platforms | 17:46:19 |
K900 | And then we can just have Nix handle caching | 17:46:27 |
dish [Fox/It/She] | sounds good to me | 17:46:40 |
dish [Fox/It/She] | as long as we have a single code path then that makes everyone's life better(even if that involves cross-building on non-minimal platforms) | 17:47:02 |
dish [Fox/It/She] | since stdenv doesn't need more complexity | 17:47:17 |
dish [Fox/It/She] | frankly it hurts my head sometimes lol | 17:47:22 |
| 18 Dec 2025 |
aleksi | Can we cross-bootstrap even the darwin platforms from Linux? | 08:58:00 |
K900 | No, Darwin needs its own bootstrap chain I think | 09:10:11 |
emily | that would also make Darwin development a pain | 11:37:05 |
Alex | Is it not already? | 12:05:38 |
Randy Eckenrode | Maybe once Darwin is switched to LLVM/LLD bintools. | 12:37:14 |
Randy Eckenrode | But it would still be painful without some way to emulate the Linux part. | 12:37:36 |
| 20 Dec 2025 |
陈浩南 | I fixed a bug in binutils wrapper and bootstraping https://github.com/NixOS/nixpkgs/pull/472652
But I am not confident with complex bash scripts. Could anyone check the pr if I miss any edge cases? | 10:12:25 |
| 4 Aug 2022 |
| Winter (she/her) joined the room. | 03:27:09 |
| [0x4A6F] joined the room. | 22:08:01 |
| 6 Aug 2022 |
Winter (she/her) | Does anyone know where the fact that the Darwin stdenv builds CMake twice comes from? As far as I can tell, it's from stage 0, and then just gets used in the other stages from there. Am I missing something here, is it something with the overrides? It looks like it might be, but then the fact that those are only allowed in the final stage (per booter.nix) (when that doesn't seem true, since then they wouldn't be defined...?) comes up.
(Isn't this the same pattern (defining in one stage and referencing in the others) that makes Glibc only build a limited number of times in the Linux stdenv?) | 08:00:17 |
trofi | You think cmake should be rebuild less? Or more?
glibc's is probably a bit different as it's a part of stdenv.cc.libc and mainly used by that I would guess. Also, if depends if the package is used or not by other packages in the derivation would affect rebuild count as well.
| 14:59:09 |
trofi | Looking at stdenv's dep tree I see 2 cmake-boot hashes and one cmake hash: https://dpaste.com/8GGM6P9BF.txt | 15:03:11 |
Winter (she/her) | In reply to @trofi:matrix.org
You think cmake should be rebuild less? Or more?
glibc's is probably a bit different as it's a part of stdenv.cc.libc and mainly used by that I would guess. Also, if depends if the package is used or not by other packages in the derivation would affect rebuild count as well.
I have no particular opinion, I'm just curious how that happens. | 21:22:09 |
Winter (she/her) | Oh, for clarification, I was talking about cmake-boot. | 21:22:19 |
Winter (she/her) | (which is cmake in the stdenv stages) | 21:22:29 |
Winter (she/her) | see the line i linked | 21:22:36 |
trofi | AFAIU cmake = cmakeMinimal is only for stage1-4 (first build: bootstrapTools -> cmake-boot in pastebin). Last stage uses cmake as is. Also note that cmakeMinimal is used by zstd (used by final stage, does second build: stage4 -> cmake-boot -> zstd in pastebin). | 21:44:31 |