Giter Site home page Giter Site logo

dart-sys's Introduction

dart-sys

Crates.io Documentation Build

Bindings to dart FFI.

Crate version corresponds to Dart SDK release

Use cases

General requirements

  • Build your rust code as cdylib lib

Flutter application

  • When building for mobile device, you need to build with correct target (i.e. for android-arm64 your rust target must be aarch64-linux-android)

  • Place rust library into android/app/src/main/jniLibs accordingly to your target (i.e. for android-arm64 you need to place it inside arm64-v8a)

  • Build flutter application;

  • Refer to Dart application for next steps. Flutter embeds your library inside APK so you can refer to it by just library full name.

Dart application

  • Dart FFI provides API to load C shared libraries: ffi.DynamicLibrary.open(<path to shared library>);

  • Once library successfully loaded, returned object can be used to lookup function pointers.

Given following rust function:

#[no_mangle]
pub unsafe extern "C" fn handle(rd: *const c_char) -> i8 {
    //Do something
    return 0;
}

You can access its pointer in following way

import 'dart:ffi' as ffi;
// External package https://pub.dev/packages/ffi
import 'package:ffi/ffi.dart' as ffiUtils;

typedef NativeFunctionT = ffi.Int8 Function(ffi.Pointer<ffiUtils.Utf8>);
typedef DartFunctionT = int Function(ffi.Pointer<ffiUtils.Utf8>);

final d = ffi.DynamicLibrary.open("my_shared_lib_name.so");
final DartFunctionT sendDataToRust = d.lookupFunction<RustRxNativeFunc, RustRxDartFunc>("handle");

/// Use function to send string data which internally converts it to C compatible char buffer.
void sendNative(DartFunctionT sendDataToRust, String d) {
    final data = d.toNativeUtf8();
    sendDataToRust(data);
    ffiUtils.calloc.free(data);
}

How-to update to new SDK version

  1. Update version in Cargo.toml to be equal to desired version of SDK

  2. Run cargo build --features download-sources,build-bindings

  3. Optionally run rustfmt src/lib.rs to make it pretty

  4. Commit and publish

dart-sys's People

Contributors

doumanash avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

dart-sys's Issues

library not found for -ldart (macos)

如图

image

build.rs 如下

use std::path::Path;

fn main() {
  let dart_path = Path::new("/usr/local/opt/dart/libexec");
  println!(
    r#"cargo:rustc-link-search=native={}"#,
    dart_path.join("bin").to_str().unwrap()
  );
  println!(r"cargo:rustc-link-lib=dart");
}

No build script to automatically link for embedded dart vm

Hi,

I keep getting this link error:

= note: vm.histy2mu0occs4k.rcgu.o : error LNK2019: unresolved external symbol Dart_VersionString referenced in function _ZN2vm4main17h0ad19c8a20b6b3a7E
...
fatal error LNK1120: 1 unresolved externals

Are these bindings working on your side?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.