!ayCRiZriCVtuCUpeLp:nixos.org

Nix Cross Compiling

552 Members
117 Servers

Load older messages


SenderMessageTime
13 Oct 2025
@matthewcroughan:defenestrate.itmatthewcroughanthis is native13:56:42
@matthewcroughan:defenestrate.itmatthewcroughancross works fine13:56:56
@matthewcroughan:defenestrate.itmatthewcroughan 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.itmatthewcroughanUntrue in this case13:57:40
@matthewcroughan:defenestrate.itmatthewcroughanI've already done the cross case13:57:44
@matthewcroughan:defenestrate.itmatthewcroughan pkgsMusl is musl -> musl 13:57:51
@matthewcroughan:defenestrate.itmatthewcroughan
        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 *
        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.itmatthewcroughanwell musl-static is the thing that's failing13:59:13
@matthewcroughan:defenestrate.itmatthewcroughanso 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 The name of the derivation that is failing is musl-static-aarch64-unknown-linux-musl 14:00:01
@matthewcroughan:defenestrate.itmatthewcroughanmusl-static14:00:05
@matthewcroughan:defenestrate.itmatthewcroughan pkgsMusl.pkgsStatic.musl is the reproducer 14:00:54
@matthewcroughan:defenestrate.itmatthewcroughanIDK why this ends up in the dependency graph 14:01:33
@matthewcroughan:defenestrate.itmatthewcroughanimage.png
Download image.png
14:02:48
@matthewcroughan:defenestrate.itmatthewcroughanlooks like somehow the gcc-wrapper needs it14:03:02
@matthewcroughan:defenestrate.itmatthewcroughan 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.itmatthewcroughanI haven't had any reviews on my musl/llvm PRs yet17:15:14
@matthewcroughan:defenestrate.itmatthewcroughan
  • 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.itmatthewcroughanAny takers?17:15:40
@stas:mainframe.lvStashey! I am cross-compiling armv7 systems, and wondered are there any caches with armv7 stuff in them? Or a cache that is willing to accept uploads from me on the armv7 base system?17:33:30
@stas:mainframe.lvStasi am using mine for Olimex Lime to act as a restic backup server17:34:02

Show newer messages


Back to Room ListRoom Version: 6