Merge pull request #79007 from flokli/yosys-updates

yosys: use external abc and simplify derivation
This commit is contained in:
Florian Klink 2020-02-01 16:53:39 +01:00 committed by GitHub
commit 24c739c512
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 46 deletions

View File

@ -1,16 +1,20 @@
{ fetchFromGitHub, stdenv, readline, cmake }: { fetchFromGitHub, stdenv, readline, cmake }:
stdenv.mkDerivation { let
rev = "71f2b40320127561175ad60f6f2428f3438e5243";
in stdenv.mkDerivation {
pname = "abc-verifier"; pname = "abc-verifier";
version = "2018-07-08"; version = "2020-01-11";
src = fetchFromGitHub { src = fetchFromGitHub {
inherit rev;
owner = "berkeley-abc"; owner = "berkeley-abc";
repo = "abc"; repo = "abc";
rev = "24407e13db4b8ca16c3996049b2d33ec3722de39"; sha256 = "15sn146ajxql7l1h8rsag5lhn4spwvgjhwzqawfr78snzadw8by3";
sha256 = "1rckji7nk81n6v1yajz7daqwipxacv7zlafknvmbiwji30j47sq5";
}; };
passthru.rev = rev;
nativeBuildInputs = [ cmake ]; nativeBuildInputs = [ cmake ];
buildInputs = [ readline ]; buildInputs = [ readline ];

View File

@ -1,75 +1,65 @@
{ stdenv, fetchFromGitHub { stdenv
, pkgconfig, bison, flex , abc-verifier
, tcl, readline, libffi, python3 , bison
, protobuf, zlib , fetchFromGitHub
, flex
, libffi
, pkgconfig
, protobuf
, python3
, readline
, tcl
, verilog , verilog
, zlib
}: }:
with builtins;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "yosys"; pname = "yosys";
version = "2019.10.18"; version = "2020.02.01";
srcs = [ src = fetchFromGitHub {
(fetchFromGitHub { owner = "yosyshq";
owner = "yosyshq"; repo = "yosys";
repo = "yosys"; rev = "a1c840ca5d6e8b580e21ae48550570aa9665741a";
rev = "3c41599ee1f62e4d77ba630fa1a245ef3fe236fa"; sha256 = "1vna04dh6l68nifssgs3hxqwn4k529krmm4crj94a8wwhwra52mh";
sha256 = "0jg2g8v08ax1q6qlvn8c1h147m03adzrgf21043xwbh4c7s5k137"; name = "yosys";
name = "yosys"; };
})
# NOTE: the version of abc used here is synchronized with
# the one in the yosys Makefile of the version above;
# keep them the same for quality purposes.
(fetchFromGitHub {
owner = "berkeley-abc";
repo = "abc";
rev = "623b5e82513d076a19f864c01930ad1838498894";
sha256 = "1mrfqwsivflqdzc3531r6mzp33dfyl6dnqjdwfcq137arqh36m67";
name = "yosys-abc";
})
];
sourceRoot = "yosys";
enableParallelBuilding = true; enableParallelBuilding = true;
nativeBuildInputs = [ pkgconfig ]; nativeBuildInputs = [ pkgconfig ];
buildInputs = [ tcl readline libffi python3 bison flex protobuf zlib ]; buildInputs = [ tcl readline libffi python3 bison flex protobuf zlib ];
makeFlags = [ "ENABLE_PROTOBUF=1" ]; makeFlags = [ "ENABLE_PROTOBUF=1" "PREFIX=${placeholder "out"}"];
patchPhase = '' patchPhase = ''
substituteInPlace ../yosys-abc/Makefile \
--replace 'CC := gcc' "" \
--replace 'CXX := g++' ""
substituteInPlace ./Makefile \ substituteInPlace ./Makefile \
--replace 'CXX = clang' "" \ --replace 'CXX = clang' "" \
--replace 'LD = clang++' 'LD = $(CXX)' \ --replace 'LD = clang++' 'LD = $(CXX)' \
--replace 'CXX = gcc' "" \ --replace 'CXX = gcc' "" \
--replace 'LD = gcc' 'LD = $(CXX)' \ --replace 'LD = gcc' 'LD = $(CXX)' \
--replace 'ABCMKARGS = CC="$(CXX)" CXX="$(CXX)"' 'ABCMKARGS =' \ --replace 'ABCMKARGS = CC="$(CXX)" CXX="$(CXX)"' 'ABCMKARGS =' \
--replace 'echo UNKNOWN' 'echo ${substring 0 10 (elemAt srcs 0).rev}' --replace 'echo UNKNOWN' 'echo ${builtins.substring 0 10 src.rev}'
patchShebangs tests patchShebangs tests
''; '';
preBuild = '' preBuild = let
chmod -R u+w ../yosys-abc shortAbcRev = builtins.substring 0 7 abc-verifier.rev;
ln -s ../yosys-abc abc in ''
chmod -R u+w .
make config-${if stdenv.cc.isClang or false then "clang" else "gcc"} make config-${if stdenv.cc.isClang or false then "clang" else "gcc"}
echo 'ABCREV := default' >> Makefile.conf echo 'ABCEXTERNAL = ${abc-verifier}/bin/abc' >> Makefile.conf
makeFlags="PREFIX=$out $makeFlags"
# we have to do this ourselves for some reason... # we have to do this ourselves for some reason...
(cd misc && ${protobuf}/bin/protoc --cpp_out ../backends/protobuf/ ./yosys.proto) (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; doCheck = true;
checkInputs = [ verilog ]; checkInputs = [ verilog ];
# checkPhase defaults to VERBOSE=y, which gets passed down to abc,
# which then does $(VERBOSE)gcc, which then complains about not
# being able to find ygcc. Life is pain.
checkFlags = [ " " ];
meta = { meta = {
description = "Framework for RTL synthesis tools"; description = "Framework for RTL synthesis tools";