This adds the experimental support of the file system compilation cache. Notably, experimental.WithCompilationCacheDirName allows users to configure where the compiler writes the cache into. Versioning/validation of binary compatibility has been done via the release tag (which will be created from the end of this month). More specifically, the cache file starts with a header with the hardcoded wazero version. Fixes #618 Signed-off-by: Takeshi Yoneda <takeshi@tetrate.io> Co-authored-by: Crypt Keeper <64215+codefromthecrypt@users.noreply.github.com>
32 lines
1.2 KiB
Go
32 lines
1.2 KiB
Go
package experimental
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/tetratelabs/wazero/internal/compilationcache"
|
|
)
|
|
|
|
// WithCompilationCacheDirName configures the destination directory of the compilation cache.
|
|
// Regardless of the usage of this, the compiled functions are cached in memory, but its lifetime is
|
|
// bound to the lifetime of wazero.Runtime or wazero.CompiledModule.
|
|
//
|
|
// With the given non-empty directory, wazero persists the cache into the directory and that cache
|
|
// will be used as long as the running wazero version match the version of compilation wazero.
|
|
//
|
|
// A cache is only valid for use in one wazero.Runtime at a time. Concurrent use
|
|
// of a wazero.Runtime is supported, but multiple runtimes must not share the
|
|
// same directory.
|
|
//
|
|
// Note: The embedder must safeguard this directory from external changes.
|
|
//
|
|
// Usage:
|
|
//
|
|
// ctx := experimental.WithCompilationCacheDirName(context.Background(), "/home/me/.cache/wazero")
|
|
// r := wazero.NewRuntimeWithConfig(ctx, wazero.NewRuntimeConfigCompiler())
|
|
func WithCompilationCacheDirName(ctx context.Context, dirname string) context.Context {
|
|
if len(dirname) != 0 {
|
|
ctx = context.WithValue(ctx, compilationcache.FileCachePathKey{}, dirname)
|
|
}
|
|
return ctx
|
|
}
|