mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 00:52:26 -05:00 
			
		
		
		
	
		
			
	
	
		
			68 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			68 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 | ||
|  | } |