Merge pull request #22117 from dezgeg/aarch64-for-merge
Aarch64 (ARM64) support
This commit is contained in:
commit
e2a2f6d595
30 changed files with 305 additions and 27 deletions
|
@ -15,7 +15,7 @@ rec {
|
|||
freebsd = ["i686-freebsd" "x86_64-freebsd"];
|
||||
gnu = linux; /* ++ hurd ++ kfreebsd ++ ... */
|
||||
illumos = ["x86_64-solaris"];
|
||||
linux = ["i686-linux" "x86_64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "mips64el-linux"];
|
||||
linux = ["i686-linux" "x86_64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux" "mips64el-linux"];
|
||||
netbsd = ["i686-netbsd" "x86_64-netbsd"];
|
||||
openbsd = ["i686-openbsd" "x86_64-openbsd"];
|
||||
unix = linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos;
|
||||
|
|
63
nixos/modules/installer/cd-dvd/sd-image-aarch64.nix
Normal file
63
nixos/modules/installer/cd-dvd/sd-image-aarch64.nix
Normal file
|
@ -0,0 +1,63 @@
|
|||
# To build, use:
|
||||
# nix-build nixos -I nixos-config=nixos/modules/installer/cd-dvd/sd-image-aarch64.nix -A config.system.build.sdImage
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
extlinux-conf-builder =
|
||||
import ../../system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.nix {
|
||||
inherit pkgs;
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
../../profiles/minimal.nix
|
||||
../../profiles/installation-device.nix
|
||||
./sd-image.nix
|
||||
];
|
||||
|
||||
assertions = lib.singleton {
|
||||
assertion = pkgs.stdenv.system == "aarch64-linux";
|
||||
message = "sd-image-aarch64.nix can be only built natively on Aarch64 / ARM64; " +
|
||||
"it cannot be cross compiled";
|
||||
};
|
||||
|
||||
# Needed by RPi firmware
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
boot.loader.grub.enable = false;
|
||||
boot.loader.generic-extlinux-compatible.enable = true;
|
||||
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
boot.kernelParams = ["console=ttyS0,115200n8" "console=tty0"];
|
||||
boot.consoleLogLevel = 7;
|
||||
|
||||
# FIXME: this probably should be in installation-device.nix
|
||||
users.extraUsers.root.initialHashedPassword = "";
|
||||
|
||||
sdImage = {
|
||||
populateBootCommands = let
|
||||
# Contains a couple of fixes for booting a Linux kernel, will hopefully appear upstream soon.
|
||||
patchedUboot = pkgs.ubootRaspberryPi3_64bit.overrideAttrs (oldAttrs: {
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "dezgeg";
|
||||
repo = "u-boot";
|
||||
rev = "baab53ec244fe44def01948a0f10e67342d401e6";
|
||||
sha256 = "0r5j2pc42ws3w3im0a9c6bh01czz5kapqrqp0ik9ra823cw73lxr";
|
||||
};
|
||||
});
|
||||
|
||||
configTxt = pkgs.writeText "config.txt" ''
|
||||
kernel=u-boot-rpi3.bin
|
||||
arm_control=0x200
|
||||
enable_uart=1
|
||||
'';
|
||||
in ''
|
||||
for f in bootcode.bin fixup.dat start.elf; do
|
||||
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/$f boot/
|
||||
done
|
||||
cp ${patchedUboot}/u-boot.bin boot/u-boot-rpi3.bin
|
||||
cp ${configTxt} boot/config.txt
|
||||
${extlinux-conf-builder} -t 3 -c ${config.system.build.toplevel} -d ./boot
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -1,3 +1,5 @@
|
|||
# To build, use:
|
||||
# nix-build nixos -I nixos-config=nixos/modules/installer/cd-dvd/sd-image-armv7l-multiplatform.nix -A config.system.build.sdImage
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
|
@ -46,7 +48,7 @@ in
|
|||
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/$f boot/
|
||||
done
|
||||
cp ${pkgs.ubootRaspberryPi2}/u-boot.bin boot/u-boot-rpi2.bin
|
||||
cp ${pkgs.ubootRaspberryPi3}/u-boot.bin boot/u-boot-rpi3.bin
|
||||
cp ${pkgs.ubootRaspberryPi3_32bit}/u-boot.bin boot/u-boot-rpi3.bin
|
||||
cp ${configTxt} boot/config.txt
|
||||
${extlinux-conf-builder} -t 3 -c ${config.system.build.toplevel} -d ./boot
|
||||
'';
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# To build, use:
|
||||
# nix-build nixos -I nixos-config=nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix -A config.system.build.sdImage
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
|
|
|
@ -272,6 +272,7 @@ stdenv.mkDerivation {
|
|||
if stdenv.system == "x86_64-linux" then "ld-linux-x86-64.so.2" else
|
||||
# ARM with a wildcard, which can be "" or "-armhf".
|
||||
if stdenv.isArm then "ld-linux*.so.3" else
|
||||
if stdenv.system == "aarch64-linux" then "ld-linux-aarch64.so.1" else
|
||||
if stdenv.system == "powerpc-linux" then "ld.so.1" else
|
||||
if stdenv.system == "mips64el-linux" then "ld.so.1" else
|
||||
if stdenv.system == "x86_64-darwin" then "/usr/lib/dyld" else
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
preConfigurePhases+=" updateAutotoolsGnuConfigScriptsPhase"
|
||||
|
||||
updateAutotoolsGnuConfigScriptsPhase() {
|
||||
if [ -n "$dontUpdateAutotoolsGnuConfigScripts" ]; then return; fi
|
||||
|
||||
for script in config.sub config.guess; do
|
||||
for f in $(find . -name "$script"); do
|
||||
echo "Updating Autotools / GNU config script to a newer upstream version: $f"
|
||||
cp -f "@gnu_config@/$script" "$f"
|
||||
done
|
||||
done
|
||||
}
|
|
@ -20,6 +20,8 @@ stdenv.mkDerivation rec {
|
|||
postPatch = ''
|
||||
# Fixes an issue with version detection under perl 5.22.x
|
||||
sed -i 's/(defined\((@TEMPLATE_FILE)\))/\1/' config/milestone.pl
|
||||
'' + stdenv.lib.optionalString stdenv.isAarch64 ''
|
||||
patch -p1 -d ../.. < ${./aarch64-double-conversion.patch}
|
||||
'';
|
||||
|
||||
preConfigure = ''
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
diff -ru mozjs17.0.0-orig/mfbt/double-conversion/utils.h mozjs17.0.0/mfbt/double-conversion/utils.h
|
||||
--- mozjs17.0.0-orig/mfbt/double-conversion/utils.h 2013-02-11 17:33:28.000000000 -0500
|
||||
+++ mozjs17.0.0/mfbt/double-conversion/utils.h 2016-12-03 20:39:07.915042988 -0500
|
||||
@@ -58,7 +58,8 @@
|
||||
defined(__mips__) || defined(__powerpc__) || \
|
||||
defined(__sparc__) || defined(__sparc) || defined(__s390__) || \
|
||||
defined(__SH4__) || defined(__alpha__) || \
|
||||
- defined(_MIPS_ARCH_MIPS32R2)
|
||||
+ defined(_MIPS_ARCH_MIPS32R2) || \
|
||||
+ defined(__AARCH64EL__)
|
||||
#define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
|
||||
#elif defined(_M_IX86) || defined(__i386__) || defined(__i386)
|
||||
#if defined(_WIN32)
|
|
@ -93,7 +93,7 @@ stdenv.mkDerivation ({
|
|||
"--enable-kernel=2.6.32"
|
||||
] ++ lib.optionals (cross != null) [
|
||||
(if cross.withTLS then "--with-tls" else "--without-tls")
|
||||
(if cross.float == "soft" then "--without-fp" else "--with-fp")
|
||||
(if cross ? float && cross.float == "soft" then "--without-fp" else "--with-fp")
|
||||
] ++ lib.optionals (cross != null
|
||||
&& cross.platform ? kernelMajor
|
||||
&& cross.platform.kernelMajor == "2.6") [
|
||||
|
|
39
pkgs/development/libraries/gnu-config/default.nix
Normal file
39
pkgs/development/libraries/gnu-config/default.nix
Normal file
|
@ -0,0 +1,39 @@
|
|||
{ stdenv, fetchurl }:
|
||||
|
||||
let
|
||||
rev = "6a82322dd05cdc57b4cd9f7effdf1e2fd6f7482b";
|
||||
|
||||
# Don't use fetchgit as this is needed during Aarch64 bootstrapping
|
||||
configGuess = fetchurl {
|
||||
url = "http://git.savannah.gnu.org/cgit/config.git/plain/config.guess?id=${rev}";
|
||||
sha256 = "1yj9yi94h7z4z6jzickddv64ksz1aq5kj0c7krgzjn8xf8p3avmh";
|
||||
};
|
||||
configSub = fetchurl {
|
||||
url = "http://git.savannah.gnu.org/cgit/config.git/plain/config.sub?id=${rev}";
|
||||
sha256 = "1qsqdpla6icbzskkk7v3zxrpzlpqlc94ny9hyy5wh5lm5rwwfvb7";
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "gnu-config-${version}";
|
||||
version = "2016-12-31";
|
||||
|
||||
buildCommand = ''
|
||||
mkdir -p $out
|
||||
cp ${configGuess} $out/config.guess
|
||||
cp ${configSub} $out/config.sub
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Attempt to guess a canonical system name";
|
||||
homepage = http://savannah.gnu.org/projects/config;
|
||||
license = licenses.gpl3;
|
||||
# In addition to GPLv3:
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that
|
||||
# program.
|
||||
maintainers = [ maintainers.dezgeg ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
diff -ru gnu-efi-3.0.4-orig/lib/aarch64/initplat.c gnu-efi-3.0.4/lib/aarch64/initplat.c
|
||||
--- gnu-efi-3.0.4-orig/lib/aarch64/initplat.c 2016-03-17 09:53:14.000000000 -0400
|
||||
+++ gnu-efi-3.0.4/lib/aarch64/initplat.c 2016-12-03 17:53:57.166575974 -0500
|
||||
@@ -41,7 +41,8 @@
|
||||
|
||||
void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
|
||||
{
|
||||
- unsigned char *p = dest, *q = src;
|
||||
+ unsigned char *p = dest;
|
||||
+ const unsigned char *q = src;
|
||||
|
||||
while (n--)
|
||||
*p++ = *q++;
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, fetchurl, pciutils }:
|
||||
{ stdenv, fetchurl, pciutils }: with stdenv.lib;
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "gnu-efi-${version}";
|
||||
|
@ -9,6 +9,8 @@ stdenv.mkDerivation rec {
|
|||
sha256 = "1bzq5czw5dxlvpgs9ij2iz7q6krwhja87vc982r6vffcqcl0982i";
|
||||
};
|
||||
|
||||
patches = optional stdenv.isAarch64 ./aarch64-fix-discarded-qualifier.patch;
|
||||
|
||||
buildInputs = [ pciutils ];
|
||||
|
||||
hardeningDisable = [ "stackprotector" ];
|
||||
|
|
12
pkgs/development/libraries/libsigsegv/aarch64.patch
Normal file
12
pkgs/development/libraries/libsigsegv/aarch64.patch
Normal file
|
@ -0,0 +1,12 @@
|
|||
diff --git a/configure b/configure
|
||||
index 6c4e868..0298e19 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -14501,6 +14501,7 @@ else
|
||||
|
||||
case "$host_cpu" in
|
||||
a29k | \
|
||||
+ aarch64* | \
|
||||
alpha* | \
|
||||
arc | \
|
||||
arm* | strongarm* | xscale* | \
|
|
@ -8,6 +8,12 @@ stdenv.mkDerivation rec {
|
|||
sha256 = "16hrs8k3nmc7a8jam5j1fpspd6sdpkamskvsdpcw6m29vnis8q44";
|
||||
};
|
||||
|
||||
# Based on https://github.com/davidgfnet/buildroot-Os/blob/69fe6065b9dd1cb4dcc0a4b554e42cc2e5bd0d60/package/libsigsegv/libsigsegv-0002-fix-aarch64-build.patch
|
||||
# but applied directly to configure since we can't use autoreconf while bootstrapping.
|
||||
patches = if stdenv.isAarch64 || stdenv.cross.arch or "" == "aarch64"
|
||||
then [ ./aarch64.patch ]
|
||||
else null; # TODO: change to lib.optional on next mass rebuild
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/issues/6028
|
||||
doCheck = false;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, fetchurl, fetchpatch, xz }:
|
||||
{ stdenv, fetchurl, fetchpatch, autoreconfHook, xz }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "libunwind-1.1";
|
||||
|
@ -8,13 +8,18 @@ stdenv.mkDerivation rec {
|
|||
sha256 = "16nhx2pahh9d62mvszc88q226q5lwjankij276fxwrm8wb50zzlx";
|
||||
};
|
||||
|
||||
buildInputs = stdenv.lib.optional stdenv.isAarch64 autoreconfHook;
|
||||
|
||||
patches = [ ./libunwind-1.1-lzma.patch ./cve-2015-3239.patch
|
||||
# https://lists.nongnu.org/archive/html/libunwind-devel/2014-04/msg00000.html
|
||||
(fetchpatch {
|
||||
url = "https://raw.githubusercontent.com/dropbox/pyston/1b2e676417b0f5f17526ece0ed840aa88c744145/libunwind_patches/0001-Change-the-RBP-validation-heuristic-to-allow-size-0-.patch";
|
||||
sha256 = "1a0fsgfxmgd218nscswx7pgyb7rcn2gh6566252xhfvzhgn5i4ha";
|
||||
})
|
||||
];
|
||||
] ++ stdenv.lib.optional stdenv.isAarch64 (fetchpatch {
|
||||
url = "https://raw.githubusercontent.com/archlinuxarm/PKGBUILDs/77709d1c6d5c39e23c1535b1bd584be1455f2551/extra/libunwind/libunwind-aarch64.patch";
|
||||
sha256 = "1mpjs8izq9wxiaf5rl4gzaxrkz0s51f9qz5qc5dj72pr84mw50w8";
|
||||
});
|
||||
|
||||
postPatch = ''
|
||||
sed -i -e '/LIBLZMA/s:-lzma:-llzma:' configure
|
||||
|
|
|
@ -100,12 +100,18 @@ in rec {
|
|||
filesToInstall = ["u-boot.bin"];
|
||||
};
|
||||
|
||||
ubootRaspberryPi3 = buildUBoot rec {
|
||||
ubootRaspberryPi3_32bit = buildUBoot rec {
|
||||
defconfig = "rpi_3_32b_defconfig";
|
||||
targetPlatforms = ["armv7l-linux"];
|
||||
filesToInstall = ["u-boot.bin"];
|
||||
};
|
||||
|
||||
ubootRaspberryPi3_64bit = buildUBoot rec {
|
||||
defconfig = "rpi_3_defconfig";
|
||||
targetPlatforms = ["aarch64-linux"];
|
||||
filesToInstall = ["u-boot.bin"];
|
||||
};
|
||||
|
||||
ubootWandboard = buildUBoot rec {
|
||||
defconfig = "wandboard_defconfig";
|
||||
targetPlatforms = ["armv7l-linux"];
|
||||
|
|
|
@ -12,3 +12,12 @@ stdenv bootstrap.
|
|||
exit(busybox_main(argv));
|
||||
# endif
|
||||
# if NUM_APPLETS > 0
|
||||
@@ -981,7 +981,7 @@ int main(int argc UNUSED_PARAM, char **argv)
|
||||
|
||||
lbb_prepare("busybox" IF_FEATURE_INDIVIDUAL(, argv));
|
||||
# if !ENABLE_BUSYBOX
|
||||
- if (argv[1] && is_prefixed_with(bb_basename(argv[0]), "busybox"))
|
||||
+ if (argv[1] && strstr(bb_basename(argv[0]), "busybox") != 0)
|
||||
argv++;
|
||||
# endif
|
||||
applet_name = argv[0];
|
||||
|
|
|
@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
|
|||
description = "Firmware for the Raspberry Pi board";
|
||||
homepage = https://github.com/raspberrypi;
|
||||
license = licenses.unfree;
|
||||
platforms = [ "armv6l-linux" "armv7l-linux" ];
|
||||
platforms = [ "armv6l-linux" "armv7l-linux" "aarch64-linux" ];
|
||||
maintainers = with maintainers; [ viric tavyc ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ stdenv, fetchFromGitHub, utillinux
|
||||
{ stdenv, fetchFromGitHub, fetchpatch, utillinux
|
||||
, autoconf, automake, libtool, gettext }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
|
@ -14,6 +14,11 @@ stdenv.mkDerivation rec {
|
|||
|
||||
buildInputs = [ utillinux autoconf automake libtool gettext ];
|
||||
|
||||
patches = stdenv.lib.optional stdenv.isAarch64 (fetchpatch {
|
||||
url = "https://github.com/libfuse/libfuse/commit/914871b20a901e3e1e981c92bc42b1c93b7ab81b.patch";
|
||||
sha256 = "1w4j6f1awjrycycpvmlv0x5v9gprllh4dnbjxl4dyl2jgbkaw6pa";
|
||||
});
|
||||
|
||||
preConfigure =
|
||||
''
|
||||
export MOUNT_FUSE_PATH=$out/sbin
|
||||
|
|
|
@ -45,7 +45,7 @@ with stdenv.lib;
|
|||
|
||||
# Bump the maximum number of CPUs to support systems like EC2 x1.*
|
||||
# instances and Xeon Phi.
|
||||
${optionalString (stdenv.system == "x86_64-linux") ''
|
||||
${optionalString (stdenv.system == "x86_64-linux" || stdenv.system == "aarch64-linux") ''
|
||||
NR_CPUS 384
|
||||
''}
|
||||
|
||||
|
|
|
@ -120,7 +120,7 @@ let
|
|||
|
||||
# Some image types need special install targets (e.g. uImage is installed with make uinstall)
|
||||
installTargets = [ (if platform.kernelTarget == "uImage" then "uinstall" else
|
||||
if platform.kernelTarget == "zImage" then "zinstall" else
|
||||
if platform.kernelTarget == "zImage" || platform.kernelTarget == "Image.gz" then "zinstall" else
|
||||
"install") ];
|
||||
|
||||
postInstall = ''
|
||||
|
|
|
@ -92,6 +92,7 @@ rec {
|
|||
# without proper `file` command, libtool sometimes fails
|
||||
# to recognize 64-bit DLLs
|
||||
++ stdenv.lib.optional (cross.config == "x86_64-w64-mingw32") pkgs.file
|
||||
++ stdenv.lib.optional (cross.config == "aarch64-linux-gnu") pkgs.updateAutotoolsGnuConfigScriptsHook
|
||||
;
|
||||
|
||||
# Cross-linking dynamic libraries, every buildInput should
|
||||
|
|
|
@ -44,6 +44,7 @@ in
|
|||
"armv5tel-linux" = stagesLinux;
|
||||
"armv6l-linux" = stagesLinux;
|
||||
"armv7l-linux" = stagesLinux;
|
||||
"aarch64-linux" = stagesLinux;
|
||||
"mips64el-linux" = stagesLinux;
|
||||
"powerpc-linux" = /* stagesLinux */ stagesNative;
|
||||
"x86_64-darwin" = stagesDarwin;
|
||||
|
|
|
@ -311,6 +311,7 @@ let
|
|||
|| system == "armv5tel-linux"
|
||||
|| system == "armv6l-linux"
|
||||
|| system == "armv7l-linux"
|
||||
|| system == "aarch64-linux"
|
||||
|| system == "mips64el-linux";
|
||||
isGNU = system == "i686-gnu"; # GNU/Hurd
|
||||
isGlibc = isGNU # useful for `stdenvNative'
|
||||
|
@ -348,6 +349,7 @@ let
|
|||
isArm = system == "armv5tel-linux"
|
||||
|| system == "armv6l-linux"
|
||||
|| system == "armv7l-linux";
|
||||
isAarch64 = system == "aarch64-linux";
|
||||
isBigEndian = system == "powerpc-linux";
|
||||
|
||||
# Whether we should run paxctl to pax-mark binaries.
|
||||
|
|
11
pkgs/stdenv/linux/bootstrap-files/aarch64.nix
Normal file
11
pkgs/stdenv/linux/bootstrap-files/aarch64.nix
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
busybox = import <nix/fetchurl.nix> {
|
||||
url = http://nixos-arm.dezgeg.me/bootstrap-aarch64-for-merge/busybox;
|
||||
sha256 = "12qcml1l67skpjhfjwy7gr10nc86gqcwjmz9ggp7knss8gq8pv7f";
|
||||
executable = true;
|
||||
};
|
||||
bootstrapTools = import <nix/fetchurl.nix> {
|
||||
url = http://nixos-arm.dezgeg.me/bootstrap-aarch64-for-merge/bootstrap-tools.tar.xz;
|
||||
sha256 = "10sqgh0dchp1906h06jznxh8gfflnzbpfy27hng2mmc1l0c7irjr";
|
||||
};
|
||||
}
|
|
@ -12,6 +12,7 @@
|
|||
"armv5tel-linux" = import ./bootstrap-files/armv5tel.nix;
|
||||
"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;
|
||||
}.${localSystem.system}
|
||||
or (abort "unsupported platform for the pure Linux stdenv")
|
||||
|
@ -213,7 +214,9 @@ in
|
|||
isl = isl_0_14;
|
||||
};
|
||||
};
|
||||
extraBuildInputs = [ prevStage.patchelf prevStage.paxctl ];
|
||||
extraBuildInputs = [ prevStage.patchelf prevStage.paxctl ] ++
|
||||
# Many tarballs come with obsolete config.sub/config.guess that don't recognize aarch64.
|
||||
lib.optional (system == "aarch64-linux") prevStage.updateAutotoolsGnuConfigScriptsHook;
|
||||
})
|
||||
|
||||
|
||||
|
@ -240,7 +243,9 @@ in
|
|||
shell = self.bash + "/bin/bash";
|
||||
};
|
||||
};
|
||||
extraBuildInputs = [ prevStage.patchelf prevStage.xz ];
|
||||
extraBuildInputs = [ prevStage.patchelf prevStage.xz ] ++
|
||||
# Many tarballs come with obsolete config.sub/config.guess that don't recognize aarch64.
|
||||
lib.optional (system == "aarch64-linux") prevStage.updateAutotoolsGnuConfigScriptsHook;
|
||||
})
|
||||
|
||||
# Construct the final stdenv. It uses the Glibc and GCC, and adds
|
||||
|
@ -268,7 +273,9 @@ in
|
|||
initialPath =
|
||||
((import ../common-path.nix) {pkgs = prevStage;});
|
||||
|
||||
extraBuildInputs = [ prevStage.patchelf prevStage.paxctl ];
|
||||
extraBuildInputs = [ prevStage.patchelf prevStage.paxctl ] ++
|
||||
# Many tarballs come with obsolete config.sub/config.guess that don't recognize aarch64.
|
||||
lib.optional (system == "aarch64-linux") prevStage.updateAutotoolsGnuConfigScriptsHook;
|
||||
|
||||
cc = prevStage.gcc;
|
||||
|
||||
|
@ -287,7 +294,7 @@ in
|
|||
[ gzip bzip2 xz bash binutils coreutils diffutils findutils gawk
|
||||
glibc gnumake gnused gnutar gnugrep gnupatch patchelf attr acl
|
||||
paxctl zlib pcre linuxHeaders ed gcc gcc.cc libsigsegv
|
||||
];
|
||||
] ++ lib.optional (system == "aarch64-linux") prevStage.updateAutotoolsGnuConfigScriptsHook;
|
||||
*/
|
||||
|
||||
overrides = self: super: {
|
||||
|
|
|
@ -50,10 +50,23 @@ let
|
|||
};
|
||||
};
|
||||
|
||||
aarch64-multiplatform-crossSystem = {
|
||||
crossSystem = rec {
|
||||
config = "aarch64-linux-gnu";
|
||||
bigEndian = false;
|
||||
arch = "aarch64";
|
||||
withTLS = true;
|
||||
libc = "glibc";
|
||||
platform = pkgsNoParams.platforms.aarch64-multiplatform;
|
||||
inherit (platform) gcc;
|
||||
};
|
||||
};
|
||||
|
||||
selectedCrossSystem =
|
||||
if toolsArch == "armv5tel" then sheevaplugCrossSystem else
|
||||
if toolsArch == "armv6l" then raspberrypiCrossSystem else
|
||||
if toolsArch == "armv7l" then armv7l-hf-multiplatform-crossSystem else null;
|
||||
if toolsArch == "armv7l" then armv7l-hf-multiplatform-crossSystem else
|
||||
if toolsArch == "aarch64" then aarch64-multiplatform-crossSystem else null;
|
||||
|
||||
pkgs = pkgsFun ({inherit system;} // selectedCrossSystem);
|
||||
|
||||
|
@ -264,4 +277,5 @@ rec {
|
|||
armv5tel = buildFor "armv5tel";
|
||||
armv6l = buildFor "armv6l";
|
||||
armv7l = buildFor "armv7l";
|
||||
aarch64 = buildFor "aarch64";
|
||||
}
|
||||
|
|
|
@ -170,8 +170,9 @@ rec {
|
|||
};
|
||||
|
||||
bootstrapFiles = {
|
||||
busybox = "${build}/on-server/busybox";
|
||||
bootstrapTools = "${build}/on-server/bootstrap-tools.tar.xz";
|
||||
# Make them their own store paths to test that busybox still works when the binary is named /nix/store/HASH-busybox
|
||||
busybox = runCommand "busybox" {} "cp ${build}/on-server/busybox $out";
|
||||
bootstrapTools = runCommand "bootstrap-tools.tar.xz" {} "cp ${build}/on-server/bootstrap-tools.tar.xz $out";
|
||||
};
|
||||
|
||||
bootstrapTools = import ./bootstrap-tools { inherit system bootstrapFiles; };
|
||||
|
|
|
@ -79,6 +79,10 @@ with pkgs;
|
|||
}
|
||||
'');
|
||||
|
||||
updateAutotoolsGnuConfigScriptsHook = makeSetupHook
|
||||
{ substitutions = { gnu_config = gnu-config;}; }
|
||||
../build-support/setup-hooks/update-autotools-gnu-config-scripts.sh;
|
||||
|
||||
buildEnv = callPackage ../build-support/buildenv { }; # not actually a package
|
||||
|
||||
buildFHSUserEnv = callPackage ../build-support/build-fhs-userenv { };
|
||||
|
@ -7459,6 +7463,8 @@ with pkgs;
|
|||
|
||||
gnet = callPackage ../development/libraries/gnet { };
|
||||
|
||||
gnu-config = callPackage ../development/libraries/gnu-config { };
|
||||
|
||||
gnu-efi = callPackage ../development/libraries/gnu-efi { };
|
||||
|
||||
gnutls = gnutls34;
|
||||
|
@ -11799,7 +11805,8 @@ with pkgs;
|
|||
ubootPcduino3Nano
|
||||
ubootRaspberryPi
|
||||
ubootRaspberryPi2
|
||||
ubootRaspberryPi3
|
||||
ubootRaspberryPi3_32bit
|
||||
ubootRaspberryPi3_64bit
|
||||
ubootWandboard
|
||||
;
|
||||
|
||||
|
|
|
@ -443,12 +443,54 @@ rec {
|
|||
};
|
||||
};
|
||||
|
||||
selectPlatformBySystem = system:
|
||||
if system == "armv6l-linux" then raspberrypi
|
||||
else if system == "armv7l-linux" then armv7l-hf-multiplatform
|
||||
else if system == "armv5tel-linux" then sheevaplug
|
||||
else if system == "mips64el-linux" then fuloong2f_n32
|
||||
else if system == "x86_64-linux" then pc64
|
||||
else if system == "i686-linux" then pc32
|
||||
else pcBase;
|
||||
aarch64-multiplatform = {
|
||||
name = "aarch64-multiplatform";
|
||||
kernelMajor = "2.6"; # Using "2.6" enables 2.6 kernel syscalls in glibc.
|
||||
kernelHeadersBaseConfig = "defconfig";
|
||||
kernelBaseConfig = "defconfig";
|
||||
kernelArch = "arm64";
|
||||
kernelDTB = true;
|
||||
kernelAutoModules = false;
|
||||
kernelExtraConfig = ''
|
||||
# Raspberry Pi 3 stuff. Not needed for kernels >= 4.10.
|
||||
ARCH_BCM2835 y
|
||||
BCM2835_MBOX y
|
||||
BCM2835_WDT y
|
||||
BRCMFMAC m
|
||||
DMA_BCM2835 m
|
||||
DRM_VC4 m
|
||||
I2C_BCM2835 m
|
||||
PWM_BCM2835 m
|
||||
RASPBERRYPI_FIRMWARE y
|
||||
RASPBERRYPI_POWER y
|
||||
SERIAL_8250_BCM2835AUX y
|
||||
SERIAL_8250_EXTENDED y
|
||||
SERIAL_8250_SHARE_IRQ y
|
||||
SND_BCM2835_SOC_I2S m
|
||||
SPI_BCM2835AUX m
|
||||
SPI_BCM2835 m
|
||||
|
||||
# Cavium ThunderX stuff.
|
||||
PCI_HOST_THUNDER_ECAM y
|
||||
THUNDER_NIC_RGX y
|
||||
THUNDER_NIC_BGX y
|
||||
THUNDER_NIC_PF y
|
||||
THUNDER_NIC_VF y
|
||||
'';
|
||||
uboot = null;
|
||||
kernelTarget = "Image";
|
||||
gcc = {
|
||||
arch = "armv8-a";
|
||||
};
|
||||
};
|
||||
|
||||
selectPlatformBySystem = system: {
|
||||
"i686-linux" = pc32;
|
||||
"x86_64-linux" = pc64;
|
||||
"armv5tel-linux" = sheevaplug;
|
||||
"armv6l-linux" = raspberrypi;
|
||||
"armv7l-linux" = armv7l-hf-multiplatform;
|
||||
"aarch64-linux" = aarch64-multiplatform;
|
||||
"mips64el-linux" = fuloong2f_n32;
|
||||
}.${system} or pcBase;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue