128 lines
3.4 KiB
Nix
128 lines
3.4 KiB
Nix
|
{
|
||
|
description = "C/C++ environment";
|
||
|
|
||
|
inputs = {
|
||
|
nixpkgs.url = "github:NixOS/nixpkgs";
|
||
|
treefmt-nix.url = "github:numtide/treefmt-nix";
|
||
|
utils.url = "github:numtide/flake-utils";
|
||
|
};
|
||
|
|
||
|
outputs = {
|
||
|
self,
|
||
|
nixpkgs,
|
||
|
treefmt-nix,
|
||
|
utils,
|
||
|
...
|
||
|
}:
|
||
|
utils.lib.eachDefaultSystem (
|
||
|
system: let
|
||
|
pkgs = import nixpkgs {inherit system;};
|
||
|
|
||
|
stdenv =
|
||
|
if pkgs.hostPlatform.isLinux
|
||
|
then pkgs.stdenvAdapters.useMoldLinker pkgs.llvmPackages_18.stdenv
|
||
|
else pkgs.llvmPackages_18.stdenv;
|
||
|
|
||
|
sources = import ./_sources/generated.nix {
|
||
|
inherit (pkgs) fetchFromGitHub fetchgit fetchurl dockerTools;
|
||
|
};
|
||
|
|
||
|
mkPkg = name:
|
||
|
pkgs.pkgsStatic.${name}.overrideAttrs {
|
||
|
inherit (sources.${name}) pname version src;
|
||
|
};
|
||
|
|
||
|
fmt = mkPkg "fmt";
|
||
|
|
||
|
deps = with pkgs;
|
||
|
[
|
||
|
fmt
|
||
|
glfw
|
||
|
glm
|
||
|
]
|
||
|
++ lib.optionals stdenv.isDarwin [
|
||
|
darwin.apple_sdk.frameworks.AppKit
|
||
|
darwin.apple_sdk.frameworks.Cocoa
|
||
|
darwin.apple_sdk.frameworks.Metal
|
||
|
darwin.apple_sdk.frameworks.QuartzCore
|
||
|
];
|
||
|
in
|
||
|
with pkgs; {
|
||
|
packages = rec {
|
||
|
graphics-test = stdenv.mkDerivation {
|
||
|
name = "graphics-test";
|
||
|
version = "0.1.0";
|
||
|
src = self;
|
||
|
|
||
|
nativeBuildInputs = [
|
||
|
meson
|
||
|
ninja
|
||
|
pkg-config
|
||
|
];
|
||
|
|
||
|
buildInputs = deps;
|
||
|
|
||
|
configurePhase = ''
|
||
|
meson setup build
|
||
|
'';
|
||
|
|
||
|
buildPhase = ''
|
||
|
meson compile -C build
|
||
|
'';
|
||
|
|
||
|
installPhase = ''
|
||
|
mkdir -p $out/bin
|
||
|
mv build/graphics-test $out/bin/graphics-test
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
default = graphics-test;
|
||
|
};
|
||
|
|
||
|
formatter = treefmt-nix.lib.mkWrapper pkgs {
|
||
|
projectRootFile = "flake.nix";
|
||
|
programs = {
|
||
|
alejandra.enable = true;
|
||
|
deadnix.enable = true;
|
||
|
|
||
|
clang-format = {
|
||
|
enable = true;
|
||
|
package = pkgs.clang-tools_18;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
devShell = mkShell.override {inherit stdenv;} {
|
||
|
packages =
|
||
|
[
|
||
|
alejandra
|
||
|
bear
|
||
|
llvmPackages_18.clang-tools
|
||
|
lldb
|
||
|
meson
|
||
|
ninja
|
||
|
nvfetcher
|
||
|
pkg-config
|
||
|
unzip
|
||
|
|
||
|
(writeScriptBin "build" "meson compile -C build")
|
||
|
(writeScriptBin "clean" "meson setup build --wipe")
|
||
|
(writeScriptBin "reconfigure" "meson setup build --reconfigure")
|
||
|
(writeScriptBin "run" "meson compile -C build && build/graphics-test")
|
||
|
]
|
||
|
++ deps;
|
||
|
|
||
|
shellHook = lib.optionals stdenv.isDarwin ''
|
||
|
export PATH="${llvmPackages_18.clang-tools}/bin:$PATH"
|
||
|
export MOLTENVK_LIBRARY_PATH="${darwin.moltenvk}/lib";
|
||
|
export VULKAN_INCLUDE_DIRS="${darwin.moltenvk.dev}/include:${vulkan-headers}/include";
|
||
|
export VK_ICD_FILENAMES="${darwin.moltenvk}/share/vulkan/icd.d/MoltenVK_icd.json"
|
||
|
export VK_LAYER_PATH="${./explicit_layer.d}";
|
||
|
'';
|
||
|
|
||
|
name = "C++";
|
||
|
};
|
||
|
}
|
||
|
);
|
||
|
}
|