graph TD Root["Root CMakeLists.txt"] --> Test["test/CMakeLists.txt"] Root --> Standalone["standalone/CMakeLists.txt"] Root --> Docs["documentation/CMakeLists.txt"] Root --> Bench["bench/CMakeLists.txt"] Root --> All["all/CMakeLists.txt"] Test -. "duplicate CPM" .-> CPM1["cmake/CPM.cmake"] Standalone -. "duplicate CPM" .-> CPM2["cmake/CPM.cmake"] Bench -. "duplicate CPM" .-> CPM3["cmake/CPM.cmake"] All -. "re-includes specific.cmake" .-> SPEC["cmake/specific.cmake"] style Test fill:#ffcdd2,stroke:#c62828,stroke-width:3px style Standalone fill:#ffcdd2,stroke:#c62828,stroke-width:3px style Docs fill:#ffcdd2,stroke:#c62828,stroke-width:3px style Bench fill:#ffcdd2,stroke:#c62828,stroke-width:3px style All fill:#ffcdd2,stroke:#c62828,stroke-width:3px style CPM1 fill:#fff3e0,stroke:#e65100,stroke-width:3px style CPM2 fill:#fff3e0,stroke:#e65100,stroke-width:3px style CPM3 fill:#fff3e0,stroke:#e65100,stroke-width:3px style SPEC fill:#fff3e0,stroke:#e65100,stroke-width:3px
graph LR A["Checkout"] --> B["cmake -S . -B build"] B --> C["cmake -S test -B build/test\n separate config! "] C --> D["cmake -S standalone -B build/standalone\n another config! "] D --> E["cd build/test && ctest"] E --> F{"All green?"} F -- "No โ" --> G["Debug 3 different\n CMake configs "] style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style C fill:#fff3e0,stroke:#e65100,stroke-width:3px style D fill:#fff3e0,stroke:#e65100,stroke-width:3px style F fill:#fff3e0,stroke:#e65100,stroke-width:3px style G fill:#ffcdd2,stroke:#c62828,stroke-width:3px
graph LR A["cmake -S ."] --> B["cmake -S test"] B --> C["cmake -S standalone"] C --> D["cmake -S documentation"] D --> E["cmake -S bench"] E --> F["cmake -S all"] style A fill:#ffcdd2,stroke:#c62828,stroke-width:3px style B fill:#ffcdd2,stroke:#c62828,stroke-width:3px style C fill:#ffcdd2,stroke:#c62828,stroke-width:3px style D fill:#ffcdd2,stroke:#c62828,stroke-width:3px style E fill:#ffcdd2,stroke:#c62828,stroke-width:3px style F fill:#ffcdd2,stroke:#c62828,stroke-width:3px
graph TD H["cmake -B build"] --> I{"Options"} I -- "ON" --> J["CkPttnTests"] I -- "ON" --> K["CkPttnStandalone"] I -- "OFF" --> L["Bench targets"] I -- "OFF" --> M["GenerateDocs"] style H fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style I fill:#fff3e0,stroke:#e65100,stroke-width:3px style J fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style K fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style L fill:#dcedc8,stroke:#558b2f,stroke-width:3px style M fill:#dcedc8,stroke:#558b2f,stroke-width:3px
graph LR A["nvcc 12.9"] -- "rejects MSVC 18 โ" --> B["cudafe++ crash"] C["CUDA v13.3"] -- "supports MSVC 18 โ " --> D["kernel compiles"] style A fill:#ffcdd2,stroke:#c62828,stroke-width:3px style B fill:#ffcdd2,stroke:#c62828,stroke-width:3px style C fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style D fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph LR A["Test links fftw3.lib\n(import library)"] --> B["Needs fftw3.dll at runtime"] B --> C{"fftw3.dll on PATH?"} C -- "No โ" --> D["0xC0000135 crash"] C -- "Yes โ " --> E["Tests pass"] style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style C fill:#fff3e0,stroke:#e65100,stroke-width:3px style D fill:#ffcdd2,stroke:#c62828,stroke-width:3px style E fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph LR subgraph Foundational F1["fractions v1.1.4"] F2["ellalgo v1.6.9"] F3["lds-cpp v1.2.4"] F4["lds-gen v1.2.5"] end subgraph Mid-Tier M1["py2cpp v1.6.4"] M2["xnetwork v1.7.7"] M3["mywheel v1.1.6"] M4["csd v1.1.5"] M5["ginger v1.1.6"] end subgraph Top-Tier T1["netlistx v1.1.7"] T2["ckpttn v1.2.4"] T3["physdes v1.2.4"] T4["multiplierless v1.0.5"] end F1 --> M1 F2 --> T1 F3 --> M5 M1 --> T2 M2 --> T2 M5 --> T4 M4 --> T4 F2 --> T4 style F1 fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style F2 fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style F3 fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style F4 fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style M1 fill:#e8eaf6,stroke:#283593,stroke-width:3px style M2 fill:#e8eaf6,stroke:#283593,stroke-width:3px style M3 fill:#e8eaf6,stroke:#283593,stroke-width:3px style M4 fill:#e8eaf6,stroke:#283593,stroke-width:3px style M5 fill:#e8eaf6,stroke:#283593,stroke-width:3px style T1 fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style T2 fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style T3 fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style T4 fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph TD CK["ckpttn-cpp v1.2.4"] --> PY["py2cpp v1.6.4"] CK --> XN["xnetwork-cpp v1.7.7"] CK --> NX["netlistx-cpp v1.1.7"] CK --> MW["mywheel-cpp v1.1.6"] NX --> PY NX --> XN PY -. "fmt 12.1.0" .-> FMT["fmt"] XN -. "spdlog v1.17.0" .-> SPD["spdlog"] style CK fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style PY fill:#e8eaf6,stroke:#283593,stroke-width:3px style XN fill:#e8eaf6,stroke:#283593,stroke-width:3px style NX fill:#e8eaf6,stroke:#283593,stroke-width:3px style MW fill:#e8eaf6,stroke:#283593,stroke-width:3px style FMT fill:#fff9c4,stroke:#f57f17,stroke-width:3px style SPD fill:#fff9c4,stroke:#f57f17,stroke-width:3px