[flutter]: build flowy sdk as static lib

This commit is contained in:
appflowy 2021-11-15 18:15:09 +08:00
parent d2a8f89668
commit 706f64c9dd
8 changed files with 33 additions and 51 deletions

View File

@ -40,6 +40,7 @@ TARGET_OS = "macos"
RUST_COMPILE_TARGET = "x86_64-apple-darwin" RUST_COMPILE_TARGET = "x86_64-apple-darwin"
FLUTTER_OUTPUT_DIR = "Release" FLUTTER_OUTPUT_DIR = "Release"
PRODUCT_EXT = "app" PRODUCT_EXT = "app"
CRATE_TYPE = "staticlib"
[env.production-desktop-windows-x86] [env.production-desktop-windows-x86]
BUILD_FLAG = "release" BUILD_FLAG = "release"
@ -51,6 +52,7 @@ PRODUCT_EXT = "exe"
[tasks.echo_env] [tasks.echo_env]
script = [ script = [
''' '''
echo CRATE_TYPE: ${CRATE_TYPE}
echo BUILD_FLAG: ${BUILD_FLAG} echo BUILD_FLAG: ${BUILD_FLAG}
echo TARGET_OS: ${TARGET_OS} echo TARGET_OS: ${TARGET_OS}
echo RUST_COMPILE_TARGET: ${RUST_COMPILE_TARGET} echo RUST_COMPILE_TARGET: ${RUST_COMPILE_TARGET}
@ -74,7 +76,7 @@ private = true
script = [ script = [
""" """
toml = readfile ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/Cargo.toml toml = readfile ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/Cargo.toml
val = replace ${toml} "rlib" ${CRATE_TYPE} val = replace ${toml} "dylib" ${CRATE_TYPE}
result = writefile ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/Cargo.toml ${val} result = writefile ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/Cargo.toml ${val}
assert ${result} assert ${result}
""", """,
@ -86,7 +88,7 @@ private = true
script = [ script = [
""" """
toml = readfile ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/Cargo.toml toml = readfile ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/Cargo.toml
val = replace ${toml} ${CRATE_TYPE} "rlib" val = replace ${toml} ${CRATE_TYPE} "dylib"
result = writefile ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/Cargo.toml ${val} result = writefile ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/Cargo.toml ${val}
assert ${result} assert ${result}
""", """,

View File

@ -46,7 +46,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS: SPEC CHECKSUMS:
flowy_editor: 26060a984848e6afac1f6a4455511f4114119d8d flowy_editor: 26060a984848e6afac1f6a4455511f4114119d8d
flowy_infra_ui: 9d5021b1610fe0476eb1191bf7cd41c4a4138d8f flowy_infra_ui: 9d5021b1610fe0476eb1191bf7cd41c4a4138d8f
flowy_sdk: c302ac0a22dea596db0df8073b9637b2bf2ff6fd flowy_sdk: b7efddcc3af4ea87dc2f842c22dc37283bb9e169
FlutterMacOS: 57701585bf7de1b3fc2bb61f6378d73bbdea8424 FlutterMacOS: 57701585bf7de1b3fc2bb61f6378d73bbdea8424
package_info_plus_macos: f010621b07802a241d96d01876d6705f15e77c1c package_info_plus_macos: f010621b07802a241d96d01876d6705f15e77c1c
path_provider_macos: 160cab0d5461f0c0e02995469a98f24bdb9a3f1f path_provider_macos: 160cab0d5461f0c0e02995469a98f24bdb9a3f1f

View File

@ -74,3 +74,4 @@ build/
!**/ios/**/default.perspectivev3 !**/ios/**/default.perspectivev3
**/*.dylib **/*.dylib
**/*.a

View File

@ -20,5 +20,6 @@ A new flutter plugin project.
# Flutter.framework does not contain a i386 slice. # Flutter.framework does not contain a i386 slice.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
s.swift_version = '5.0' s.swift_version = '5.0'
s.vendored_libraries = "libdart_ffi.dylib" s.static_framework = true
s.vendored_libraries = "libdart_ffi.a"
end end

View File

@ -12,16 +12,11 @@ final DynamicLibrary _dl = _open();
/// Reference to the Dynamic Library, it should be only used for low-level access /// Reference to the Dynamic Library, it should be only used for low-level access
final DynamicLibrary dl = _dl; final DynamicLibrary dl = _dl;
DynamicLibrary _open() { DynamicLibrary _open() {
if (is_tester()) {
return DynamicLibrary.open(
'${Directory.systemTemp.path}/app_flowy/libdart_ffi.dylib');
} else {
if (Platform.isAndroid) return DynamicLibrary.open('libdart_ffi.so'); if (Platform.isAndroid) return DynamicLibrary.open('libdart_ffi.so');
if (Platform.isMacOS) return DynamicLibrary.executable(); if (Platform.isMacOS) return DynamicLibrary.executable();
if (Platform.isIOS) return DynamicLibrary.executable(); if (Platform.isIOS) return DynamicLibrary.executable();
throw UnsupportedError('This platform is not supported.'); throw UnsupportedError('This platform is not supported.');
} }
}
/// C function `async_command`. /// C function `async_command`.
void async_command( void async_command(
@ -32,8 +27,7 @@ void async_command(
_invoke_async(port, input, len); _invoke_async(port, input, len);
} }
final _invoke_async_Dart _invoke_async = final _invoke_async_Dart _invoke_async = _dl.lookupFunction<_invoke_async_C, _invoke_async_Dart>('async_command');
_dl.lookupFunction<_invoke_async_C, _invoke_async_Dart>('async_command');
typedef _invoke_async_C = Void Function( typedef _invoke_async_C = Void Function(
Int64 port, Int64 port,
Pointer<Uint8> input, Pointer<Uint8> input,
@ -53,8 +47,7 @@ Pointer<Uint8> sync_command(
return _invoke_sync(input, len); return _invoke_sync(input, len);
} }
final _invoke_sync_Dart _invoke_sync = final _invoke_sync_Dart _invoke_sync = _dl.lookupFunction<_invoke_sync_C, _invoke_sync_Dart>('sync_command');
_dl.lookupFunction<_invoke_sync_C, _invoke_sync_Dart>('sync_command');
typedef _invoke_sync_C = Pointer<Uint8> Function( typedef _invoke_sync_C = Pointer<Uint8> Function(
Pointer<Uint8> input, Pointer<Uint8> input,
Uint64 len, Uint64 len,
@ -71,8 +64,7 @@ int init_sdk(
return _init_sdk(path); return _init_sdk(path);
} }
final _init_sdk_Dart _init_sdk = final _init_sdk_Dart _init_sdk = _dl.lookupFunction<_init_sdk_C, _init_sdk_Dart>('init_sdk');
_dl.lookupFunction<_init_sdk_C, _init_sdk_Dart>('init_sdk');
typedef _init_sdk_C = Int64 Function( typedef _init_sdk_C = Int64 Function(
Pointer<ffi.Utf8> path, Pointer<ffi.Utf8> path,
); );
@ -80,7 +72,6 @@ typedef _init_sdk_Dart = int Function(
Pointer<ffi.Utf8> path, Pointer<ffi.Utf8> path,
); );
/// C function `init_stream`. /// C function `init_stream`.
int set_stream_port(int port) { int set_stream_port(int port) {
return _set_stream_port(port); return _set_stream_port(port);
@ -101,8 +92,8 @@ void link_me_please() {
_link_me_please(); _link_me_please();
} }
final _link_me_please_Dart _link_me_please = _dl final _link_me_please_Dart _link_me_please =
.lookupFunction<_link_me_please_C, _link_me_please_Dart>('link_me_please'); _dl.lookupFunction<_link_me_please_C, _link_me_please_Dart>('link_me_please');
typedef _link_me_please_C = Void Function(); typedef _link_me_please_C = Void Function();
typedef _link_me_please_Dart = void Function(); typedef _link_me_please_Dart = void Function();
@ -113,26 +104,11 @@ void store_dart_post_cobject(
_store_dart_post_cobject(ptr); _store_dart_post_cobject(ptr);
} }
final _store_dart_post_cobject_Dart _store_dart_post_cobject = _dl final _store_dart_post_cobject_Dart _store_dart_post_cobject =
.lookupFunction<_store_dart_post_cobject_C, _store_dart_post_cobject_Dart>( _dl.lookupFunction<_store_dart_post_cobject_C, _store_dart_post_cobject_Dart>('store_dart_post_cobject');
'store_dart_post_cobject');
typedef _store_dart_post_cobject_C = Void Function( typedef _store_dart_post_cobject_C = Void Function(
Pointer<NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>> ptr, Pointer<NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>> ptr,
); );
typedef _store_dart_post_cobject_Dart = void Function( typedef _store_dart_post_cobject_Dart = void Function(
Pointer<NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>> ptr, Pointer<NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>> ptr,
); );
bool is_tester() {
if (Foundation.kDebugMode) {
// ignore: unnecessary_null_comparison
// if (Platform.executable.isEmpty) {
// return false;
// } else {
// return Platform.executable.contains("tester");
// }
return false;
} else {
return false;
}
}

View File

@ -14,11 +14,12 @@ A new flutter plugin project.
s.author = { 'Your Company' => 'email@example.com' } s.author = { 'Your Company' => 'email@example.com' }
s.source = { :path => '.' } s.source = { :path => '.' }
s.source_files = 'Classes/**/*' s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
s.dependency 'FlutterMacOS' s.dependency 'FlutterMacOS'
s.platform = :osx, '10.11' s.platform = :osx, '10.11'
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
s.swift_version = '5.0' s.swift_version = '5.0'
# s.static_framework = true s.static_framework = true
s.vendored_libraries = "libdart_ffi.dylib" s.vendored_libraries = "libdart_ffi.a"
end end

View File

@ -7,6 +7,7 @@ edition = "2018"
[dependencies] [dependencies]
r2d2 = "0.8.9" r2d2 = "0.8.9"
libsqlite3-sys = {version = "0.9.1", features = ["bundled"]}
diesel = {version = "1.4.7", features = ["sqlite"]} diesel = {version = "1.4.7", features = ["sqlite"]}
diesel_derives = {version = "1.4.1", features = ["sqlite"]} diesel_derives = {version = "1.4.1", features = ["sqlite"]}
diesel_migrations = {version = "1.4.0", features = ["sqlite"]} diesel_migrations = {version = "1.4.0", features = ["sqlite"]}

View File

@ -3,10 +3,11 @@
[tasks.flowy-sdk] [tasks.flowy-sdk]
category = "Build" category = "Build"
condition = { channels = ["nightly"] } condition = { channels = ["nightly"] }
dependencies = ["echo_env", "flowy-sdk-build"] dependencies = ["flowy-sdk-build"]
run_task = { name = ["copy-to-sys-tmpdir"] } run_task = { name = ["copy-to-sys-tmpdir"] }
[tasks.flowy-sdk-build] [tasks.flowy-sdk-build]
dependencies = ["echo_env"]
condition = { env_set = [ "BUILD_FLAG", "RUST_COMPILE_TARGET", "CRATE_TYPE", "TARGET_OS"] } condition = { env_set = [ "BUILD_FLAG", "RUST_COMPILE_TARGET", "CRATE_TYPE", "TARGET_OS"] }
run_task = { name = ["setup-crate-type","sdk-build", "post-desktop", "restore-crate-type"] } run_task = { name = ["setup-crate-type","sdk-build", "post-desktop", "restore-crate-type"] }
@ -29,12 +30,11 @@ script_runner = "@shell"
[tasks.post-desktop] [tasks.post-desktop]
private = true private = true
condition = { platforms = ["mac"] }
script = [ script = [
""" """
echo "🚀 🚀 🚀 Flowy-SDK build success" echo "🚀 🚀 🚀 Flowy-SDK build success"
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/target/${RUST_COMPILE_TARGET}/${BUILD_FLAG}/lib${CARGO_MAKE_CRATE_FS_NAME}.dylib \ cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/target/${RUST_COMPILE_TARGET}/${BUILD_FLAG}/lib${CARGO_MAKE_CRATE_FS_NAME}.a \
${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/packages/flowy_sdk/macos/lib${CARGO_MAKE_CRATE_FS_NAME}.dylib ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/packages/flowy_sdk/macos/lib${CARGO_MAKE_CRATE_FS_NAME}.a
""", """,
""" """
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/binding.h \ cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/binding.h \