Merge pull request #322259 from martijnbastiaan/add-ghdl-gcc

ghdl-gcc: init at 4.1.0
This commit is contained in:
Yorick 2024-07-10 23:30:40 +02:00 committed by GitHub
commit 45aa2e2c5e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 131 additions and 79 deletions

View File

@ -0,0 +1,125 @@
{ stdenv
, fetchFromGitHub
, callPackage
, gnat
, zlib
, llvm
, lib
, gcc-unwrapped
, texinfo
, gmp
, mpfr
, libmpc
, gnutar
, glibc
, makeWrapper
, backend ? "mcode"
}:
assert backend == "mcode" || backend == "llvm" || backend == "gcc";
stdenv.mkDerivation (finalAttrs: {
pname = "ghdl-${backend}";
version = "4.1.0";
src = fetchFromGitHub {
owner = "ghdl";
repo = "ghdl";
rev = "v${finalAttrs.version}";
hash = "sha256-tPSHer3qdtEZoPh9BsEyuTOrXgyENFUyJqnUS3UYAvM=";
};
LIBRARY_PATH = "${stdenv.cc.libc}/lib";
nativeBuildInputs = [
gnat
] ++ lib.optionals (backend == "gcc") [
texinfo
makeWrapper
];
buildInputs = [
zlib
] ++ lib.optionals (backend == "llvm") [
llvm
] ++ lib.optionals (backend == "gcc") [
gmp
mpfr
libmpc
];
propagatedBuildInputs = [
] ++ lib.optionals (backend == "llvm" || backend == "gcc") [
zlib
];
preConfigure = ''
# If llvm 7.0 works, 7.x releases should work too.
sed -i 's/check_version 7.0/check_version 7/g' configure
'' + lib.optionalString (backend == "gcc") ''
${gnutar}/bin/tar -xf ${gcc-unwrapped.src}
'';
configureFlags = [
# See https://github.com/ghdl/ghdl/pull/2058
"--disable-werror"
"--enable-synth"
] ++ lib.optionals (backend == "llvm") [
"--with-llvm-config=${llvm.dev}/bin/llvm-config"
] ++ lib.optionals (backend == "gcc") [
"--with-gcc=gcc-${gcc-unwrapped.version}"
];
buildPhase = lib.optionalString (backend == "gcc") ''
make copy-sources
mkdir gcc-objs
cd gcc-objs
../gcc-${gcc-unwrapped.version}/configure \
--with-native-system-header-dir=/include \
--with-build-sysroot=${lib.getDev glibc} \
--prefix=$out \
--enable-languages=c,vhdl \
--disable-bootstrap \
--disable-lto \
--disable-multilib \
--disable-libssp \
--disable-libgomp \
--disable-libquadmath
make -j $NIX_BUILD_CORES
make install
cd ../
make -j $NIX_BUILD_CORES ghdllib
'';
postFixup = lib.optionalString (backend == "gcc") ''
wrapProgram $out/bin/ghdl \
--set LIBRARY_PATH ${lib.makeLibraryPath [
glibc
]}
'';
hardeningDisable = [
] ++ lib.optionals (backend == "gcc") [
# GCC compilation fails with format errors
"format"
];
enableParallelBuilding = true;
passthru = {
# run with:
# nix-build -A ghdl-mcode.passthru.tests
# nix-build -A ghdl-llvm.passthru.tests
# nix-build -A ghdl-gcc.passthru.tests
tests = {
simple = callPackage ./test-simple.nix { inherit backend; };
};
};
meta = {
homepage = "https://github.com/ghdl/ghdl";
description = "VHDL 2008/93/87 simulator";
license = lib.licenses.gpl2Plus;
mainProgram = "ghdl";
maintainers = with lib.maintainers; [ lucus16 thoughtpolice ];
platforms = lib.platforms.linux;
};
})

View File

@ -1,7 +1,7 @@
{ stdenv, ghdl-llvm, ghdl-mcode, backend }:
{ stdenv, lib, ghdl-llvm, ghdl-mcode, ghdl-gcc, backend }:
let
ghdl = if backend == "llvm" then ghdl-llvm else ghdl-mcode;
ghdl = if backend == "llvm" then ghdl-llvm else if backend == "gcc" then ghdl-gcc else ghdl-mcode;
in
stdenv.mkDerivation {
name = "ghdl-test-simple";
@ -13,7 +13,7 @@ stdenv.mkDerivation {
mkdir -p ghdlwork
ghdl -a --workdir=ghdlwork --ieee=synopsys simple.vhd simple-tb.vhd
ghdl -e --workdir=ghdlwork --ieee=synopsys -o sim-simple tb
'' + (if backend == "llvm" then ''
'' + (if backend == "llvm" || backend == "gcc" then ''
./sim-simple --assert-level=warning > output.txt
'' else ''
ghdl -r --workdir=ghdlwork --ieee=synopsys tb > output.txt

View File

@ -1,71 +0,0 @@
{ stdenv
, fetchFromGitHub
, callPackage
, gnat
, zlib
, llvm
, lib
, backend ? "mcode"
}:
assert backend == "mcode" || backend == "llvm";
stdenv.mkDerivation (finalAttrs: {
pname = "ghdl-${backend}";
version = "4.1.0";
src = fetchFromGitHub {
owner = "ghdl";
repo = "ghdl";
rev = "v${finalAttrs.version}";
hash = "sha256-tPSHer3qdtEZoPh9BsEyuTOrXgyENFUyJqnUS3UYAvM=";
};
LIBRARY_PATH = "${stdenv.cc.libc}/lib";
nativeBuildInputs = [
gnat
];
buildInputs = [
zlib
] ++ lib.optionals (backend == "llvm") [
llvm
];
propagatedBuildInputs = [
] ++ lib.optionals (backend == "llvm") [
zlib
];
preConfigure = ''
# If llvm 7.0 works, 7.x releases should work too.
sed -i 's/check_version 7.0/check_version 7/g' configure
'';
configureFlags = [
# See https://github.com/ghdl/ghdl/pull/2058
"--disable-werror"
"--enable-synth"
] ++ lib.optionals (backend == "llvm") [
"--with-llvm-config=${llvm.dev}/bin/llvm-config"
];
enableParallelBuilding = true;
passthru = {
# run with either of
# nix-build -A ghdl-mcode.passthru.tests
# nix-build -A ghdl-llvm.passthru.tests
tests = {
simple = callPackage ./test-simple.nix { inherit backend; };
};
};
meta = {
homepage = "https://github.com/ghdl/ghdl";
description = "VHDL 2008/93/87 simulator";
license = lib.licenses.gpl2Plus;
mainProgram = "ghdl";
maintainers = with lib.maintainers; [ lucus16 thoughtpolice ];
platforms = lib.platforms.linux;
};
})

View File

@ -15666,13 +15666,11 @@ with pkgs;
meta.broken = stdenv.hostPlatform.isDarwin;
});
ghdl = ghdl-mcode;
ghdl-mcode = callPackage ../by-name/gh/ghdl/package.nix { backend = "mcode"; };
ghdl-mcode = callPackage ../development/compilers/ghdl {
backend = "mcode";
};
ghdl-gcc = callPackage ../by-name/gh/ghdl/package.nix { backend = "gcc"; };
ghdl-llvm = callPackage ../development/compilers/ghdl {
ghdl-llvm = callPackage ../by-name/gh/ghdl/package.nix {
backend = "llvm";
inherit (llvmPackages_15) llvm;
};