| # 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); |
| ``` |