not quite yet working live reload

This commit is contained in:
2025-03-13 00:52:35 +02:00
parent d2fcb9a24a
commit ab18ed1d4a
4 changed files with 58 additions and 25 deletions

View File

@@ -1,15 +1,23 @@
#include "hiisi.h"
#include <assert.h>
#include <elf.h>
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <link.h>
#include <signal.h>
#include <atomic>
struct app_state {};
Engine load_hiisi(const char *name) {
std::atomic<bool> reload_requested(false);
void reload_signal_handler(int) {
reload_requested = true;
}
Engine load_hiisi() {
const char *name = "build/hiisi/libhiisi-engine.so";
void *mod = dlopen(name, RTLD_NOW);
Lmid_t list;
@@ -82,10 +90,11 @@ Engine load_hiisi(const char *name) {
int main(int argc, char **argv) {
app_state state;
void *state_ptr = &state;
signal(SIGUSR1, reload_signal_handler);
Engine hiisi = load_hiisi("build/hiisi/libhiisi-engine.so");
EngineData state;
Engine hiisi = load_hiisi();
if (!hiisi.module) {
printf("%s\n", dlerror());
return 1;
@@ -94,6 +103,11 @@ int main(int argc, char **argv) {
hiisi.init(&state, argc, argv);
while (hiisi.event(&state)) {
hiisi.iterate(&state);
if (reload_requested) {
dlclose(hiisi.module);
hiisi = load_hiisi();
reload_requested = false;
}
}
dlclose(hiisi.module);