Haiku support for Nim (#8542)
* posix_other: Haiku now has spawn.h This is added per https://dev.haiku-os.org/ticket/13446 * posix_other: Add Haiku specific Dirent members * cpuinfo: Add an implementation for Haiku * distros: Add basic Haiku support * encodings: update Haiku support * fenv, math: Haiku now provides libm * times: Add Haiku struct members * ansi_c, osalloc: Add Haiku constants * threads: Add Haiku support * testament: Haiku uses LIBRARY_PATH * nim.cfg: Update Haiku support libnetwork should only be linked if network functions are used * threads: Haiku does not support -pthread switch * tworkingdir: Haiku's env is in /bin * posix_other: add SIGKILLTHR for Haiku * sockets: link with libnetwork on Haiku * coro: correct ucontext.h location http://pubs.opengroup.org/onlinepubs/009696699/basedefs/ucontext.h.html * coro: ucontext backend is not available on Haiku Haiku doesn't provide the <ucontext.h> header, as it was removed from POSIX * coro: fix setjmp backend The compiler does not allow statements after a noreturn function * nativesockets: Haiku doesn't support AI_V4MAPPED * system: hostOS can contains "haiku" * os: add support for Haiku's packagefs packagefs is read-only, but there are writable holes to the underlying file system as well * os: update constant for Haiku
This commit is contained in:
parent
feda366d86
commit
7ef268274f
19 changed files with 114 additions and 29 deletions
|
|
@ -59,6 +59,15 @@ elif defined(macosx) or defined(linux) or defined(freebsd) or
|
|||
SIGSEGV = cint(11)
|
||||
SIGTERM = cint(15)
|
||||
SIGPIPE = cint(13)
|
||||
elif defined(haiku):
|
||||
const
|
||||
SIGABRT = cint(6)
|
||||
SIGFPE = cint(8)
|
||||
SIGILL = cint(4)
|
||||
SIGINT = cint(2)
|
||||
SIGSEGV = cint(11)
|
||||
SIGTERM = cint(15)
|
||||
SIGPIPE = cint(7)
|
||||
else:
|
||||
when NoFakeVars:
|
||||
{.error: "SIGABRT not ported to your platform".}
|
||||
|
|
@ -74,6 +83,8 @@ else:
|
|||
|
||||
when defined(macosx):
|
||||
const SIGBUS = cint(10)
|
||||
elif defined(haiku):
|
||||
const SIGBUS = cint(30)
|
||||
else:
|
||||
template SIGBUS: untyped = SIGSEGV
|
||||
|
||||
|
|
|
|||
|
|
@ -207,6 +207,9 @@ elif defined(posix):
|
|||
# some arches like mips and alpha use different values
|
||||
const MAP_ANONYMOUS = 0x20
|
||||
const MAP_PRIVATE = 0x02 # Changes are private
|
||||
elif defined(haiku):
|
||||
const MAP_ANONYMOUS = 0x08
|
||||
const MAP_PRIVATE = 0x02
|
||||
else:
|
||||
var
|
||||
MAP_ANONYMOUS {.importc: "MAP_ANONYMOUS", header: "<sys/mman.h>".}: cint
|
||||
|
|
|
|||
|
|
@ -162,10 +162,12 @@ elif defined(genode):
|
|||
mainTls
|
||||
|
||||
else:
|
||||
when not defined(macosx):
|
||||
when not (defined(macosx) or defined(haiku)):
|
||||
{.passL: "-pthread".}
|
||||
|
||||
{.passC: "-pthread".}
|
||||
when not defined(haiku):
|
||||
{.passC: "-pthread".}
|
||||
|
||||
const
|
||||
schedh = "#define _GNU_SOURCE\n#include <sched.h>"
|
||||
pthreadh = "#define _GNU_SOURCE\n#include <pthread.h>"
|
||||
|
|
@ -714,3 +716,13 @@ elif defined(solaris):
|
|||
if threadId == 0:
|
||||
threadId = int(thr_self())
|
||||
result = threadId
|
||||
|
||||
elif defined(haiku):
|
||||
type thr_id {.importc: "thread_id", header: "<OS.h>".} = distinct int32
|
||||
proc find_thread(name: cstring): thr_id {.importc, header: "<OS.h>".}
|
||||
|
||||
proc getThreadId*(): int =
|
||||
## get the ID of the currently running thread.
|
||||
if threadId == 0:
|
||||
threadId = int(find_thread(nil))
|
||||
result = threadId
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue