From 343c1ffd301692311204f30e639582278709210e Mon Sep 17 00:00:00 2001 From: ekibun Date: Thu, 24 Sep 2020 10:15:45 -0700 Subject: [PATCH] macos ffi --- example/macos/Podfile.lock | 2 +- ios/CMakeLists.txt | 25 ++++--------------------- ios/flutter_qjs.podspec | 3 +-- ios/make.sh | 2 +- lib/ffi.dart | 6 ++---- macos/CMakeLists.txt | 26 ++++---------------------- macos/flutter_qjs.podspec | 3 +-- macos/make.sh | 2 +- test/flutter_qjs_test.dart | 11 +++++++++++ test/make.sh | 11 +++++++++++ 10 files changed, 37 insertions(+), 54 deletions(-) create mode 100644 test/make.sh diff --git a/example/macos/Podfile.lock b/example/macos/Podfile.lock index 01307f3..f213416 100644 --- a/example/macos/Podfile.lock +++ b/example/macos/Podfile.lock @@ -14,7 +14,7 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/flutter/darwin-x64 SPEC CHECKSUMS: - flutter_qjs: df517bcb1e7a68d630e4fe9454db7ab15bfdf425 + flutter_qjs: 5a33cf20dbbab6bc82bc454ec2db2dd8c2e50665 FlutterMacOS: 15bea8a44d2fa024068daa0140371c020b4b6ff9 PODFILE CHECKSUM: d8ba9b3e9e93c62c74a660b46c6fcb09f03991a7 diff --git a/ios/CMakeLists.txt b/ios/CMakeLists.txt index 47f0068..7f04fc7 100644 --- a/ios/CMakeLists.txt +++ b/ios/CMakeLists.txt @@ -1,24 +1,7 @@ cmake_minimum_required(VERSION 3.7 FATAL_ERROR) -project(flutter_qjs LANGUAGES CXX) +project(ffiquickjs LANGUAGES CXX) + include("${CMAKE_CURRENT_SOURCE_DIR}/../cxx/quickjs.cmake") -add_library(flutter_qjs SHARED ${CXX_LIB_DIR}/ffi.cpp) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "6SA4A2R2GU" CACHE INTERNAL "") - -target_link_libraries(flutter_qjs PRIVATE quickjs) - -set_target_properties(flutter_qjs PROPERTIES - FRAMEWORK TRUE - FRAMEWORK_VERSION A - MACOSX_FRAMEWORK_IDENTIFIER soko.ekibun.flutter_qjs -# MACOSX_FRAMEWORK_INFO_PLIST Info.plist -# "current version" in semantic format in Mach-O binary file - VERSION 1.0.0 -# "compatibility version" in semantic format in Mach-O binary file - SOVERSION 1.0.0 - PUBLIC_HEADER ffi.h - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Development" - # RESOURCE "${RESOURCE_FILES}" -) \ No newline at end of file +add_library(ffiquickjs SHARED ${CXX_LIB_DIR}/ffi.cpp) +target_link_libraries(ffiquickjs PRIVATE quickjs) \ No newline at end of file diff --git a/ios/flutter_qjs.podspec b/ios/flutter_qjs.podspec index 33e0fa7..52de5de 100644 --- a/ios/flutter_qjs.podspec +++ b/ios/flutter_qjs.podspec @@ -19,7 +19,6 @@ A new flutter plugin project. # Flutter.framework does not contain a i386 slice. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } - s.vendored_frameworks = 'build/release-iphoneos/flutter_qjs.framework' - s.static_framework = false + s.vendored_libraries = 'build/Debug/libffiquickjs.dylib' s.swift_version = '5.0' end diff --git a/ios/make.sh b/ios/make.sh index 04ef561..3408d58 100644 --- a/ios/make.sh +++ b/ios/make.sh @@ -8,4 +8,4 @@ mkdir build cd build cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../ios.toolchain.cmake -DPLATFORM=OS64COMBINED -cmake --build . --config Release +cmake --build . --config Debug diff --git a/lib/ffi.dart b/lib/ffi.dart index 0c67ce5..6e61473 100644 --- a/lib/ffi.dart +++ b/lib/ffi.dart @@ -53,15 +53,13 @@ final DynamicLibrary qjsLib = Platform.environment['FLUTTER_TEST'] == 'true' ? (Platform.isWindows ? DynamicLibrary.open("test/build/Debug/ffiquickjs.dll") : Platform.isMacOS - ? DynamicLibrary.open("macos/flutterqjs.framework/flutterqjs") + ? DynamicLibrary.open("test/build/Debug/libffiquickjs.dylib") : DynamicLibrary.process()) : (Platform.isWindows ? DynamicLibrary.open("flutter_qjs_plugin.dll") : Platform.isAndroid ? DynamicLibrary.open("libqjs.so") - : Platform.isIOS || Platform.isMacOS - ? DynamicLibrary.open("flutterqjs.framework/flutterqjs") - : DynamicLibrary.process()); + : DynamicLibrary.process()); /// JSValue *jsThrowInternalError(JSContext *ctx, char *message) final Pointer Function( diff --git a/macos/CMakeLists.txt b/macos/CMakeLists.txt index c61ac2b..7f04fc7 100644 --- a/macos/CMakeLists.txt +++ b/macos/CMakeLists.txt @@ -1,25 +1,7 @@ cmake_minimum_required(VERSION 3.7 FATAL_ERROR) -project(flutterqjs LANGUAGES CXX) +project(ffiquickjs LANGUAGES CXX) + include("${CMAKE_CURRENT_SOURCE_DIR}/../cxx/quickjs.cmake") -add_library(flutterqjs SHARED ${CXX_LIB_DIR}/ffi.cpp) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output/$ENV{ABI}) -set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "6SA4A2R2GU" CACHE INTERNAL "") - -target_link_libraries(flutterqjs PRIVATE quickjs) - -set_target_properties(flutterqjs PROPERTIES - FRAMEWORK TRUE - FRAMEWORK_VERSION A - MACOSX_FRAMEWORK_IDENTIFIER soko.ekibun.flutterqjs -# MACOSX_FRAMEWORK_INFO_PLIST Info.plist -# "current version" in semantic format in Mach-O binary file - VERSION 1.0.0 -# "compatibility version" in semantic format in Mach-O binary file - SOVERSION 1.0.0 - PUBLIC_HEADER ffi.h - XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Development" - # RESOURCE "${RESOURCE_FILES}" -) \ No newline at end of file +add_library(ffiquickjs SHARED ${CXX_LIB_DIR}/ffi.cpp) +target_link_libraries(ffiquickjs PRIVATE quickjs) \ No newline at end of file diff --git a/macos/flutter_qjs.podspec b/macos/flutter_qjs.podspec index 2b4c4b1..5d06866 100644 --- a/macos/flutter_qjs.podspec +++ b/macos/flutter_qjs.podspec @@ -18,7 +18,6 @@ A new flutter plugin project. s.platform = :osx, '10.11' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } - s.vendored_frameworks = 'build/Release/flutterqjs.framework' - s.static_framework = false + s.vendored_libraries = 'build/Debug/libffiquickjs.dylib' s.swift_version = '5.0' end diff --git a/macos/make.sh b/macos/make.sh index 5d619e2..9299f87 100644 --- a/macos/make.sh +++ b/macos/make.sh @@ -8,4 +8,4 @@ mkdir build cd build cmake .. -G Xcode -DCMAKE_OSX_ARCHITECTURES=x86_64 -cmake --build . --config Release +cmake --build . --config Debug diff --git a/test/flutter_qjs_test.dart b/test/flutter_qjs_test.dart index 07276eb..29a19a6 100644 --- a/test/flutter_qjs_test.dart +++ b/test/flutter_qjs_test.dart @@ -8,6 +8,7 @@ import 'dart:convert'; import 'dart:io'; +import 'package:flutter_qjs/ffi.dart'; import 'package:flutter_qjs/flutter_qjs.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -39,6 +40,16 @@ void main() async { stderr.write(result.stderr); expect(result.exitCode, 0); }, testOn: 'windows'); + test('make.macos', () async { + var result = Process.runSync( + "sh", + ['./make.sh'], + workingDirectory: 'macos', + ); + stdout.write(result.stdout); + stderr.write(result.stderr); + expect(result.exitCode, 0); + }, testOn: 'mac-os'); test('jsToDart', () async { final qjs = FlutterQjs(); qjs.setMethodHandler((method, args) { diff --git a/test/make.sh b/test/make.sh new file mode 100644 index 0000000..9299f87 --- /dev/null +++ b/test/make.sh @@ -0,0 +1,11 @@ +### + # @Description: + # @Author: ekibun + # @Date: 2020-09-24 00:50:13 + # @LastEditors: ekibun + # @LastEditTime: 2020-09-24 00:51:43 +### +mkdir build +cd build +cmake .. -G Xcode -DCMAKE_OSX_ARCHITECTURES=x86_64 +cmake --build . --config Debug