avr: use new compilation infrastructure

Gets rid of:
  avrbinutils
  avrgcc

to replace with:
  pkgsCross.avr.buildPackages.binutils
  pkgsCross.avr.buildPackages.gcc
This commit is contained in:
Matthew Bauer 2018-10-12 15:09:59 -05:00
parent 075e4883e0
commit d59a9ac7cf
9 changed files with 19 additions and 118 deletions

View File

@ -99,6 +99,10 @@ rec {
riscv64 = riscv "64"; riscv64 = riscv "64";
riscv32 = riscv "32"; riscv32 = riscv "32";
arduino-uno = {
config = "avr";
platform = { name = "avr5"; };
};
# #
# Darwin # Darwin

View File

@ -19,6 +19,7 @@ rec {
isRiscV = { cpu = { family = "riscv"; }; }; isRiscV = { cpu = { family = "riscv"; }; };
isSparc = { cpu = { family = "sparc"; }; }; isSparc = { cpu = { family = "sparc"; }; };
isWasm = { cpu = { family = "wasm"; }; }; isWasm = { cpu = { family = "wasm"; }; };
isAvr = { cpu = { family = "avr"; }; };
is32bit = { cpu = { bits = 32; }; }; is32bit = { cpu = { bits = 32; }; };
is64bit = { cpu = { bits = 64; }; }; is64bit = { cpu = { bits = 64; }; };

View File

@ -101,6 +101,8 @@ rec {
wasm32 = { bits = 32; significantByte = littleEndian; family = "wasm"; }; wasm32 = { bits = 32; significantByte = littleEndian; family = "wasm"; };
wasm64 = { bits = 64; significantByte = littleEndian; family = "wasm"; }; wasm64 = { bits = 64; significantByte = littleEndian; family = "wasm"; };
avr = { bits = 8; family = "avr"; };
}; };
################################################################################ ################################################################################
@ -255,6 +257,9 @@ rec {
setType "system" components; setType "system" components;
mkSkeletonFromList = l: { mkSkeletonFromList = l: {
"1" = if elemAt l 0 == "avr"
then { cpu = elemAt l 0; kernel = "none"; abi = "unknown"; }
else throw "Target specification with 1 components is ambiguous";
"2" = # We only do 2-part hacks for things Nix already supports "2" = # We only do 2-part hacks for things Nix already supports
if elemAt l 1 == "cygwin" if elemAt l 1 == "cygwin"
then { cpu = elemAt l 0; kernel = "windows"; abi = "cygnus"; } then { cpu = elemAt l 0; kernel = "windows"; abi = "cygnus"; }

View File

@ -186,6 +186,7 @@ stdenv.mkDerivation {
}.${targetPlatform.parsed.cpu.name} }.${targetPlatform.parsed.cpu.name}
else if targetPlatform.isPower then if targetPlatform.isBigEndian then "ppc" else "lppc" else if targetPlatform.isPower then if targetPlatform.isBigEndian then "ppc" else "lppc"
else if targetPlatform.isSparc then "sparc" else if targetPlatform.isSparc then "sparc"
else if targetPlatform.isAvr then "avr"
else throw "unknown emulation for platform: " + targetPlatform.config; else throw "unknown emulation for platform: " + targetPlatform.config;
in targetPlatform.platform.bfdEmulation or (fmt + sep + arch); in targetPlatform.platform.bfdEmulation or (fmt + sep + arch);

View File

@ -1,22 +0,0 @@
{ stdenv, fetchurl }:
let
version = "2.31.1";
in
stdenv.mkDerivation {
name = "avr-binutils-${version}";
src = fetchurl {
url = "mirror://gnu/binutils/binutils-${version}.tar.bz2";
sha256 = "1l34hn1zkmhr1wcrgf0d4z7r3najxnw3cx2y2fk7v55zjlk3ik7z";
};
configureFlags = [ "--target=avr" "--enable-languages=c,c++" ];
meta = with stdenv.lib; {
description = "the GNU Binutils for AVR microcontrollers";
homepage = http://www.gnu.org/software/binutils/;
license = licenses.gpl3Plus;
platforms = platforms.unix;
maintainers = with maintainers; [ mguentner ];
};
}

View File

@ -1,15 +0,0 @@
diff --git a/gcc/gcc-ar.c b/gcc/gcc-ar.c
index 838ebc2..3ac4ee7 100644
--- a/gcc/gcc-ar.c
+++ b/gcc/gcc-ar.c
@@ -118,8 +118,8 @@ setup_prefixes (const char *exec_path)
dir_separator, NULL);
prefix_from_string (self_libexec_prefix, &target_path);
- /* Add path as a last resort. */
- prefix_from_env ("PATH", &path);
+ /* Add path to avrbinutils. */
+ prefix_from_string ("@avrbinutils@/bin", &path);
}
int

View File

@ -1,60 +0,0 @@
{ stdenv, fetchurl, gmp, mpfr, libmpc, zlib, avrbinutils, texinfo }:
let
version = "8.2.0";
in
stdenv.mkDerivation {
name = "avr-gcc-${version}";
src = fetchurl {
url = "mirror://gcc/releases/gcc-${version}/gcc-${version}.tar.xz";
sha256 = "10007smilswiiv2ymazr3b6x2i933c0ycxrr529zh4r6p823qv0r";
};
patches = [
./avrbinutils-path.patch
];
# avrbinutils-path.patch introduces a reference to @avrbinutils@, substitute
# it now.
postPatch = ''
substituteInPlace gcc/gcc-ar.c --subst-var-by avrbinutils ${avrbinutils}
'';
buildInputs = [ gmp mpfr libmpc zlib avrbinutils ];
nativeBuildInputs = [ texinfo ];
hardeningDisable = [ "format" ];
stripDebugList= [ "bin" "libexec" ];
enableParallelBuilding = true;
configurePhase = ''
mkdir gcc-build
cd gcc-build
../configure \
--prefix=$out \
--host=$CHOST \
--build=$CHOST \
--target=avr \
--with-as=${avrbinutils}/bin/avr-as \
--with-gnu-as \
--with-gnu-ld \
--with-ld=${avrbinutils}/bin/avr-ld \
--with-system-zlib \
--disable-install-libiberty \
--disable-nls \
--disable-libssp \
--with-dwarf2 \
--enable-languages=c,c++'';
meta = with stdenv.lib; {
description = "GNU Compiler Collection, version ${version} for AVR microcontrollers";
homepage = http://gcc.gnu.org;
license = licenses.gpl3Plus;
platforms = with platforms; linux ++ darwin;
maintainers = with maintainers; [ mguentner ];
};
}

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, avrgcc, avrbinutils, automake, autoconf }: { stdenv, fetchurl, automake, autoconf }:
let let
version = "2.0.0"; version = "2.0.0";
@ -11,18 +11,7 @@ stdenv.mkDerivation {
sha256 = "15svr2fx8j6prql2il2fc0ppwlv50rpmyckaxx38d3gxxv97zpdj"; sha256 = "15svr2fx8j6prql2il2fc0ppwlv50rpmyckaxx38d3gxxv97zpdj";
}; };
buildInputs = [ avrgcc avrbinutils automake autoconf ]; nativeBuildInputs = [ automake autoconf ];
configurePhase = ''
unset LD
unset AS
unset AR
unset CC
unset CXX
unset RANLIB
unset STRIP
./configure --prefix=$out --build=$(./config.guess) --host=avr
'';
# Make sure we don't strip the libraries in lib/gcc/avr. # Make sure we don't strip the libraries in lib/gcc/avr.
stripDebugList= "bin"; stripDebugList= "bin";
@ -32,7 +21,7 @@ stdenv.mkDerivation {
description = "a C runtime library for AVR microcontrollers"; description = "a C runtime library for AVR microcontrollers";
homepage = http://savannah.nongnu.org/projects/avr-libc/; homepage = http://savannah.nongnu.org/projects/avr-libc/;
license = licenses.bsd3; license = licenses.bsd3;
platforms = platforms.unix; platforms = platforms.all;
maintainers = with maintainers; [ mguentner ]; maintainers = with maintainers; [ mguentner ];
}; };
} }

View File

@ -7991,13 +7991,10 @@ with pkgs;
amtk = callPackage ../development/libraries/amtk { }; amtk = callPackage ../development/libraries/amtk { };
avrgcclibc = throw "avrgcclibs are now separate packages, install avrbinutils, avrgcc and avrlibc"; avrlibc = callPackage ../development/misc/avr/libc {};
avrlibcCross = callPackage ../development/misc/avr/libc {
avrbinutils = callPackage ../development/misc/avr/binutils {}; stdenv = crossLibcStdenv;
};
avrgcc = callPackage ../development/misc/avr/gcc {};
avrlibc = callPackage ../development/misc/avr/libc {};
avr8burnomat = callPackage ../development/misc/avr8-burn-omat { }; avr8burnomat = callPackage ../development/misc/avr8-burn-omat { };
@ -9746,6 +9743,7 @@ with pkgs;
/**/ if name == "glibc" then targetPackages.glibcCross or glibcCross /**/ if name == "glibc" then targetPackages.glibcCross or glibcCross
else if name == "bionic" then targetPackages.bionic else if name == "bionic" then targetPackages.bionic
else if name == "uclibc" then targetPackages.uclibcCross else if name == "uclibc" then targetPackages.uclibcCross
else if name == "avrlibc" then targetPackages.avrlibcCross
else if name == "musl" then targetPackages.muslCross or muslCross else if name == "musl" then targetPackages.muslCross or muslCross
else if name == "msvcrt" then targetPackages.windows.mingw_w64 or windows.mingw_w64 else if name == "msvcrt" then targetPackages.windows.mingw_w64 or windows.mingw_w64
else if stdenv.targetPlatform.useiOSPrebuilt then targetPackages.darwin.iosSdkPkgs.libraries else if stdenv.targetPlatform.useiOSPrebuilt then targetPackages.darwin.iosSdkPkgs.libraries