Files
urukul-pld/flake.nix

108 lines
2.9 KiB
Nix

{
description = "CPLD/FPGA gateware on Urukul";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
src-migen = {
url = "github:m-labs/migen";
flake = false;
};
};
outputs =
{
self,
nixpkgs,
src-migen,
}:
let
pkgs = import nixpkgs {
system = "x86_64-linux";
};
migen = pkgs.python3Packages.buildPythonPackage rec {
name = "migen";
src = src-migen;
pyproject = true;
build-system = [ pkgs.python3Packages.setuptools ];
propagatedBuildInputs = [ pkgs.python3Packages.colorama ];
};
ise =
let
isePath = "/opt/Xilinx/14.7/ISE_DS";
makeXilinxEnv =
name:
pkgs.buildFHSEnv {
inherit name;
targetPkgs =
pkgs:
(with pkgs; [
ncurses5
zlib
libuuid
xorg.libSM
xorg.libICE
xorg.libXrender
xorg.libX11
xorg.libXext
xorg.libXtst
xorg.libXi
]);
profile = ''
source ${isePath}/common/.settings64.sh ${isePath}/common
source ${isePath}/ISE/.settings64.sh ${isePath}/ISE
'';
runScript = name;
};
in
pkgs.lib.attrsets.genAttrs [ "xst" "ngdbuild" "cpldfit" "taengine" "hprep6" ] makeXilinxEnv;
in
rec {
packages.x86_64-linux = {
inherit migen;
urukul-xc2c = pkgs.stdenv.mkDerivation {
name = "urukul-xc2c";
src = self;
buildInputs = [ (pkgs.python3.withPackages (ps: [ migen ])) ] ++ (builtins.attrValues ise);
buildPhase = "python xc2c/urukul_impl.py";
installPhase = ''
mkdir -p $out $out/nix-support
cp build/urukul.jed $out
echo file binary-dist $out/urukul.jed >> $out/nix-support/hydra-build-products
'';
};
urukul-ice40 = pkgs.stdenv.mkDerivation {
name = "urukul-ice40";
src = self;
buildInputs = [
(pkgs.python3.withPackages (ps: [ migen ]))
]
++ (with pkgs; [
yosys
nextpnr
icestorm
]);
buildPhase = ''
python ice40/urukul.py
python ice40/urukul.py --suservo
'';
installPhase = ''
mkdir -p $out $out/nix-support
cp build/urukul.bin $out
cp build/suservo.bin $out
echo file binary-dist $out/urukul.bin >> $out/nix-support/hydra-build-products
echo file binary-dist $out/suservo.bin >> $out/nix-support/hydra-build-products
'';
};
};
formatter.x86_64-linux = pkgs.nixfmt-tree;
hydraJobs = packages.x86_64-linux;
};
}