surrealpatch/pkg/nix/util.nix
2022-10-04 17:32:44 +01:00

96 lines
2.8 KiB
Nix

{ lib, flake, systems, system }:
rec {
inherit systems system;
config = import ./config.nix;
supportedPlatforms = let
specDir = builtins.readDir ./spec;
nixExt = ".nix";
nixFilesFun = key: val:
val == "regular" && lib.strings.hasSuffix nixExt key;
trimNixExtFun = key: val: lib.strings.removeSuffix nixExt key;
nixFiles = lib.attrsets.filterAttrs nixFilesFun specDir;
in lib.attrsets.mapAttrsToList trimNixExtFun nixFiles;
systemPlatforms = let
matchingPlatforms = target:
let targetSystem = targetToSystem target;
in targetSystem == system;
in builtins.filter matchingPlatforms supportedPlatforms;
platforms = let
kvFun = platform: {
name = platform;
value = platform;
};
in builtins.listToAttrs (map kvFun supportedPlatforms);
targetToEnv = target:
let withoutDashes = builtins.replaceStrings [ "-" ] [ "_" ] target;
in lib.strings.toUpper withoutDashes;
targetToUpperEnv = target: lib.strings.toUpper (targetToEnv target);
targetToSystem = with builtins;
target:
let
parts = split "-" target;
arch = elemAt parts 0;
prefix = lib.strings.optionalString (arch == "armv7") "l";
os = elemAt parts 4;
in "${arch}${prefix}-${os}";
isNative = target:
let targetSystem = targetToSystem target;
in targetSystem == system;
cpu = with builtins;
target:
let
parts = split "-" target;
arch = elemAt parts 0;
in if arch == "armv7" then replaceStrings [ "v7" ] [ "" ] arch else arch;
cargoToml = with builtins;
let toml = readFile ../../Cargo.toml;
in fromTOML toml;
packageName = cargoToml.package.name;
fdbPackage = fdbPackages:
let
fdbPkgVersion = builtins.replaceStrings [ "." ] [ "" ] config.fdbVersion;
in fdbPackages."foundationdb${fdbPkgVersion}";
fdbSupported = fdbPackages:
let
package = fdbPackage fdbPackages;
fdbSystems = package.meta.platforms or [ ];
in builtins.elem system fdbSystems;
features = cargoToml.features // {
storage-fdb = let
fdbFeatureVersion =
builtins.replaceStrings [ "." ] [ "_" ] config.fdbVersion;
in [ "surrealdb/kv-fdb-${fdbFeatureVersion}" ];
};
buildMetadata = with lib.strings;
let
lastModifiedDate = flake.lastModifiedDate or flake.lastModified or "";
date = builtins.substring 0 8 lastModifiedDate;
shortRev = flake.shortRev or "dirty";
hasDateRev = lastModifiedDate != "" && shortRev != "";
dot = optionalString hasDateRev ".";
in "${date}${dot}${shortRev}";
version = with lib.strings;
let
hasBuildMetadata = buildMetadata != "";
plus = optionalString hasBuildMetadata "+";
in "${cargoToml.package.version}${plus}${buildMetadata}";
SURREAL_BUILD_METADATA = buildMetadata;
}