From c9a91f6ce7469c474b029a7a7429ae79653a5e47 Mon Sep 17 00:00:00 2001 From: Lance Pollard Date: Sun, 1 Mar 2026 20:15:20 -0800 Subject: [PATCH] Guard dlopen/dlsym for platforms without dynamic linking Add #ifdef guards to ffi/load.c and ffi/load_dir.c so HVM4 compiles on platforms where dlopen is unavailable or restricted (WASM, iOS). The guard triggers on __EMSCRIPTEN__ or HVM_NO_DLOPEN. On guarded platforms, ffi_load and ffi_load_dir print an error and exit. Existing behavior on desktop/server is unchanged. --- clang/ffi/load.c | 14 ++++++++++++++ clang/ffi/load_dir.c | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/clang/ffi/load.c b/clang/ffi/load.c index 2fc94e18..de5938cd 100644 --- a/clang/ffi/load.c +++ b/clang/ffi/load.c @@ -1,3 +1,15 @@ +#if defined(__EMSCRIPTEN__) || defined(HVM_NO_DLOPEN) + +fn void ffi_load(const char *path) { + (void)path; + fprintf(stderr, + "ERROR: dynamic FFI loading not available on this platform.\n" + " Register primitives at compile time instead.\n"); + exit(1); +} + +#else + #include #define HVM_RUNTIME @@ -44,3 +56,5 @@ fn void ffi_load(const char *path) { ffi_handles_push(handle); init(ffi_api()); } + +#endif diff --git a/clang/ffi/load_dir.c b/clang/ffi/load_dir.c index 0834acde..2e8fc699 100644 --- a/clang/ffi/load_dir.c +++ b/clang/ffi/load_dir.c @@ -1,3 +1,14 @@ +#if defined(__EMSCRIPTEN__) || defined(HVM_NO_DLOPEN) + +fn void ffi_load_dir(const char *dir) { + (void)dir; + fprintf(stderr, + "ERROR: dynamic FFI loading not available on this platform.\n"); + exit(1); +} + +#else + #include #include @@ -48,3 +59,5 @@ fn void ffi_load_dir(const char *dir) { closedir(dp); } + +#endif