!ayCRiZriCVtuCUpeLp:nixos.org

Nix Cross Compiling

581 Members
128 Servers

Load older messages


SenderMessageTime
13 Oct 2025
@ihar.hrachyshka:matrix.orgIhar Hrachyshkano idea. I'm not really a cross expert... :)13:56:35
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemthis isn't cross13:56:41
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemthis is native13:56:42
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemcross works fine13:56:56
@matthewcroughan:defenestrate.itmatthewcroughan @fosdem I have a full pkgs.nixos {} building with cross, both llvm/musl, but now I'm tackling the native case 13:57:18
@ihar.hrachyshka:matrix.orgIhar Hrachyshka

I think musl is cross in a way - you cross build musl binaries with glibc build packages. It's just not arch cross.

(maybe I'm using terms incorrectly though)

13:57:30
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemUntrue in this case13:57:40
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemI've already done the cross case13:57:44
@matthewcroughan:defenestrate.itmatthewcroughan @fosdem pkgsMusl is musl -> musl 13:57:51
@matthewcroughan:defenestrate.itmatthewcroughan @fosdem
        nixosConfigurations.gnu-musl = nixosConfigurations.base.extendModules {
          modules = [
            ./musl.nix
            {
              nixpkgs.buildPlatform = (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-gnu");
              nixpkgs.hostPlatform = inputs.nixpkgs.lib.recursiveUpdate (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl") {};
            }
          ];
        };
        nixosConfigurations.gnu-musl-llvm = nixosConfigurations.base.extendModules {
          modules = [
            ./musl-llvm.nix
            {
              nixpkgs.buildPlatform = (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-gnu");
              nixpkgs.hostPlatform = inputs.nixpkgs.lib.recursiveUpdate (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl") {
                useLLVM = true;
                linker = "lld";
                config = "aarch64-unknown-linux-musl";
              };
            }
          ];
        };
        nixosConfigurations.musl = nixosConfigurations.base.extendModules {
          modules = [
            ./musl.nix
            {
              nixpkgs.buildPlatform = (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl");
              nixpkgs.hostPlatform = inputs.nixpkgs.lib.recursiveUpdate (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl") {};
            }
          ];
        };
        nixosConfigurations.musl-llvm = nixosConfigurations.base.extendModules {
          modules = [
            ./musl-llvm.nix
            {
              nixpkgs.buildPlatform = (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl");
              nixpkgs.hostPlatform = inputs.nixpkgs.lib.recursiveUpdate (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl") {
                useLLVM = true;
                linker = "lld";
                config = "aarch64-unknown-linux-musl";
              };
            }
          ];
        };

13:58:08
@matthewcroughan:defenestrate.itmatthewcroughan @fosdem *
        nixosConfigurations.gnu-musl = nixosConfigurations.base.extendModules {
          modules = [
            ./musl.nix
            {
              nixpkgs.buildPlatform = (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-gnu");
              nixpkgs.hostPlatform = inputs.nixpkgs.lib.recursiveUpdate (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl") {};
            }
          ];
        };
        nixosConfigurations.gnu-musl-llvm = nixosConfigurations.base.extendModules {
          modules = [
            ./musl-llvm.nix
            {
              nixpkgs.buildPlatform = (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-gnu");
              nixpkgs.hostPlatform = inputs.nixpkgs.lib.recursiveUpdate (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl") {
                useLLVM = true;
                linker = "lld";
                config = "aarch64-unknown-linux-musl";
              };
            }
          ];
        };
        nixosConfigurations.musl = nixosConfigurations.base.extendModules {
          modules = [
            ./musl.nix
            {
              nixpkgs.buildPlatform = (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl");
              nixpkgs.hostPlatform = inputs.nixpkgs.lib.recursiveUpdate (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl") {};
            }
          ];
        };
        nixosConfigurations.musl-llvm = nixosConfigurations.base.extendModules {
          modules = [
            ./musl-llvm.nix
            {
              nixpkgs.buildPlatform = (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl");
              nixpkgs.hostPlatform = inputs.nixpkgs.lib.recursiveUpdate (inputs.nixpkgs.lib.systems.elaborate "aarch64-unknown-linux-musl") {
                useLLVM = true;
                linker = "lld";
                config = "aarch64-unknown-linux-musl";
              };
            }
          ];
        };

13:58:14
@ihar.hrachyshka:matrix.orgIhar Hrachyshkaah I see. I haven't looked at non-static musl, only pkgsStatic (which I believe is glibc->musl cross). anyway, I'm not of help.13:58:34
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemwell musl-static is the thing that's failing13:59:13
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemso is that not related to pkgsStatic?13:59:19
@ihar.hrachyshka:matrix.orgIhar Hrachyshka pkgsStatic is musl static. (I'm confused.) 13:59:36
@matthewcroughan:defenestrate.itmatthewcroughan @fosdem The name of the derivation that is failing is musl-static-aarch64-unknown-linux-musl 14:00:01
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemmusl-static14:00:05
@matthewcroughan:defenestrate.itmatthewcroughan @fosdem pkgsMusl.pkgsStatic.musl is the reproducer 14:00:54
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemIDK why this ends up in the dependency graph 14:01:33
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemimage.png
Download image.png
14:02:48
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemlooks like somehow the gcc-wrapper needs it14:03:02
@matthewcroughan:defenestrate.itmatthewcroughan @fosdem pkgsStatic.pkgsLLVM.musl builds just fine 14:06:19
@rosssmyth:matrix.orgrosssmyth

While the APIs that are being used for ${program}.withPackages pattern is very nice and egronomic, it does have a downside of not using a spliced package. So for example recently I needed Python with a package in nativeBuildInputs, but then when cross-compiled it only has Python from pkgsHostTarget, leading to an invalid executable being used at build time and then either manually using pkgsBuildBuild.python or using the spliced Python and package separately.

I wonder if there is a good way to solve this? Meaning a way to use the spliced package, as for folks not in the know of splicing it is probably confusing to see a package operate differently based upon whether you use the helpers or not. But many of these helpers are implemented with finalAttrs.finalPackage, which isn't spliced.

18:00:49
@sandro:supersandro.deSandroCan someone look at https://github.com/NixOS/nixpkgs/pull/447492 for the correct splice setup?22:31:54
@hexa:lossy.networkhexa also #windows:nixos.org maybe 23:11:28
14 Oct 2025
@sandro:supersandro.deSandroI did not know we had a room for that13:36:20
@ulysseszhan:matrix.orgUlyssesZhan joined the room.23:34:39
15 Oct 2025
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemI haven't had any reviews on my musl/llvm PRs yet17:15:14
@matthewcroughan:defenestrate.itmatthewcroughan @fosdem
  • https://github.com/NixOS/nixpkgs/pull/451665
  • https://github.com/NixOS/nixpkgs/pull/451147
  • https://github.com/NixOS/nixpkgs/pull/447166
  • https://github.com/NixOS/nixpkgs/pull/445833
17:15:37
@matthewcroughan:defenestrate.itmatthewcroughan @fosdemAny takers?17:15:40

Show newer messages


Back to Room ListRoom Version: 6