Add Zephyr Support (#19003)
* Porting Nim to run on Zephyr.
Includes changes to `std/net`.
Squashed commit of the following:
tweaking more memory / malloc things
revert back bitmasks
tweaking nim to use kernel heap as C malloc doesn't work
fixing socket polling on zephyr
cleanup getting maximum sockets for process or for rtos'es
reorganizing and fixing net for async / system
merge netlite changes back into nativesockets
merge netlite changes back into nativesockets
reverting native sockets back
tweaking nim / zephyr network
adding option to run 'net-lite' from linux
bridging zephyr's max connections
fixing net errors
fixing compilation with getAddrString
fixing compilation with getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ...
add note regarding incorrect FreeRTOS Sockadd_in fields
changing to NIM_STATIC_ASSERT
cleaning up the static_assert error messages
cleaning up the static_assert error messages
setting up static assert ftw!
testing compile time asserts
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
finding missing items (issue #18684)
fixup posix constants (issue #18684)
adding plumbing for zephyr os (issue #18684)
adding plumbing for zephyr os (issue #18684)
* fixing constant capitalizations
* remove extra debug prints and fix TSa_Family/cint issue
* remove extra debug prints and fix TSa_Family/cint issue
* Porting Nim to run on Zephyr.
Includes changes to `std/net`.
Squashed commit of the following:
tweaking more memory / malloc things
revert back bitmasks
tweaking nim to use kernel heap as C malloc doesn't work
fixing socket polling on zephyr
cleanup getting maximum sockets for process or for rtos'es
reorganizing and fixing net for async / system
merge netlite changes back into nativesockets
merge netlite changes back into nativesockets
reverting native sockets back
tweaking nim / zephyr network
adding option to run 'net-lite' from linux
bridging zephyr's max connections
fixing net errors
fixing compilation with getAddrString
fixing compilation with getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ...
add note regarding incorrect FreeRTOS Sockadd_in fields
changing to NIM_STATIC_ASSERT
cleaning up the static_assert error messages
cleaning up the static_assert error messages
setting up static assert ftw!
testing compile time asserts
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
finding missing items (issue #18684)
fixup posix constants (issue #18684)
adding plumbing for zephyr os (issue #18684)
adding plumbing for zephyr os (issue #18684)
* fixing constant capitalizations
* remove extra debug prints and fix TSa_Family/cint issue
* remove extra debug prints and fix TSa_Family/cint issue
* fixing PR issues
* Porting Nim to run on Zephyr.
Includes changes to `std/net`.
Squashed commit of the following:
tweaking more memory / malloc things
revert back bitmasks
tweaking nim to use kernel heap as C malloc doesn't work
fixing socket polling on zephyr
cleanup getting maximum sockets for process or for rtos'es
reorganizing and fixing net for async / system
merge netlite changes back into nativesockets
merge netlite changes back into nativesockets
reverting native sockets back
tweaking nim / zephyr network
adding option to run 'net-lite' from linux
bridging zephyr's max connections
fixing net errors
fixing compilation with getAddrString
fixing compilation with getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getAddrString
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ... getLocalAddr
experimenting with a nativesockets_lite ...
add note regarding incorrect FreeRTOS Sockadd_in fields
changing to NIM_STATIC_ASSERT
cleaning up the static_assert error messages
cleaning up the static_assert error messages
setting up static assert ftw!
testing compile time asserts
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
reworking Sockaddr objects to more closely match various platforms
finding missing items (issue #18684)
fixup posix constants (issue #18684)
adding plumbing for zephyr os (issue #18684)
adding plumbing for zephyr os (issue #18684)
* fixing constant capitalizations
* remove extra debug prints and fix TSa_Family/cint issue
* remove extra debug prints and fix TSa_Family/cint issue
* Remerge
* fixing constant capitalizations
* remove extra debug prints and fix TSa_Family/cint issue
* remove extra debug prints and fix TSa_Family/cint issue
* fixing PR issues
* fix maxDescriptors on zephyr/freertos
* move maxDescriptors to selector.nim -- fixes compile issue
* change realloc impl on zephyr to match ansi c behavior
* change realloc impl on zephyr to match ansi c behavior
* force compileOnly mode for tlwip
Co-authored-by: Jaremy J. Creechley <jaremy.creechley@wavebaselabs.com>
Co-authored-by: Jaremy Creechley <jaremy.creechley@panthalassa.com>
This commit is contained in:
parent
41d9918591
commit
141b76e365
20 changed files with 522 additions and 346 deletions
|
|
@ -142,14 +142,29 @@ proc c_sprintf*(buf, frmt: cstring): cint {.
|
|||
importc: "sprintf", header: "<stdio.h>", varargs, noSideEffect.}
|
||||
# we use it only in a way that cannot lead to security issues
|
||||
|
||||
proc c_malloc*(size: csize_t): pointer {.
|
||||
importc: "malloc", header: "<stdlib.h>".}
|
||||
proc c_calloc*(nmemb, size: csize_t): pointer {.
|
||||
importc: "calloc", header: "<stdlib.h>".}
|
||||
proc c_free*(p: pointer) {.
|
||||
importc: "free", header: "<stdlib.h>".}
|
||||
proc c_realloc*(p: pointer, newsize: csize_t): pointer {.
|
||||
importc: "realloc", header: "<stdlib.h>".}
|
||||
when defined(zephyr) and not defined(zephyrUseLibcMalloc):
|
||||
proc c_malloc*(size: csize_t): pointer {.
|
||||
importc: "k_malloc", header: "<kernel.h>".}
|
||||
proc c_calloc*(nmemb, size: csize_t): pointer {.
|
||||
importc: "k_calloc", header: "<kernel.h>".}
|
||||
proc c_free*(p: pointer) {.
|
||||
importc: "k_free", header: "<kernel.h>".}
|
||||
proc c_realloc*(p: pointer, newsize: csize_t): pointer =
|
||||
# Zephyr's kernel malloc doesn't support realloc
|
||||
result = c_malloc(newSize)
|
||||
# match the ansi c behavior
|
||||
if not result.isNil():
|
||||
copyMem(result, p, newSize)
|
||||
c_free(p)
|
||||
else:
|
||||
proc c_malloc*(size: csize_t): pointer {.
|
||||
importc: "malloc", header: "<stdlib.h>".}
|
||||
proc c_calloc*(nmemb, size: csize_t): pointer {.
|
||||
importc: "calloc", header: "<stdlib.h>".}
|
||||
proc c_free*(p: pointer) {.
|
||||
importc: "free", header: "<stdlib.h>".}
|
||||
proc c_realloc*(p: pointer, newsize: csize_t): pointer {.
|
||||
importc: "realloc", header: "<stdlib.h>".}
|
||||
|
||||
proc c_fwrite*(buf: pointer, size, n: csize_t, f: CFilePtr): cint {.
|
||||
importc: "fwrite", header: "<stdio.h>".}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ const
|
|||
PageSize = 1 shl PageShift
|
||||
PageMask = PageSize-1
|
||||
|
||||
|
||||
MemAlign = # also minimal allocatable memory block
|
||||
when defined(useMalloc):
|
||||
when defined(amd64): 16
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ elif defined(genode):
|
|||
proc nimGetProcAddr(lib: LibHandle, name: cstring): ProcAddr =
|
||||
raiseAssert("nimGetProcAddr not implemented")
|
||||
|
||||
elif defined(nintendoswitch) or defined(freertos):
|
||||
elif defined(nintendoswitch) or defined(freertos) or defined(zephyr):
|
||||
proc nimUnloadLibrary(lib: LibHandle) =
|
||||
cstderr.rawWrite("nimUnLoadLibrary not implemented")
|
||||
cstderr.rawWrite("\n")
|
||||
|
|
|
|||
|
|
@ -347,7 +347,7 @@ when defined(nimdoc) or (defined(posix) and not defined(nimscript)) or defined(w
|
|||
## availability with `declared() <system.html#declared,untyped>`.
|
||||
when SupportIoctlInheritCtl:
|
||||
result = c_ioctl(f, if inheritable: FIONCLEX else: FIOCLEX) != -1
|
||||
elif defined(freertos):
|
||||
elif defined(freertos) or defined(zephyr):
|
||||
result = true
|
||||
elif defined(posix):
|
||||
var flags = c_fcntl(f, F_GETFD)
|
||||
|
|
@ -780,8 +780,11 @@ when declared(stdout):
|
|||
var echoLock: SysLock
|
||||
initSysLock echoLock
|
||||
|
||||
const stdOutLock = not defined(windows) and not defined(android) and
|
||||
not defined(nintendoswitch) and not defined(freertos) and
|
||||
const stdOutLock = not defined(windows) and
|
||||
not defined(android) and
|
||||
not defined(nintendoswitch) and
|
||||
not defined(freertos) and
|
||||
not defined(zephyr) and
|
||||
hostOS != "any"
|
||||
|
||||
proc echoBinSafe(args: openArray[string]) {.compilerproc.} =
|
||||
|
|
|
|||
|
|
@ -2,13 +2,22 @@
|
|||
{.push stackTrace: off.}
|
||||
|
||||
proc allocImpl(size: Natural): pointer =
|
||||
c_malloc(size.csize_t)
|
||||
result = c_malloc(size.csize_t)
|
||||
when defined(zephyr):
|
||||
if result == nil:
|
||||
raiseOutOfMem()
|
||||
|
||||
proc alloc0Impl(size: Natural): pointer =
|
||||
c_calloc(size.csize_t, 1)
|
||||
result = c_calloc(size.csize_t, 1)
|
||||
when defined(zephyr):
|
||||
if result == nil:
|
||||
raiseOutOfMem()
|
||||
|
||||
proc reallocImpl(p: pointer, newSize: Natural): pointer =
|
||||
c_realloc(p, newSize.csize_t)
|
||||
result = c_realloc(p, newSize.csize_t)
|
||||
when defined(zephyr):
|
||||
if result == nil:
|
||||
raiseOutOfMem()
|
||||
|
||||
proc realloc0Impl(p: pointer, oldsize, newSize: Natural): pointer =
|
||||
result = realloc(p, newSize.csize_t)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue