mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-03 21:09:12 +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