Files
Archimedes/flake.nix
2024-08-10 21:20:28 -05:00

135 lines
3.8 KiB
Nix

{
description = "Build Project Terminal";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
imgui.url = "github:ocornut/imgui?ref=docking";
imgui.flake = false;
};
outputs = { self, nixpkgs, imgui }@inputs:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
renderer = "vulkan";
window = "sdl2";
in {
packages.${system}.default = pkgs.stdenv.mkDerivation {
name = "Terminal";
inherit system;
src = ./.;
imgui = inputs.imgui;
buildInputs = with pkgs; if renderer == "vulkan" && window == "sdl2" then [
tinyobjloader
stb
glm
shaderc
SDL2
vulkan-headers
vulkan-loader
] else if renderer == "vulkan" && window == "glfw" then [
stb
glm
shaderc
glfw
vulkan-headers
vulkan-loader
] else if renderer == "opengl3" && window == "sdl2" then [
stb
glm
SDL2
] else if renderer == "opengl3" && window == "glfw" then [
stb
glm
glfw
] else [];
buildPhase = if renderer == "vulkan" && window == "sdl2" then
''
glslc shaders/*.vert -o vert.spv
glslc shaders/*.frag -o frag.spv
g++ src/*.cpp renderer/vulkanRenderer.cpp window/sdl2Window.cpp layers/*.cpp events/*.cpp \
-I src -I renderer -I window -I layers -I events \
-I $imgui -I $imgui/backends -I ${pkgs.stb}/include/stb $(sdl2-config --cflags) \
$imgui/*.cpp $imgui/backends/*sdl2.cpp $imgui/backends/*vulkan.cpp \
-lSDL2 -lvulkan -o $name -DIMGUI_ENABLE -DSHDR_PATH=$out/bin
''
else if renderer == "vulkan" && window == "glfw" then
''
glslc shaders/*.vert -o vert.spv
glslc shaders/*.frag -o frag.spv
g++ src/*.cpp renderer/vulkanRenderer.cpp window/sdl2Window.cpp layers/*.cpp events/*.cpp \
-I src -I renderer -I window -I layers -I events \
-I $imgui -I $imgui/backends -I ${pkgs.stb}/include/stb $(sdl2-config --cflags) \
$imgui/*.cpp $imgui/backends/*sdl2.cpp $imgui/backends/*vulkan.cpp \
-lSDL2 -lvulkan -o $name -DIMGUI_ENABLE -DSHDR_PATH=$out/bin
''
else if renderer == "opengl3" && window == "sdl2" then
''
glslc shaders/*.vert -o vert.spv
glslc shaders/*.frag -o frag.spv
g++ src/*.cpp renderer/vulkanRenderer.cpp window/sdl2Window.cpp layers/*.cpp events/*.cpp \
-I src -I renderer -I window -I layers -I events \
-I $imgui -I $imgui/backends -I ${pkgs.stb}/include/stb $(sdl2-config --cflags) \
$imgui/*.cpp $imgui/backends/*sdl2.cpp $imgui/backends/*vulkan.cpp \
-lSDL2 -lvulkan -o $name -DIMGUI_ENABLE -DSHDR_PATH=$out/bin
''
else if renderer == "opengl3" && window == "glfw" then
''
glslc shaders/*.vert -o vert.spv
glslc shaders/*.frag -o frag.spv
g++ src/*.cpp renderer/vulkanRenderer.cpp window/sdl2Window.cpp layers/*.cpp events/*.cpp \
-I src -I renderer -I window -I layers -I events \
-I $imgui -I $imgui/backends -I ${pkgs.stb}/include/stb $(sdl2-config --cflags) \
$imgui/*.cpp $imgui/backends/*sdl2.cpp $imgui/backends/*vulkan.cpp \
-lSDL2 -lvulkan -o $name -DIMGUI_ENABLE -DSHDR_PATH=$out/bin
'' else '''';
installPhase = ''
mkdir -p $out/bin
cp *.spv $out/bin
cp $name $out/bin
'';
};
shaders = pkgs.stdenv.mkDerivation {
name = "Terminal";
inherit system;
src = ./.;
buildInputs = with pkgs; [
shaderc
];
buildPhase = ''
glslc shaders/*.vert -o vert.spv
glslc shaders/*.frag -o frag.spv
'';
installPhase = ''
mkdir -p $out/bin
cp *.spv $out/bin
'';
};
};
}