aboutsummaryrefslogtreecommitdiff
path: root/core/thread
diff options
context:
space:
mode:
authorLaytan Laats <laytanlaats@hotmail.com>2024-06-29 23:09:49 +0200
committerLaytan Laats <laytanlaats@hotmail.com>2024-06-29 23:15:31 +0200
commit604551eb2d106d64eb9159bc17aa5c57bbca0ca4 (patch)
tree27ca9e57f7091af156f86f01311928567d01e4a9 /core/thread
parent476d0087c8d47102c23cf6de71eb4014b9a7b6b2 (diff)
wasi: make the demo run on wasi and run it in CI
Diffstat (limited to 'core/thread')
-rw-r--r--core/thread/thread.odin6
-rw-r--r--core/thread/thread_js.odin47
-rw-r--r--core/thread/thread_other.odin47
-rw-r--r--core/thread/thread_unix.odin2
-rw-r--r--core/thread/thread_windows.odin2
5 files changed, 56 insertions, 48 deletions
diff --git a/core/thread/thread.odin b/core/thread/thread.odin
index 55f73d106..80e60d6cf 100644
--- a/core/thread/thread.odin
+++ b/core/thread/thread.odin
@@ -6,6 +6,8 @@ import "base:intrinsics"
_ :: intrinsics
+IS_SUPPORTED :: _IS_SUPPORTED
+
Thread_Proc :: #type proc(^Thread)
MAX_USER_ARGUMENTS :: 8
@@ -58,7 +60,9 @@ Thread :: struct {
creation_allocator: mem.Allocator,
}
-#assert(size_of(Thread{}.user_index) == size_of(uintptr))
+when IS_SUPPORTED {
+ #assert(size_of(Thread{}.user_index) == size_of(uintptr))
+}
Thread_Priority :: enum {
Normal,
diff --git a/core/thread/thread_js.odin b/core/thread/thread_js.odin
deleted file mode 100644
index 4f5b5b086..000000000
--- a/core/thread/thread_js.odin
+++ /dev/null
@@ -1,47 +0,0 @@
-//+build js
-package thread
-
-import "base:intrinsics"
-import "core:sync"
-import "core:mem"
-
-Thread_Os_Specific :: struct {}
-
-_thread_priority_map := [Thread_Priority]i32{
- .Normal = 0,
- .Low = -2,
- .High = +2,
-}
-
-_create :: proc(procedure: Thread_Proc, priority := Thread_Priority.Normal) -> ^Thread {
- unimplemented("core:thread procedure not supported on js target")
-}
-
-_start :: proc(t: ^Thread) {
- unimplemented("core:thread procedure not supported on js target")
-}
-
-_is_done :: proc(t: ^Thread) -> bool {
- unimplemented("core:thread procedure not supported on js target")
-}
-
-_join :: proc(t: ^Thread) {
- unimplemented("core:thread procedure not supported on js target")
-}
-
-_join_multiple :: proc(threads: ..^Thread) {
- unimplemented("core:thread procedure not supported on js target")
-}
-
-_destroy :: proc(thread: ^Thread) {
- unimplemented("core:thread procedure not supported on js target")
-}
-
-_terminate :: proc(using thread : ^Thread, exit_code: int) {
- unimplemented("core:thread procedure not supported on js target")
-}
-
-_yield :: proc() {
- unimplemented("core:thread procedure not supported on js target")
-}
-
diff --git a/core/thread/thread_other.odin b/core/thread/thread_other.odin
new file mode 100644
index 000000000..34bbfda08
--- /dev/null
+++ b/core/thread/thread_other.odin
@@ -0,0 +1,47 @@
+//+build js, wasi, orca
+package thread
+
+import "base:intrinsics"
+
+_IS_SUPPORTED :: false
+
+Thread_Os_Specific :: struct {}
+
+_thread_priority_map := [Thread_Priority]i32{
+ .Normal = 0,
+ .Low = -2,
+ .High = +2,
+}
+
+_create :: proc(procedure: Thread_Proc, priority := Thread_Priority.Normal) -> ^Thread {
+ unimplemented("core:thread procedure not supported on target")
+}
+
+_start :: proc(t: ^Thread) {
+ unimplemented("core:thread procedure not supported on target")
+}
+
+_is_done :: proc(t: ^Thread) -> bool {
+ unimplemented("core:thread procedure not supported on target")
+}
+
+_join :: proc(t: ^Thread) {
+ unimplemented("core:thread procedure not supported on target")
+}
+
+_join_multiple :: proc(threads: ..^Thread) {
+ unimplemented("core:thread procedure not supported on target")
+}
+
+_destroy :: proc(thread: ^Thread) {
+ unimplemented("core:thread procedure not supported on target")
+}
+
+_terminate :: proc(using thread : ^Thread, exit_code: int) {
+ unimplemented("core:thread procedure not supported on target")
+}
+
+_yield :: proc() {
+ unimplemented("core:thread procedure not supported on target")
+}
+
diff --git a/core/thread/thread_unix.odin b/core/thread/thread_unix.odin
index 2218afdd3..363f50862 100644
--- a/core/thread/thread_unix.odin
+++ b/core/thread/thread_unix.odin
@@ -6,6 +6,8 @@ import "core:sync"
import "core:sys/unix"
import "core:time"
+_IS_SUPPORTED :: true
+
CAS :: sync.atomic_compare_exchange_strong
// NOTE(tetra): Aligned here because of core/unix/pthread_linux.odin/pthread_t.
diff --git a/core/thread/thread_windows.odin b/core/thread/thread_windows.odin
index 314ef5842..8da75a2d9 100644
--- a/core/thread/thread_windows.odin
+++ b/core/thread/thread_windows.odin
@@ -6,6 +6,8 @@ import "base:intrinsics"
import "core:sync"
import win32 "core:sys/windows"
+_IS_SUPPORTED :: true
+
Thread_Os_Specific :: struct {
win32_thread: win32.HANDLE,
win32_thread_id: win32.DWORD,