mirror of
https://github.com/YosysHQ/yosys
synced 2025-07-24 05:08:56 +00:00
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.
This commit is contained in:
parent
bc380b0b56
commit
b43c282e4e
17 changed files with 167 additions and 30 deletions
|
@ -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;
|
||||
|
|
34
libs/minisat/00_PATCH_wasm.patch
Normal file
34
libs/minisat/00_PATCH_wasm.patch
Normal file
|
@ -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
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue