diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 07b231f175f8..8cbd345bbd4d 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -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"; diff --git a/pkgs/data/misc/prjxray-db/default.nix b/pkgs/data/misc/prjxray-db/default.nix new file mode 100644 index 000000000000..d498fdb1cc8b --- /dev/null +++ b/pkgs/data/misc/prjxray-db/default.nix @@ -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; + }; +} diff --git a/pkgs/data/misc/symbiflow-arch-defs/default.nix b/pkgs/data/misc/symbiflow-arch-defs/default.nix new file mode 100644 index 000000000000..89549da85dcb --- /dev/null +++ b/pkgs/data/misc/symbiflow-arch-defs/default.nix @@ -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; + }; +} diff --git a/pkgs/development/compilers/prjxray-tools/default.nix b/pkgs/development/compilers/prjxray-tools/default.nix new file mode 100644 index 000000000000..652b5458a75e --- /dev/null +++ b/pkgs/development/compilers/prjxray-tools/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/development/compilers/symbiflow-vtr/default.nix b/pkgs/development/compilers/symbiflow-vtr/default.nix new file mode 100644 index 000000000000..8735b12678c3 --- /dev/null +++ b/pkgs/development/compilers/symbiflow-vtr/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/development/compilers/symbiflow-yosys-plugins/default.nix b/pkgs/development/compilers/symbiflow-yosys-plugins/default.nix new file mode 100644 index 000000000000..b655f9d48733 --- /dev/null +++ b/pkgs/development/compilers/symbiflow-yosys-plugins/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/development/compilers/symbiflow-yosys/default.nix b/pkgs/development/compilers/symbiflow-yosys/default.nix new file mode 100644 index 000000000000..b33003f312e4 --- /dev/null +++ b/pkgs/development/compilers/symbiflow-yosys/default.nix @@ -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; +} diff --git a/pkgs/development/compilers/yosys/default.nix b/pkgs/development/compilers/yosys/default.nix index 51f0b7ed45aa..a83100911d13 100644 --- a/pkgs/development/compilers/yosys/default.nix +++ b/pkgs/development/compilers/yosys/default.nix @@ -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"; diff --git a/pkgs/development/python-modules/python-prjxray/default.nix b/pkgs/development/python-modules/python-prjxray/default.nix new file mode 100644 index 000000000000..5b92311612b0 --- /dev/null +++ b/pkgs/development/python-modules/python-prjxray/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/development/python-modules/symbiflow-fasm/default.nix b/pkgs/development/python-modules/symbiflow-fasm/default.nix new file mode 100644 index 000000000000..609987441ea6 --- /dev/null +++ b/pkgs/development/python-modules/symbiflow-fasm/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/development/python-modules/textx/default.nix b/pkgs/development/python-modules/textx/default.nix new file mode 100644 index 000000000000..07c568b87d48 --- /dev/null +++ b/pkgs/development/python-modules/textx/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/development/python-modules/xc-fasm/default.nix b/pkgs/development/python-modules/xc-fasm/default.nix new file mode 100644 index 000000000000..bf00bb159010 --- /dev/null +++ b/pkgs/development/python-modules/xc-fasm/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fb478f6501c9..4cde9a3deb4d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -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 { }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 64652bb430f7..bd7c3a77cc9e 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -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 { };