mirror of https://github.com/E-Almqvist/dotfiles
parent
6f80679a85
commit
56a4e6a01a
@ -0,0 +1,126 @@ |
||||
{ stdenv |
||||
, fetchFromGitHub |
||||
, callPackage |
||||
, gnat |
||||
, zlib |
||||
, llvm |
||||
, lib |
||||
, gcc-unwrapped |
||||
, texinfo |
||||
, gmp |
||||
, mpfr |
||||
, libmpc |
||||
, gnutar |
||||
, glibc |
||||
, makeWrapper |
||||
, backend ? "mcode" |
||||
, isDarwin ? stdenv.isDarwin |
||||
}: |
||||
|
||||
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.all; |
||||
}; |
||||
}) |
Loading…
Reference in new issue