mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 19:52:24 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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
 | 
						|
}
 |