Skip to content
Snippets Groups Projects
  • Cherry Mui's avatar
    1cf6e31f
    cmd/compile: add basic wasmexport support · 1cf6e31f
    Cherry Mui authored
    This CL adds a compiler directive go:wasmexport, which applies to
    a Go function and makes it an exported function of the Wasm module
    being built, so it can be called directly from the host. As
    proposed in #65199, parameter and result types are limited to
    32-bit and 64-bit integers and floats, and there can be at most
    one result.
    
    As the Go and Wasm calling conventions are different, for a
    wasmexport function we generate a wrapper function does the ABI
    conversion at compile time.
    
    Currently this CL only adds basic support. In particular,
    - it only supports executable mode, i.e. the Go wasm module calls
      into the host via wasmimport, which then calls back to Go via
      wasmexport. Library (c-shared) mode is not implemented yet.
    - only supports wasip1, not js.
    - if the exported function unwinds stacks (goroutine switch, stack
    growth, etc.), it probably doesn't work.
    
    TODO: support stack unwinding, c-shared mode, js.
    
    For #65199.
    
    Change-Id: Id1777c2d44f7d51942c1caed3173c0a82f120cc4
    Reviewed-on: https://go-review.googlesource.com/c/go/+/603055
    
    
    Reviewed-by: default avatarThan McIntosh <thanm@golang.org>
    Reviewed-by: default avatarRandy Reddig <randy.reddig@fastly.com>
    Reviewed-by: default avatarDavid Chase <drchase@google.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
    1cf6e31f
    History
    cmd/compile: add basic wasmexport support
    Cherry Mui authored
    This CL adds a compiler directive go:wasmexport, which applies to
    a Go function and makes it an exported function of the Wasm module
    being built, so it can be called directly from the host. As
    proposed in #65199, parameter and result types are limited to
    32-bit and 64-bit integers and floats, and there can be at most
    one result.
    
    As the Go and Wasm calling conventions are different, for a
    wasmexport function we generate a wrapper function does the ABI
    conversion at compile time.
    
    Currently this CL only adds basic support. In particular,
    - it only supports executable mode, i.e. the Go wasm module calls
      into the host via wasmimport, which then calls back to Go via
      wasmexport. Library (c-shared) mode is not implemented yet.
    - only supports wasip1, not js.
    - if the exported function unwinds stacks (goroutine switch, stack
    growth, etc.), it probably doesn't work.
    
    TODO: support stack unwinding, c-shared mode, js.
    
    For #65199.
    
    Change-Id: Id1777c2d44f7d51942c1caed3173c0a82f120cc4
    Reviewed-on: https://go-review.googlesource.com/c/go/+/603055
    
    
    Reviewed-by: default avatarThan McIntosh <thanm@golang.org>
    Reviewed-by: default avatarRandy Reddig <randy.reddig@fastly.com>
    Reviewed-by: default avatarDavid Chase <drchase@google.com>
    LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Code owners
Assign users and groups as approvers for specific file changes. Learn more.