Merge branch 'aarch64-armv7' of git://github.com/lheckemann/nix
Support extra compatible architectures (#1916)
This commit is contained in:
		
						commit
						8e6108ff71
					
				
					 5 changed files with 35 additions and 11 deletions
				
			
		| 
						 | 
					@ -254,6 +254,25 @@ false</literal>.</para>
 | 
				
			||||||
  </varlistentry>
 | 
					  </varlistentry>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <varlistentry xml:id="conf-extra-platforms"><term><literal>extra-platforms</literal></term>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <listitem><para>Platforms other than the native one which
 | 
				
			||||||
 | 
					    this machine is capable of building for. This can be useful for
 | 
				
			||||||
 | 
					    supporting additional architectures on compatible machines:
 | 
				
			||||||
 | 
					    i686-linux can be built on x86_64-linux machines (and the default
 | 
				
			||||||
 | 
					    for this setting reflects this); armv7 is backwards-compatible with
 | 
				
			||||||
 | 
					    armv6 and armv5tel; some aarch64 machines can also natively run
 | 
				
			||||||
 | 
					    32-bit ARM code; and qemu-user may be used to support non-native
 | 
				
			||||||
 | 
					    platforms (though this may be slow and buggy). Most values for this
 | 
				
			||||||
 | 
					    are not enabled by default because build systems will often
 | 
				
			||||||
 | 
					    misdetect the target platform and generate incompatible code, so you
 | 
				
			||||||
 | 
					    may wish to cross-check the results of using this option against
 | 
				
			||||||
 | 
					    proper natively-built versions of your
 | 
				
			||||||
 | 
					    derivations.</para></listitem>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  </varlistentry>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <varlistentry xml:id="conf-extra-substituters"><term><literal>extra-substituters</literal></term>
 | 
					  <varlistentry xml:id="conf-extra-substituters"><term><literal>extra-substituters</literal></term>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <listitem><para>Additional binary caches appended to those
 | 
					    <listitem><para>Additional binary caches appended to those
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,9 @@ int main (int argc, char * * argv)
 | 
				
			||||||
            source >> drvPath;
 | 
					            source >> drvPath;
 | 
				
			||||||
            auto requiredFeatures = readStrings<std::set<std::string>>(source);
 | 
					            auto requiredFeatures = readStrings<std::set<std::string>>(source);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            auto canBuildLocally = amWilling && (neededSystem == settings.thisSystem);
 | 
					            auto canBuildLocally = amWilling
 | 
				
			||||||
 | 
					                &&  (  neededSystem == settings.thisSystem
 | 
				
			||||||
 | 
					                    || settings.extraPlatforms.get().count(neededSystem) > 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            /* Error ignored here, will be caught later */
 | 
					            /* Error ignored here, will be caught later */
 | 
				
			||||||
            mkdir(currentLoad.c_str(), 0777);
 | 
					            mkdir(currentLoad.c_str(), 0777);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2499,6 +2499,10 @@ void setupSeccomp()
 | 
				
			||||||
        seccomp_arch_add(ctx, SCMP_ARCH_X32) != 0)
 | 
					        seccomp_arch_add(ctx, SCMP_ARCH_X32) != 0)
 | 
				
			||||||
        throw SysError("unable to add X32 seccomp architecture");
 | 
					        throw SysError("unable to add X32 seccomp architecture");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (settings.thisSystem == "aarch64-linux" &&
 | 
				
			||||||
 | 
					        seccomp_arch_add(ctx, SCMP_ARCH_ARM) != 0)
 | 
				
			||||||
 | 
					        printError("unsable to add ARM seccomp architecture; this may result in spurious build failures if running 32-bit ARM processes.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Prevent builders from creating setuid/setgid binaries. */
 | 
					    /* Prevent builders from creating setuid/setgid binaries. */
 | 
				
			||||||
    for (int perm : { S_ISUID, S_ISGID }) {
 | 
					    for (int perm : { S_ISUID, S_ISGID }) {
 | 
				
			||||||
        if (seccomp_rule_add(ctx, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(chmod), 1,
 | 
					        if (seccomp_rule_add(ctx, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(chmod), 1,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,16 +57,8 @@ bool BasicDerivation::isBuiltin() const
 | 
				
			||||||
bool BasicDerivation::canBuildLocally() const
 | 
					bool BasicDerivation::canBuildLocally() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return platform == settings.thisSystem
 | 
					    return platform == settings.thisSystem
 | 
				
			||||||
        || isBuiltin()
 | 
					        || settings.extraPlatforms.get().count(platform) > 0
 | 
				
			||||||
#if __linux__
 | 
					        || isBuiltin();
 | 
				
			||||||
        || (platform == "i686-linux" && settings.thisSystem == "x86_64-linux")
 | 
					 | 
				
			||||||
        || (platform == "armv6l-linux" && settings.thisSystem == "armv7l-linux")
 | 
					 | 
				
			||||||
        || (platform == "armv5tel-linux" && (settings.thisSystem == "armv7l-linux" || settings.thisSystem == "armv6l-linux"))
 | 
					 | 
				
			||||||
#elif __FreeBSD__
 | 
					 | 
				
			||||||
        || (platform == "i686-linux" && settings.thisSystem == "x86_64-freebsd")
 | 
					 | 
				
			||||||
        || (platform == "i686-linux" && settings.thisSystem == "i686-freebsd")
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
        ;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -295,6 +295,13 @@ public:
 | 
				
			||||||
        "Nix store has a valid signature (that is, one signed using a key "
 | 
					        "Nix store has a valid signature (that is, one signed using a key "
 | 
				
			||||||
        "listed in 'trusted-public-keys'."};
 | 
					        "listed in 'trusted-public-keys'."};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Setting<StringSet> extraPlatforms{this,
 | 
				
			||||||
 | 
					        SYSTEM == "x86_64-linux" ? StringSet{"i686-linux"} : StringSet{},
 | 
				
			||||||
 | 
					        "extra-platforms",
 | 
				
			||||||
 | 
					        "Additional platforms that can be built on the local system. "
 | 
				
			||||||
 | 
					        "These may be supported natively (e.g. armv7 on some aarch64 CPUs "
 | 
				
			||||||
 | 
					        "or using hacks like qemu-user."};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Setting<Strings> substituters{this,
 | 
					    Setting<Strings> substituters{this,
 | 
				
			||||||
        nixStore == "/nix/store" ? Strings{"https://cache.nixos.org/"} : Strings(),
 | 
					        nixStore == "/nix/store" ? Strings{"https://cache.nixos.org/"} : Strings(),
 | 
				
			||||||
        "substituters",
 | 
					        "substituters",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue