summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2017-11-27 00:12:13 -0500
committerJohn Ericson <John.Ericson@Obsidian.Systems>2017-12-29 17:32:28 -0500
commitcc44e04472bf8d0774e09a6cc4bd47175e531b8e (patch)
tree63a68b190807d96b7c78fb30b4a3b543a242f65d
parent1cde06acf691316a59ad30b207cbd68c64cbc0fa (diff)
downloadnixlib-cc44e04472bf8d0774e09a6cc4bd47175e531b8e.tar
nixlib-cc44e04472bf8d0774e09a6cc4bd47175e531b8e.tar.gz
nixlib-cc44e04472bf8d0774e09a6cc4bd47175e531b8e.tar.bz2
nixlib-cc44e04472bf8d0774e09a6cc4bd47175e531b8e.tar.lz
nixlib-cc44e04472bf8d0774e09a6cc4bd47175e531b8e.tar.xz
nixlib-cc44e04472bf8d0774e09a6cc4bd47175e531b8e.tar.zst
nixlib-cc44e04472bf8d0774e09a6cc4bd47175e531b8e.zip
bintools-wrapper: Define fallback default emulation
This ensures we by-default cross-compile to the intended platform.
-rw-r--r--pkgs/build-support/bintools-wrapper/default.nix14
-rw-r--r--pkgs/build-support/bintools-wrapper/ld-wrapper.sh5
2 files changed, 19 insertions, 0 deletions
diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix
index 0dcae204824d..57859b2f371b 100644
--- a/pkgs/build-support/bintools-wrapper/default.nix
+++ b/pkgs/build-support/bintools-wrapper/default.nix
@@ -164,6 +164,20 @@ stdenv.mkDerivation {
       set +u
     '';
 
+  emulation = let
+    fmt =
+      /**/ if targetPlatform.isDarwin  then "mach-o"
+      else if targetPlatform.isWindows then "pe"
+      else "elf" + toString targetPlatform.parsed.cpu.bits;
+    endianPrefix = if targetPlatform.isBigEndian then "big" else "little";
+    arch =
+      /**/ if targetPlatform.isAarch64 then endianPrefix + "aarch64"
+      else if targetPlatform.isArm     then endianPrefix + "arm"
+      else if targetPlatform.isx86_64  then "x86-64"
+      else if targetPlatform.isi686    then "i386"
+      else throw "unknown emulation for platform: " + targetPlatform.config;
+    in targetPlatform.platform.bfdEmulation or (fmt + "-" + arch);
+
   propagatedBuildInputs = extraPackages;
 
   setupHook = ./setup-hook.sh;
diff --git a/pkgs/build-support/bintools-wrapper/ld-wrapper.sh b/pkgs/build-support/bintools-wrapper/ld-wrapper.sh
index 136621d27af5..991ed0fe263c 100644
--- a/pkgs/build-support/bintools-wrapper/ld-wrapper.sh
+++ b/pkgs/build-support/bintools-wrapper/ld-wrapper.sh
@@ -67,6 +67,11 @@ fi
 
 extraAfter+=($NIX_@infixSalt@_LDFLAGS_AFTER)
 
+# Specify the target emulation if nothing is passed in ("-m" overrides this
+# environment variable). Ensures we never blindly fallback on targeting the host
+# platform.
+: ${LDEMULATION:=@emulation@}
+
 # Three tasks:
 #
 #   1. Find all -L... switches for rpath