27 Jun 2025 |
aleksana 🏳️⚧️ (force me to bed after 18:00 UTC) | In reply to @rosscomputerguy:matrix.org There's also an LLVM bump in that cycle llvm is probably unrelated as nix has a problem too, and it's not involving aws-sdk-cpp | 18:28:09 |
Tristan Ross | Yeah, I was thinking about that as well after I mentioned it | 18:28:49 |
Tristan Ross | I saw there's some cc-wrapper changes but they look harmless enough, it probably is GCC like emily mentioned. | 18:29:20 |
sielicki | stupid question: is there a reason that stdenvNoCC.fetchurl cannot assume builtins.fetchurl here? | 19:44:01 |
emily | I believe https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/fetchurl/boot.nix is used for the boostrap | 19:45:37 |
sielicki | nix-repl> :e <nix/fetchurl.nix>
error: cannot open '<nix/fetchurl.nix>' in an editor because it has no physical path
i do not understand what this is
| 19:50:16 |
sielicki | is <nix/*> special? | 19:50:43 |
emily | yes, it's magic builtin stuff | 19:51:13 |
emily | I think builtins.fetchurl is a wrapper around it or something (probably newer than <nix/fetchurl.nix> ?) | 19:51:23 |
emily | or vice versa | 19:51:24 |
sielicki | nix-repl> builtins.findFile builtins.nixPath "nix/fetchurl.nix"
<nix/fetchurl.nix>
turtles all the way down
| 19:51:40 |
sielicki | okay, yes, it's right in the root of libexpr | 19:52:25 |
emily | actually I think the difference is that <nix/fetchurl.nix> produces an actual FOD | 19:52:41 |
emily | whereas builtins.fetchurl is a bulitin fetcher that runs at eval time | 19:52:48 |
emily | but don't quote me on that | 19:52:49 |
sielicki | it's a shame that this is so difficult to touch without catastrophic levels of rebuilds | 20:00:24 |
emily | you can override stdenv for individual packages though of course for bootstrap that does not help | 20:01:38 |
emily | but for anything early in bootstrap you can just build early bootstrap stuff when iterating since ideally it gets "washed out" past a certain point anyway | 20:02:12 |
sielicki | with the current stdenv, my main complaint is that it's imprecise with respect to the languages supported. ie: there's no stdenv.cxx /stdenv.fc /stdenv.objcc /stdenv.objcxx /stdenv.nvcc /stdenv.hipcc | 20:04:36 |
sielicki | there's really no good reason that a C compiler implies a C++ compiler or vice versa. I'm looking at this in the context of generating cmake toolchains from stdenvs | 20:05:14 |
emily | in an ideal world stdenvNoCC would be the default and C toolchains would be added explicitly as dependencies | 20:13:49 |
emily | I doubt we'd realistically decouple C and C++ though | 20:14:00 |
sielicki | one of the biggest rough spots for me is in trying to setup environments between clang/gcc and libc++ vs libstdc++:
nix-repl> pkgs.stdenv.cc.libcxx # on darwin
«derivation /nix/store/clhcsg5l0lwabkniwqfgfjcfhydp0xxs-libcxx-19.1.7.drv»
nix-repl> pkgs.pkgsLinux.stdenv.cc.libcxx
null
both of these stdenvs are capable of building C++ programs
| 20:25:44 |
emily | libcxx is the LLVM C++ library | 20:37:24 |
emily | on Linux we use libstdc++ by default | 20:37:28 |
emily | well, I guess you know that :) | 20:37:35 |
emily | but I'm not sure why you're looking at stdenv.cc.libcxx to begin with, what are you trying to accomplish? | 20:37:44 |
sielicki | I dunno, that's a good question. I guess my main idea here is to avoid cc-wrapper as much as possible, for build systems where it is possible. In the case of autotools, I don't see a way around cc-wrapper. But for meson or cmake, I think passing the unwrapped compiler, alongside a nix-generated toolchain, can help out in some hand-wavey way.
https://github.com/sielicki/nix-cmake/blob/main/pkgs/cmake-toolchain-hook/cmake-toolchain.nix
https://github.com/sielicki/nix-cmake/blob/main/pkgs/cmake-dependency-hook/cmakeBuildHook.cmake
this is very rough but it's a start.
| 20:43:57 |
emily | we (or at least I) would generally like to move in the direction of fewer wrappers, but it's hard (will require upstream compiler work) | 20:45:12 |
emily | since exactly what the flags inject depends on what flags are being passed | 20:45:18 |