treewide: add emulator to platform

You can use stdenv.hostPlatform.emulator to get an executable that
runs cross-built binaries. This could be any emulator. For instance,
we use QEMU to emulate Linux targets and Wine to emulate Windows
targets. To work with qemu, we need to support custom targets.

I’ve reworked the cross tests in pkgs/test/cross to use this
functionality.

Also, I’ve used talloc to cross-execute with the emulator. There
appears to be a cross-execute for all waf builds. In the future, it
would be nice to set this for all waf builds.

Adds stdenv.hostPlatform.qemuArch attrbute to get the qemuArch for
each platform.
This commit is contained in:
Matthew Bauer
2018-11-13 16:54:08 -06:00
parent ce6d558c4d
commit 9c8fd41224
5 changed files with 99 additions and 45 deletions

View File

@@ -1,5 +1,6 @@
{ stdenv, fetchurl, python, pkgconfig, readline, libxslt
, docbook_xsl, docbook_xml_dtd_42, fixDarwinDylibNames
, buildPackages
}:
stdenv.mkDerivation rec {
@@ -10,10 +11,9 @@ stdenv.mkDerivation rec {
sha256 = "1kk76dyav41ip7ddbbf04yfydb4jvywzi2ps0z2vla56aqkn11di";
};
nativeBuildInputs = [ pkgconfig fixDarwinDylibNames ];
buildInputs = [
python readline libxslt docbook_xsl docbook_xml_dtd_42
];
nativeBuildInputs = [ pkgconfig fixDarwinDylibNames python
docbook_xsl docbook_xml_dtd_42 ];
buildInputs = [ readline libxslt ];
prePatch = ''
patchShebangs buildtools/bin/waf
@@ -23,10 +23,14 @@ stdenv.mkDerivation rec {
"--enable-talloc-compat1"
"--bundled-libraries=NONE"
"--builtin-libraries=replace"
] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"--cross-compile"
"--cross-execute=${stdenv.hostPlatform.emulator buildPackages}"
];
configurePlatforms = [];
postInstall = ''
ar q $out/lib/libtalloc.a bin/default/talloc_[0-9]*.o
${stdenv.cc.targetPrefix}ar q $out/lib/libtalloc.a bin/default/talloc_[0-9]*.o
'';
meta = with stdenv.lib; {