diff options
Diffstat (limited to 'pkgs/by-name/gh/ghdl/package.nix')
-rw-r--r-- | pkgs/by-name/gh/ghdl/package.nix | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/pkgs/by-name/gh/ghdl/package.nix b/pkgs/by-name/gh/ghdl/package.nix new file mode 100644 index 0000000000000..5125f463e6d98 --- /dev/null +++ b/pkgs/by-name/gh/ghdl/package.nix @@ -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; + }; +}) |