2020-01-07 07:06:23 -08:00
|
|
|
{ stdenv
|
|
|
|
, bison
|
|
|
|
, fetchFromGitHub
|
|
|
|
, flex
|
|
|
|
, libffi
|
|
|
|
, pkgconfig
|
|
|
|
, protobuf
|
|
|
|
, python3
|
|
|
|
, readline
|
|
|
|
, tcl
|
2019-09-27 07:06:42 -07:00
|
|
|
, verilog
|
2020-01-07 07:06:23 -08:00
|
|
|
, zlib
|
2017-10-16 00:34:04 -07:00
|
|
|
}:
|
2015-12-29 08:31:18 -08:00
|
|
|
|
2018-02-13 22:15:48 -08:00
|
|
|
with builtins;
|
|
|
|
|
2015-12-29 08:31:18 -08:00
|
|
|
stdenv.mkDerivation rec {
|
2019-08-13 16:46:42 -07:00
|
|
|
pname = "yosys";
|
2019-10-13 09:27:47 -07:00
|
|
|
version = "2019.10.18";
|
2015-12-29 08:31:18 -08:00
|
|
|
|
|
|
|
srcs = [
|
|
|
|
(fetchFromGitHub {
|
2018-02-04 09:59:19 -08:00
|
|
|
owner = "yosyshq";
|
2017-12-06 20:04:38 -08:00
|
|
|
repo = "yosys";
|
2019-10-13 09:27:47 -07:00
|
|
|
rev = "3c41599ee1f62e4d77ba630fa1a245ef3fe236fa";
|
|
|
|
sha256 = "0jg2g8v08ax1q6qlvn8c1h147m03adzrgf21043xwbh4c7s5k137";
|
2017-12-06 20:04:38 -08:00
|
|
|
name = "yosys";
|
2015-12-29 08:31:18 -08:00
|
|
|
})
|
2018-02-13 22:15:48 -08:00
|
|
|
|
|
|
|
# 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.
|
2018-05-03 18:05:41 -07:00
|
|
|
(fetchFromGitHub {
|
|
|
|
owner = "berkeley-abc";
|
2017-12-06 20:04:38 -08:00
|
|
|
repo = "abc";
|
2019-10-13 09:27:47 -07:00
|
|
|
rev = "623b5e82513d076a19f864c01930ad1838498894";
|
|
|
|
sha256 = "1mrfqwsivflqdzc3531r6mzp33dfyl6dnqjdwfcq137arqh36m67";
|
2017-12-06 20:04:38 -08:00
|
|
|
name = "yosys-abc";
|
2015-12-29 08:31:18 -08:00
|
|
|
})
|
|
|
|
];
|
|
|
|
sourceRoot = "yosys";
|
|
|
|
|
2017-10-16 00:34:04 -07:00
|
|
|
enableParallelBuilding = true;
|
2017-09-05 14:26:13 -07:00
|
|
|
nativeBuildInputs = [ pkgconfig ];
|
2019-08-13 16:46:42 -07:00
|
|
|
buildInputs = [ tcl readline libffi python3 bison flex protobuf zlib ];
|
2018-08-08 17:28:18 -07:00
|
|
|
|
2020-01-07 07:06:23 -08:00
|
|
|
makeFlags = [ "ENABLE_PROTOBUF=1" "PREFIX=${placeholder "out"}"];
|
2018-02-13 22:15:48 -08:00
|
|
|
|
|
|
|
patchPhase = ''
|
2018-04-11 13:08:51 -07:00
|
|
|
substituteInPlace ../yosys-abc/Makefile \
|
2019-08-20 02:43:58 -07:00
|
|
|
--replace 'CC := gcc' "" \
|
|
|
|
--replace 'CXX := g++' ""
|
2018-02-13 22:15:48 -08:00
|
|
|
substituteInPlace ./Makefile \
|
2018-04-11 13:08:51 -07:00
|
|
|
--replace 'CXX = clang' "" \
|
2019-08-20 02:43:58 -07:00
|
|
|
--replace 'LD = clang++' 'LD = $(CXX)' \
|
|
|
|
--replace 'CXX = gcc' "" \
|
|
|
|
--replace 'LD = gcc' 'LD = $(CXX)' \
|
|
|
|
--replace 'ABCMKARGS = CC="$(CXX)" CXX="$(CXX)"' 'ABCMKARGS =' \
|
2018-02-13 22:15:48 -08:00
|
|
|
--replace 'echo UNKNOWN' 'echo ${substring 0 10 (elemAt srcs 0).rev}'
|
2019-09-27 07:06:42 -07:00
|
|
|
patchShebangs tests
|
2018-02-13 22:15:48 -08:00
|
|
|
'';
|
|
|
|
|
2015-12-29 08:31:18 -08:00
|
|
|
preBuild = ''
|
2016-08-18 18:30:21 -07:00
|
|
|
chmod -R u+w ../yosys-abc
|
|
|
|
ln -s ../yosys-abc abc
|
2018-04-11 13:08:51 -07:00
|
|
|
make config-${if stdenv.cc.isClang or false then "clang" else "gcc"}
|
2015-12-29 08:31:18 -08:00
|
|
|
echo 'ABCREV := default' >> Makefile.conf
|
2018-08-08 17:28:18 -07:00
|
|
|
|
|
|
|
# we have to do this ourselves for some reason...
|
|
|
|
(cd misc && ${protobuf}/bin/protoc --cpp_out ../backends/protobuf/ ./yosys.proto)
|
2015-12-29 08:31:18 -08:00
|
|
|
'';
|
|
|
|
|
2019-09-27 07:06:42 -07:00
|
|
|
doCheck = true;
|
|
|
|
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 = [ " " ];
|
|
|
|
|
2015-12-29 08:31:18 -08:00
|
|
|
meta = {
|
|
|
|
description = "Framework for RTL synthesis tools";
|
|
|
|
longDescription = ''
|
|
|
|
Yosys is a framework for RTL synthesis tools. It currently has
|
|
|
|
extensive Verilog-2005 support and provides a basic set of
|
|
|
|
synthesis algorithms for various application domains.
|
|
|
|
Yosys can be adapted to perform any synthesis job by combining
|
|
|
|
the existing passes (algorithms) using synthesis scripts and
|
|
|
|
adding additional passes as needed by extending the yosys C++
|
|
|
|
code base.
|
|
|
|
'';
|
2017-10-16 00:34:04 -07:00
|
|
|
homepage = http://www.clifford.at/yosys/;
|
|
|
|
license = stdenv.lib.licenses.isc;
|
2019-08-21 23:49:45 -07:00
|
|
|
maintainers = with stdenv.lib.maintainers; [ shell thoughtpolice emily ];
|
|
|
|
platforms = stdenv.lib.platforms.all;
|
2015-12-29 08:31:18 -08:00
|
|
|
};
|
|
|
|
}
|