mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 05:52:24 -06: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
							 | 
						||
| 
								 | 
							
								}
							 |