aboutsummaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorwhitequark <whitequark@whitequark.org>2019-11-11 09:23:06 +0000
committerwhitequark <whitequark@whitequark.org>2020-04-30 18:56:25 +0000
commitb43c282e4e0de53b9323a5d8d85b07bc73324a17 (patch)
treeab7a0beb69f8f4cb7588128fbe248343665b1d7d /libs
parentbc380b0b56e0fa269a0d5844280cc4419d438d3a (diff)
downloadyosys-b43c282e4e0de53b9323a5d8d85b07bc73324a17.tar.gz
yosys-b43c282e4e0de53b9323a5d8d85b07bc73324a17.tar.bz2
yosys-b43c282e4e0de53b9323a5d8d85b07bc73324a17.zip
Add WASI platform support.
This includes the following significant changes: * Patching ezsat and minisat to disable resource limiting code on WASM/WASI, since the POSIX functions they use are unavailable. * Adding a new definition, YOSYS_DISABLE_SPAWN, present if platform does not support spawning subprocesses (i.e. Emscripten or WASI). This definition hides the definition of `run_command()`. * Adding a new Makefile flag, DISABLE_SPAWN, present in the same condition. This flag disables all passes that require spawning subprocesses for their function.
Diffstat (limited to 'libs')
-rw-r--r--libs/ezsat/ezminisat.cc11
-rw-r--r--libs/minisat/00_PATCH_wasm.patch34
-rwxr-xr-xlibs/minisat/00_UPDATE.sh2
-rw-r--r--libs/minisat/System.cc8
4 files changed, 47 insertions, 8 deletions
diff --git a/libs/ezsat/ezminisat.cc b/libs/ezsat/ezminisat.cc
index 4be5fd493..ac4defac3 100644
--- a/libs/ezsat/ezminisat.cc
+++ b/libs/ezsat/ezminisat.cc
@@ -29,11 +29,12 @@
#include <limits.h>
#include <stdint.h>
-#include <csignal>
#include <cinttypes>
-#ifndef _WIN32
+#if !defined(_WIN32) && !defined(__wasm)
+# include <csignal>
# include <unistd.h>
+# define HAS_ALARM
#endif
#include "../minisat/Solver.h"
@@ -84,7 +85,7 @@ bool ezMiniSAT::eliminated(int idx)
}
#endif
-#ifndef _WIN32
+#if defined(HAS_ALARM)
ezMiniSAT *ezMiniSAT::alarmHandlerThis = NULL;
clock_t ezMiniSAT::alarmHandlerTimeout = 0;
@@ -183,7 +184,7 @@ contradiction:
#endif
}
-#ifndef _WIN32
+#if defined(HAS_ALARM)
struct sigaction sig_action;
struct sigaction old_sig_action;
int old_alarm_timeout = 0;
@@ -202,7 +203,7 @@ contradiction:
bool foundSolution = minisatSolver->solve(assumps);
-#ifndef _WIN32
+#if defined(HAS_ALARM)
if (solverTimeout > 0) {
if (alarmHandlerTimeout == 0)
solverTimoutStatus = true;
diff --git a/libs/minisat/00_PATCH_wasm.patch b/libs/minisat/00_PATCH_wasm.patch
new file mode 100644
index 000000000..0bcff7d77
--- /dev/null
+++ b/libs/minisat/00_PATCH_wasm.patch
@@ -0,0 +1,34 @@
+--- System.cc
++++ System.cc
+@@ -101,7 +101,7 @@ double Minisat::memUsedPeak(bool) { return 0; }
+ #endif
+
+
+-#if !defined(_MSC_VER) && !defined(__MINGW32__)
++#if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__wasm)
+ void Minisat::limitMemory(uint64_t max_mem_mb)
+ {
+ // FIXME: OpenBSD does not support RLIMIT_AS. Not sure how well RLIMIT_DATA works instead.
+@@ -133,7 +133,7 @@ void Minisat::limitMemory(uint64_t /*max_mem_mb*/)
+ #endif
+
+
+-#if !defined(_MSC_VER) && !defined(__MINGW32__)
++#if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__wasm)
+ void Minisat::limitTime(uint32_t max_cpu_time)
+ {
+ if (max_cpu_time != 0){
+@@ -156,9 +156,13 @@ void Minisat::limitTime(uint32_t /*max_cpu_time*/)
+
+ void Minisat::sigTerm(void handler(int))
+ {
++#if defined(__wasm)
++ (void)handler;
++#else
+ signal(SIGINT, handler);
+ signal(SIGTERM,handler);
+ #ifdef SIGXCPU
+ signal(SIGXCPU,handler);
+ #endif
++#endif
+ }
diff --git a/libs/minisat/00_UPDATE.sh b/libs/minisat/00_UPDATE.sh
index ea26215ab..51107e450 100755
--- a/libs/minisat/00_UPDATE.sh
+++ b/libs/minisat/00_UPDATE.sh
@@ -16,4 +16,4 @@ patch -p0 < 00_PATCH_mkLit_default_arg.patch
patch -p0 < 00_PATCH_remove_zlib.patch
patch -p0 < 00_PATCH_no_fpu_control.patch
patch -p0 < 00_PATCH_typofixes.patch
-
+patch -p0 < 00_PATCH_wasm.patch
diff --git a/libs/minisat/System.cc b/libs/minisat/System.cc
index 1921a1d71..345be8c4c 100644
--- a/libs/minisat/System.cc
+++ b/libs/minisat/System.cc
@@ -101,7 +101,7 @@ double Minisat::memUsedPeak(bool) { return 0; }
#endif
-#if !defined(_MSC_VER) && !defined(__MINGW32__)
+#if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__wasm)
void Minisat::limitMemory(uint64_t max_mem_mb)
{
// FIXME: OpenBSD does not support RLIMIT_AS. Not sure how well RLIMIT_DATA works instead.
@@ -133,7 +133,7 @@ void Minisat::limitMemory(uint64_t /*max_mem_mb*/)
#endif
-#if !defined(_MSC_VER) && !defined(__MINGW32__)
+#if !defined(_MSC_VER) && !defined(__MINGW32__) && !defined(__wasm)
void Minisat::limitTime(uint32_t max_cpu_time)
{
if (max_cpu_time != 0){
@@ -156,9 +156,13 @@ void Minisat::limitTime(uint32_t /*max_cpu_time*/)
void Minisat::sigTerm(void handler(int))
{
+#if defined(__wasm)
+ (void)handler;
+#else
signal(SIGINT, handler);
signal(SIGTERM,handler);
#ifdef SIGXCPU
signal(SIGXCPU,handler);
#endif
+#endif
}