Files
flakes/flakes/c/flake.nix

91 lines
2.3 KiB
Nix

{
description = "C Project Flake";
inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system: let
version = "0.0.1";
name = "cproj";
pkgs = import nixpkgs {
inherit system;
};
pkgs-windows = pkgs.pkgsCross.mingwW64;
# For Linux Specific Dependencies
linux' = pkgs.lib.optional pkgs.stdenv.isLinux;
# For MacOS Specific Dependencies
darwin' = pkgs.lib.optional pkgs.stdenv.isDarwin;
nativeBuildInputs = with pkgs; [
meson
ninja
pkg-config
];
bDeps = p: with p; [
] ++ (linux' [
]) ++ (darwin' ([
] ++ (with darwin.apple_sdk.frameworks; [
])));
pbDeps = p: with p; [
];
sharedEnv = let
mesonWrapCache = let
mesonPy = pkgs.python3.withPackages (p: [p.meson]);
in import (pkgs.runCommand "meson-wrap-${name}-${version}" {} ''
${mesonPy}/bin/${mesonPy.executable} ${./mesonWrapFetch.py} ${./.} > $out
'') { inherit pkgs; };
in {
pname = name;
inherit version;
src = self;
inherit nativeBuildInputs;
preConfigure = ''
mkdir subprojects/packagecache
${builtins.concatStringsSep ";" (builtins.attrValues (builtins.mapAttrs (n: v: "cp ${v} subprojects/packagecache/${n}") mesonWrapCache))}
'';
};
cproj = pkgs.stdenv.mkDerivation (sharedEnv // {
buildInputs = bDeps pkgs;
propagatedBuildInputs = pbDeps pkgs;
});
cproj-exe = pkgs-windows.stdenv.mkDerivation ( sharedEnv // {
buildInputs = bDeps pkgs-windows;
propagatedBuildInputs = pbDeps pkgs-windows;
});
in {
packages = {
default = cproj;
inherit cproj cproj-exe;
Cproj = mkImage "latest";
Cproj-Test = mkImage "dev";
};
apps = rec {
default = flake-utils.lib.mkApp { drv = self.packages.${system}.default; };
};
devShells = {
default = pkgs.mkShell {
inputsFrom = [ cproj ];
packages = (with pkgs; [
clang-tools
]);
};
inherit cproj;
};
});
}