28 Jun 2025 |
Tristan Ross | https://github.com/NixOS/nixpkgs/pull/409851 this is a part of that work | 00:34:47 |
emily | In reply to @reckenrode:matrix.org I’ve been wondering if we should generate a sysroot when setting up the stdenv and point the compiler to that. It would simplify the Darwin SDK and let me drop some workarounds in the Swift compiler. I think that would help, yes. have you seen Clang's support for per-target config files? | 08:24:50 |
emily | those will be another piece of the puzzle | 08:24:56 |
Randy Eckenrode | In reply to @emilazy:matrix.org I think that would help, yes. have you seen Clang's support for per-target config files? No. I was assuming we would do that then pass it with -sysroot (or whatever it is). | 11:06:30 |
Randy Eckenrode | If Clang lets us specify it in a config file, that’s better. | 11:06:50 |
emily | https://clang.llvm.org/docs/UsersManual.html#configuration-files we can set an env variable to a directory that it will automatically load a file with command line args from based on language and target | 11:10:06 |
emily | that doesn't quite solve cases where we have more complex logic based on other parameters or environment variables, but it is a substantial chunk of the no-compiler-wrappers puzzle | 11:11:35 |
emily | and we could hopefully work with LLVM to find ways to eliminate as much custom logic as possible and find ways to move the rest into LLVM drivers | 11:12:34 |
emily | I am not sure if the files support environment variable references but if they do then we could presumably do things like -mmacosx-min-version=$MACOSX_DEPLOYMENT_TARGET_salt etc. | 11:14:44 |
emily | though doesn't quite help for static SDL stuff which may be the only remaining reason to care about salts for Darwin soon :P | 11:15:38 |
emily | *SDK | 11:15:43 |
emily | if someone wanted to prototype this I think it should be possible to make a derivation that extracts the relevant flag files from cc-wrapper and writes them into a directory with config files like this for all three platforms, and then you could try arranging an stdenv that exposed unwrapped LLVM directly with the relevant path variable set | 11:18:38 |
emily | since it searches for a file without the triple we can use it to implement a default target too although obviously we'd ideally prefer always passing a target - we can do always-prefixed compilers without wrappers because I believe that Clang interprets being invoked through a foo-clang symlink like clang -target foo | 11:21:13 |
emily | (but ideally you'd want the multi target Clang lying around as well - not sure if you can configure it to refuse to build without being given an explicit target but that sounds very much like something we could work with upstream on) | 11:22:16 |
emily | I'm not sure how we'd achieve the libc vs. no libc flags stuff but maybe we can do away with it if we use the correct include flags etc. | 11:26:23 |
emily | I believe it should be possible to construct a basic LLVM toolchain for both Linux and macOS that does not use wrappers for at least Clang (less sure about things like LLD without more upstream work) and that completely ignores targetPlatform | 11:28:55 |
emily | in the ideal case we have the individual configuration files for a target provided by separate packages and you can just pull whatever target you need into your build like that, which would allow a pkgsCross that doesn't need to instantiate an entire stdenv which might make @qyliss:fairydust.space happy :) | 11:43:50 |
emily | though you would still have to assemble the fix point of course and I'm not sure if that's the expensive part currently | 11:44:17 |
emily | (oh yes, and you could do NIX_CFLAGS_COMPILE by overlaying these config files with more parameters, although we really ought to do a lot less of it anyway) | 11:46:52 |
Alyssa Ross | yeah it's virtually never necessary | 11:57:39 |
emily | well | 12:01:05 |
emily | it's necessary because it's how literally all C dependencies work right now | 12:01:15 |
emily | there are of course multiple ways we could hopefully fix that though | 12:01:44 |
emily |
- assemble sysroots for each build
- get Clang to support per-target C include path/etc. environment variables
- get Clang to support multiple search paths for target config files that can be overlayed together so packages can include the necessary flags in files in
nix-support
| 12:04:27 |
emily | probably other ways I'm not thinking of right now too | 12:04:38 |
emily | alternatively just expect everyone to use pkg-config and break cc -lfoo :P | 12:05:08 |
Alyssa Ross | based | 12:05:14 |
emily | agreed. you can handle the fallout | 12:05:32 |
Qyriad | pkg-config + cmake flags + autotools flags would cover a lot of cases | 12:06:20 |
emily | there's no uniform way to handle it for autotools that doesn't just reduce to injecting compiler flags again | 12:07:00 |