diff --git a/artiq-full.nix b/artiq-full.nix index 0152683..5de005c 100644 --- a/artiq-full.nix +++ b/artiq-full.nix @@ -2,6 +2,23 @@ let sinaraSystemsSrc = ; + standaloneVariants = + let + jsonFiles = + builtins.attrNames ( + pkgs.lib.filterAttrs (name: type: + type != "directory" && + builtins.match ".+\\.json" name != null + ) (builtins.readDir sinaraSystemsSrc) + ); + isStandalone = jsonFile: + (builtins.fromJSON ( + builtins.readFile "${sinaraSystemsSrc}/${jsonFile}" + )).base == "standalone"; + in + map (builtins.replaceStrings [".json"] [""]) ( + builtins.filter isStandalone jsonFiles + ); generatedNix = pkgs.runCommand "generated-nix" { buildInputs = [ pkgs.nix pkgs.git ]; } '' @@ -111,6 +128,9 @@ let "wipm7master" "wipm7satellite" ]); + standaloneVariants = [${builtins.concatStringsSep " " ( + builtins.map (variant: "\"${variant}\"") standaloneVariants + )}]; # Splitting the build process into software+gateware does # not work when artiq embeds compiled firmware into generated # Vivado input. @@ -148,7 +168,7 @@ let boardBinaries = boardBinaries; inherit target variant; }; - } // (pkgs.lib.optionalAttrs ((builtins.fromJSON (builtins.readFile json)).base == "standalone") { + } // (pkgs.lib.optionalAttrs (builtins.elem variant standaloneVariants) { "device-db-\''${target}-\''${variant}" = pkgs.stdenv.mkDerivation { name = "device-db-\''${target}-\''${variant}"; buildInputs = ddbDeps; @@ -221,7 +241,7 @@ let buildPhase = " mkdir \$out artiq_ddb_template \ - \''${pkgs.lib.strings.concatStringsSep " " (pkgs.lib.attrsets.mapAttrsToList (dest: desc: "-s " + dest + " " + src + "/" + desc + ".json") crates.satellites) } \ + \''${pkgs.lib.strings.concatStringsSep " " (pkgs.lib.attrsets.mapAttrsToList (dest: desc: "-s " + dest + " " + (src + "/\''${desc}.json")) crates.satellites) } \ \''${src}/\''${crates.master}.json -o \$out/device_db.py mkdir \$out/nix-support echo file device_db_template \$out/device_db.py >> \$out/nix-support/hydra-build-products