From 9c50ae6898b2d5dccd6e030c80535fb1a32f703d Mon Sep 17 00:00:00 2001 From: Daniel Barlow Date: Tue, 5 Dec 2017 10:27:45 +0000 Subject: [PATCH] lib, treewide: Add missing MIPS arches, and fix existing usage Existing "mips64el" should be "mipsel". This is just the barest minimum so that nixpkgs can recognize them as systems - although required for building individual derivations onto MIPS boards, it is not sufficient if you want to actually build nixos on those targets --- doc/meta.xml | 2 +- lib/systems/doubles.nix | 2 +- lib/systems/examples.nix | 2 +- lib/systems/parse.nix | 5 ++++- lib/systems/platforms.nix | 2 +- lib/tests/systems.nix | 4 ++-- pkgs/build-support/bintools-wrapper/default.nix | 11 +++++++++-- pkgs/development/compilers/gcc/4.5/default.nix | 4 ++-- pkgs/development/tools/misc/pkgconfig/default.nix | 3 +-- pkgs/os-specific/linux/kbd/default.nix | 2 +- pkgs/stdenv/adapters.nix | 4 +++- pkgs/stdenv/default.nix | 2 +- pkgs/stdenv/linux/default.nix | 4 ++-- pkgs/top-level/all-packages.nix | 2 +- 14 files changed, 30 insertions(+), 19 deletions(-) diff --git a/doc/meta.xml b/doc/meta.xml index 0f9dccfb91b5..356325991860 100644 --- a/doc/meta.xml +++ b/doc/meta.xml @@ -53,7 +53,7 @@ $ nix-env -qa hello --json "x86_64-linux", "armv5tel-linux", "armv7l-linux", - "mips64el-linux", + "mips32-linux", "x86_64-darwin", "i686-cygwin", "i686-freebsd", diff --git a/lib/systems/doubles.nix b/lib/systems/doubles.nix index f39bfff13dec..20294a28a110 100644 --- a/lib/systems/doubles.nix +++ b/lib/systems/doubles.nix @@ -9,7 +9,7 @@ let "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" - "mips64el-linux" + "mipsel-linux" "i686-cygwin" "i686-freebsd" "i686-linux" "i686-netbsd" "i686-openbsd" diff --git a/lib/systems/examples.nix b/lib/systems/examples.nix index bd68ee9460e7..e0d08ed5daed 100644 --- a/lib/systems/examples.nix +++ b/lib/systems/examples.nix @@ -51,7 +51,7 @@ rec { }; fuloongminipc = rec { - config = "mips64el-unknown-linux-gnu"; + config = "mipsel-unknown-linux-gnu"; arch = "mips"; float = "hard"; platform = platforms.fuloong2f_n32; diff --git a/lib/systems/parse.nix b/lib/systems/parse.nix index 95759b93ae08..eea471f5773d 100644 --- a/lib/systems/parse.nix +++ b/lib/systems/parse.nix @@ -75,7 +75,10 @@ rec { aarch64 = { bits = 64; significantByte = littleEndian; family = "aarch64"; }; i686 = { bits = 32; significantByte = littleEndian; family = "x86"; }; x86_64 = { bits = 64; significantByte = littleEndian; family = "x86"; }; - mips64el = { bits = 32; significantByte = littleEndian; family = "mips"; }; + mips = { bits = 32; significantByte = bigEndian; family = "mips"; }; + mipsel = { bits = 32; significantByte = littleEndian; family = "mips"; }; + mips64 = { bits = 64; significantByte = bigEndian; family = "mips"; }; + mips64el = { bits = 64; significantByte = littleEndian; family = "mips"; }; powerpc = { bits = 32; significantByte = bigEndian; family = "power"; }; riscv32 = { bits = 32; significantByte = littleEndian; family = "riscv"; }; riscv64 = { bits = 64; significantByte = littleEndian; family = "riscv"; }; diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix index 9350a16017dd..f39e890fbf1c 100644 --- a/lib/systems/platforms.nix +++ b/lib/systems/platforms.nix @@ -561,6 +561,6 @@ rec { "armv6l-linux" = raspberrypi; "armv7l-linux" = armv7l-hf-multiplatform; "aarch64-linux" = aarch64-multiplatform; - "mips64el-linux" = fuloong2f_n32; + "mipsel-linux" = fuloong2f_n32; }.${system} or pcBase; } diff --git a/lib/tests/systems.nix b/lib/tests/systems.nix index 523fd3feb3b0..ffdd8ae929c8 100644 --- a/lib/tests/systems.nix +++ b/lib/tests/systems.nix @@ -16,7 +16,7 @@ in with lib.systems.doubles; lib.runTests { arm = assertTrue (mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv7l-linux" ]); i686 = assertTrue (mseteq i686 [ "i686-linux" "i686-freebsd" "i686-netbsd" "i686-openbsd" "i686-cygwin" ]); - mips = assertTrue (mseteq mips [ "mips64el-linux" ]); + mips = assertTrue (mseteq mips [ "mipsel-linux" ]); x86_64 = assertTrue (mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" ]); cygwin = assertTrue (mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ]); @@ -24,7 +24,7 @@ in with lib.systems.doubles; lib.runTests { freebsd = assertTrue (mseteq freebsd [ "i686-freebsd" "x86_64-freebsd" ]); gnu = assertTrue (mseteq gnu (linux /* ++ hurd ++ kfreebsd ++ ... */)); illumos = assertTrue (mseteq illumos [ "x86_64-solaris" ]); - linux = assertTrue (mseteq linux [ "i686-linux" "x86_64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux" "mips64el-linux" ]); + linux = assertTrue (mseteq linux [ "i686-linux" "x86_64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux" "mipsel-linux" ]); netbsd = assertTrue (mseteq netbsd [ "i686-netbsd" "x86_64-netbsd" ]); openbsd = assertTrue (mseteq openbsd [ "i686-openbsd" "x86_64-openbsd" ]); unix = assertTrue (mseteq unix (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos)); diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix index 48fd8665cb47..98b40114c694 100644 --- a/pkgs/build-support/bintools-wrapper/default.nix +++ b/pkgs/build-support/bintools-wrapper/default.nix @@ -58,7 +58,7 @@ let else if (with targetPlatform; isArm && isLinux) then "${libc_lib}/lib/ld-linux*.so.3" else if targetPlatform.system == "aarch64-linux" then "${libc_lib}/lib/ld-linux-aarch64.so.1" else if targetPlatform.system == "powerpc-linux" then "${libc_lib}/lib/ld.so.1" - else if targetPlatform.system == "mips64el-linux" then "${libc_lib}/lib/ld.so.1" + else if targetPlatform.isMips then "${libc_lib}/lib/ld.so.1" else if targetPlatform.isDarwin then "/usr/lib/dyld" else if stdenv.lib.hasSuffix "pc-gnu" targetPlatform.config then "ld.so.1" else null; @@ -171,13 +171,20 @@ stdenv.mkDerivation { else if targetPlatform.isWindows then "pe" else "elf" + toString targetPlatform.parsed.cpu.bits; endianPrefix = if targetPlatform.isBigEndian then "big" else "little"; + sep = optionalString (targetPlatform.isx86 || targetPlatform.isArm) "-"; 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 if targetPlatform.isMips then { + "mips" = "btsmipn32"; # n32 variant + "mipsel" = "ltsmipn32"; # n32 variant + "mips64" = "btsmip"; + "mips64el" = "ltsmip"; + }.${targetPlatform.parsed.cpu.name} else throw "unknown emulation for platform: " + targetPlatform.config; - in targetPlatform.platform.bfdEmulation or (fmt + "-" + arch); + in targetPlatform.platform.bfdEmulation or (fmt + sep + arch); depsTargetTargetPropagated = extraPackages; diff --git a/pkgs/development/compilers/gcc/4.5/default.nix b/pkgs/development/compilers/gcc/4.5/default.nix index 6b2718f5e692..c63867a1d2db 100644 --- a/pkgs/development/compilers/gcc/4.5/default.nix +++ b/pkgs/development/compilers/gcc/4.5/default.nix @@ -317,8 +317,8 @@ stdenv.mkDerivation ({ # Platform-specific flags optional (targetPlatform == hostPlatform && targetPlatform.isi686) "--with-arch=i686" ++ - # Trick that should be taken out once we have a mips64el-linux not loongson2f - optional (targetPlatform == hostPlatform && stdenv.system == "mips64el-linux") "--with-arch=loongson2f" + # Trick that should be taken out once we have a mipsel-linux not loongson2f + optional (targetPlatform == hostPlatform && stdenv.system == "mipsel-linux") "--with-arch=loongson2f" ; targetConfig = if targetPlatform != hostPlatform then targetPlatform.config else null; diff --git a/pkgs/development/tools/misc/pkgconfig/default.nix b/pkgs/development/tools/misc/pkgconfig/default.nix index 7cfd78a39a28..15d00b0a2a52 100644 --- a/pkgs/development/tools/misc/pkgconfig/default.nix +++ b/pkgs/development/tools/misc/pkgconfig/default.nix @@ -19,8 +19,7 @@ stdenv.mkDerivation rec { patches = optional (!vanilla) ./requires-private.patch ++ optional stdenv.isCygwin ./2.36.3-not-win32.patch; - preConfigure = optionalString (stdenv.system == "mips64el-linux") - ''cp -v ${automake}/share/automake*/config.{sub,guess} .''; + preConfigure = ""; # TODO(@Ericson2314): Remove next mass rebuild buildInputs = optional (stdenv.isCygwin || stdenv.isDarwin || stdenv.isSunOS) libiconv; configureFlags = [ "--with-internal-glib" ] diff --git a/pkgs/os-specific/linux/kbd/default.nix b/pkgs/os-specific/linux/kbd/default.nix index b97f48af414a..d1e40371e370 100644 --- a/pkgs/os-specific/linux/kbd/default.nix +++ b/pkgs/os-specific/linux/kbd/default.nix @@ -32,7 +32,7 @@ stdenv.mkDerivation rec { # We get a warning in armv5tel-linux and the fuloong2f, so we # disable -Werror in it. - ${stdenv.lib.optionalString (stdenv.isArm || stdenv.system == "mips64el-linux") '' + ${stdenv.lib.optionalString (stdenv.isArm || stdenv.hostPlatform.isMips) '' sed -i s/-Werror// src/Makefile.am ''} ''; diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix index 3090b6283e93..0791d9e18568 100644 --- a/pkgs/stdenv/adapters.nix +++ b/pkgs/stdenv/adapters.nix @@ -94,7 +94,9 @@ rec { # without proper `file` command, libtool sometimes fails # to recognize 64-bit DLLs ++ stdenv.lib.optional (hostPlatform.config == "x86_64-w64-mingw32") pkgs.file - ++ stdenv.lib.optional (hostPlatform.isAarch64 || hostPlatform.libc == "musl") pkgs.updateAutotoolsGnuConfigScriptsHook + ++ stdenv.lib.optional + (hostPlatform.isAarch64 || hostPlatform.isMips || hostPlatform.libc == "musl") + pkgs.updateAutotoolsGnuConfigScriptsHook ; crossConfig = hostPlatform.config; diff --git a/pkgs/stdenv/default.nix b/pkgs/stdenv/default.nix index 098caca0d890..203cf5459400 100644 --- a/pkgs/stdenv/default.nix +++ b/pkgs/stdenv/default.nix @@ -45,7 +45,7 @@ in "armv6l-linux" = stagesLinux; "armv7l-linux" = stagesLinux; "aarch64-linux" = stagesLinux; - "mips64el-linux" = stagesLinux; + "mipsel-linux" = stagesLinux; "powerpc-linux" = /* stagesLinux */ stagesNative; "x86_64-darwin" = stagesDarwin; "x86_64-solaris" = stagesNix; diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 249f788c17ae..1f56cfbcdfa5 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -15,7 +15,7 @@ "armv6l-linux" = import ./bootstrap-files/armv6l.nix; "armv7l-linux" = import ./bootstrap-files/armv7l.nix; "aarch64-linux" = import ./bootstrap-files/aarch64.nix; - "mips64el-linux" = import ./bootstrap-files/loongson2f.nix; + "mipsel-linux" = import ./bootstrap-files/loongson2f.nix; }; "musl" = { "aarch64-linux" = import ./bootstrap-files/aarch64-musl.nix; @@ -40,7 +40,7 @@ let export NIX_ENFORCE_PURITY="''${NIX_ENFORCE_PURITY-1}" export NIX_ENFORCE_NO_NATIVE="''${NIX_ENFORCE_NO_NATIVE-1}" ${if system == "x86_64-linux" then "NIX_LIB64_IN_SELF_RPATH=1" else ""} - ${if system == "mips64el-linux" then "NIX_LIB32_IN_SELF_RPATH=1" else ""} + ${if system == "mipsel-linux" then "NIX_LIB32_IN_SELF_RPATH=1" else ""} ''; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ffc8abcdf236..081d824e446a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5442,7 +5442,7 @@ with pkgs; xbursttools = assert stdenv ? glibc; callPackage ../tools/misc/xburst-tools rec { # It needs a cross compiler for mipsel to build the firmware it will # load into the Ben Nanonote - crossPrefix = "mips64el-unknown-linux-gnu"; + crossPrefix = "mipsel-unknown-linux-gnu"; gccCross = let pkgsCross = nixpkgsFun {