meson: Make target-agnostic

The cross file is added in the `mkDerivation`. It isn't nice putting
build tool-specific stuff here, but our current architecture gives us
little alternative.
This commit is contained in:
John Ericson
2020-04-28 10:55:33 -04:00
parent 128b93e061
commit 8245230753
3 changed files with 29 additions and 33 deletions
+29
View File
@@ -49,6 +49,7 @@ in rec {
# Configure Phase
, configureFlags ? []
, cmakeFlags ? []
, mesonFlags ? []
, # Target is not included by default because most programs don't care.
# Including it then would cause needless mass rebuilds.
#
@@ -252,6 +253,34 @@ in rec {
++ lib.optional (stdenv.buildPlatform.uname.system != null) "-DCMAKE_HOST_SYSTEM_NAME=${stdenv.buildPlatform.uname.system}"
++ lib.optional (stdenv.buildPlatform.uname.processor != null) "-DCMAKE_HOST_SYSTEM_PROCESSOR=${stdenv.buildPlatform.uname.processor}"
++ lib.optional (stdenv.buildPlatform.uname.release != null) "-DCMAKE_HOST_SYSTEM_VERSION=${stdenv.buildPlatform.uname.release}";
mesonFlags = if mesonFlags == null then null else let
# See https://mesonbuild.com/Reference-tables.html#cpu-families
cpuFamilies = {
aarch64 = "aarch64";
armv5tel = "arm";
armv6l = "arm";
armv7l = "arm";
i686 = "x86";
x86_64 = "x86_64";
};
crossFile = builtins.toFile "cross-file.conf" (''
[properties]
needs_exe_wrapper = true
[host_machine]
system = '${stdenv.targetPlatform.parsed.kernel.name}'
cpu_family = '${cpuFamilies.${stdenv.targetPlatform.parsed.cpu.name}}'
cpu = '${stdenv.targetPlatform.parsed.cpu.name}'
endian = ${if stdenv.targetPlatform.isLittleEndian then "'little'" else "'big'"}
''
# TODO should have target prefix too, issue #86077
+ ''
[binaries]
pkgconfig = 'pkg-config'
'');
in [ "--cross-file=${crossFile}" ] ++ mesonFlags;
} // lib.optionalAttrs (attrs.enableParallelBuilding or false) {
enableParallelChecking = attrs.enableParallelChecking or true;
} // lib.optionalAttrs (hardeningDisable != [] || hardeningEnable != []) {