From a30db2ba2e5e227c564df12ecf477748e5c4d0d5 Mon Sep 17 00:00:00 2001 From: Stephan Maka Date: Tue, 25 Aug 2020 01:20:51 +0200 Subject: [PATCH] artiq-board: get/remove/re-add version identifiers --- artiq-fast/artiq-board.nix | 64 ++++++++++++++++++++---- artiq-fast/scripts/get-identifiers.py | 24 +++++++++ artiq-fast/scripts/remove-identifiers.py | 16 ++++++ 3 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 artiq-fast/scripts/get-identifiers.py create mode 100644 artiq-fast/scripts/remove-identifiers.py diff --git a/artiq-fast/artiq-board.nix b/artiq-fast/artiq-board.nix index 69ae67c..f6237e8 100644 --- a/artiq-fast/artiq-board.nix +++ b/artiq-fast/artiq-board.nix @@ -52,15 +52,14 @@ let name = "artiq-board-${target}-${variant}-${version}"; installPath = "${pkgs.python3Packages.python.sitePackages}/artiq/board-support/${target}-${variant}"; - boardModule = + boardModule = # Board packages are Python modules so that they get added to the ARTIQ Python # environment, and artiq_flash finds them. pkgs.python3Packages.toPythonModule (pkgs.stdenv.mkDerivation { name = "${name}-firmware"; inherit version src; phases = [ "buildPhase" "installCheckPhase" "installPhase" "checkPhase" ]; - nativeBuildInputs = [ - vivado + buildInputs = [ pkgs.gnumake pkgs.which artiqpkgs.cargo artiqpkgs.rustc @@ -94,11 +93,28 @@ let ''; }); + vivadoIdentifiers = import (pkgs.stdenv.mkDerivation { + name = "${name}-vivado-identifiers.nix"; + src = "${boardModule}/src/gateware"; + buildInputs = [ pkgs.python ]; + phases = [ "unpackPhase" "buildPhase" ]; + buildPhase = "python ${./scripts/get-identifiers.py} top.v > $out"; + }); + + vivadoInput = pkgs.stdenv.mkDerivation { + name = "${name}-vivado-input"; + src = "${boardModule}/src/gateware"; + buildInputs = [ pkgs.python ]; + phases = [ "unpackPhase" "patchPhase" "installPhase" ]; + patchPhase = "python ${./scripts/remove-identifiers.py} top.v"; + installPhase = "cp -ar . $out"; + }; + vivadoInputArchive = pkgs.stdenv.mkDerivation { name = "${name}-vivado-input.nar.base64"; buildInputs = [ pkgs.nix ]; phases = [ "installPhase" ]; - installPhase = "nix-store --dump ${boardModule}/src/gateware | base64 -w0 > $out"; + installPhase = "nix-store --dump ${vivadoInput} | base64 -w0 > $out"; }; # Funnelling the source code through a Nix string allows dropping @@ -110,22 +126,49 @@ let )); # Depends on just Vivado and the generated Bitstream source - vivadoOutput = pkgs.stdenvNoCC.mkDerivation { - name = builtins.unsafeDiscardStringContext "${name}-vivado-output"; + vivadoCheckpoint = pkgs.stdenvNoCC.mkDerivation { + name = builtins.unsafeDiscardStringContext "${name}-vivado-checkpoint"; unpackPhase = "base64 -d < ${pureVivadoInputArchive} | nix-store --restore gateware"; buildInputs = [ vivado pkgs.nix ]; buildPhase = '' cd gateware - vivado -mode batch -source top.tcl + vivado -mode batch -source top_route.tcl ''; + installPhase = '' + mkdir -p $out + + chmod a+r top_route.dcp + cp top_route.dcp $out + cp top_bitstream.tcl $out + ''; + }; + + vivadoOutput = pkgs.stdenvNoCC.mkDerivation { + name = builtins.unsafeDiscardStringContext "${name}-vivado-output"; + src = vivadoCheckpoint; + buildInputs = [ vivado ]; + buildPhase = + '' + cat >top.tcl <