Merge pull request #105709 from CajuM/symbiflow
Add Symbiflow + prjxray for OSS Xilinx FPGA development
This commit is contained in:
commit
02828f91f1
@ -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";
|
||||
|
43
pkgs/data/misc/prjxray-db/default.nix
Normal file
43
pkgs/data/misc/prjxray-db/default.nix
Normal file
@ -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;
|
||||
};
|
||||
}
|
47
pkgs/data/misc/symbiflow-arch-defs/default.nix
Normal file
47
pkgs/data/misc/symbiflow-arch-defs/default.nix
Normal file
@ -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;
|
||||
};
|
||||
}
|
29
pkgs/development/compilers/prjxray-tools/default.nix
Normal file
29
pkgs/development/compilers/prjxray-tools/default.nix
Normal file
@ -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 ];
|
||||
};
|
||||
}
|
40
pkgs/development/compilers/symbiflow-vtr/default.nix
Normal file
40
pkgs/development/compilers/symbiflow-vtr/default.nix
Normal file
@ -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 ];
|
||||
};
|
||||
}
|
37
pkgs/development/compilers/symbiflow-yosys/default.nix
Normal file
37
pkgs/development/compilers/symbiflow-yosys/default.nix
Normal file
@ -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";
|
||||
|
44
pkgs/development/python-modules/python-prjxray/default.nix
Normal file
44
pkgs/development/python-modules/python-prjxray/default.nix
Normal file
@ -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 ];
|
||||
};
|
||||
}
|
27
pkgs/development/python-modules/symbiflow-fasm/default.nix
Normal file
27
pkgs/development/python-modules/symbiflow-fasm/default.nix
Normal file
@ -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 ];
|
||||
};
|
||||
}
|
36
pkgs/development/python-modules/textx/default.nix
Normal file
36
pkgs/development/python-modules/textx/default.nix
Normal file
@ -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 ];
|
||||
};
|
||||
}
|
45
pkgs/development/python-modules/xc-fasm/default.nix
Normal file
45
pkgs/development/python-modules/xc-fasm/default.nix
Normal file
@ -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 { };
|
||||
|
Loading…
Reference in New Issue
Block a user