ソースを参照

Added NX platform support.

woollybah 6 年 前
コミット
e06ab5fe00

+ 2 - 0
appstub.mod/appstub.bmx

@@ -66,6 +66,8 @@ Import "appstub.win32.c"
 Import "appstub.linux.c"
 Import "appstub.linux.c"
 ?emscripten
 ?emscripten
 Import "appstub.linux.c"
 Import "appstub.linux.c"
+?nx
+Import "appstub.nx.c"
 ?
 ?
 
 
 Extern
 Extern

+ 24 - 0
appstub.mod/appstub.nx.c

@@ -0,0 +1,24 @@
+#include <brl.mod/blitz.mod/blitz.h>
+
+#include <signal.h>
+#include <unistd.h>
+#include <switch.h>
+
+int __bb_brl_appstub_appstub();
+
+int main( int argc,char *argv[] ){
+	
+	socketInitializeDefault();
+	nxlinkStdio();
+
+	signal( SIGPIPE,SIG_IGN );
+	
+	bbStartup( argc,argv,0,0 );
+	
+	__bb_brl_appstub_appstub();
+
+	socketExit();
+
+	return 0;
+}
+

+ 2 - 1
blitz.mod/bdwgc/include/private/gc_priv.h

@@ -527,7 +527,8 @@ EXTERN_C_BEGIN
                                    PCR_allSigsBlocked, \
                                    PCR_allSigsBlocked, \
                                    PCR_waitForever)
                                    PCR_waitForever)
 # else
 # else
-#   if defined(NN_PLATFORM_CTR) || defined(NINTENDO_SWITCH) \
+//|| defined(NINTENDO_SWITCH) 
+#   if defined(NN_PLATFORM_CTR) \
        || defined(GC_WIN32_THREADS) || defined(GC_PTHREADS)
        || defined(GC_WIN32_THREADS) || defined(GC_PTHREADS)
       GC_INNER void GC_stop_world(void);
       GC_INNER void GC_stop_world(void);
       GC_INNER void GC_start_world(void);
       GC_INNER void GC_start_world(void);

+ 7 - 7
blitz.mod/bdwgc/include/private/gcconfig.h

@@ -2305,10 +2305,10 @@ EXTERN_C_BEGIN
 #     define DYNAMIC_LOADING
 #     define DYNAMIC_LOADING
 #   endif
 #   endif
 #   ifdef NINTENDO_SWITCH
 #   ifdef NINTENDO_SWITCH
-      extern int __bss_end[];
+      extern int __bss_end__[];
 #     define NO_HANDLE_FORK
 #     define NO_HANDLE_FORK
 #     define DATASTART (ptr_t)ALIGNMENT /* cannot be null */
 #     define DATASTART (ptr_t)ALIGNMENT /* cannot be null */
-#     define DATAEND (ptr_t)(&__bss_end)
+#     define DATAEND (ptr_t)(&__bss_end__)
       void *switch_get_stack_bottom(void);
       void *switch_get_stack_bottom(void);
 #     define STACKBOTTOM ((ptr_t)switch_get_stack_bottom())
 #     define STACKBOTTOM ((ptr_t)switch_get_stack_bottom())
 #   endif
 #   endif
@@ -3246,9 +3246,9 @@ EXTERN_C_BEGIN
 #   error --> inconsistent configuration
 #   error --> inconsistent configuration
 # endif
 # endif
 #endif /* !CPPCHECK */
 #endif /* !CPPCHECK */
-
+//|| defined(NINTENDO_SWITCH) 
 #if defined(PCR) || defined(GC_WIN32_THREADS) || defined(GC_PTHREADS) \
 #if defined(PCR) || defined(GC_WIN32_THREADS) || defined(GC_PTHREADS) \
-    || defined(NN_PLATFORM_CTR) || defined(NINTENDO_SWITCH) \
+    || defined(NN_PLATFORM_CTR) \
     || defined(SN_TARGET_ORBIS) || defined(SN_TARGET_PS3) \
     || defined(SN_TARGET_ORBIS) || defined(SN_TARGET_PS3) \
     || defined(SN_TARGET_PSP2)
     || defined(SN_TARGET_PSP2)
 # define THREADS
 # define THREADS
@@ -3582,9 +3582,9 @@ EXTERN_C_BEGIN
 # elif defined(SN_TARGET_PSP2)
 # elif defined(SN_TARGET_PSP2)
     void *psp2_get_mem(size_t bytes);
     void *psp2_get_mem(size_t bytes);
 #   define GET_MEM(bytes) (struct hblk*)psp2_get_mem(bytes)
 #   define GET_MEM(bytes) (struct hblk*)psp2_get_mem(bytes)
-# elif defined(NINTENDO_SWITCH)
-    void *switch_get_mem(size_t bytes);
-#   define GET_MEM(bytes) (struct hblk*)switch_get_mem(bytes)
+//# elif defined(NINTENDO_SWITCH)
+//    void *switch_get_mem(size_t bytes);
+//#   define GET_MEM(bytes) (struct hblk*)switch_get_mem(bytes)
 # elif defined(HAIKU)
 # elif defined(HAIKU)
     ptr_t GC_haiku_get_mem(size_t bytes);
     ptr_t GC_haiku_get_mem(size_t bytes);
 #   define GET_MEM(bytes) (struct hblk*)GC_haiku_get_mem(bytes)
 #   define GET_MEM(bytes) (struct hblk*)GC_haiku_get_mem(bytes)

+ 3 - 0
blitz.mod/bdwgc/misc.c

@@ -1689,6 +1689,9 @@ GC_API void GC_CALL GC_enable_incremental(void)
 # elif defined(NINTENDO_SWITCH)
 # elif defined(NINTENDO_SWITCH)
     int switch_log_write(const char* text, int length);
     int switch_log_write(const char* text, int length);
 #   define WRITE(level, buf, len) switch_log_write(buf, len)
 #   define WRITE(level, buf, len) switch_log_write(buf, len)
+# define GC_stdout 0
+# define GC_stderr 0
+# define GC_log 0
 
 
 #else
 #else
 # if !defined(AMIGA) && !defined(MSWIN_XBOX1) && !defined(SN_TARGET_ORBIS) \
 # if !defined(AMIGA) && !defined(MSWIN_XBOX1) && !defined(SN_TARGET_ORBIS) \

+ 2 - 2
blitz.mod/bdwgc/os_dep.c

@@ -2104,13 +2104,13 @@ void GC_register_data_segments(void)
 # endif /* !MSWIN32 && !MSWINCE */
 # endif /* !MSWIN32 && !MSWINCE */
 # endif /* !OS2 */
 # endif /* !OS2 */
 
 
+//&& !defined(NINTENDO_SWITCH) 
 /*
 /*
  * Auxiliary routines for obtaining memory from OS.
  * Auxiliary routines for obtaining memory from OS.
  */
  */
-
 # if !defined(OS2) && !defined(PCR) && !defined(AMIGA) \
 # if !defined(OS2) && !defined(PCR) && !defined(AMIGA) \
      && !defined(USE_WINALLOC) && !defined(MACOS) && !defined(DOS4GW) \
      && !defined(USE_WINALLOC) && !defined(MACOS) && !defined(DOS4GW) \
-     && !defined(NINTENDO_SWITCH) && !defined(NONSTOP) \
+     && !defined(NONSTOP) \
      && !defined(SN_TARGET_ORBIS) && !defined(SN_TARGET_PS3) \
      && !defined(SN_TARGET_ORBIS) && !defined(SN_TARGET_PS3) \
      && !defined(SN_TARGET_PSP2) && !defined(RTEMS) && !defined(__CC_ARM)
      && !defined(SN_TARGET_PSP2) && !defined(RTEMS) && !defined(__CC_ARM)
 
 

+ 5 - 1
blitz.mod/blitz.bmx

@@ -71,6 +71,8 @@ ModuleInfo "CC_OPTS: -DATOMIC_UNCOLLECTABLE"
 ModuleInfo "CC_OPTS: -DGC_THREADS -DATOMIC_UNCOLLECTABLE"
 ModuleInfo "CC_OPTS: -DGC_THREADS -DATOMIC_UNCOLLECTABLE"
 ?musl
 ?musl
 ModuleInfo "CC_OPTS: -DNO_GETCONTEXT"
 ModuleInfo "CC_OPTS: -DNO_GETCONTEXT"
+?nx
+ModuleInfo "CC_OPTS: -DATOMIC_UNCOLLECTABLE -DNN_BUILD_TARGET_PLATFORM_NX"
 ?
 ?
 
 
 ?debug
 ?debug
@@ -148,7 +150,9 @@ Import "bdwgc/gc_dlopen.c"
 Import "bdwgc/backgraph.c"
 Import "bdwgc/backgraph.c"
 Import "bdwgc/win32_threads.c"
 Import "bdwgc/win32_threads.c"
 Import "bdwgc/thread_local_alloc.c"	'bdwgc only? not gc6.7
 Import "bdwgc/thread_local_alloc.c"	'bdwgc only? not gc6.7
-
+?nx
+Import "blitz_nx.c"
+?
 Import "tree/tree.c"
 Import "tree/tree.c"
 
 
 Extern
 Extern

+ 61 - 0
blitz.mod/blitz_app.c

@@ -232,6 +232,62 @@ int bbIsMainThread(){
 //	return pthread_self()==_mainThread;
 //	return pthread_self()==_mainThread;
 }
 }
 
 
+#elif __SWITCH__
+
+#include <unistd.h>
+//#include <pthread.h>
+#include <limits.h>
+#include <signal.h>
+#include <sys/time.h>
+//#include <sys/sysinfo.h>
+#include <switch.h>
+
+static int base_time;
+//static pthread_t _mainThread;
+
+static void startup(){
+//	struct sysinfo info;
+	
+	//_mainThread=pthread_self();
+
+	// TODO : appears as "undefined" when linking... need this for millisecs support.
+	//sysinfo( &info );
+	base_time=0;//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
 #endif
 
 
 void bbStartup( int argc,char *argv[],void *dummy1,void *dummy2 ){
 void bbStartup( int argc,char *argv[],void *dummy1,void *dummy2 ){
@@ -384,6 +440,11 @@ void bbStartup( int argc,char *argv[],void *dummy1,void *dummy2 ){
 	}
 	}
 	
 	
 	chdir( bbTmpUTF8String( bbAppDir ) );
 	chdir( bbTmpUTF8String( bbAppDir ) );
+
+#elif __SWITCH__
+
+//	bbThreadStartup();
+	bbGCStartup();
 	
 	
 #endif
 #endif
 
 

+ 12 - 0
blitz.mod/blitz_ex.c

@@ -36,6 +36,18 @@ void setExStack( BBExStack *st ){
 	TlsSetValue( exKey(),st );
 	TlsSetValue( exKey(),st );
 }
 }
 
 
+#elif __SWITCH__
+
+BBExStack *getExStack(){
+	// TODO
+	//return (BBExStack*)pthread_getspecific( exKey() );
+	return NULL;
+}
+
+void setExStack( BBExStack *st ){
+	//pthread_setspecific( exKey(),st );
+}
+
 #else
 #else
 
 
 #include <pthread.h>
 #include <pthread.h>

+ 1 - 1
blitz.mod/blitz_gc.c

@@ -61,7 +61,7 @@ void bbGCStartup( void *spTop ){
 #endif
 #endif
 */
 */
 	GC_INIT();
 	GC_INIT();
-#ifndef __EMSCRIPTEN__
+#if !defined(__EMSCRIPTEN__) && !defined(__SWITCH__)
 	GC_allow_register_threads();
 	GC_allow_register_threads();
 #endif
 #endif
 	GC_set_warn_proc( gc_warn_proc );
 	GC_set_warn_proc( gc_warn_proc );

+ 11 - 0
blitz.mod/blitz_nx.c

@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+extern void * __tls_end;
+
+int switch_log_write(const char* text, int length) {
+	return 0;
+}
+
+void *switch_get_stack_bottom(void) {
+	return __tls_end;
+}

+ 7 - 0
blitz.mod/blitz_thread.c

@@ -201,6 +201,11 @@ void bbThreadUnregister( BBThread * thread ) {
 	BB_UNLOCK
 	BB_UNLOCK
 }
 }
 
 
+//#elif __SWITCH__
+
+// TODO
+
+
 //***** POSIX threads *****
 //***** POSIX threads *****
 #else
 #else
 
 
@@ -211,6 +216,8 @@ void bbThreadUnregister( BBThread * thread ) {
 #define MUTEX_RECURSIVE 1
 #define MUTEX_RECURSIVE 1
 #elif __APPLE__
 #elif __APPLE__
 #define MUTEX_RECURSIVE 2
 #define MUTEX_RECURSIVE 2
+#elif __SWITCH__
+#define MUTEX_RECURSIVE 1
 #endif
 #endif
 
 
 pthread_mutexattr_t _bb_mutexattr;
 pthread_mutexattr_t _bb_mutexattr;

+ 17 - 0
blitz.mod/blitz_thread.h

@@ -27,6 +27,23 @@ typedef HANDLE bb_sem_t;
 #define bb_sem_wait(SEMPTR) WaitForSingleObject(*(SEMPTR),INFINITE)
 #define bb_sem_wait(SEMPTR) WaitForSingleObject(*(SEMPTR),INFINITE)
 #define bb_sem_post(SEMPTR) ReleaseSemaphore(*(SEMPTR),1,0)
 #define bb_sem_post(SEMPTR) ReleaseSemaphore(*(SEMPTR),1,0)
 
 
+#elif __SWITCH__
+#include<switch/kernel/mutex.h>
+#include<switch/kernel/semaphore.h>
+
+typedef Mutex bb_mutex_t;
+#define bb_mutex_init(MUTPTR) (mutexInit(MUTPTR),1)
+#define bb_mutex_destroy(MUTPTR)
+#define bb_mutex_lock(MUTPTR) mutexLock(MUTPTR)
+#define bb_mutex_unlock(MUTPTR) mutexUnlock(MUTPTR)
+#define bb_mutex_trylock(MUTPTR) (mutexTryLock(MUTPTR)!=0)
+
+typedef Semaphore bb_sem_t;
+#define bb_sem_init(SEMPTR,COUNT) (semaphoreInit( (SEMPTR), (COUNT) ), 1)
+#define bb_sem_destroy(SEMPTR)
+#define bb_sem_wait(SEMPTR) semaphoreWait( (SEMPTR) )
+#define bb_sem_post(SEMPTR) semaphoreSignal( (SEMPTR) )
+
 #else
 #else
 
 
 #include <pthread.h>
 #include <pthread.h>

+ 1 - 1
glmax2d.mod/glmax2d.bmx

@@ -33,7 +33,7 @@ ModuleInfo "History: Ripped out a bunch of dead code"
 ModuleInfo "History: 1.05 Release"
 ModuleInfo "History: 1.05 Release"
 ModuleInfo "History: Added checks to prevent invalid textures deletes"
 ModuleInfo "History: Added checks to prevent invalid textures deletes"
 
 
-?Not opengles
+?Not opengles And Not nx
 
 
 Import BRL.Max2D
 Import BRL.Max2D
 Import BRL.GLGraphics
 Import BRL.GLGraphics

+ 7 - 4
socket.mod/socket.bmx

@@ -34,6 +34,9 @@ Function ioctl_( socket,opt,buf:Byte Ptr )="ioctl"
 ?emscripten
 ?emscripten
 Const FIONREAD=$541b
 Const FIONREAD=$541b
 Function ioctl_( socket,opt,buf:Byte Ptr )="ioctl"
 Function ioctl_( socket,opt,buf:Byte Ptr )="ioctl"
+?nx
+Const FIONREAD=$4004667F
+Function ioctl_( socket,opt,buf:Byte Ptr )="ioctl"
 ?
 ?
 End Extern
 End Extern
 
 
@@ -91,8 +94,8 @@ Type TSocket
 		Return True
 		Return True
 	End Method
 	End Method
 	
 	
-	Method Connect:Int( addrInfo:TAddrInfo )
-		If connect_( _socket, addrInfo.infoPtr )<0 Return False
+	Method Connect:Int( AddrInfo:TAddrInfo )
+		If connect_( _socket, AddrInfo.infoPtr )<0 Return False
 		UpdateLocalName
 		UpdateLocalName
 		UpdateRemoteName
 		UpdateRemoteName
 		Return True
 		Return True
@@ -262,8 +265,8 @@ ip address could not be reached.
 In the case of TCP sockets, #ConnectSocket will also fail if there is
 In the case of TCP sockets, #ConnectSocket will also fail if there is
 no application listening at the remote port.
 no application listening at the remote port.
 End Rem
 End Rem
-Function ConnectSocket( socket:TSocket, addrInfo:TAddrInfo )
-	Return socket.Connect( addrInfo )
+Function ConnectSocket( socket:TSocket, AddrInfo:TAddrInfo )
+	Return socket.Connect( AddrInfo )
 End Function
 End Function
 
 
 Rem
 Rem