From 6fcdfdbc5e620328660ca947ccb02ee0561f7877 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 28 Jan 2026 09:52:01 +0100 Subject: [PATCH] WASI compile fixes --- src/misc/util/utilAigSim.c | 18 ++++++++++++++++++ src/opt/ufar/UfarMgr.cpp | 2 -- src/opt/ufar/UfarPth.cpp | 4 ++++ src/opt/untk/NtkNtk.cpp | 1 - src/opt/util/util.cpp | 2 ++ 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/misc/util/utilAigSim.c b/src/misc/util/utilAigSim.c index 3bbde59a8..4d89b615f 100644 --- a/src/misc/util/utilAigSim.c +++ b/src/misc/util/utilAigSim.c @@ -30,6 +30,8 @@ #define mkstemp(p) _mktemp_s(p, strlen(p)+1) #else #include // mkstemp(), close(), unlink() +#include +#include #endif #ifdef _WIN32 @@ -333,8 +335,14 @@ static int ends_with(const char *s, const char *suf) { static int make_tmp_file(char *path, size_t cap, const char *prefix) { // Creates an existing temp file (for input) +#if defined(__wasm) + static int seq = 0; // no risk of collision since we're in a sandbox + snprintf(path, cap, "%s%08d", prefix, seq++); + int fd = open(path, O_CREAT | O_EXCL | O_RDWR, S_IREAD | S_IWRITE); +#else snprintf(path, cap, "/tmp/%sXXXXXX", prefix); int fd = mkstemp(path); +#endif if (fd < 0) return 0; close(fd); return 1; @@ -342,8 +350,14 @@ static int make_tmp_file(char *path, size_t cap, const char *prefix) { static int make_tmp_path_noexist(char *path, size_t cap, const char *prefix) { // Creates a unique temp path that does not exist (for output) +#if defined(__wasm) + static int seq = 0; // no risk of collision since we're in a sandbox + snprintf(path, cap, "%s%08d", prefix, seq++); + int fd = open(path, O_CREAT | O_EXCL | O_RDWR, S_IREAD | S_IWRITE); +#else snprintf(path, cap, "/tmp/%sXXXXXX", prefix); int fd = mkstemp(path); +#endif if (fd < 0) return 0; close(fd); unlink(path); @@ -612,7 +626,11 @@ static int SimulateCompareAigBin(const AigMan *p1, const char *bin, // Run external binary: " " remove(outFile); snprintf(cmd, sizeof(cmd), "%s %s %s", bin, inFile, outFile); +#if defined(__wasm) + int rc = -1; +#else int rc = system(cmd); +#endif if (rc != 0) { fprintf(stderr, "Error: system() failed (rc=%d): %s\n", rc, cmd); goto fail; diff --git a/src/opt/ufar/UfarMgr.cpp b/src/opt/ufar/UfarMgr.cpp index 924ad0d6b..67b5aed85 100755 --- a/src/opt/ufar/UfarMgr.cpp +++ b/src/opt/ufar/UfarMgr.cpp @@ -16,8 +16,6 @@ #ifdef _WIN32 #include -#else -#include #endif #include diff --git a/src/opt/ufar/UfarPth.cpp b/src/opt/ufar/UfarPth.cpp index f2ef59374..6de28dbc5 100755 --- a/src/opt/ufar/UfarPth.cpp +++ b/src/opt/ufar/UfarPth.cpp @@ -188,6 +188,10 @@ class PDRWLA : public Solver { Wlc_Par_t _Pars; }; +#if defined(__wasm) +static void pthread_exit(void *retval) __attribute__((noreturn)) { } +#endif + void KillOthers() { pthread_cond_signal( &g_cond ); ++g_nRunIds; diff --git a/src/opt/untk/NtkNtk.cpp b/src/opt/untk/NtkNtk.cpp index 62ab1e343..0c74a4761 100755 --- a/src/opt/untk/NtkNtk.cpp +++ b/src/opt/untk/NtkNtk.cpp @@ -9,7 +9,6 @@ #include #else #include -#include #endif #include diff --git a/src/opt/util/util.cpp b/src/opt/util/util.cpp index a4b3ceba5..fa80bebd9 100644 --- a/src/opt/util/util.cpp +++ b/src/opt/util/util.cpp @@ -6,7 +6,9 @@ */ #include +#if !defined(__wasm) #include +#endif #ifdef _WIN32 #include #else