bottom: add gpu recognition, new apple sdk, refactor (#360568)
[NixPkgs.git] / pkgs / by-name / gh / ghdl / package.nix
blob32bed81d06bbb4841cc4e31150721aaaf9199f4a
2   stdenv,
3   fetchFromGitHub,
4   callPackage,
5   gnat,
6   zlib,
7   llvm,
8   lib,
9   gcc-unwrapped,
10   texinfo,
11   gmp,
12   mpfr,
13   libmpc,
14   gnutar,
15   glibc,
16   makeWrapper,
17   backend ? "mcode",
20 assert backend == "mcode" || backend == "llvm" || backend == "gcc";
22 stdenv.mkDerivation (finalAttrs: {
23   pname = "ghdl-${backend}";
24   version = "4.1.0";
26   src = fetchFromGitHub {
27     owner = "ghdl";
28     repo = "ghdl";
29     rev = "v${finalAttrs.version}";
30     hash = "sha256-tPSHer3qdtEZoPh9BsEyuTOrXgyENFUyJqnUS3UYAvM=";
31   };
33   LIBRARY_PATH = "${stdenv.cc.libc}/lib";
35   nativeBuildInputs =
36     [
37       gnat
38     ]
39     ++ lib.optionals (backend == "gcc") [
40       texinfo
41       makeWrapper
42     ];
43   buildInputs =
44     [
45       zlib
46     ]
47     ++ lib.optionals (backend == "llvm") [
48       llvm
49     ]
50     ++ lib.optionals (backend == "gcc") [
51       gmp
52       mpfr
53       libmpc
54     ];
55   propagatedBuildInputs =
56     [
57     ]
58     ++ lib.optionals (backend == "llvm" || backend == "gcc") [
59       zlib
60     ];
62   preConfigure =
63     ''
64       # If llvm 7.0 works, 7.x releases should work too.
65       sed -i 's/check_version  7.0/check_version  7/g' configure
66     ''
67     + lib.optionalString (backend == "gcc") ''
68       ${gnutar}/bin/tar -xf ${gcc-unwrapped.src}
69     '';
71   configureFlags =
72     [
73       # See https://github.com/ghdl/ghdl/pull/2058
74       "--disable-werror"
75       "--enable-synth"
76     ]
77     ++ lib.optionals (backend == "llvm") [
78       "--with-llvm-config=${llvm.dev}/bin/llvm-config"
79     ]
80     ++ lib.optionals (backend == "gcc") [
81       "--with-gcc=gcc-${gcc-unwrapped.version}"
82     ];
84   buildPhase = lib.optionalString (backend == "gcc") ''
85     make copy-sources
86     mkdir gcc-objs
87     cd gcc-objs
88     ../gcc-${gcc-unwrapped.version}/configure \
89       --with-native-system-header-dir=/include \
90       --with-build-sysroot=${lib.getDev glibc} \
91       --prefix=$out \
92       --enable-languages=c,vhdl \
93       --disable-bootstrap \
94       --disable-lto \
95       --disable-multilib \
96       --disable-libssp \
97       --disable-libgomp \
98       --disable-libquadmath
99     make -j $NIX_BUILD_CORES
100     make install
101     cd ../
102     make -j $NIX_BUILD_CORES ghdllib
103   '';
105   postFixup = lib.optionalString (backend == "gcc") ''
106     wrapProgram $out/bin/ghdl \
107       --set LIBRARY_PATH ${
108         lib.makeLibraryPath [
109           glibc
110         ]
111       }
112   '';
114   hardeningDisable =
115     [
116     ]
117     ++ lib.optionals (backend == "gcc") [
118       # GCC compilation fails with format errors
119       "format"
120     ];
122   enableParallelBuilding = true;
124   passthru = {
125     # run with:
126     # nix-build -A ghdl-mcode.passthru.tests
127     # nix-build -A ghdl-llvm.passthru.tests
128     # nix-build -A ghdl-gcc.passthru.tests
129     tests = {
130       simple = callPackage ./test-simple.nix { inherit backend; };
131     };
132   };
134   meta = {
135     homepage = "https://github.com/ghdl/ghdl";
136     description = "VHDL 2008/93/87 simulator";
137     license = lib.licenses.gpl2Plus;
138     mainProgram = "ghdl";
139     maintainers = with lib.maintainers; [
140       lucus16
141       thoughtpolice
142     ];
143     platforms =
144       lib.platforms.linux
145       ++ lib.optionals (backend == "mcode" || backend == "llvm") [ "x86_64-darwin" ];
146   };