From c5225693788132257b855f93c93d86112ec2c43b Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 20 Mar 2021 23:56:29 +0100 Subject: [PATCH] wasm: only export explicitly exported functions Previously we used the --export-all linker flag to export most functions. However, this is not needed and possibly increases binary size. Instead, we should be exporting the specific functions to be exported. --- compiler/compiler.go | 8 +++++++- targets/wasm.json | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/compiler.go b/compiler/compiler.go index abd7be64..e9d06349 100644 --- a/compiler/compiler.go +++ b/compiler/compiler.go @@ -23,7 +23,7 @@ import ( // Version of the compiler pacakge. Must be incremented each time the compiler // package changes in a way that affects the generated LLVM module. // This version is independent of the TinyGo version number. -const Version = 1 +const Version = 2 // last change: adding wasm-export-name attribute func init() { llvm.InitializeAllTargets() @@ -781,6 +781,12 @@ func (b *builder) createFunction() { b.llvmFn.SetVisibility(llvm.HiddenVisibility) b.llvmFn.SetUnnamedAddr(true) } + if b.info.exported && strings.HasPrefix(b.Triple, "wasm") { + // Set the exported name. This is necessary for WebAssembly because + // otherwise the function is not exported. + functionAttr := b.ctx.CreateStringAttribute("wasm-export-name", b.info.linkName) + b.llvmFn.AddFunctionAttr(functionAttr) + } // Some functions have a pragma controlling the inlining level. switch b.info.inline { diff --git a/targets/wasm.json b/targets/wasm.json index 5b0aad04..ea78e58d 100644 --- a/targets/wasm.json +++ b/targets/wasm.json @@ -14,7 +14,6 @@ "ldflags": [ "--allow-undefined", "--stack-first", - "--export-all", "--no-demangle" ], "emulator": ["node", "targets/wasm_exec.js"],