Add specific lib code for Nintendo Switch
This commit is contained in:
parent
c40ececccb
commit
8a0bff973f
7 changed files with 40 additions and 8 deletions
|
|
@ -819,7 +819,8 @@ iterator walkDir*(dir: string; relative=false): tuple[kind: PathComponent, path:
|
||||||
y = dir / y
|
y = dir / y
|
||||||
var k = pcFile
|
var k = pcFile
|
||||||
|
|
||||||
when defined(linux) or defined(macosx) or defined(bsd) or defined(genode):
|
when defined(linux) or defined(macosx) or
|
||||||
|
defined(bsd) or defined(genode) or defined(nintendoswitch):
|
||||||
if x.d_type != DT_UNKNOWN:
|
if x.d_type != DT_UNKNOWN:
|
||||||
if x.d_type == DT_DIR: k = pcDir
|
if x.d_type == DT_DIR: k = pcDir
|
||||||
if x.d_type == DT_LNK:
|
if x.d_type == DT_LNK:
|
||||||
|
|
@ -1285,7 +1286,7 @@ elif defined(windows):
|
||||||
|
|
||||||
elif not defined(createNimRtl) and
|
elif not defined(createNimRtl) and
|
||||||
not(defined(posix) and appType == "lib") and
|
not(defined(posix) and appType == "lib") and
|
||||||
not defined(genode):
|
not defined(genode) and not defined(nintendoswitch):
|
||||||
# On Posix, there is no portable way to get the command line from a DLL.
|
# On Posix, there is no portable way to get the command line from a DLL.
|
||||||
var
|
var
|
||||||
cmdCount {.importc: "cmdCount".}: cint
|
cmdCount {.importc: "cmdCount".}: cint
|
||||||
|
|
@ -1439,7 +1440,7 @@ proc getAppFilename*(): string {.rtl, extern: "nos$1", tags: [ReadIOEffect].} =
|
||||||
result = getApplAux("/proc/self/exe")
|
result = getApplAux("/proc/self/exe")
|
||||||
elif defined(solaris):
|
elif defined(solaris):
|
||||||
result = getApplAux("/proc/" & $getpid() & "/path/a.out")
|
result = getApplAux("/proc/" & $getpid() & "/path/a.out")
|
||||||
elif defined(genode):
|
elif defined(genode) or defined(nintendoswitch):
|
||||||
raiseOSError(OSErrorCode(-1), "POSIX command line not supported")
|
raiseOSError(OSErrorCode(-1), "POSIX command line not supported")
|
||||||
elif defined(freebsd) or defined(dragonfly):
|
elif defined(freebsd) or defined(dragonfly):
|
||||||
result = getApplFreebsd()
|
result = getApplFreebsd()
|
||||||
|
|
|
||||||
|
|
@ -312,6 +312,8 @@ else:
|
||||||
include ioselects/ioselectors_poll # need to replace it with event ports
|
include ioselects/ioselectors_poll # need to replace it with event ports
|
||||||
elif defined(genode):
|
elif defined(genode):
|
||||||
include ioselects/ioselectors_select # TODO: use the native VFS layer
|
include ioselects/ioselectors_select # TODO: use the native VFS layer
|
||||||
|
elif defined(nintendoswitch):
|
||||||
|
include ioselects/ioselectors_select
|
||||||
else:
|
else:
|
||||||
include ioselects/ioselectors_poll
|
include ioselects/ioselectors_poll
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ when defined(windows):
|
||||||
SIGTERM = cint(15)
|
SIGTERM = cint(15)
|
||||||
elif defined(macosx) or defined(linux) or defined(freebsd) or
|
elif defined(macosx) or defined(linux) or defined(freebsd) or
|
||||||
defined(openbsd) or defined(netbsd) or defined(solaris) or
|
defined(openbsd) or defined(netbsd) or defined(solaris) or
|
||||||
defined(dragonfly):
|
defined(dragonfly) or defined(nintendoswitch):
|
||||||
const
|
const
|
||||||
SIGABRT = cint(6)
|
SIGABRT = cint(6)
|
||||||
SIGFPE = cint(8)
|
SIGFPE = cint(8)
|
||||||
|
|
|
||||||
|
|
@ -167,6 +167,24 @@ elif defined(genode):
|
||||||
proc nimGetProcAddr(lib: LibHandle, name: cstring): ProcAddr {.
|
proc nimGetProcAddr(lib: LibHandle, name: cstring): ProcAddr {.
|
||||||
error: "nimGetProcAddr not implemented".}
|
error: "nimGetProcAddr not implemented".}
|
||||||
|
|
||||||
|
elif defined(nintendoswitch):
|
||||||
|
proc nimUnloadLibrary(lib: LibHandle) =
|
||||||
|
stderr.rawWrite("nimUnLoadLibrary not implemented")
|
||||||
|
stderr.rawWrite("\n")
|
||||||
|
quit(1)
|
||||||
|
|
||||||
|
proc nimLoadLibrary(path: string): LibHandle =
|
||||||
|
stderr.rawWrite("nimLoadLibrary not implemented")
|
||||||
|
stderr.rawWrite("\n")
|
||||||
|
quit(1)
|
||||||
|
|
||||||
|
|
||||||
|
proc nimGetProcAddr(lib: LibHandle, name: cstring): ProcAddr =
|
||||||
|
stderr.rawWrite("nimGetProAddr not implemented")
|
||||||
|
stderr.write(name)
|
||||||
|
stderr.rawWrite("\n")
|
||||||
|
quit(1)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
{.error: "no implementation for dyncalls".}
|
{.error: "no implementation for dyncalls".}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,13 +31,14 @@ type
|
||||||
vm, ## Some Virtual machine: Nim's VM or JavaScript
|
vm, ## Some Virtual machine: Nim's VM or JavaScript
|
||||||
avr, ## AVR based processor
|
avr, ## AVR based processor
|
||||||
msp430, ## TI MSP430 microcontroller
|
msp430, ## TI MSP430 microcontroller
|
||||||
riscv64 ## RISC-V 64-bit processor
|
riscv64, ## RISC-V 64-bit processor
|
||||||
|
armv8a57 ## Arm Cortex A57 64-bit processor for Nintendo Switch
|
||||||
|
|
||||||
OsPlatform* {.pure.} = enum ## the OS this program will run on.
|
OsPlatform* {.pure.} = enum ## the OS this program will run on.
|
||||||
none, dos, windows, os2, linux, morphos, skyos, solaris,
|
none, dos, windows, os2, linux, morphos, skyos, solaris,
|
||||||
irix, netbsd, freebsd, openbsd, aix, palmos, qnx, amiga,
|
irix, netbsd, freebsd, openbsd, aix, palmos, qnx, amiga,
|
||||||
atari, netware, macos, macosx, haiku, android, js, nimVM,
|
atari, netware, macos, macosx, haiku, android, js, nimVM,
|
||||||
standalone
|
standalone, nintendoswitch
|
||||||
|
|
||||||
const
|
const
|
||||||
targetOS* = when defined(windows): OsPlatform.windows
|
targetOS* = when defined(windows): OsPlatform.windows
|
||||||
|
|
@ -64,6 +65,7 @@ const
|
||||||
elif defined(js): OsPlatform.js
|
elif defined(js): OsPlatform.js
|
||||||
elif defined(nimVM): OsPlatform.nimVM
|
elif defined(nimVM): OsPlatform.nimVM
|
||||||
elif defined(standalone): OsPlatform.standalone
|
elif defined(standalone): OsPlatform.standalone
|
||||||
|
elif defined(nintendoswitch): OsPlatform.nintendoswitch
|
||||||
else: OsPlatform.none
|
else: OsPlatform.none
|
||||||
## the OS this program will run on.
|
## the OS this program will run on.
|
||||||
|
|
||||||
|
|
@ -86,5 +88,6 @@ const
|
||||||
elif defined(avr): CpuPlatform.avr
|
elif defined(avr): CpuPlatform.avr
|
||||||
elif defined(msp430): CpuPlatform.msp430
|
elif defined(msp430): CpuPlatform.msp430
|
||||||
elif defined(riscv64): CpuPlatform.riscv64
|
elif defined(riscv64): CpuPlatform.riscv64
|
||||||
|
elif defined(armv8a57): CpuPlatform.armv8a57
|
||||||
else: CpuPlatform.none
|
else: CpuPlatform.none
|
||||||
## the CPU this program will run on.
|
## the CPU this program will run on.
|
||||||
|
|
|
||||||
|
|
@ -419,7 +419,7 @@ proc setStdIoUnbuffered() =
|
||||||
when declared(stdout):
|
when declared(stdout):
|
||||||
proc echoBinSafe(args: openArray[string]) {.compilerProc.} =
|
proc echoBinSafe(args: openArray[string]) {.compilerProc.} =
|
||||||
# flockfile deadlocks some versions of Android 5.x.x
|
# flockfile deadlocks some versions of Android 5.x.x
|
||||||
when not defined(windows) and not defined(android):
|
when not defined(windows) and not defined(android) and not defined(nintendoswitch):
|
||||||
proc flockfile(f: File) {.importc, noDecl.}
|
proc flockfile(f: File) {.importc, noDecl.}
|
||||||
proc funlockfile(f: File) {.importc, noDecl.}
|
proc funlockfile(f: File) {.importc, noDecl.}
|
||||||
flockfile(stdout)
|
flockfile(stdout)
|
||||||
|
|
@ -428,7 +428,7 @@ when declared(stdout):
|
||||||
const linefeed = "\n" # can be 1 or more chars
|
const linefeed = "\n" # can be 1 or more chars
|
||||||
discard c_fwrite(linefeed.cstring, linefeed.len, 1, stdout)
|
discard c_fwrite(linefeed.cstring, linefeed.len, 1, stdout)
|
||||||
discard c_fflush(stdout)
|
discard c_fflush(stdout)
|
||||||
when not defined(windows) and not defined(android):
|
when not defined(windows) and not defined(android) and not defined(nintendoswitch):
|
||||||
funlockfile(stdout)
|
funlockfile(stdout)
|
||||||
|
|
||||||
{.pop.}
|
{.pop.}
|
||||||
|
|
|
||||||
|
|
@ -185,6 +185,14 @@ else:
|
||||||
abi: array[56 div sizeof(clong), clong]
|
abi: array[56 div sizeof(clong), clong]
|
||||||
ThreadVarSlot {.importc: "pthread_key_t",
|
ThreadVarSlot {.importc: "pthread_key_t",
|
||||||
header: "<sys/types.h>".} = distinct cuint
|
header: "<sys/types.h>".} = distinct cuint
|
||||||
|
elif defined(nintendoswitch):
|
||||||
|
type
|
||||||
|
SysThread* {.importc: "pthread_t",
|
||||||
|
header: "<sys/types.h>" .} = distinct cuint
|
||||||
|
Pthread_attr {.importc: "pthread_attr_t",
|
||||||
|
header: "<sys/types.h>".} = object
|
||||||
|
ThreadVarSlot {.importc: "pthread_key_t",
|
||||||
|
header: "<sys/types.h>".} = distinct cuint
|
||||||
else:
|
else:
|
||||||
type
|
type
|
||||||
SysThread* {.importc: "pthread_t", header: "<sys/types.h>".} = object
|
SysThread* {.importc: "pthread_t", header: "<sys/types.h>".} = object
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue