Merge pull request #329823 from ExpidusOS/fix/pkgsllvm/elfutils
[NixPkgs.git] / pkgs / development / compilers / silice / default.nix
blob4256f589649b961b97bfaf75b60ad2e9f67e18f2
1 { stdenv, fetchFromGitHub, lib
2 , cmake, pkg-config, openjdk
3 , libuuid, python3
4 , glfw
5 , yosys, nextpnr, verilator
6 , dfu-util, icestorm, trellis
7 , unstableGitUpdater
8 }:
10 stdenv.mkDerivation (finalAttrs: {
11   pname = "silice";
12   version = "0-unstable-2024-07-15";
14   src = fetchFromGitHub {
15     owner = "sylefeb";
16     repo = "silice";
17     rev = "80980cff659839fca63859be4565597053a82a3c";
18     hash = "sha256-G+ExPdkhMdC3m9TBwr+3Oj2K6np5MaUULgiXq0G0rLs=";
19     fetchSubmodules = true;
20   };
22   nativeBuildInputs = [
23     cmake
24     pkg-config
25     openjdk
26     glfw
27   ];
28   buildInputs = [
29     libuuid
30   ];
31   propagatedBuildInputs = [
32     (python3.withPackages (p: [
33       p.edalize
34       p.termcolor
35     ]))
36   ];
38   postPatch = ''
39     patchShebangs antlr/antlr.sh
40     # use nixpkgs version
41     rm -r python/pybind11
42   '';
44   installPhase = ''
45     runHook preInstall
47     make install
48     mkdir -p $out
49     cp -ar ../{bin,frameworks,lib} $out/
51     runHook postInstall
52   '';
54   passthru.tests =
55     let
56       silice = finalAttrs.finalPackage;
57       testProject = project: stdenv.mkDerivation {
58         name = "${silice.name}-test-${project}";
59         nativeBuildInputs = [
60           silice
61           yosys
62           nextpnr
63           verilator
64           dfu-util
65           icestorm
66           trellis
67         ];
68         src = "${silice.src}/projects";
69         sourceRoot = "projects/${project}";
70         buildPhase = ''
71           targets=()
72           for target in $(cat configs | tr -d '\r') ; do
73             [[ $target != Makefile* ]] || continue
74             make $target ARGS="--no_program"
75             targets+=($target)
76           done
77           if test "''${#targets[@]}" -eq 0; then
78             >&2 echo "ERROR: no target found!"
79             false
80           fi
81         '';
82         installPhase = ''
83           mkdir $out
84           for target in "''${targets[@]}" ; do
85             [[ $target != Makefile* ]] || continue
86           done
87         '';
88       };
89     in {
90       # a selection of test projects that build with the FPGA tools in
91       # nixpkgs
92       audio_sdcard_streamer = testProject "audio_sdcard_streamer";
93       bram_interface = testProject "bram_interface";
94       blinky = testProject "blinky";
95       pipeline_sort = testProject "pipeline_sort";
96     };
98   passthru.updateScript = unstableGitUpdater { };
100   meta = {
101     description = "Open source language that simplifies prototyping and writing algorithms on FPGA architectures";
102     homepage = "https://github.com/sylefeb/Silice";
103     license = lib.licenses.bsd2;
104     mainProgram = "silice";
105     maintainers = with lib.maintainers; [
106       astro
107       pbsds
108     ];
109     platforms = lib.platforms.all;
110   };