aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authordeadprogram <[email protected]>2024-02-12 13:43:54 +0100
committerRon Evans <[email protected]>2024-02-15 17:54:18 +0100
commit186018abebe67052ce53c610ce0eaab1bef6d24a (patch)
tree7ac5d13ceaff61158d8000bb4619c4bbead62288 /src
parent828b9614c2f956c62f02311cc1a196a4bf1d4514 (diff)
downloadtinygo-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.go2
-rw-r--r--src/runtime/os_other.go2
-rw-r--r--src/runtime/runtime_tinygowasm.go2
-rw-r--r--src/runtime/runtime_tinygowasm_unknown.go50
-rw-r--r--src/runtime/runtime_unix.go2
-rw-r--r--src/runtime/runtime_wasm_js_scheduler.go2
-rw-r--r--src/runtime/runtime_wasm_unknown.go49
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)
+}