diff options
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/yosys/default.nix')
-rw-r--r-- | nixpkgs/pkgs/development/compilers/yosys/default.nix | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/yosys/default.nix b/nixpkgs/pkgs/development/compilers/yosys/default.nix new file mode 100644 index 000000000000..09e51e4c6471 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/yosys/default.nix @@ -0,0 +1,83 @@ +{ stdenv +, abc-verifier +, bash +, bison +, fetchFromGitHub +, flex +, libffi +, pkgconfig +, protobuf +, python3 +, readline +, tcl +, verilog +, zlib +}: + +stdenv.mkDerivation rec { + pname = "yosys"; + version = "2020.06.16"; + + src = fetchFromGitHub { + owner = "YosysHQ"; + repo = "yosys"; + rev = "39ba90a8b84d740b670a9f1df5148b824d441c63"; + sha256 = "1ncscbhyq4f07d28l32j37y5d84vyqxfx0fbzhb7nzfhplk8hh0s"; + }; + + enableParallelBuilding = true; + nativeBuildInputs = [ pkgconfig ]; + buildInputs = [ tcl readline libffi python3 bison flex protobuf zlib ]; + + makeFlags = [ "ENABLE_PROTOBUF=1" "PREFIX=${placeholder "out"}"]; + + patchPhase = '' + substituteInPlace ./Makefile \ + --replace 'CXX = clang' "" \ + --replace 'LD = clang++' 'LD = $(CXX)' \ + --replace 'CXX = gcc' "" \ + --replace 'LD = gcc' 'LD = $(CXX)' \ + --replace 'ABCMKARGS = CC="$(CXX)" CXX="$(CXX)"' 'ABCMKARGS =' \ + --replace 'echo UNKNOWN' 'echo ${builtins.substring 0 10 src.rev}' + substituteInPlace ./misc/yosys-config.in \ + --replace '/bin/bash' '${bash}/bin/bash' + patchShebangs tests + ''; + + preBuild = let + shortAbcRev = builtins.substring 0 7 abc-verifier.rev; + in '' + chmod -R u+w . + make config-${if stdenv.cc.isClang or false then "clang" else "gcc"} + echo 'ABCEXTERNAL = ${abc-verifier}/bin/abc' >> Makefile.conf + + # we have to do this ourselves for some reason... + (cd misc && ${protobuf}/bin/protoc --cpp_out ../backends/protobuf/ ./yosys.proto) + + if ! grep -q "ABCREV = ${shortAbcRev}" Makefile; then + echo "yosys isn't compatible with the provided abc (${shortAbcRev}), failing." + exit 1 + fi + ''; + + doCheck = true; + checkInputs = [ verilog ]; + + # Internally, yosys knows to use the specified hardcoded ABCEXTERNAL binary. + # But other tools (like mcy or symbiyosys) can't know how yosys was built, so + # they just assume that 'yosys-abc' is available -- but it's not installed + # when using ABCEXTERNAL + # + # add a symlink to fake things so that both variants work the same way. + postInstall = '' + ln -sfv ${abc-verifier}/bin/abc $out/bin/yosys-abc + ''; + + meta = with stdenv.lib; { + description = "Open RTL synthesis framework and tools"; + homepage = "http://www.clifford.at/yosys/"; + license = licenses.isc; + platforms = platforms.all; + maintainers = with maintainers; [ shell thoughtpolice emily ]; + }; +} |