diff options
Diffstat (limited to 'vendor/codeberg.org/gruf/go-ffmpreg/wasm')
-rw-r--r-- | vendor/codeberg.org/gruf/go-ffmpreg/wasm/funcs.go | 74 | ||||
-rw-r--r-- | vendor/codeberg.org/gruf/go-ffmpreg/wasm/run.go | 87 | ||||
-rw-r--r-- | vendor/codeberg.org/gruf/go-ffmpreg/wasm/runtime.go | 67 |
3 files changed, 0 insertions, 228 deletions
diff --git a/vendor/codeberg.org/gruf/go-ffmpreg/wasm/funcs.go b/vendor/codeberg.org/gruf/go-ffmpreg/wasm/funcs.go deleted file mode 100644 index a809ff120..000000000 --- a/vendor/codeberg.org/gruf/go-ffmpreg/wasm/funcs.go +++ /dev/null @@ -1,74 +0,0 @@ -package wasm - -import ( - "context" - - "github.com/tetratelabs/wazero/api" - "github.com/tetratelabs/wazero/experimental" -) - -type snapshotskey struct{} - -// withSetjmpLongjmp updates the context to contain wazero/experimental.Snapshotter{} support, -// and embeds the necessary snapshots map required for later calls to Setjmp() / Longjmp(). -func withSetjmpLongjmp(ctx context.Context) context.Context { - snapshots := make(map[uint32]experimental.Snapshot, 10) - ctx = experimental.WithSnapshotter(ctx) - ctx = context.WithValue(ctx, snapshotskey{}, snapshots) - return ctx -} - -func getSnapshots(ctx context.Context) map[uint32]experimental.Snapshot { - v, _ := ctx.Value(snapshotskey{}).(map[uint32]experimental.Snapshot) - return v -} - -// setjmp implements the C function: setjmp(env jmp_buf) -func setjmp(ctx context.Context, mod api.Module, stack []uint64) { - - // Input arguments. - envptr := api.DecodeU32(stack[0]) - - // Take snapshot of current execution environment. - snapshotter := experimental.GetSnapshotter(ctx) - snapshot := snapshotter.Snapshot() - - // Get stored snapshots map. - snapshots := getSnapshots(ctx) - if snapshots == nil { - panic("setjmp / longjmp not supported") - } - - // Set latest snapshot in map. - snapshots[envptr] = snapshot - - // Set return. - stack[0] = 0 -} - -// longjmp implements the C function: int longjmp(env jmp_buf, value int) -func longjmp(ctx context.Context, mod api.Module, stack []uint64) { - - // Input arguments. - envptr := api.DecodeU32(stack[0]) - // val := stack[1] - - // Get stored snapshots map. - snapshots := getSnapshots(ctx) - if snapshots == nil { - panic("setjmp / longjmp not supported") - } - - // Get snapshot stored in map. - snapshot := snapshots[envptr] - if snapshot == nil { - panic("must first call setjmp") - } - - // Set return. - stack[0] = 0 - - // Restore execution and - // return passed value arg. - snapshot.Restore(stack[1:]) -} diff --git a/vendor/codeberg.org/gruf/go-ffmpreg/wasm/run.go b/vendor/codeberg.org/gruf/go-ffmpreg/wasm/run.go deleted file mode 100644 index 7b07d851d..000000000 --- a/vendor/codeberg.org/gruf/go-ffmpreg/wasm/run.go +++ /dev/null @@ -1,87 +0,0 @@ -package wasm - -import ( - "context" - "io" - "unsafe" - - "github.com/tetratelabs/wazero" - "github.com/tetratelabs/wazero/sys" -) - -// Args encompasses a common set of -// configuration options often passed to -// wazero.Runtime on module instantiation. -type Args struct { - - // Program name, depending on the - // module being run this may or may - // not be necessary. - Name string - - // Optional further module configuration function. - // (e.g. to mount filesystem dir, set env vars, etc). - Config func(wazero.ModuleConfig) wazero.ModuleConfig - - // Standard FDs. - Stdin io.Reader - Stdout io.Writer - Stderr io.Writer - - // CLI args. - Args []string -} - -// Run will run given compiled WebAssembly module -// within the given runtime, with given arguments. -// Returns the exit code, or error. -func Run( - ctx context.Context, - runtime wazero.Runtime, - module wazero.CompiledModule, - args Args, -) (rc uint32, err error) { - - // Prefix arguments with module name. - cargs := make([]string, len(args.Args)+1) - cargs[0] = args.Name - copy(cargs[1:], args.Args) - - // Prepare new module configuration. - modcfg := wazero.NewModuleConfig() - modcfg = modcfg.WithArgs(cargs...) - modcfg = modcfg.WithStdin(args.Stdin) - modcfg = modcfg.WithStdout(args.Stdout) - modcfg = modcfg.WithStderr(args.Stderr) - - if args.Config != nil { - // Pass through config fn. - modcfg = args.Config(modcfg) - } - - // Enable setjmp longjmp. - ctx = withSetjmpLongjmp(ctx) - - // Instantiate the module from precompiled wasm module data. - mod, err := runtime.InstantiateModule(ctx, module, modcfg) - - if !isNil(mod) { - // Ensure closed. - _ = mod.Close(ctx) - } - - // Try extract exit code. - switch err := err.(type) { - case *sys.ExitError: - return err.ExitCode(), nil - default: - return 0, err - } -} - -// isNil will safely check if 'v' is nil without -// dealing with weird Go interface nil bullshit. -func isNil(i interface{}) bool { - type eface struct{ Type, Data unsafe.Pointer } - return (*(*eface)(unsafe.Pointer(&i))).Data == nil -} diff --git a/vendor/codeberg.org/gruf/go-ffmpreg/wasm/runtime.go b/vendor/codeberg.org/gruf/go-ffmpreg/wasm/runtime.go deleted file mode 100644 index 328a26193..000000000 --- a/vendor/codeberg.org/gruf/go-ffmpreg/wasm/runtime.go +++ /dev/null @@ -1,67 +0,0 @@ -package wasm - -import ( - "context" - - "github.com/tetratelabs/wazero" - "github.com/tetratelabs/wazero/api" - "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" -) - -// CoreFeatures are the WebAssembly Core specification -// features our embedded binaries are compiled with. -const CoreFeatures = api.CoreFeatureSIMD | - api.CoreFeatureBulkMemoryOperations | - api.CoreFeatureNonTrappingFloatToIntConversion | - api.CoreFeatureMutableGlobal | - api.CoreFeatureReferenceTypes | - api.CoreFeatureSignExtensionOps - -// NewRuntime returns a new WebAssembly wazero.Runtime compatible with go-ffmpreg. -func NewRuntime(ctx context.Context, cfg wazero.RuntimeConfig) (wazero.Runtime, error) { - var err error - - if cfg == nil { - // Ensure runtime config is set. - cfg = wazero.NewRuntimeConfig() - } - - // Set core features ffmpeg compiled with. - cfg = cfg.WithCoreFeatures(CoreFeatures) - - // Instantiate runtime with prepared config. - rt := wazero.NewRuntimeWithConfig(ctx, cfg) - - // Prepare default "env" host module. - env := rt.NewHostModuleBuilder("env") - - // Register setjmp host function. - env = env.NewFunctionBuilder(). - WithGoModuleFunction( - api.GoModuleFunc(setjmp), - []api.ValueType{api.ValueTypeI32}, - []api.ValueType{api.ValueTypeI32}, - ).Export("setjmp") - - // Register longjmp host function. - env = env.NewFunctionBuilder(). - WithGoModuleFunction( - api.GoModuleFunc(longjmp), - []api.ValueType{api.ValueTypeI32, api.ValueTypeI32}, - []api.ValueType{}, - ).Export("longjmp") - - // Instantiate "env" module. - _, err = env.Instantiate(ctx) - if err != nil { - return nil, err - } - - // Instantiate the wasi snapshot preview 1 in runtime. - _, err = wasi_snapshot_preview1.Instantiate(ctx, rt) - if err != nil { - return nil, err - } - - return rt, nil -} |