Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

riscv-gnu-toolchain-*: init at 2023.01.04 #214185

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions pkgs/development/compilers/riscv-gnu-toolchain/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
{ stdenv
, lib
, fetchFromGitHub
, fetchurl

, gcc12
, glibc
, newlib
, gdb
, qemu
, musl
, spike
, riscv-pk

, autoconf
, curl
, automake
, python3
, libmpc
, gawk
, bison
, flex
, texinfo
, gperf
, libtool
, expat
, gmp
, mpfr
, flock
, zlib

, srcs ? {
binutils = {
url = "mirror://gnu/binutils/binutils-2.39.tar.bz2";
hash = "sha256-2iSoT+8iAQLdJAQt8G/eqFHCYUpTd/hu/6KPM7exYUg=";
};
dejagnu = {
url = "mirror://gnu/dejagnu/dejagnu-1.6.3.tar.gz";
hash = "sha256-h9rvrNeVi0pp+IxoVtvRY0JhljxBQHnQw3H1ic1mouM=";
};
gcc = gcc12.cc.src;
glibc = glibc.src;
newlib = newlib.src;
gdb = gdb.src;
qemu = qemu.src;
musl = musl.src;
spike = spike.src;
pk = riscv-pk.src;
}
Comment on lines +32 to +49
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please move this out of the inputs. It is not really extensible especially when you want to change one variable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you not use pkg.override (old: new: {srcs=old.srcs//{new-pkg=new-pkg-src}})?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit hacky. Normally src and srcs are exclusive and I would rather expect that overwriting gcc and its source would affect it. Generally it is not such a great idea to put big defaults behind ?.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a better mechanism, or is the ability to change the sources uneeded?


, isa ? "rv64gc"
, withLinux ? false
}:
let

extract = file: stdenv.mkDerivation {
name = file.name + "-unpacked";
src = file;
dontPatch = true;
dontConfigure = true;
dontBuild = true;
installPhase = "cp -r . $out";
dontFixup = true;
};

srcs_fetched = lib.mapAttrs (name: value: if value ? outPath then value else fetchurl value) srcs;
srcs_extracted = lib.mapAttrs (name: value: extract value) srcs_fetched;
Comment on lines +66 to +67
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For which src are we doing this? Maybe we can just change that one package to avoid this.

Copy link
Contributor Author

@GenericNerdyUsername GenericNerdyUsername Feb 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

three of them use fetchFromGitHub, and I'm not aware of a way to make that use fetchurl instead of fetchzip

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we want to use fetchurl for github sources or am I mixing things up?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

some use fetchFromGitHub, and some use fetchurl. This means we have a mix of compressed and uncompressed sources

srcFlags = lib.mapAttrsToList (name: value: "--with-${name}-src=${value}") srcs_extracted;

in stdenv.mkDerivation rec {
pname = "riscv-gnu-toolchain-" + isa;
version = "2023.01.04";

src = fetchFromGitHub {
owner = "riscv-collab";
repo = "riscv-gnu-toolchain";
rev = version;
hash = "sha256-PXPQ/ho+fOudZRErnyQZTVFdceWGBF+geo+3y0tkNm4=";
};

nativeBuildInputs = [ autoconf automake flock curl python3 gawk bison flex texinfo gperf ];
buildInputs = [ libmpc libtool expat gmp mpfr zlib ];
hardeningDisable = [ "format" ];

patches = [ ./no-dot-git.patch ];
configureFlags = [
"--with-arch=${isa}"
]
++ srcFlags
++ lib.optional withLinux "--enable-linux";

meta = with lib; {
homepage = "https://github.com/riscv-collab/riscv-gnu-toolchain";
description = "RISC-V C and C++ cross-compiler";
maintainers = with maintainers; [ genericnerdyusername ];
license = with licenses; [ bsd3 gpl2 lgpl21 ];
broken = stdenv.isDarwin;
};
}
14 changes: 14 additions & 0 deletions pkgs/development/compilers/riscv-gnu-toolchain/no-dot-git.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
diff --git a/Makefile.in b/Makefile.in
index 71369ab..53f5e0d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -279,9 +279,6 @@ GCCPKGVER :=
endif

$(srcdir)/%/.git:
- cd $(srcdir) && \
- flock `git rev-parse --git-dir`/config git submodule init $(dir $@) && \
- flock `git rev-parse --git-dir`/config git submodule update $(dir $@)

#
# GLIBC
15 changes: 15 additions & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -27088,6 +27088,21 @@ with pkgs;

rfkill_udev = callPackage ../os-specific/linux/rfkill/udev.nix { };

riscv-gnu-toolchain-rv64gc-linux = callPackage ../development/compilers/riscv-gnu-toolchain {
isa = "rv64gc";
withLinux = true;
};

riscv-gnu-toolchain-rv64gc = callPackage ../development/compilers/riscv-gnu-toolchain {
isa = "rv64gc";
withLinux = false;
};

riscv-gnu-toolchain-rv32gc = callPackage ../development/compilers/riscv-gnu-toolchain {
isa = "rv32gc";
withLinux = false;
};

riscv-pk = callPackage ../misc/riscv-pk { };

ristate = callPackage ../tools/misc/ristate { };
Expand Down