mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-09 05:23:40 +00:00
wasi: remove wasm build tag
The wasm build tag together with GOARCH=arm was causing problems in the internal/cpu package. In general, I think having two architecture build tag will only cause problems (in this case, wasm and arm) so I've removed the wasm build tag and replaced it with tinygo.wasm. This is similar to the tinygo.riscv build tag, which is used for older Go versions that don't yet have RISC-V support in the standard library (and therefore pretend to be GOARCH=arm instead).
This commit is contained in:
committed by
Ron Evans
parent
d94f42f6e2
commit
c3032660c9
@@ -0,0 +1,72 @@
|
||||
// +build tinygo.wasm
|
||||
|
||||
package runtime
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// Implements __wasi_iovec_t.
|
||||
type __wasi_iovec_t struct {
|
||||
buf unsafe.Pointer
|
||||
bufLen uint
|
||||
}
|
||||
|
||||
//go:wasm-module wasi_snapshot_preview1
|
||||
//export fd_write
|
||||
func fd_write(id uint32, iovs *__wasi_iovec_t, iovs_len uint, nwritten *uint) (errno uint)
|
||||
|
||||
// See:
|
||||
// https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md#-proc_exitrval-exitcode
|
||||
//go:wasm-module wasi_snapshot_preview1
|
||||
//export proc_exit
|
||||
func proc_exit(exitcode uint32)
|
||||
|
||||
func postinit() {}
|
||||
|
||||
const (
|
||||
putcharBufferSize = 120
|
||||
stdout = 1
|
||||
)
|
||||
|
||||
// Using global variables to avoid heap allocation.
|
||||
var (
|
||||
putcharBuffer = [putcharBufferSize]byte{}
|
||||
putcharPosition uint = 0
|
||||
putcharIOVec = __wasi_iovec_t{
|
||||
buf: unsafe.Pointer(&putcharBuffer[0]),
|
||||
}
|
||||
putcharNWritten uint
|
||||
)
|
||||
|
||||
func putchar(c byte) {
|
||||
putcharBuffer[putcharPosition] = c
|
||||
putcharPosition++
|
||||
|
||||
if c == '\n' || putcharPosition >= putcharBufferSize {
|
||||
putcharIOVec.bufLen = putcharPosition
|
||||
fd_write(stdout, &putcharIOVec, 1, &putcharNWritten)
|
||||
putcharPosition = 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() {
|
||||
}
|
||||
Reference in New Issue
Block a user