Nintendo switch support (#8069)
* Add config section for Nintendo Switch * Add compiler configuration for Nintendo Switch and it's CPU * Add specific lib code for Nintendo Switch * Add GC support for Nintendo Switch * Update changelog for Nintendo Switch * Update changelog with more info about fixed paths * Cleaned up GC memory management a bit * Relocate docs for Switch * Rename aarch64NoneElfGcc to nintendoSwitchGCC * Remove armv8a57 * Fix installer.ini * Reuse code in linux and amd64 * Add posix defs for nintendo switch * Add more defined sections for nintendo switch * Remove old comment * Add what's not supported for Nintendo Switch docs * Make nintendoswitch == posix * Remove DEVKITPRO references from nim.cfg * Make PR extccomp changes * Remove Result type alias * Add separate switch consts file * Update docs for nintendo switch * Fix travis errors with undefined consts and add correct wait.h procs
This commit is contained in:
parent
b74b16ffde
commit
559a7615ad
21 changed files with 1352 additions and 43 deletions
|
|
@ -137,6 +137,28 @@ when defined(posix):
|
|||
proc symAddr(lib: LibHandle, name: cstring): pointer =
|
||||
return dlsym(lib, name)
|
||||
|
||||
elif defined(nintendoswitch):
|
||||
#
|
||||
# =========================================================================
|
||||
# Nintendo switch DevkitPro sdk does not have these. Raise an error if called.
|
||||
# =========================================================================
|
||||
#
|
||||
|
||||
proc dlclose(lib: LibHandle) =
|
||||
raise newException(OSError, "dlclose not implemented on Nintendo Switch!")
|
||||
proc dlopen(path: cstring, mode: int): LibHandle =
|
||||
raise newException(OSError, "dlopen not implemented on Nintendo Switch!")
|
||||
proc dlsym(lib: LibHandle, name: cstring): pointer =
|
||||
raise newException(OSError, "dlsym not implemented on Nintendo Switch!")
|
||||
proc loadLib(path: string, global_symbols=false): LibHandle =
|
||||
raise newException(OSError, "loadLib not implemented on Nintendo Switch!")
|
||||
proc loadLib(): LibHandle =
|
||||
raise newException(OSError, "loadLib not implemented on Nintendo Switch!")
|
||||
proc unloadLib(lib: LibHandle) =
|
||||
raise newException(OSError, "unloadLib not implemented on Nintendo Switch!")
|
||||
proc symAddr(lib: LibHandle, name: cstring): pointer =
|
||||
raise newException(OSError, "symAddr not implemented on Nintendo Switch!")
|
||||
|
||||
elif defined(windows) or defined(dos):
|
||||
#
|
||||
# =======================================================================
|
||||
|
|
|
|||
|
|
@ -819,7 +819,8 @@ iterator walkDir*(dir: string; relative=false): tuple[kind: PathComponent, path:
|
|||
y = dir / y
|
||||
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_DIR: k = pcDir
|
||||
if x.d_type == DT_LNK:
|
||||
|
|
@ -1283,6 +1284,13 @@ elif defined(windows):
|
|||
if i < ownArgv.len and i >= 0: return TaintedString(ownArgv[i])
|
||||
raise newException(IndexError, "invalid index")
|
||||
|
||||
elif defined(nintendoswitch):
|
||||
proc paramStr*(i: int): TaintedString {.tags: [ReadIOEffect].} =
|
||||
raise newException(OSError, "paramStr is not implemented on Nintendo Switch")
|
||||
|
||||
proc paramCount*(): int {.tags: [ReadIOEffect].} =
|
||||
raise newException(OSError, "paramCount is not implemented on Nintendo Switch")
|
||||
|
||||
elif not defined(createNimRtl) and
|
||||
not(defined(posix) and appType == "lib") and
|
||||
not defined(genode):
|
||||
|
|
@ -1439,7 +1447,7 @@ proc getAppFilename*(): string {.rtl, extern: "nos$1", tags: [ReadIOEffect].} =
|
|||
result = getApplAux("/proc/self/exe")
|
||||
elif defined(solaris):
|
||||
result = getApplAux("/proc/" & $getpid() & "/path/a.out")
|
||||
elif defined(genode):
|
||||
elif defined(genode) or defined(nintendoswitch):
|
||||
raiseOSError(OSErrorCode(-1), "POSIX command line not supported")
|
||||
elif defined(freebsd) or defined(dragonfly):
|
||||
result = getApplFreebsd()
|
||||
|
|
|
|||
|
|
@ -597,7 +597,7 @@ proc quoteShellPosix*(s: string): string {.noSideEffect, rtl, extern: "nosp$1".}
|
|||
else:
|
||||
return "'" & s.replace("'", "'\"'\"'") & "'"
|
||||
|
||||
when defined(windows) or defined(posix):
|
||||
when defined(windows) or defined(posix) or defined(nintendoswitch):
|
||||
proc quoteShell*(s: string): string {.noSideEffect, rtl, extern: "nosp$1".} =
|
||||
## Quote ``s``, so it can be safely passed to shell.
|
||||
when defined(windows):
|
||||
|
|
|
|||
|
|
@ -312,6 +312,8 @@ else:
|
|||
include ioselects/ioselectors_poll # need to replace it with event ports
|
||||
elif defined(genode):
|
||||
include ioselects/ioselectors_select # TODO: use the native VFS layer
|
||||
elif defined(nintendoswitch):
|
||||
include ioselects/ioselectors_select
|
||||
else:
|
||||
include ioselects/ioselectors_poll
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue