mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-30 23:34:12 +03:00
b1b7266aa3
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
61 lines
1.6 KiB
Nix
61 lines
1.6 KiB
Nix
{ stdenv, fetchurl, kernelHeaders
|
|
, installLocales ? true
|
|
, profilingLibraries ? false
|
|
, gccCross ? null
|
|
}:
|
|
|
|
assert stdenv.gcc.gcc != null;
|
|
|
|
let
|
|
build = import ./common.nix;
|
|
cross = if gccCross != null then gccCross.target else null;
|
|
in
|
|
build cross ({
|
|
name = "glibc";
|
|
|
|
inherit fetchurl stdenv kernelHeaders installLocales profilingLibraries
|
|
gccCross;
|
|
|
|
builder = ./builder.sh;
|
|
|
|
# When building glibc from bootstrap-tools, we need libgcc_s at RPATH for
|
|
# any program we run, because the gcc will have been placed at a new
|
|
# store path than that determined when built (as a source for the
|
|
# bootstrap-tools tarball)
|
|
# Building from a proper gcc staying in the path where it was installed,
|
|
# libgcc_s will not be at {gcc}/lib, and gcc's libgcc will be found without
|
|
# any special hack.
|
|
preInstall = ''
|
|
if [ -f ${stdenv.gcc.gcc}/lib/libgcc_s.so.1 ]; then
|
|
ensureDir $out/lib
|
|
ln -s ${stdenv.gcc.gcc}/lib/libgcc_s.so.1 $out/lib/libgcc_s.so.1
|
|
fi
|
|
'';
|
|
|
|
meta.description = "The GNU C Library";
|
|
}
|
|
|
|
//
|
|
|
|
(if cross != null
|
|
then {
|
|
preConfigure = ''
|
|
sed -i s/-lgcc_eh//g "../$sourceRoot/Makeconfig"
|
|
|
|
cat > config.cache << "EOF"
|
|
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"
|
|
export AR="$crossConfig-ar"
|
|
export RANLIB="$crossConfig-ranlib"
|
|
|
|
dontStrip=1
|
|
'';
|
|
}
|
|
else {}))
|