Merge pull request #105709 from CajuM/symbiflow

Add Symbiflow + prjxray for OSS Xilinx FPGA development
This commit is contained in:
Dmitry Kalinkin 2021-01-11 18:49:31 -05:00 committed by GitHub
commit 02828f91f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 429 additions and 13 deletions

@ -5696,6 +5696,12 @@
githubId = 2971615;
name = "Marius Bergmann";
};
mcaju = {
email = "cajum.bugs@yandex.com";
github = "CajuM";
githubId = 10420834;
name = "Mihai-Drosi Caju";
};
mcbeth = {
email = "mcbeth@broggs.org";
github = "mcbeth";

@ -0,0 +1,43 @@
{ stdenv
, fetchFromGitHub
}:
stdenv.mkDerivation rec {
pname = "prjxray-db";
version = "0.0-0232-g303a61d";
src = fetchFromGitHub {
owner = "SymbiFlow";
repo = "prjxray-db";
rev = "303a61d8bc552f7a533b91b17448c59e908aa391";
sha256 = "0r75xig16dbgh3nfygggir0a160x52y766h7hd9xcib9m88jixb2";
};
enableParallelBuilding = true;
installPhase = ''
runHook preInstall
DBDIR="$out/share/symbiflow/prjxray-db/"
DB_CONFIG="$out/bin/prjxray-config"
mkdir -p $DBDIR $out/bin
for device in artix7 kintex7 zynq7; do
cp -r $src/$device $DBDIR
done
echo -e "#!/bin/sh\n\necho $DBDIR" > $DB_CONFIG
chmod +x $DB_CONFIG
runHook postInstall
'';
meta = with stdenv.lib; {
description = "Project X-Ray - Xilinx Series 7 Bitstream Documentation";
homepage = "https://github.com/SymbiFlow/prjxray-db";
license = licenses.cc0;
maintainers = with maintainers; [ mcaju ];
platforms = platforms.all;
};
}

@ -0,0 +1,47 @@
{ stdenv
, fetchurl
, autoPatchelfHook
, python3Packages
, archs ? [ "xc7a100t" "xc7a50t" "xc7z010" "xc7z020" ]
}:
stdenv.mkDerivation rec {
pname = "symbiflow-arch-defs";
version = "20200914-111752-g05d68df0";
src = fetchurl {
url = "https://storage.googleapis.com/symbiflow-arch-defs/artifacts/prod/foss-fpga-tools/symbiflow-arch-defs/continuous/install/66/20200914-111752/symbiflow-arch-defs-install-05d68df0.tar.xz";
sha256 = "1gmynybh8n33ag521w17c2kd16n834hqc6d8hi2pfs5kg1jl1a74";
};
sourceRoot = ".";
propagatedBuildInputs = [
python3Packages.lxml
python3Packages.python-constraint
];
installPhase = ''
mkdir -p $out/bin
cp -r bin/{symbiflow_*,vpr_common,python} $out/bin
for script in $out/bin/symbiflow_*; do
substituteInPlace $script --replace '/env' '/symbiflow_env'
done
cp bin/env $out/bin/symbiflow_env
mkdir -p $out/share/symbiflow/arch
cp -r share/symbiflow/{scripts,techmaps} $out/share/symbiflow/
for arch in ${builtins.concatStringsSep " " archs}; do
cp -r share/symbiflow/arch/"$arch"_test* $out/share/symbiflow/arch/
done
'';
meta = with stdenv.lib; {
description = "Project X-Ray - Xilinx Series 7 Bitstream Documentation";
homepage = "https://github.com/SymbiFlow/symbiflow-arch-defs";
hydraPlatforms = [];
license = licenses.isc;
platforms = platforms.all;
};
}

@ -0,0 +1,29 @@
{ stdenv
, fetchFromGitHub
, cmake
}:
stdenv.mkDerivation rec {
pname = "prjxray-tools";
version = "0.1-2676-gac8d30e3";
src = fetchFromGitHub {
owner = "SymbiFlow";
repo = "prjxray";
fetchSubmodules = true;
rev = "ac8d30e3fe2029122408888d2313844b3e0c265b";
sha256 = "1ag7dk12hdhip821crwinncp8vgyzs0r85l1h2vbgn61lnxc7f4h";
};
nativeBuildInputs = [ cmake ];
doCheck = true;
meta = with stdenv.lib; {
description = "Documenting the Xilinx 7-series bit-stream format";
homepage = "https://github.com/SymbiFlow/prjxray";
license = licenses.isc;
platforms = platforms.all;
maintainers = with maintainers; [ mcaju ];
};
}

@ -0,0 +1,40 @@
{ stdenv
, fetchFromGitHub
, bison
, cmake
, flex
, pkg-config
}:
stdenv.mkDerivation rec {
pname = "symbiflow-vtr";
version = "8.0.0.rc2-4003-g8980e4621";
src = fetchFromGitHub {
owner = "SymbiFlow";
repo = "vtr-verilog-to-routing";
rev = "8980e46218542888fac879961b13aa7b0fba8432";
sha256 = "1sq7f1f3dzfm48a9vq5nvp0zllby0nasm3pvqab70f4jaq0m1aaa";
};
nativeBuildInputs = [
bison
cmake
flex
pkg-config
];
cmakeFlags = [
"-DWITH_ODIN=OFF"
"-DWITH_ABC=OFF"
];
doCheck = true;
meta = with stdenv.lib; {
description = "SymbiFlow WIP changes for Verilog to Routing (VTR)";
homepage = "https://github.com/SymbiFlow/vtr-verilog-to-routing";
platforms = platforms.all;
maintainers = with maintainers; [ mcaju ];
};
}

@ -0,0 +1,37 @@
{ stdenv
, fetchFromGitHub
, symbiflow-yosys
, zlib
, readline
}:
stdenv.mkDerivation rec {
pname = "symbiflow-yosys-plugins";
version = "1.0.0.7-0060-g7454cd6b";
src = fetchFromGitHub {
owner = "SymbiFlow";
repo = "yosys-symbiflow-plugins";
rev = "7454cd6b5e4fd22854e2ada219a5e3c3a06e0717";
sha256 = "0r9r31p7fy4ylfrwvwlbivq5a03xrph34blxbxzx2c8bc02mbv0s";
};
enableParallelBuilding = true;
nativeBuildInputs = [ symbiflow-yosys ];
buildInputs = [
readline
zlib
];
makeFlags = [ "PLUGINS_DIR=${placeholder "out"}/share/yosys/plugins" ];
meta = with stdenv.lib; {
description = "Yosys SymbiFlow Plugins";
homepage = "https://github.com/SymbiFlow/yosys-symbiflow-plugins";
license = licenses.isc;
platforms = platforms.all;
maintainers = with maintainers; [ mcaju ];
};
}

@ -0,0 +1,37 @@
{ stdenv
, abc-verifier
, fetchFromGitHub
, yosys
, plugins ? []
}:
let
localAbc-verifier = abc-verifier.overrideAttrs (_: rec {
pname = "abc-verifier";
version = "2020.06.22";
src = fetchFromGitHub {
owner = "YosysHQ";
repo = "abc";
rev = "341db25668f3054c87aa3372c794e180f629af5d";
sha256 = "14cgv34vz5ljkcms6nrv19vqws2hs8bgjgffk5q03cbxnm2jxv5s";
};
passthru.rev = src.rev;
});
in
(yosys.overrideAttrs (oldAttrs: rec {
pname = "symbiflow-yosys";
version = "0.9+2406";
src = fetchFromGitHub {
owner = "SymbiFlow";
repo = "yosys";
rev = "d8b2d1a2b1a93057678cf49bb8f0329f191faba1";
sha256 = "1w8jnqzabvzixjllhb6ak2n2gmjvsn6qd996i7z70bsq5rgdkq9g";
};
})).override {
abc-verifier = localAbc-verifier;
plugins = plugins;
}

@ -5,13 +5,14 @@
, fetchFromGitHub
, flex
, libffi
, pkgconfig
, pkg-config
, protobuf
, python3
, readline
, tcl
, verilog
, zlib
, plugins ? []
}:
# NOTE: as of late 2020, yosys has switched to an automation robot that
@ -32,6 +33,8 @@
# ultimately less confusing than using dates.
stdenv.mkDerivation rec {
inherit plugins;
pname = "yosys";
version = "0.9+3830";
@ -43,21 +46,16 @@ stdenv.mkDerivation rec {
};
enableParallelBuilding = true;
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ tcl readline libffi python3 bison flex protobuf zlib ];
nativeBuildInputs = [ pkg-config protobuf flex bison python3 ];
buildInputs = [ tcl readline libffi python3 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'
chmod +x ./misc/yosys-config.in
patchShebangs ./misc/yosys-config.in
patchShebangs tests
'';
@ -76,8 +74,8 @@ stdenv.mkDerivation rec {
exit 1
fi
if ! grep -q "YOSYS_VER := ${version}" Makefile; then
echo "ERROR: yosys version in Makefile isn't equivalent to version of the nix package (${version}), failing."
if ! grep -q "YOSYS_VER := $version" Makefile; then
echo "ERROR: yosys version in Makefile isn't equivalent to version of the nix package ($version), failing."
exit 1
fi
'';
@ -94,7 +92,14 @@ stdenv.mkDerivation rec {
# add a symlink to fake things so that both variants work the same way. this
# is also needed at build time for the test suite.
postBuild = "ln -sfv ${abc-verifier}/bin/abc ./yosys-abc";
postInstall = "ln -sfv ${abc-verifier}/bin/abc $out/bin/yosys-abc";
postInstall = ''
ln -sfv ${abc-verifier}/bin/abc $out/bin/yosys-abc
mkdir -p $out/share/yosys/plugins
for plugin in $plugins; do
ln -sfv $plugin/share/yosys/plugins/* $out/share/yosys/plugins/
done
'';
meta = with stdenv.lib; {
description = "Open RTL synthesis framework and tools";

@ -0,0 +1,44 @@
{ stdenv
, fetchFromGitHub
, pkgs
, buildPythonPackage
, intervaltree
, numpy
, openpyxl
, parse
, progressbar
, pyjson5
, pyyaml
, simplejson
, symbiflow-fasm
, textx
}:
buildPythonPackage rec {
pname = "python-prjxray";
version = pkgs.prjxray-tools.version;
src = pkgs.prjxray-tools.src;
propagatedBuildInputs = [
intervaltree
numpy
openpyxl
parse
progressbar
pyjson5
pyyaml
simplejson
symbiflow-fasm
textx
];
doCheck = false;
meta = with stdenv.lib; {
description = "Documenting the Xilinx 7-series bit-stream format";
homepage = "https://github.com/SymbiFlow/prjxray";
license = licenses.isc;
maintainers = with maintainers; [ mcaju ];
};
}

@ -0,0 +1,27 @@
{ stdenv
, pkgs
, fetchFromGitHub
, buildPythonPackage
, textx
}:
buildPythonPackage rec {
pname = "symbiflow-fasm";
version = "0.0.1-g4857dde";
src = fetchFromGitHub {
owner = "SymbiFlow";
repo = "fasm";
rev = "4857dde757edd88688c2faf808774d85bdbe3900";
sha256 = "1za7f8slf8wvp1mfbfc3vdv61115p49k0vwngs4db6ips1qg1435";
};
propagatedBuildInputs = [ textx ];
meta = with stdenv.lib; {
description = "FPGA Assembly (FASM) Parser and Generation library";
homepage = "https://github.com/SymbiFlow/fasm";
license = licenses.isc;
maintainers = with maintainers; [ mcaju ];
};
}

@ -0,0 +1,36 @@
{ stdenv
, buildPythonPackage
, fetchPypi
, pytestCheckHook
, arpeggio
, click
, jinja2
}:
buildPythonPackage rec {
pname = "textX";
version = "2.2.0";
src = fetchPypi {
inherit pname;
inherit version;
sha256 = "00mwd588ms96qp27m5vpjkzk30wfw53hnmv8y77slxca8lw9vq82";
};
checkInputs = [ pytestCheckHook ];
pytestFlagsArray = [ "tests/functional" ];
propagatedBuildInputs = [
arpeggio
click
jinja2
];
meta = with stdenv.lib; {
description = "textX is a meta-language for building Domain-Specific Languages (DSLs) in Python";
homepage = "https://textx.github.io";
license = licenses.mit;
maintainers = with maintainers; [ mcaju ];
};
}

@ -0,0 +1,45 @@
{ stdenv
, fetchFromGitHub
, buildPythonPackage
, pytestCheckHook
, simplejson
, intervaltree
, python-prjxray
, symbiflow-fasm
, textx
}:
buildPythonPackage rec {
pname = "xc-fasm";
version = "0.0.1-g0ddd9516";
src = fetchFromGitHub {
owner = "SymbiFlow";
repo = "xc-fasm";
rev = "0ddd951602d47d5b95f2072f8aa751af5e81e577";
sha256 = "15bzw92sx99s0zldr48na4yhrnp7b90nxsd8ya6ag1pvvijp2al4";
};
propagatedBuildInputs = [
simplejson
intervaltree
python-prjxray
symbiflow-fasm
textx
];
# Pip will check for and then install missing dependecies.
# Because some of them are installed from git, it will try
# to download them even if they're present in
# propagatedBuildInputs.
pipInstallFlags = [ "--no-deps" ];
checkInputs = [ pytestCheckHook ];
meta = with stdenv.lib; {
description = "XC FASM libraries";
homepage = "https://github.com/SymbiFlow/xc-fasm";
license = licenses.isc;
maintainers = with maintainers; [ mcaju ];
};
}

@ -10507,6 +10507,12 @@ in
swift = callPackage ../development/compilers/swift { };
symbiflow-vtr = callPackage ../development/compilers/symbiflow-vtr { };
symbiflow-yosys = callPackage ../development/compilers/symbiflow-yosys { };
symbiflow-yosys-plugins = callPackage ../development/compilers/symbiflow-yosys-plugins { };
swiProlog = callPackage ../development/compilers/swi-prolog {
inherit (darwin.apple_sdk.frameworks) Security;
jdk = openjdk8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
@ -10877,6 +10883,8 @@ in
polyml56 = callPackage ../development/compilers/polyml/5.6.nix { };
polyml57 = callPackage ../development/compilers/polyml/5.7.nix { };
prjxray-tools = callPackage ../development/compilers/prjxray-tools { };
pure = callPackage ../development/interpreters/pure {
/*llvm = llvm_35;*/
};
@ -20373,6 +20381,8 @@ in
inherit (darwin.apple_sdk.frameworks) Security;
};
prjxray-db = callPackage ../data/misc/prjxray-db { };
profont = callPackage ../data/fonts/profont
{ inherit (buildPackages.xorg) mkfontscale; };
@ -20408,6 +20418,8 @@ in
sweet = callPackage ../data/themes/sweet { };
symbiflow-arch-defs = callPackage ../data/misc/symbiflow-arch-defs { };
mime-types = callPackage ../data/misc/mime-types { };
shared-mime-info = callPackage ../data/misc/shared-mime-info { };

@ -4790,6 +4790,8 @@ in {
python-openems = callPackage ../development/python-modules/python-openems { };
python-prjxray = callPackage ../development/python-modules/python-prjxray { };
python-tado = callPackage ../development/python-modules/python-tado { };
pkutils = callPackage ../development/python-modules/pkutils { };
@ -7351,6 +7353,8 @@ in {
sybil = callPackage ../development/python-modules/sybil { };
symbiflow-fasm = callPackage ../development/python-modules/symbiflow-fasm { };
symengine = callPackage ../development/python-modules/symengine { symengine = pkgs.symengine; };
sympy = if isPy3k then
@ -7468,6 +7472,8 @@ in {
textfsm = callPackage ../development/python-modules/textfsm { };
textx = callPackage ../development/python-modules/textx { };
testpath = callPackage ../development/python-modules/testpath { };
testrepository = callPackage ../development/python-modules/testrepository { };
@ -8108,6 +8114,8 @@ in {
xattr = callPackage ../development/python-modules/xattr { };
xc-fasm = callPackage ../development/python-modules/xc-fasm { };
xcaplib = callPackage ../development/python-modules/xcaplib { };
xcffib = callPackage ../development/python-modules/xcffib { };