summary refs log tree commit diff
path: root/pkgs/development/tools/build-managers/meson/default.nix
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2022-02-10 19:31:20 +0000
committerAlyssa Ross <hi@alyssa.is>2022-03-22 21:18:09 +0000
commit07bae67bd84fc97b397f8499fa5573291d50c9d8 (patch)
treec88c6ed8dc88e51d50dc502fd54ed3eb0a6a93c8 /pkgs/development/tools/build-managers/meson/default.nix
parent6ad38730ae47fe7669ab9307cc5526080074cbe4 (diff)
downloadnixpkgs-07bae67bd84fc97b397f8499fa5573291d50c9d8.tar
nixpkgs-07bae67bd84fc97b397f8499fa5573291d50c9d8.tar.gz
nixpkgs-07bae67bd84fc97b397f8499fa5573291d50c9d8.tar.bz2
nixpkgs-07bae67bd84fc97b397f8499fa5573291d50c9d8.tar.lz
nixpkgs-07bae67bd84fc97b397f8499fa5573291d50c9d8.tar.xz
nixpkgs-07bae67bd84fc97b397f8499fa5573291d50c9d8.tar.zst
nixpkgs-07bae67bd84fc97b397f8499fa5573291d50c9d8.zip
meson: pull cross-file logic out of stdenv
Since Meson isn't part of stdenv, it doesn't really make sense for
stdenv to handle mesonFlags.  And putting it in stdenv imposes some
limitations — we can't depend on e.g. rust.toRustTargetSpec, which
we'll need to introduce Rust support in the cross file.
Diffstat (limited to 'pkgs/development/tools/build-managers/meson/default.nix')
-rw-r--r--pkgs/development/tools/build-managers/meson/default.nix28
1 files changed, 27 insertions, 1 deletions
diff --git a/pkgs/development/tools/build-managers/meson/default.nix b/pkgs/development/tools/build-managers/meson/default.nix
index aeddf457f48..62e16516392 100644
--- a/pkgs/development/tools/build-managers/meson/default.nix
+++ b/pkgs/development/tools/build-managers/meson/default.nix
@@ -1,4 +1,5 @@
 { lib
+, stdenv
 , fetchpatch
 , installShellFiles
 , ninja
@@ -63,7 +64,32 @@ python3.pkgs.buildPythonApplication rec {
     ./do-not-update-ldconfig-cache.patch
   ];
 
-  setupHook = ./setup-hook.sh;
+  cpuFamily = with stdenv.targetPlatform;
+    /**/ if isAarch32 then "arm"
+    else if isAarch64 then "aarch64"
+    else if isx86_32  then "x86"
+    else if isx86_64  then "x86_64"
+    else parsed.cpu.family + builtins.toString parsed.cpu.bits;
+
+  crossFile = if stdenv.hostPlatform == stdenv.targetPlatform then null else
+    builtins.toFile "cross-file.conf" ''
+      [properties]
+      needs_exe_wrapper = true
+
+      [host_machine]
+      system = '${stdenv.targetPlatform.parsed.kernel.name}'
+      cpu_family = '${cpuFamily}'
+      cpu = '${stdenv.targetPlatform.parsed.cpu.name}'
+      endian = ${if stdenv.targetPlatform.isLittleEndian then "'little'" else "'big'"}
+
+      [binaries]
+      llvm-config = 'llvm-config-native'
+    '';
+
+  setupHook = substituteAll {
+    src = ./setup-hook.sh;
+    crossFlags = lib.optionalString (crossFile != null) "--cross-file=${crossFile}";
+  };
 
   # Meson included tests since 0.45, however they fail in Nixpkgs because they
   # require a typical building environment (including C compiler and stuff).