ffi.dart 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /// bindings for `libdart_ffi`
  2. import 'dart:ffi';
  3. import 'dart:io';
  4. // ignore: import_of_legacy_library_into_null_safe
  5. import 'package:ffi/ffi.dart' as ffi;
  6. import 'package:flutter/foundation.dart' as Foundation;
  7. // ignore_for_file: unused_import, camel_case_types, non_constant_identifier_names
  8. final DynamicLibrary _dart_ffi_lib = _open();
  9. /// Reference to the Dynamic Library, it should be only used for low-level access
  10. final DynamicLibrary dl = _dart_ffi_lib;
  11. DynamicLibrary _open() {
  12. if (Platform.environment.containsKey('FLUTTER_TEST')) {
  13. final prefix = "${Directory.current.path}/.sandbox";
  14. if (Platform.isLinux)
  15. return DynamicLibrary.open('${prefix}/libdart_ffi.so');
  16. if (Platform.isAndroid)
  17. return DynamicLibrary.open('${prefix}/libdart_ffi.so');
  18. if (Platform.isMacOS)
  19. return DynamicLibrary.open('${prefix}/libdart_ffi.dylib');
  20. if (Platform.isIOS) return DynamicLibrary.open('${prefix}/libdart_ffi.a');
  21. if (Platform.isWindows)
  22. return DynamicLibrary.open('${prefix}/dart_ffi.dll');
  23. } else {
  24. if (Platform.isLinux) return DynamicLibrary.open('libdart_ffi.so');
  25. if (Platform.isAndroid) return DynamicLibrary.open('libdart_ffi.so');
  26. if (Platform.isMacOS) return DynamicLibrary.executable();
  27. if (Platform.isIOS) return DynamicLibrary.executable();
  28. if (Platform.isWindows) return DynamicLibrary.open('dart_ffi.dll');
  29. }
  30. throw UnsupportedError('This platform is not supported.');
  31. }
  32. /// C function `async_event`.
  33. void async_event(
  34. int port,
  35. Pointer<Uint8> input,
  36. int len,
  37. ) {
  38. _invoke_async(port, input, len);
  39. }
  40. final _invoke_async_Dart _invoke_async = _dart_ffi_lib
  41. .lookupFunction<_invoke_async_C, _invoke_async_Dart>('async_event');
  42. typedef _invoke_async_C = Void Function(
  43. Int64 port,
  44. Pointer<Uint8> input,
  45. Uint64 len,
  46. );
  47. typedef _invoke_async_Dart = void Function(
  48. int port,
  49. Pointer<Uint8> input,
  50. int len,
  51. );
  52. /// C function `sync_event`.
  53. Pointer<Uint8> sync_event(
  54. Pointer<Uint8> input,
  55. int len,
  56. ) {
  57. return _invoke_sync(input, len);
  58. }
  59. final _invoke_sync_Dart _invoke_sync = _dart_ffi_lib
  60. .lookupFunction<_invoke_sync_C, _invoke_sync_Dart>('sync_event');
  61. typedef _invoke_sync_C = Pointer<Uint8> Function(
  62. Pointer<Uint8> input,
  63. Uint64 len,
  64. );
  65. typedef _invoke_sync_Dart = Pointer<Uint8> Function(
  66. Pointer<Uint8> input,
  67. int len,
  68. );
  69. /// C function `init_sdk`.
  70. int init_sdk(
  71. Pointer<ffi.Utf8> path,
  72. ) {
  73. return _init_sdk(path);
  74. }
  75. final _init_sdk_Dart _init_sdk =
  76. _dart_ffi_lib.lookupFunction<_init_sdk_C, _init_sdk_Dart>('init_sdk');
  77. typedef _init_sdk_C = Int64 Function(
  78. Pointer<ffi.Utf8> path,
  79. );
  80. typedef _init_sdk_Dart = int Function(
  81. Pointer<ffi.Utf8> path,
  82. );
  83. /// C function `init_stream`.
  84. int set_stream_port(int port) {
  85. return _set_stream_port(port);
  86. }
  87. final _set_stream_port_Dart _set_stream_port =
  88. _dart_ffi_lib.lookupFunction<_set_stream_port_C, _set_stream_port_Dart>(
  89. 'set_stream_port');
  90. typedef _set_stream_port_C = Int32 Function(
  91. Int64 port,
  92. );
  93. typedef _set_stream_port_Dart = int Function(
  94. int port,
  95. );
  96. /// C function `link_me_please`.
  97. void link_me_please() {
  98. _link_me_please();
  99. }
  100. final _link_me_please_Dart _link_me_please = _dart_ffi_lib
  101. .lookupFunction<_link_me_please_C, _link_me_please_Dart>('link_me_please');
  102. typedef _link_me_please_C = Void Function();
  103. typedef _link_me_please_Dart = void Function();
  104. /// Binding to `allo-isolate` crate
  105. void store_dart_post_cobject(
  106. Pointer<NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>> ptr,
  107. ) {
  108. _store_dart_post_cobject(ptr);
  109. }
  110. final _store_dart_post_cobject_Dart _store_dart_post_cobject = _dart_ffi_lib
  111. .lookupFunction<_store_dart_post_cobject_C, _store_dart_post_cobject_Dart>(
  112. 'store_dart_post_cobject');
  113. typedef _store_dart_post_cobject_C = Void Function(
  114. Pointer<NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>> ptr,
  115. );
  116. typedef _store_dart_post_cobject_Dart = void Function(
  117. Pointer<NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>> ptr,
  118. );