After some testing with an ultrasparc cross-compiler:
Updating the cross-build expressions, adding some flexibility. Updated the linux headers used cross building, as 2.6.28 had bugs on endianness in sparc64. There were, as usual some bugs in gcc. Maybe not many make a cross compiler to ultrasparc. For the record, I could build an ultrasparc kernel with this base nix: import /etc/nixos/nixpkgs/default.nix # The root nixpkgs default.nix { crossSystem = { config = "sparc64-unknown-linux"; bigEndian = true; arch = "sparc64"; float = "soft"; withTLS = true; cpu = "ultrasparc"; }; config = pkgs: { packageOverrides = pkgs : { platform = { name = "sparc64"; kernelHeadersBaseConfig = "sparc64_defconfig"; kernelBaseConfig = "sparc64_defconfig"; kernelArch = "sparc"; kernelAutoModules = false; kernelTarget = "zImage"; uboot = null; }; }; }; } Although it did not boot directly in qemu-system-sparc64: [sparc64] Kernel already loaded Unhandled Exception 0x0000000000000020 PC = 0x0000000000404000 NPC = 0x0000000000404004 svn path=/nixpkgs/trunk/; revision=20269
This commit is contained in:
parent
72edd54741
commit
b1b7266aa3
6 changed files with 20 additions and 10 deletions
|
@ -57,8 +57,11 @@ let version = "4.4.3";
|
|||
|
||||
javaAwtGtk = langJava && gtk != null;
|
||||
|
||||
withCPU = if cross ? cpu then " --with-cpu=${cross.cpu}" else "";
|
||||
|
||||
crossConfigureFlags =
|
||||
"--target=${cross.config}" +
|
||||
withCPU +
|
||||
(if crossStageStatic then
|
||||
" --disable-libssp --disable-nls" +
|
||||
" --without-headers" +
|
||||
|
|
|
@ -67,9 +67,9 @@ stdenv.mkDerivation ({
|
|||
then "--enable-profile"
|
||||
else "--disable-profile")
|
||||
] ++ stdenv.lib.optionals (cross != null) [
|
||||
"--with-tls"
|
||||
(if cross.withTLS then "--with-tls" else "--without-tls")
|
||||
(if cross.float == "float" then "--without-fp" else "--with-fp")
|
||||
"--enable-kernel=2.6.0"
|
||||
"--without-fp"
|
||||
"--with-__thread"
|
||||
] ++ stdenv.lib.optionals (stdenv.system == "armv5tel-linux") [
|
||||
"--host=arm-linux-gnueabi"
|
||||
|
|
|
@ -46,6 +46,8 @@ in
|
|||
libc_cv_forced_unwind=yes
|
||||
libc_cv_c_cleanup=yes
|
||||
libc_cv_gnu89_inline=yes
|
||||
# Only due to a problem in gcc configure scripts:
|
||||
libc_cv_sparc64_tls=${if cross.withTLS then "yes" else "no"}
|
||||
EOF
|
||||
export BUILD_CC=gcc
|
||||
export CC="$crossConfig-gcc"
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
{stdenv, fetchurl, perl, cross ? null}:
|
||||
{stdenv, fetchurl, perl, cross ? null, platform}:
|
||||
|
||||
assert stdenv.isLinux;
|
||||
assert cross == null -> stdenv.isLinux;
|
||||
|
||||
let version = "2.6.32.4"; in
|
||||
let version = "2.6.32.9"; in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "linux-headers-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2";
|
||||
sha256 = "1n8pj05sazxv1dgi68q61lrvrnzvvx61qqw6kx80vqizqanz97z1";
|
||||
sha256 = "1g6hs7j5kmifb3phbnckdmrnxd0cpqrijnnbry86z26npsh9my7l";
|
||||
};
|
||||
|
||||
targetConfig = if (cross != null) then cross.config else null;
|
||||
|
||||
platform =
|
||||
if cross != null then cross.arch else
|
||||
if cross != null then platform.kernelArch else
|
||||
if stdenv.system == "i686-linux" then "i386" else
|
||||
if stdenv.system == "x86_64-linux" then "x86_64" else
|
||||
if stdenv.system == "powerpc-linux" then "powerpc" else
|
||||
|
@ -33,6 +33,7 @@ stdenv.mkDerivation {
|
|||
if test -n "$targetConfig"; then
|
||||
export ARCH=$platform
|
||||
fi
|
||||
make ${platform.kernelHeadersBaseConfig}
|
||||
make mrproper headers_check
|
||||
'';
|
||||
|
||||
|
|
|
@ -1967,7 +1967,9 @@ let
|
|||
binutilsCross = binutilsCross cross;
|
||||
libcCross = libcCross cross;
|
||||
profiledCompiler = false;
|
||||
enableMultilib = true;
|
||||
enableMultilib = false;
|
||||
# cross-building for ultrasparc in 4.4.3 will require disabling shared due to a gcc bug.
|
||||
# enableShared = false;
|
||||
crossStageStatic = false;
|
||||
};
|
||||
|
||||
|
@ -1976,6 +1978,7 @@ let
|
|||
crossStageStatic = true;
|
||||
langCC = false;
|
||||
libcCross = null;
|
||||
enableShared = true;
|
||||
});
|
||||
libc = null;
|
||||
binutils = binutilsCross cross;
|
||||
|
@ -5841,8 +5844,8 @@ let
|
|||
|
||||
linuxHeaders = linuxHeaders_2_6_28;
|
||||
|
||||
linuxHeadersCross = cross : forceBuildDrv (import ../os-specific/linux/kernel-headers/2.6.28.nix {
|
||||
inherit stdenv fetchurl cross perl;
|
||||
linuxHeadersCross = cross : forceBuildDrv (import ../os-specific/linux/kernel-headers/2.6.32.nix {
|
||||
inherit stdenv fetchurl cross perl platform;
|
||||
});
|
||||
|
||||
linuxHeaders_2_6_18 = import ../os-specific/linux/kernel-headers/2.6.18.5.nix {
|
||||
|
|
|
@ -708,6 +708,7 @@ let
|
|||
bigEndian = false;
|
||||
arch = "arm";
|
||||
float = "soft";
|
||||
withTLS = true;
|
||||
};
|
||||
nativePlatforms = linux;
|
||||
in {
|
||||
|
|
Loading…
Reference in a new issue