# Modular Architecture & Tooling TODO This document tracks upcoming tasks for Juliet's modular architecture (`core`, `appbin`, future `render`, `ui`, etc.) and the build/LSP generation tooling. --- ## 1. Tooling & Project Generator (`tools/new_project_gen.c`) - [x] **Dynamic Preceding Include Parser**: - Implemented dynamic parser `get_preceding_includes_from_inc_h(layer_name, target_file_path)` in `tools/new_project_gen.c`. - Reads `_inc.h` line-by-line and collects all `#include "..."` statements that appear strictly **above** the target header being analyzed. - Automatically injects those preceding includes via `/FI` so that any header opened in Neovim/clangd has its exact required preprocessor context with zero hardcoding. - [x] **Multi-Layer Cascade**: - Deduces layer hierarchy from `appbin_main.c` and supplies lower layer includes (`/FIcore/core_inc.h`, etc.) to upper layers automatically. --- ## 2. Core Module Implementation (`Juliet/core/`) - [ ] **Fill `core.c`**: - Implement base core routines (OS helpers, string utilities, arena allocation implementations, math helpers). - [ ] **Win32 Core Cleanup**: - Fix argument passing in `win32_core.c:55` (`main_thread_core_entry_point(argc, &argv)` vs `char** argv`). - Implement proper command line argument parsing into `String8`/`String16` arenas. - [ ] **Unit Tests for Core**: - Create standalone test executable or test entry point validating arena allocation, commit/decommit, and string routines. --- ## 3. Future Layers - [ ] **Render Layer (`Juliet/render/`)**: - Create `render_inc.h`, `render_inc.c`. - Implement D3D12 device initialization, command queues, swap chain, and memory allocators. - Add `#include "render/render_inc.h"` and `#include "render/render_inc.c"` to `appbin_main.c`. - [ ] **UI Layer (`Juliet/ui/`)**: - Create `ui_inc.h`, `ui_inc.c`. - Implement UI hierarchy, layout, text rendering, and input handling. --- ## 4. Build System & LSP Maintenance - [ ] Run `new_generate.bat` after adding new layers or changing layer include order in `appbin_main.c`. - [ ] Keep `new_build.bat` as the single-pass unity compiler command for lightning-fast build times.