¿Cómo build aplicaciones de 32 bits en un sistema de 64 bits usando el administrador de packages Nix?

Parece que Nix debería ser capaz de instalar y build packages de 32 bits en sistemas de 64 bits. Los cachings ya almacenan todo el tree nixpkgs construido para la architecture i686, y no debería haber ningún problema para downloadlos e instalarlos, pero no veo la manera de hacerlo.

Si aún no sabe cómo crear un package separado con nix, aquí hay instrucciones .

nixpkgs define la variable especial pkgsi686Linux para los packages i686 tree y callPackage_i686 para invocar arbitrariamente la expresión nix con overrided system="i686-linux" . Su uso es bastante sencillo.

Método uno:

 jsoncpp06_32 = nixpkgs.callPackage_i686 ./jsoncpp06.nix { }; 

método dos:

 myPackage32 = pkgs.pkgsi686Linux.stdenv.mkDerivation { name = "myPackage-i686-0.0.1"; boost155 = nixpkgs.pkgsi686Linux.boost155; buildInputs = [ pkgs.gcc_multi pkgs.python2 pkgs.pkgconfig pkgs.pkgsi686Linux.ffmpeg_2_2 pkgs.pkgsi686Linux.boost155 pkgs.pkgsi686Linux.openssl pkgs.pkgsi686Linux.curl pkgs.pkgsi686Linux.opencv jsoncpp06_32 ]; }; 

Quizás esta sea también una solución viable.

default.nix

 { system ? builtins.currentSystem }: let pkgs = import <nixpkgs> { inherit system; } in pkgs.stdout.mkDerivation { # ... as usual } 

entonces corres

 % nix-build default.nix --argstr "x86_64-linux" 

y

 % nix-build default.nix --argstr "i686-linux"