mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-04-14 10:47:44 +00:00
ghdl-gcc: init at 4.1.0
Not truly a new package, but rather a new backend next to the existing `mcode` and `llvm` ones. Adding the GCC backend too, as it is the only one that supports code coverage report generation. For more info see: https://devsaurus.github.io/ghdl_gcov/ghdl_gcov.html. Co-authored-by: Rowan Goemans <goemansrowan@gmail.com>
This commit is contained in:
parent
2e9b82a7e6
commit
8dbbabec08
@ -5,10 +5,18 @@
|
||||
, zlib
|
||||
, llvm
|
||||
, lib
|
||||
, gcc-unwrapped
|
||||
, texinfo
|
||||
, gmp
|
||||
, mpfr
|
||||
, libmpc
|
||||
, gnutar
|
||||
, glibc
|
||||
, makeWrapper
|
||||
, backend ? "mcode"
|
||||
}:
|
||||
|
||||
assert backend == "mcode" || backend == "llvm";
|
||||
assert backend == "mcode" || backend == "llvm" || backend == "gcc";
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "ghdl-${backend}";
|
||||
@ -25,20 +33,29 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
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") [
|
||||
] ++ 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 = [
|
||||
@ -47,14 +64,51 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
"--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 either of
|
||||
# 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; };
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -15676,6 +15676,8 @@ with pkgs;
|
||||
|
||||
ghdl-mcode = callPackage ../by-name/gh/ghdl/package.nix { backend = "mcode"; };
|
||||
|
||||
ghdl-gcc = callPackage ../by-name/gh/ghdl/package.nix { backend = "gcc"; };
|
||||
|
||||
ghdl-llvm = callPackage ../by-name/gh/ghdl/package.nix {
|
||||
backend = "llvm";
|
||||
inherit (llvmPackages_15) llvm;
|
||||
|
Loading…
Reference in New Issue
Block a user