diff options
author | deadprogram <[email protected]> | 2024-02-12 13:43:54 +0100 |
---|---|---|
committer | Ron Evans <[email protected]> | 2024-02-15 17:54:18 +0100 |
commit | 186018abebe67052ce53c610ce0eaab1bef6d24a (patch) | |
tree | 7ac5d13ceaff61158d8000bb4619c4bbead62288 /src | |
parent | 828b9614c2f956c62f02311cc1a196a4bf1d4514 (diff) | |
download | tinygo-186018abebe67052ce53c610ce0eaab1bef6d24a.tar.gz tinygo-186018abebe67052ce53c610ce0eaab1bef6d24a.zip |
runtime, targets: some WIP on wasm unknown in part from PR #3072
Signed-off-by: deadprogram <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/runtime/os_linux.go | 2 | ||||
-rw-r--r-- | src/runtime/os_other.go | 2 | ||||
-rw-r--r-- | src/runtime/runtime_tinygowasm.go | 2 | ||||
-rw-r--r-- | src/runtime/runtime_tinygowasm_unknown.go | 50 | ||||
-rw-r--r-- | src/runtime/runtime_unix.go | 2 | ||||
-rw-r--r-- | src/runtime/runtime_wasm_js_scheduler.go | 2 | ||||
-rw-r--r-- | src/runtime/runtime_wasm_unknown.go | 49 |
7 files changed, 104 insertions, 5 deletions
diff --git a/src/runtime/os_linux.go b/src/runtime/os_linux.go index fefba85f4..3f27dfd16 100644 --- a/src/runtime/os_linux.go +++ b/src/runtime/os_linux.go @@ -1,4 +1,4 @@ -//go:build linux && !baremetal && !nintendoswitch && !wasi +//go:build linux && !baremetal && !nintendoswitch && !wasi && !wasm_unknown package runtime diff --git a/src/runtime/os_other.go b/src/runtime/os_other.go index 63d8153fe..c8330bafc 100644 --- a/src/runtime/os_other.go +++ b/src/runtime/os_other.go @@ -1,4 +1,4 @@ -//go:build linux && (baremetal || nintendoswitch || wasi) +//go:build linux && (baremetal || nintendoswitch || wasi || wasm_unknown) // Other systems that aren't operating systems supported by the Go toolchain // need to pretend to be an existing operating system. Linux seems like a good diff --git a/src/runtime/runtime_tinygowasm.go b/src/runtime/runtime_tinygowasm.go index 8ed73df77..399860353 100644 --- a/src/runtime/runtime_tinygowasm.go +++ b/src/runtime/runtime_tinygowasm.go @@ -1,4 +1,4 @@ -//go:build tinygo.wasm +//go:build tinygo.wasm && !wasm_unknown package runtime diff --git a/src/runtime/runtime_tinygowasm_unknown.go b/src/runtime/runtime_tinygowasm_unknown.go new file mode 100644 index 000000000..08a9414fc --- /dev/null +++ b/src/runtime/runtime_tinygowasm_unknown.go @@ -0,0 +1,50 @@ +//go:build wasm_unknown + +package runtime + +const ( + stdout = 1 +) + +func putchar(c byte) { +} + +func getchar() byte { + // dummy, TODO + return 0 +} + +func buffered() int { + // dummy, TODO + return 0 +} + +//go:linkname now time.now +func now() (sec int64, nsec int32, mono int64) { + return 0, 0, 0 +} + +// Abort executes the wasm 'unreachable' instruction. +func abort() { + trap() +} + +//go:linkname syscall_Exit syscall.Exit +func syscall_Exit(code int) { + //proc_exit(uint32(code)) +} + +// TinyGo does not yet support any form of parallelism on WebAssembly, so these +// can be left empty. + +//go:linkname procPin sync/atomic.runtime_procPin +func procPin() { +} + +//go:linkname procUnpin sync/atomic.runtime_procUnpin +func procUnpin() { +} + +func hardwareRand() (n uint64, ok bool) { + return 0, false +} diff --git a/src/runtime/runtime_unix.go b/src/runtime/runtime_unix.go index 8af3d673c..f1f1c4df7 100644 --- a/src/runtime/runtime_unix.go +++ b/src/runtime/runtime_unix.go @@ -1,4 +1,4 @@ -//go:build (darwin || (linux && !baremetal && !wasi)) && !nintendoswitch +//go:build (darwin || (linux && !baremetal && !wasi && !wasm_unknown)) && !nintendoswitch package runtime diff --git a/src/runtime/runtime_wasm_js_scheduler.go b/src/runtime/runtime_wasm_js_scheduler.go index fc599a2a8..d5e1012de 100644 --- a/src/runtime/runtime_wasm_js_scheduler.go +++ b/src/runtime/runtime_wasm_js_scheduler.go @@ -1,4 +1,4 @@ -//go:build wasm && !wasi && !scheduler.none && !wasip1 +//go:build wasm && !wasi && !scheduler.none && !wasip1 && !wasm_unknown package runtime diff --git a/src/runtime/runtime_wasm_unknown.go b/src/runtime/runtime_wasm_unknown.go new file mode 100644 index 000000000..c17ece257 --- /dev/null +++ b/src/runtime/runtime_wasm_unknown.go @@ -0,0 +1,49 @@ +//go:build wasm_unknown + +package runtime + +import ( + "unsafe" +) + +type timeUnit int64 + +// libc constructors +// +//export __wasm_call_ctors +func __wasm_call_ctors() + +//export _start +func _start() { + // These need to be initialized early so that the heap can be initialized. + heapStart = uintptr(unsafe.Pointer(&heapStartSymbol)) + heapEnd = uintptr(wasm_memory_size(0) * wasmPageSize) + run() +} + +// Read the command line arguments from WASI. +// For example, they can be passed to a program with wasmtime like this: +// +// wasmtime run ./program.wasm arg1 arg2 +func init() { + __wasm_call_ctors() +} + +var args []string + +func ticksToNanoseconds(ticks timeUnit) int64 { + return int64(ticks) +} + +func nanosecondsToTicks(ns int64) timeUnit { + return timeUnit(ns) +} + +const timePrecisionNanoseconds = 1000 // TODO: how can we determine the appropriate `precision`? + +func sleepTicks(d timeUnit) { +} + +func ticks() timeUnit { + return timeUnit(0) +} |