iwt (IWT-Simulation, Weber-Dynamik) ist das Referenzprojekt der
Modul-Architektur: Es zeigt, wie die eigenen Bibliotheken in einer
realen Anwendung zusammenspielen. Die Anwendung ist bewusst dünn –
das GUI-Skelett kommt aus libraries/gui, die GPU-Rechnung aus
libraries/ocl, Vektoren aus libraries/vector, Strings aus
libraries/string. iwt liefert nur noch die eigentliche Logik und die
App-spezifische GUI-Schicht.
Benutzung der Bibliotheken (real)
gui – Virtual-Hooks in Reinform. Die Bibliothek deklariert weak
Defaults; iwt/src/gui.c definiert sie stark:
Die Einheiten der Simulations-Schichten sind Modul je Konzept
(iwt_kernel, iwt_move_cluster, iwt_detect_cluster, gui_*), interne
Helfer sind private (aus api) innerhalb der eigenen .c.
CMake-Muster (App-Seite)
Alle Bibliotheken kommen per add_subdirectory (transitiv PUBLIC, siehe
Modul-Konventionen):
add_subdirectory(../../libraries/ocl ${CMAKE_BINARY_DIR}/ocl)add_subdirectory(../../libraries/string ${CMAKE_BINARY_DIR}/string)add_subdirectory(../../libraries/gui ${CMAKE_BINARY_DIR}/gui)add_subdirectory(../../libraries/vector ${CMAKE_BINARY_DIR}/vector)target_link_libraries(iwt PUBLIC ocl string gui vector m PkgConfig::GDKPIXBUF)
Weitere Konventionen: add_compile_definitions(_POSIX_C_SOURCE=200809L),
Ausgaben nach ${CMAKE_BINARY_DIR}/lib und /bin, Projekt-Stand in
PROJECT_STATUS.md (zuständig für die nächste Entwicklungs-Session /
KI: Performance, Engpässe, Optionen, Konventionen).
Abhängigkeits-Closure (alle PUBLIC)
iwt ──► gui ──► logging, threading, string, api
──► ocl ──► logging, threading, api
──► vector, string (+ System: m, gdk-pixbuf, GTK3, OpenCL)
Das komplette Closure ist inzwischen öffentlich unter GitHub mit
Apache-2.0 – das Referenzprojekt liefert damit auch den Beleg, dass die
Bibliotheken konsistent und eigenständig baubar sind.