Commit Graph

157 Commits

Author SHA1 Message Date
anth64 c863da08dd fix(platform): address C89 warnings and Windows pointer casting
- Include <stdint.h> so Windows does not complain about int types.
- Cast GetProcAddress return through intptr_t to satisfy -Wpedantic.
- Moved work_path for *nix only macros.
2026-01-20 21:53:33 +01:00
anth64 404bf9503c fix: init file count to 0, just in case... 2026-01-19 23:16:32 +01:00
anth64 42cf581125 fix: use union for ISO C compliant function pointer conversion 2026-01-19 07:57:40 +01:00
anth64 c64f9aa946 fix: I forgot to change it from uint8_t to int... 2026-01-18 22:24:24 +01:00
anth64 3e2762ac15 remove accidental import, thanks clangd 2026-01-18 22:04:05 +01:00
anth64 a3978644af refactor: centralize module identity logic and upgrade lookup
- Move extract_module_id and is_valid_module_file to module.c
- Update is_module_loaded to return module index instead of uint8_t
- Fix platform.c event checks to handle index-based return (>= 0)
- Centralize STK_MODULE_EXT definitions in stk.h
2026-01-18 22:01:54 +01:00
anth64 a290be5dcc feat: implement .tmp directory isolation for safe hot-reload
Add foundation for cross-platform hot-reload system by isolating
loaded modules from source files using a temporary directory.

Changes:
- Add configurable tmp directory parameter to stk_init()
  (defaults to mods/.tmp/ if not specified)
- Copy all modules from mods/ to .tmp/ on initialization
- Load modules exclusively from .tmp/ directory
- Clean up .tmp/ directory on shutdown
- Add cross-platform file operations:
  * platform_mkdir() - create directories
  * platform_copy_file() - copy files
  * platform_remove_file() - delete files
  * platform_remove_dir() - delete directory and contents
- Improve BSD kqueue implementation to detect file overwrites
  (adds individual file watches with NOTE_WRITE)

This isolates the loaded shared libraries from source files,
preventing segfaults when users overwrite mods using cp/copy
operations. The actual reload logic remains unimplemented
(marked as TODO in stk_poll switch cases).
2026-01-18 21:26:17 +01:00
anth64 38469a358f Replace dynamic allocations with fixed-size buffers and add module extension filtering
- Use fixed STK_PATH_MAX and STK_MOD_ID_BUFFER throughout for predictable memory
- Filter by platform-specific extensions (.so/.dll/.dylib) with compile-time length
- Add RELOAD event detection and is_module_loaded() helper
- Maintain feature parity across all platforms
2026-01-17 19:52:42 +01:00
anth64 e2e49e605c Fix bmake builds: use absolute include paths, output .dylib on macOS 2026-01-17 19:50:38 +01:00
anth64 2820552db8 Add STK_MOD_RELOAD to module event enum 2026-01-17 19:03:22 +01:00
anth64 86f08bec19 build: fix bmake clean by using absolute paths for directory removal 2026-01-11 18:06:22 +01:00
anth64 bf5863fcb1 build: implement platform-agnostic build system
- Split Makefile into gmake.mk (Linux/Windows) and bmake.mk (BSD/macOS)
- Added config.mk for shared variables.
- Added build.sh and build.bat dispatchers.
- Retains old build behavior with dependency tracking.
2026-01-11 17:55:47 +01:00
anth64 888e6d5f72 Added kqueue directory behavior and huge refactor
- Added kqueue directory watching code for other unix like OSes
  (FreeBSD, OpenBSD, MacOS, etc)
- Since much of the code for Linux and other *nix OSes was the same,
  some refactoring was done to not have duplicate code.
2026-01-11 15:31:14 +01:00
anth64 503bd21fae Oops, fix merge conflict. 2026-01-11 12:54:46 +01:00
anth64 fe650743b9 'simplify' make file to work across gmake and bmake 2026-01-11 12:51:28 +01:00
anth64 4ae6e533fa Switch gcc to use available c compiler 2026-01-10 16:13:57 +01:00
anth64 0649e287be extract_module_id is now not static 2025-12-20 08:22:41 -05:00
anth64 a7d40929bf Change shutdown return type and hot reload WIP
- stk_shutdown now is a void return type
- detect if the module being loaded/unloaded is an existing module.
2025-11-07 07:55:44 +01:00
anth64 7169dd37b7 hot loading skeleton 2025-11-06 22:34:55 +01:00
anth64 a30eeb7b1c extract_module_id non static -> static 2025-11-06 22:29:15 +01:00
anth64 8d4a506a91 extract_module_id(const char* path) static -> not static 2025-11-06 21:25:47 +01:00
anth64 c95daad754 Simplify Windows event handling
- Use STK_MOD_LOAD/STK_MOD_UNLOAD for Windows events
- Map FILE_ACTION_ADDED/MODIFIED/RENAMED_NEW_NAME to load
- Map FILE_ACTION_REMOVED/RENAMED_OLD_NAME to unload
2025-11-06 20:42:41 +01:00
anth64 13604e3f3e Fix Linux inotify event handling and simplify module events
- Simplify to STK_MOD_LOAD/STK_MOD_UNLOAD event types
- Replace IN_CREATE/IN_MODIFY with IN_CLOSE_WRITE to wait for complete writes
- Update watch flags to IN_CLOSE_WRITE | IN_DELETE | IN_MOVED_TO | IN_MOVED_FROM
2025-11-06 20:06:15 +01:00
anth64 0cf819fc73 stk module id static -> not static 2025-11-06 19:29:20 +01:00
anth64 b5bb6bc707 Fix (*file_list) pointer syntax in Windows code, remove repeated variable, windows code now returns event types 2025-11-05 07:49:57 +01:00
anth64 3b993458d1 Add module ID tracking for hot-reloading
- Add stk_module_ids array to track module IDs by filename.
- extract_module_id() extracts module ID from it's filename.
- Enables tracking of file changes of already loaded modules.
2025-11-04 07:39:20 +01:00
anth64 da4dcee490 Enhance file watching to return event types
- `platform_directory_watch_check` now returns event types along side
  file names/counts
2025-11-03 23:16:32 +01:00
anth64 ec2aa09596 add stk file event enum and definition for stk poll 2025-11-03 21:44:33 +01:00
anth64 35cc5afa9d Module discovery working for real this time
- Tested on Linux
- Allocate module memory before loading anything (seg fault fixed)
2025-11-02 19:41:56 +01:00
anth64 e878819b02 remove diff output 2025-11-02 19:28:16 +01:00
anth64 3c7608ef51 create mod directory if it does not exist. 2025-11-02 19:01:08 +01:00
anth64 5c621c8367 Init/shutdown working
- stk_init/shutdown do what they are supposed to.
- buffer sizes moved to headers
2025-11-02 18:40:33 +01:00
anth64 a0c9cdb577 Windows implementation for platform_directory_init_scan 2025-11-02 13:55:09 +01:00
anth64 4b70f606fa add directory scan function intended for use on startup, Linux only for now 2025-11-02 12:56:02 +01:00
anth64 7d7f02d1be use a constant for the mod dir buffer size 2025-11-02 12:44:10 +01:00
anth64 a66d9f9357 add mod dir 2025-11-02 12:30:26 +01:00
anth64 5ab3da22ae update documentation to have a posix/windows focus. I am big dumb, consoles do not have dlls... 2025-11-02 09:38:12 +01:00
anth64 ed6325598c remove kqueue code, focus on Linux/Windows implementation for now. 2025-11-02 09:29:27 +01:00
anth64 390f1a40bc add kqueue directory start/stop, check is still wip 2025-11-01 18:20:16 +01:00
anth64 f1c6372b3e rename event buffer, add directory watching for windows (WIP/needs testing) 2025-10-31 07:39:11 +01:00
anth64 0e6664ec47 Implement Linux directory watching using inotify 2025-10-29 20:25:45 +01:00
anth64 08b990a16a fix log function name 2025-10-23 23:20:38 +02:00
anth64 bab9887fdb added functions to load/unload modules 2025-10-23 22:20:49 +02:00
anth64 df0954ba0d stk module count function, remove stk_ids since handles will be used as "ids" and typedef for stk module functions 2025-10-23 21:36:49 +02:00
anth64 51ae8c7ab2 change shutdown log msg 2025-10-23 21:18:37 +02:00
anth64 9d8dad7ea1 platform specific dynamic library loading 2025-10-22 19:20:48 +02:00
anth64 8b26742c63 add logging 2025-10-21 00:10:51 +02:00
anth64 a82fb80a99 prevent c++ name mangling 2025-10-21 00:10:20 +02:00
anth64 586733f2eb Makefile detect os (windows/posix) 2025-10-20 22:42:04 +02:00
anth64 9d51be7a18 added docs directory and design roadmap 2025-10-18 17:15:52 -04:00