| 25 Apr 2025 |
outfoxxed | currently building | 04:06:08 |
dramforever | .... snowball hasn't had a release since 2021, but is still in pretty active development it seems? | 04:16:46 |
dramforever | fixed for some definition of fixed https://github.com/NixOS/nixpkgs/pull/401632 | 04:56:20 |
dramforever | @outfoxxed:outfoxxed.me: also, just for the record, you basically never need targetPackages unless you're building a compiler | 05:19:05 |
dramforever | for example, your x86_64 to riscv64 cross gcc depends on targetPackages.glibc | 05:19:37 |
outfoxxed | its rather confusing so pkgs == host packages, buildPkgs = build packages, targetPkgs = confusing | 05:21:00 |
outfoxxed | is that right | 05:21:06 |
outfoxxed | this is host x64 target rv64 targetPackages right | 05:21:54 |
dramforever | that's actually a pretty good summary 😆 | 05:23:02 |
outfoxxed | haha | 05:23:29 |
dramforever | let's start from the basics, whenever you build something the build process has (build, host, target) | 05:24:25 |
dramforever | we'll write (b, h, t) from now on | 05:24:30 |
dramforever | and you pass localSystem and crossSystem to nixpkgs, let's call those L and C | 05:24:47 |
dramforever | we build pkgs.gcc from that, what happens? | 05:26:45 |
dramforever | oh btw as i said t doesn't matter if you're not a compiler, so i'll write (b, h, *) in cases where t doesn't matter | 05:27:43 |
dramforever | firstly, the bootstrap process eventually makes a (L, L, L) gcc | 05:28:18 |
dramforever | using that we build a (L, L, C) gcc (without libc) | 05:29:25 |
dramforever | and using that, we build a (L, C, *) glibc | 05:29:55 |
dramforever | we combine the two together to make a (L, L, C) gcc wrapper (contains libc) | 05:30:15 |
outfoxxed | isn't the gcc and glibc build process supposed to be combined in some way nobody else does that makes this overly annoying | 05:32:00 |
outfoxxed | so does this mean a "build on L, runs/links on C" glibc? | 05:34:14 |
dramforever | correct | 05:34:53 |
outfoxxed | so what makes gcc single-target? just design choices on their end | 05:35:40 |
dramforever | yes | 05:35:48 |
outfoxxed | most other compilers are (L, L, *) right | 05:36:04 |
dramforever | unwrapped clang is (L, L, *) | 05:36:27 |
dramforever | which is why when you cross using llvm you don't rebuild the entire clang | 05:36:41 |
dramforever | but wrapped clang is (L, L, C) because it has the libc and stuff wrapped in it | 05:37:13 |
outfoxxed | ok that makes sense thanks | 05:37:28 |
dramforever | if we're actually trying to get pkgs.gcc, then we need to keep going because we want to have a gcc that runs on C | 05:42:40 |