2
0
Эх сурвалжийг харах

Emscripten build support.

woollybah 10 жил өмнө
parent
commit
ab45a575bc

+ 2 - 0
appstub.mod/appstub.bmx

@@ -62,6 +62,8 @@ Import "-framework Carbon"
 Import "appstub.win32.c"
 ?Linux
 Import "appstub.linux.c"
+?emscripten
+Import "appstub.linux.c"
 ?
 
 Extern

+ 11 - 1
blitz.mod/blitz.bmx

@@ -46,10 +46,20 @@ ModuleInfo "History: Lotsa little tidyups"
 ModuleInfo "History: 1.04 Release"
 ModuleInfo "History: Fixed C Compiler warnings"
 
-?Not android
+?win32
+ModuleInfo "CC_OPTS: -DGC_THREADS -DPARALLEL_MARK -DATOMIC_UNCOLLECTABLE"
+?macos
+ModuleInfo "CC_OPTS: -DGC_THREADS -DPARALLEL_MARK -DATOMIC_UNCOLLECTABLE"
+?linuxx86
+ModuleInfo "CC_OPTS: -DGC_THREADS -DPARALLEL_MARK -DATOMIC_UNCOLLECTABLE"
+?linuxx64
+ModuleInfo "CC_OPTS: -DGC_THREADS -DPARALLEL_MARK -DATOMIC_UNCOLLECTABLE"
+?raspberrypi
 ModuleInfo "CC_OPTS: -DGC_THREADS -DPARALLEL_MARK -DATOMIC_UNCOLLECTABLE"
 ?android
 ModuleInfo "CC_OPTS: -DGC_THREADS -DATOMIC_UNCOLLECTABLE"
+?emscripten
+ModuleInfo "CC_OPTS: -DATOMIC_UNCOLLECTABLE"
 ?
 
 Import "blitz_app.c"

+ 2 - 0
blitz.mod/blitz.h

@@ -24,7 +24,9 @@
 
 #include "blitz_types.h"
 #include "blitz_memory.h"
+#ifndef __EMSCRIPTEN__
 #include "blitz_thread.h"
+#endif
 #include "blitz_gc.h"
 #include "blitz_ex.h"
 #include "blitz_cclib.h"

+ 54 - 0
blitz.mod/blitz_app.c

@@ -173,6 +173,60 @@ int bbIsMainThread(){
 	return pthread_self()==_mainThread;
 }
 
+#elif __EMSCRIPTEN__
+
+#include <unistd.h>
+//#include <pthread.h>
+#include <limits.h>
+#include <signal.h>
+#include <sys/time.h>
+#include <sys/sysinfo.h>
+
+static int base_time;
+//static pthread_t _mainThread;
+
+static void startup(){
+	struct sysinfo info;
+	
+	//_mainThread=pthread_self();
+
+	//sysinfo( &info );
+	base_time=bbMilliSecs()-info.uptime*1000;
+}
+
+//***** ThreadSafe! *****
+void bbDelay( int millis ){
+	int i,e;
+	
+	if( millis<0 ) return;
+
+	e=bbMilliSecs()+millis;
+	
+	for( i=0;;++i ){
+		int t=e-bbMilliSecs();
+		if( t<=0 ){
+			if( !i ) usleep( 0 );	//always sleep at least once.
+			break;
+		}
+		usleep( t*1000 );
+	}
+}
+
+//***** ThreadSafe! *****
+int bbMilliSecs(){
+	int t;
+	struct timeval tv;
+	gettimeofday(&tv,0);
+	t=tv.tv_sec*1000;
+	t+=tv.tv_usec/1000;
+	return t-base_time;
+}
+
+int bbIsMainThread(){
+	return 1;
+//	return pthread_self()==_mainThread;
+}
+
 #endif
 
 void bbStartup( int argc,char *argv[],void *dummy1,void *dummy2 ){

+ 10 - 0
blitz.mod/blitz_string.c

@@ -620,6 +620,7 @@ BBString *bbStringJoin( BBString *sep,BBArray *bits ){
 	return str;
 }
 #ifndef __ANDROID__
+#ifndef __EMSCRIPTEN__
 static void mktmp( void *p ){
 	static AO_t i;
 	static void *bufs[32];
@@ -628,6 +629,15 @@ static void mktmp( void *p ){
 	bufs[n]=p;
 }
 #else
+static void mktmp( void *p ){
+	static int i;
+	static void *bufs[32];
+	int n=++i & 31;
+	bbMemFree( bufs[n] );
+	bufs[n]=p;
+}
+#endif
+#else
 static void mktmp( void *p ){
 	static int i;
 	static void *bufs[32];

+ 0 - 0
blitz.mod/blitz_thread.h