|  | # Pragmas used in the FFI implementation | 
|  |  | 
|  | ## Native Assets | 
|  |  | 
|  | This pragma is used for passing native assets to the VM. | 
|  |  | 
|  | ``` | 
|  | @pragma('vm:ffi:native-assets', { | 
|  | 'format-version': [1, 0, 0], | 
|  | 'native-assets': { | 
|  | 'linux_x64': { | 
|  | 'package:foo/foo.dart': ['absolute', '/path/to/libfoo.so'] | 
|  | } | 
|  | } | 
|  | }) | 
|  | library 'vm:native-assets'; | 
|  | ``` | 
|  |  | 
|  | Related files: | 
|  |  | 
|  | * [pkg/vm/lib/native_assets/load_and_validate.dart](../../../pkg/vm/lib/native_assets/load_and_validate.dart) | 
|  | * [pkg/vm/test/native_assets_validator_test.dart](../../../pkg/vm/test/native_assets_validator_test.dart) | 
|  | * [runtime/lib/ffi_dynamic_library.cc](../../../runtime/lib/ffi_dynamic_library.cc) | 
|  | * [runtime/vm/ffi/native_assets.cc](../../../runtime/vm/ffi/native_assets.cc) | 
|  |  | 
|  | ## Native | 
|  |  | 
|  | The fully expanded version of `@Native` passed to the VM. | 
|  |  | 
|  | ``` | 
|  | @pragma( | 
|  | 'vm:ffi:native', | 
|  | Native<IntPtr Function(Pointer<Void>, IntPtr)>( | 
|  | symbol: 'MyClass_MyMethod', | 
|  | assetId: '<library uri>', | 
|  | ), | 
|  | ) | 
|  | external int _myFunction$FfiNative(Pointer<Void> self, int x); | 
|  | ``` | 
|  |  | 
|  | This is passed as a pragma so it is treated consistently with other pragmas. | 
|  |  | 
|  | Related files: | 
|  |  | 
|  | * [runtime/vm/kernel_loader.cc](../../../runtime/vm/kernel_loader.cc) | 
|  | * [runtime/vm/object.cc](../../../runtime/vm/object.cc) | 
|  |  | 
|  | ## FFI Calls | 
|  |  | 
|  | This pragma is used to mark Dart closures which perform FFI calls: | 
|  |  | 
|  | ``` | 
|  | @pragma('vm:ffi:call-closure', _FfiCall<Int32 Function(Int32)>(isLeaf: false)) | 
|  | int #ffiCall0(int arg1) => _ffiCall<int>(target); | 
|  | ``` |