From 8669d4fe7c1f1e82df79426bd301ddce2701a44c Mon Sep 17 00:00:00 2001 From: Nathan Date: Mon, 31 Mar 2025 14:14:37 -0500 Subject: [PATCH] separate builds --- ExampleApps.nix | 72 +++++ ExampleModules.nix | 177 ++++++++++++ flake.nix | 349 ++++-------------------- include/utils/GuiModule/GuiModule.h | 3 + modules/WindowModule/src/WindowModule.h | 2 +- 5 files changed, 308 insertions(+), 295 deletions(-) create mode 100644 ExampleApps.nix create mode 100644 ExampleModules.nix diff --git a/ExampleApps.nix b/ExampleApps.nix new file mode 100644 index 0000000..f48eff4 --- /dev/null +++ b/ExampleApps.nix @@ -0,0 +1,72 @@ +{ inputs, pkgs, ... }: { + + MinimalApp = pkgs.stdenvNoCC.mkDerivation { + + name = "Archimedes"; + + src = ./.; + + nativeBuildInputs = with pkgs; [ + clang + ]; + + /*buildInputs = with pkgs; [ + ];*/ + + buildPhase = '' + clang++ \ + src/example_apps/MinimalApp/MinimalApp.cpp \ + -I src -I include \ + -Wall \ + -o $name + ''; + + installPhase = '' + mkdir -p $out/bin + cp $name $out/bin + ''; + + }; + + ImguiEmbed = pkgs.stdenvNoCC.mkDerivation { + + name = "Archimedes"; + + src = ./.; + + imgui = inputs.imgui; + + nativeBuildInputs = with pkgs; [ + clang + ]; + + buildInputs = with pkgs; [ + glfw + glew + ]; + + buildPhase = '' + clang++ \ + src/example_apps/ImguiEmbed/*.cpp \ + modules/GUImodules/TestImgui/src/*.cpp \ + $imgui/backends/imgui_impl_glfw.cpp \ + $imgui/backends/imgui_impl_opengl3.cpp \ + $imgui/*.cpp \ + -DRENDERER_OPENGL \ + -DWINDOW_GLFW \ + -DGUIMODULE \ + -DTESTIMGUI_STATIC \ + -I src -I include -I $imgui -I . \ + -lGL -lglfw -lGLEW \ + -Wall \ + -o $name + ''; + + installPhase = '' + mkdir -p $out/bin + cp $name $out/bin + ''; + + }; + +} diff --git a/ExampleModules.nix b/ExampleModules.nix new file mode 100644 index 0000000..8483ace --- /dev/null +++ b/ExampleModules.nix @@ -0,0 +1,177 @@ +{ inputs, pkgs, ... }: { + + TestMenu = pkgs.stdenvNoCC.mkDerivation { + + name = "TestMenu"; + + src = ./.; + + nativeBuildInputs = with pkgs; [ + clang + ]; + + buildPhase = '' + clang++ \ + modules/TestMenu/src/*.cpp \ + -fpic -shared \ + -I src \ + -Wall \ + -o $name + ''; + + installPhase = '' + mkdir -p $out/bin + cp $name $out/bin + ''; + + }; + + Print = pkgs.stdenvNoCC.mkDerivation { + + name = "Print"; + + src = ./.; + + nativeBuildInputs = with pkgs; [ + clang + ]; + + buildPhase = '' + clang++ \ + modules/Print/src/*.cpp \ + -fpic -shared \ + -I src -I include \ + -Wall \ + -o $name + ''; + + installPhase = '' + mkdir -p $out/bin + cp $name $out/bin + ''; + + }; + + DependsOnPrint = pkgs.stdenvNoCC.mkDerivation { + + name = "DependsOnPrint"; + + src = ./.; + + nativeBuildInputs = with pkgs; [ + clang + ]; + + buildPhase = '' + clang++ \ + modules/DependsOnPrint/src/*.cpp \ + -fpic -shared \ + -I src -I include \ + -Wall \ + -o $name + ''; + + installPhase = '' + mkdir -p $out/bin + cp $name $out/bin + ''; + + }; + + DependsOnPrintStatic = pkgs.stdenvNoCC.mkDerivation { + + name = "DependsOnPrintStatic"; + + src = ./.; + + nativeBuildInputs = with pkgs; [ + clang + ]; + + buildPhase = '' + clang++ \ + modules/DependsOnPrintStatic/src/*.cpp \ + modules/Print/src/*.cpp \ + -fpic -shared \ + -I src -I include -I . \ + -DPRINT_STATIC \ + -Wall \ + -o $name + ''; + + installPhase = '' + mkdir -p $out/bin + cp $name $out/bin + ''; + + }; + + TestImgui = pkgs.stdenvNoCC.mkDerivation { + + name = "TestImgui"; + + src = ./.; + + imgui = inputs.imgui; + + nativeBuildInputs = with pkgs; [ + clang + ]; + + buildInputs = with pkgs; [ + glfw + glew + ]; + + buildPhase = '' + clang++ \ + modules/GUImodules/TestImgui/src/*.cpp \ + $imgui/backends/imgui_impl_glfw.cpp \ + $imgui/backends/imgui_impl_opengl3.cpp \ + $imgui/*.cpp \ + -DRENDERER_OPENGL \ + -DWINDOW_GLFW \ + -fpic -shared \ + -I src -I include -I $imgui \ + -lGL -lglfw -lGLEW \ + -Wall \ + -o $name + ''; + + installPhase = '' + mkdir -p $out/bin + cp $name $out/bin + ''; + + }; + + TestClay = pkgs.stdenvNoCC.mkDerivation { + + name = "TestClay"; + + src = ./.; + + clay = inputs.clay; + + nativeBuildInputs = with pkgs; [ + clang + ]; + + buildPhase = '' + clang++ \ + modules/TestClay/src/*.cpp \ + -fpic -shared \ + -I src -I include \ + -DRENDERER_OPENGL \ + -DWINDOW_GLFW \ + -Wall \ + -o $name + ''; + + installPhase = '' + mkdir -p $out/bin + cp $name $out/bin + ''; + + }; +} diff --git a/flake.nix b/flake.nix index 521b584..51b8a9e 100755 --- a/flake.nix +++ b/flake.nix @@ -13,320 +13,81 @@ }; }; - outputs = { self, nixpkgs, imgui, clay }: let + outputs = { self, nixpkgs, imgui, clay }@inputs: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; }; in { Archimedes = { - examples = { - MinimalApp = pkgs.stdenvNoCC.mkDerivation { + examples = import ./ExampleApps.nix { inherit inputs; inherit pkgs; }; + }; - name = "Archimedes"; + Modules = { + examples = import ./ExampleModules.nix { inherit inputs; inherit pkgs; }; - src = ./.; + WindowModule = pkgs.stdenvNoCC.mkDerivation { - nativeBuildInputs = with pkgs; [ - clang - ]; + name = "WindowModule"; - /*buildInputs = with pkgs; [ - ];*/ + src = ./.; - buildPhase = '' - clang++ \ - src/example_apps/MinimalApp/MinimalApp.cpp \ - -I src -I include \ - -Wall \ - -o $name - ''; + nativeBuildInputs = with pkgs; [ + clang + ]; - installPhase = '' - mkdir -p $out/bin - cp $name $out/bin - ''; - - }; - - ImguiEmbed = pkgs.stdenvNoCC.mkDerivation { - - name = "Archimedes"; - - src = ./.; - - inherit imgui; - - nativeBuildInputs = with pkgs; [ - clang - ]; - - buildInputs = with pkgs; [ - glfw + buildInputs = with pkgs; [ + glfw glew - ]; + ]; - buildPhase = '' - clang++ \ - src/example_apps/ImguiEmbed/*.cpp \ - modules/GUImodules/TestImgui/src/*.cpp \ - $imgui/backends/imgui_impl_glfw.cpp \ - $imgui/backends/imgui_impl_opengl3.cpp \ - $imgui/*.cpp \ - -DRENDERER_OPENGL \ - -DWINDOW_GLFW \ - -DGUIMODULE \ - -DTESTIMGUI_STATIC \ - -I src -I include -I $imgui -I . \ - -lGL -lglfw -lGLEW \ - -Wall \ - -o $name + buildPhase = '' + clang++ \ + modules/Window/src/*.cpp \ + -fpic -shared \ + -I src -I include \ + -DRENDERER_OPENGL \ + -DWINDOW_GLFW \ + -lGL -lglfw -lGLEW \ + -Wall \ + -o $name ''; installPhase = '' - mkdir -p $out/bin - cp $name $out/bin - ''; + mkdir -p $out/bin + cp $name $out/bin + ''; + + }; + + MainGUI = pkgs.stdenvNoCC.mkDerivation { + + name = "MainGUI"; + + src = ./.; + + inherit imgui; + + nativeBuildInputs = with pkgs; [ + clang + ]; + + buildPhase = '' + clang++ \ + modules/MainGUI/src/*.cpp \ + -fpic -shared \ + -I src -I include \ + -Wall \ + -o $name + ''; + + installPhase = '' + mkdir -p $out/bin + cp $name $out/bin + ''; - }; }; }; - TestMenu = pkgs.stdenvNoCC.mkDerivation { - - name = "TestMenu"; - - src = ./.; - - nativeBuildInputs = with pkgs; [ - clang - ]; - - buildPhase = '' - clang++ \ - modules/TestMenu/src/*.cpp \ - -fpic -shared \ - -I src \ - -Wall \ - -o $name - ''; - - installPhase = '' - mkdir -p $out/bin - cp $name $out/bin - ''; - - }; - - Print = pkgs.stdenvNoCC.mkDerivation { - - name = "Print"; - - src = ./.; - - nativeBuildInputs = with pkgs; [ - clang - ]; - - buildPhase = '' - clang++ \ - modules/Print/src/*.cpp \ - -fpic -shared \ - -I src -I include \ - -Wall \ - -o $name - ''; - - installPhase = '' - mkdir -p $out/bin - cp $name $out/bin - ''; - - }; - - DependsOnPrint = pkgs.stdenvNoCC.mkDerivation { - - name = "DependsOnPrint"; - - src = ./.; - - nativeBuildInputs = with pkgs; [ - clang - ]; - - buildPhase = '' - clang++ \ - modules/DependsOnPrint/src/*.cpp \ - -fpic -shared \ - -I src -I include \ - -Wall \ - -o $name - ''; - - installPhase = '' - mkdir -p $out/bin - cp $name $out/bin - ''; - - }; - - DependsOnPrintStatic = pkgs.stdenvNoCC.mkDerivation { - - name = "DependsOnPrintStatic"; - - src = ./.; - - nativeBuildInputs = with pkgs; [ - clang - ]; - - buildPhase = '' - clang++ \ - modules/DependsOnPrintStatic/src/*.cpp \ - modules/Print/src/*.cpp \ - -fpic -shared \ - -I src -I include -I . \ - -DPRINT_STATIC \ - -Wall \ - -o $name - ''; - - installPhase = '' - mkdir -p $out/bin - cp $name $out/bin - ''; - - }; - - WindowModule = pkgs.stdenvNoCC.mkDerivation { - - name = "WindowModule"; - - src = ./.; - - nativeBuildInputs = with pkgs; [ - clang - ]; - - buildInputs = with pkgs; [ - glfw - glew - ]; - - buildPhase = '' - clang++ \ - modules/Window/src/*.cpp \ - -fpic -shared \ - -I src -I include \ - -DRENDERER_OPENGL \ - -DWINDOW_GLFW \ - -lGL -lglfw -lGLEW \ - -Wall \ - -o $name - ''; - - installPhase = '' - mkdir -p $out/bin - cp $name $out/bin - ''; - - }; - - TestImgui = pkgs.stdenvNoCC.mkDerivation { - - name = "TestImgui"; - - src = ./.; - - inherit imgui; - - nativeBuildInputs = with pkgs; [ - clang - ]; - - buildInputs = with pkgs; [ - glfw - glew - ]; - - buildPhase = '' - clang++ \ - modules/GUImodules/TestImgui/src/*.cpp \ - $imgui/backends/imgui_impl_glfw.cpp \ - $imgui/backends/imgui_impl_opengl3.cpp \ - $imgui/*.cpp \ - -DRENDERER_OPENGL \ - -DWINDOW_GLFW \ - -fpic -shared \ - -I src -I include -I $imgui \ - -lGL -lglfw -lGLEW \ - -Wall \ - -o $name - ''; - - installPhase = '' - mkdir -p $out/bin - cp $name $out/bin - ''; - - }; - - TestClay = pkgs.stdenvNoCC.mkDerivation { - - name = "TestClay"; - - src = ./.; - - inherit clay; - - nativeBuildInputs = with pkgs; [ - clang - ]; - - buildPhase = '' - clang++ \ - modules/TestClay/src/*.cpp \ - -fpic -shared \ - -I src -I include \ - -DRENDERER_OPENGL \ - -DWINDOW_GLFW \ - -Wall \ - -o $name - ''; - - installPhase = '' - mkdir -p $out/bin - cp $name $out/bin - ''; - - }; - - MainGUI = pkgs.stdenvNoCC.mkDerivation { - - name = "MainGUI"; - - src = ./.; - - inherit imgui; - - nativeBuildInputs = with pkgs; [ - clang - ]; - - buildPhase = '' - clang++ \ - modules/MainGUI/src/*.cpp \ - -fpic -shared \ - -I src -I include \ - -Wall \ - -o $name - ''; - - installPhase = '' - mkdir -p $out/bin - cp $name $out/bin - ''; - - }; packages.${system}.default = self.Archimedes; diff --git a/include/utils/GuiModule/GuiModule.h b/include/utils/GuiModule/GuiModule.h index 68dcb00..c07415f 100644 --- a/include/utils/GuiModule/GuiModule.h +++ b/include/utils/GuiModule/GuiModule.h @@ -2,7 +2,10 @@ #undef GUIMODULE #include "utils/Module/Module.h" + +#define WINDOWMODULE_STATIC #include "modules/WindowModule/src/WindowModule.h" +#include "modules/WindowModule/src/WindowModule.cpp" namespace Archimedes { diff --git a/modules/WindowModule/src/WindowModule.h b/modules/WindowModule/src/WindowModule.h index 5e0ef6d..276c0bc 100644 --- a/modules/WindowModule/src/WindowModule.h +++ b/modules/WindowModule/src/WindowModule.h @@ -31,7 +31,7 @@ class WindowModule : public Archimedes::Module { }; -#ifndef WINDOW_STATIC +#ifndef WINDOWMODULE_STATIC #define MODULE_TYPE WindowModule #include "endModule.h" #endif