summary refs log tree commit diff
path: root/lib/systems/platforms.nix
diff options
context:
space:
mode:
Diffstat (limited to 'lib/systems/platforms.nix')
-rw-r--r--lib/systems/platforms.nix49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix
index b2a8dbedef4..9bfbb87c08c 100644
--- a/lib/systems/platforms.nix
+++ b/lib/systems/platforms.nix
@@ -482,6 +482,55 @@ rec {
     };
   };
 
+  # MIPS ABI table transcribed from here: https://wiki.debian.org/Multiarch/Tuples
+
+  # can execute on 32bit chip
+  mips-linux-gnu                = { config = "mips-linux-gnu";                gcc = { arch = "mips32r2"; abi = "o32"; float = "hard"; }; };
+  mipsel-linux-gnu              = { config = "mipsel-linux-gnu";              gcc = { arch = "mips32r2"; abi = "o32"; float = "hard"; }; };
+  mipsisa32r6-linux-gnu         = { config = "mipsisa32r6-linux-gnu";         gcc = { arch = "mips32r6"; abi = "o32"; float = "hard"; }; };
+  mipsisa32r6el-linux-gnu       = { config = "mipsisa32r6el-linux-gnu";       gcc = { arch = "mips32r6"; abi = "o32"; float = "hard"; }; };
+
+  # require 64bit chip (for more registers, 64-bit floating point, 64-bit "long long") but use 32bit pointers
+  mips64-linux-gnuabin32        = { config = "mips64-linux-gnuabin32";        gcc = { arch = "mips64r2"; abi = "n32"; float = "hard"; }; };
+  mips64el-linux-gnuabin32      = { config = "mips64el-linux-gnuabin32";      gcc = { arch = "mips64r2"; abi = "n32"; float = "hard"; }; };
+  mipsisa64r6-linux-gnuabin32   = { config = "mipsisa64r6-linux-gnuabin32";   gcc = { arch = "mips64r6"; abi = "n32"; float = "hard"; }; };
+  mipsisa64r6el-linux-gnuabin32 = { config = "mipsisa64r6el-linux-gnuabin32"; gcc = { arch = "mips64r6"; abi = "n32"; float = "hard"; }; };
+
+  # 64bit pointers
+  mips64-linux-gnuabi64         = { config = "mips64-linux-gnuabi64";         gcc = { arch = "mips64r2"; abi =  "64"; float = "hard"; }; };
+  mips64el-linux-gnuabi64       = { config = "mips64el-linux-gnuabi64";       gcc = { arch = "mips64r2"; abi =  "64"; float = "hard"; }; };
+  mipsisa64r6-linux-gnuabi64    = { config = "mipsisa64r6-linux-gnuabi64";    gcc = { arch = "mips64r6"; abi =  "64"; float = "hard"; }; };
+  mipsisa64r6el-linux-gnuabi64  = { config = "mipsisa64r6el-linux-gnuabi64";  gcc = { arch = "mips64r6"; abi =  "64"; float = "hard"; }; };
+
+  # based on:
+  #   https://www.mail-archive.com/qemu-discuss@nongnu.org/msg05179.html
+  #   https://gmplib.org/~tege/qemu.html#mips64-debian
+  mips64el-qemu-linux-gnuabi64 = mips64el-linux-gnuabi64 // {
+    linux-kernel = {
+      name = "mips64el";
+      baseConfig = "64r2el_defconfig";
+      target = "vmlinuz";
+      autoModules = false;
+      DTB = true;
+      # for qemu 9p passthrough filesystem
+      extraConfig = ''
+        MIPS_MALTA y
+        PAGE_SIZE_4KB y
+        CPU_LITTLE_ENDIAN y
+        CPU_MIPS64_R2 y
+        64BIT y
+        CPU_MIPS64_R2 y
+
+        NET_9P y
+        NET_9P_VIRTIO y
+        9P_FS y
+        9P_FS_POSIX_ACL y
+        PCI y
+        VIRTIO_PCI y
+      '';
+    };
+  };
+
   ##
   ## Other
   ##