mirror of
https://github.com/wgh136/flutter_qjs.git
synced 2025-09-27 21:37:24 +00:00
refactor cmake
This commit is contained in:
@@ -11,7 +11,7 @@ set(JNI_LIB_NAME qjs)
|
|||||||
# You can define multiple libraries, and CMake builds them for you.
|
# You can define multiple libraries, and CMake builds them for you.
|
||||||
# Gradle automatically packages shared libraries with your APK.
|
# Gradle automatically packages shared libraries with your APK.
|
||||||
|
|
||||||
set(CXX_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../cxx)
|
include("${CMAKE_CURRENT_SOURCE_DIR}/../../../../cxx/quickjs.cmake")
|
||||||
|
|
||||||
add_library( # Sets the name of the library.
|
add_library( # Sets the name of the library.
|
||||||
${JNI_LIB_NAME}
|
${JNI_LIB_NAME}
|
||||||
@@ -22,18 +22,6 @@ add_library( # Sets the name of the library.
|
|||||||
# Provides a relative path to your source file(s).
|
# Provides a relative path to your source file(s).
|
||||||
${CXX_LIB_DIR}/ffi.cpp )
|
${CXX_LIB_DIR}/ffi.cpp )
|
||||||
|
|
||||||
# quickjs
|
|
||||||
set(QUICK_JS_LIB_DIR ${CXX_LIB_DIR}/quickjs)
|
|
||||||
file (STRINGS "${QUICK_JS_LIB_DIR}/VERSION" QUICKJS_VERSION)
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DDUMP_LEAKS -DCONFIG_VERSION=\\\"${QUICKJS_VERSION}\\\"")
|
|
||||||
target_sources(${JNI_LIB_NAME} PUBLIC
|
|
||||||
${QUICK_JS_LIB_DIR}/cutils.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libregexp.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libunicode.c
|
|
||||||
${QUICK_JS_LIB_DIR}/quickjs.c
|
|
||||||
)
|
|
||||||
target_compile_features(${JNI_LIB_NAME} PUBLIC cxx_std_17)
|
|
||||||
|
|
||||||
# Searches for a specified prebuilt library and stores the path as a
|
# Searches for a specified prebuilt library and stores the path as a
|
||||||
# variable. Because CMake includes system libraries in the search path by
|
# variable. Because CMake includes system libraries in the search path by
|
||||||
# default, you only need to specify the name of the public NDK library
|
# default, you only need to specify the name of the public NDK library
|
||||||
@@ -53,7 +41,7 @@ find_library( # Sets the name of the path variable.
|
|||||||
|
|
||||||
target_link_libraries( # Specifies the target library.
|
target_link_libraries( # Specifies the target library.
|
||||||
${JNI_LIB_NAME}
|
${JNI_LIB_NAME}
|
||||||
|
quickjs
|
||||||
# Links the target library to the log library
|
# Links the target library to the log library
|
||||||
# included in the NDK.
|
# included in the NDK.
|
||||||
${log-lib} )
|
${log-lib} )
|
@@ -3,7 +3,7 @@
|
|||||||
* @Author: ekibun
|
* @Author: ekibun
|
||||||
* @Date: 2020-09-06 18:32:45
|
* @Date: 2020-09-06 18:32:45
|
||||||
* @LastEditors: ekibun
|
* @LastEditors: ekibun
|
||||||
* @LastEditTime: 2020-09-24 00:28:11
|
* @LastEditTime: 2020-09-24 22:32:15
|
||||||
*/
|
*/
|
||||||
#include "ffi.h"
|
#include "ffi.h"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
@@ -156,11 +156,13 @@ extern "C"
|
|||||||
DLLEXPORT void jsFreeValue(JSContext *ctx, JSValue *v)
|
DLLEXPORT void jsFreeValue(JSContext *ctx, JSValue *v)
|
||||||
{
|
{
|
||||||
JS_FreeValue(ctx, *v);
|
JS_FreeValue(ctx, *v);
|
||||||
|
delete v;
|
||||||
}
|
}
|
||||||
|
|
||||||
DLLEXPORT void jsFreeValueRT(JSRuntime *rt, JSValue *v)
|
DLLEXPORT void jsFreeValueRT(JSRuntime *rt, JSValue *v)
|
||||||
{
|
{
|
||||||
JS_FreeValueRT(rt, *v);
|
JS_FreeValueRT(rt, *v);
|
||||||
|
delete v;
|
||||||
}
|
}
|
||||||
|
|
||||||
DLLEXPORT JSValue *jsDupValue(JSContext *ctx, JSValueConst *v)
|
DLLEXPORT JSValue *jsDupValue(JSContext *ctx, JSValueConst *v)
|
||||||
@@ -217,11 +219,6 @@ extern "C"
|
|||||||
return JS_IsArray(ctx, *val);
|
return JS_IsArray(ctx, *val);
|
||||||
}
|
}
|
||||||
|
|
||||||
DLLEXPORT void deleteJSValue(JSValueConst *val)
|
|
||||||
{
|
|
||||||
delete val;
|
|
||||||
}
|
|
||||||
|
|
||||||
DLLEXPORT JSValue *jsGetProperty(JSContext *ctx, JSValueConst *this_obj,
|
DLLEXPORT JSValue *jsGetProperty(JSContext *ctx, JSValueConst *this_obj,
|
||||||
JSAtom prop)
|
JSAtom prop)
|
||||||
{
|
{
|
||||||
|
@@ -75,8 +75,6 @@ extern "C"
|
|||||||
|
|
||||||
DLLEXPORT int32_t jsIsArray(JSContext *ctx, JSValueConst *val);
|
DLLEXPORT int32_t jsIsArray(JSContext *ctx, JSValueConst *val);
|
||||||
|
|
||||||
DLLEXPORT void deleteJSValue(JSValueConst *val);
|
|
||||||
|
|
||||||
DLLEXPORT JSValue *jsGetProperty(JSContext *ctx, JSValueConst *this_obj,
|
DLLEXPORT JSValue *jsGetProperty(JSContext *ctx, JSValueConst *this_obj,
|
||||||
JSAtom prop);
|
JSAtom prop);
|
||||||
|
|
||||||
|
17
cxx/quickjs.cmake
Normal file
17
cxx/quickjs.cmake
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
|
||||||
|
set(CXX_LIB_DIR ${CMAKE_CURRENT_LIST_DIR})
|
||||||
|
|
||||||
|
# quickjs
|
||||||
|
set(QUICK_JS_LIB_DIR ${CXX_LIB_DIR}/quickjs)
|
||||||
|
file (STRINGS "${QUICK_JS_LIB_DIR}/VERSION" QUICKJS_VERSION)
|
||||||
|
add_library(quickjs STATIC
|
||||||
|
${QUICK_JS_LIB_DIR}/cutils.c
|
||||||
|
${QUICK_JS_LIB_DIR}/libregexp.c
|
||||||
|
${QUICK_JS_LIB_DIR}/libunicode.c
|
||||||
|
${QUICK_JS_LIB_DIR}/quickjs.c
|
||||||
|
)
|
||||||
|
|
||||||
|
project(quickjs LANGUAGES C)
|
||||||
|
target_compile_options(quickjs PRIVATE "-DCONFIG_VERSION=\"${QUICKJS_VERSION}\"")
|
||||||
|
target_compile_options(quickjs PRIVATE "-DDUMP_LEAKS")
|
||||||
|
|
@@ -1,25 +1,10 @@
|
|||||||
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
|
||||||
project(flutter_qjs LANGUAGES CXX)
|
project(flutter_qjs LANGUAGES CXX)
|
||||||
set(CXX_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cxx)
|
include("${CMAKE_CURRENT_SOURCE_DIR}/../cxx/quickjs.cmake")
|
||||||
|
|
||||||
add_library(flutter_qjs SHARED ${CXX_LIB_DIR}/ffi.cpp)
|
add_library(flutter_qjs SHARED ${CXX_LIB_DIR}/ffi.cpp)
|
||||||
|
|
||||||
# quickjs
|
|
||||||
set(QUICK_JS_LIB_DIR ${CXX_LIB_DIR}/quickjs)
|
|
||||||
file (STRINGS "${QUICK_JS_LIB_DIR}/VERSION" QUICKJS_VERSION)
|
|
||||||
add_library(quickjs STATIC
|
|
||||||
${QUICK_JS_LIB_DIR}/cutils.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libregexp.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libunicode.c
|
|
||||||
${QUICK_JS_LIB_DIR}/quickjs.c
|
|
||||||
)
|
|
||||||
|
|
||||||
project(quickjs LANGUAGES C)
|
|
||||||
target_compile_options(quickjs PRIVATE "-DCONFIG_VERSION=\"${QUICKJS_VERSION}\"")
|
|
||||||
target_compile_options(quickjs PRIVATE "-DDUMP_LEAKS")
|
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
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 "")
|
set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "6SA4A2R2GU" CACHE INTERNAL "")
|
||||||
|
|
||||||
target_link_libraries(flutter_qjs PRIVATE quickjs)
|
target_link_libraries(flutter_qjs PRIVATE quickjs)
|
||||||
@@ -33,7 +18,7 @@ set_target_properties(flutter_qjs PROPERTIES
|
|||||||
VERSION 1.0.0
|
VERSION 1.0.0
|
||||||
# "compatibility version" in semantic format in Mach-O binary file
|
# "compatibility version" in semantic format in Mach-O binary file
|
||||||
SOVERSION 1.0.0
|
SOVERSION 1.0.0
|
||||||
PUBLIC_HEADER ffi.cpp
|
PUBLIC_HEADER ffi.h
|
||||||
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Development"
|
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Apple Development"
|
||||||
# RESOURCE "${RESOURCE_FILES}"
|
# RESOURCE "${RESOURCE_FILES}"
|
||||||
)
|
)
|
21
lib/ffi.dart
21
lib/ffi.dart
@@ -3,7 +3,7 @@
|
|||||||
* @Author: ekibun
|
* @Author: ekibun
|
||||||
* @Date: 2020-09-19 10:29:04
|
* @Date: 2020-09-19 10:29:04
|
||||||
* @LastEditors: ekibun
|
* @LastEditors: ekibun
|
||||||
* @LastEditTime: 2020-09-22 00:23:36
|
* @LastEditTime: 2020-09-24 23:25:32
|
||||||
*/
|
*/
|
||||||
import 'dart:ffi';
|
import 'dart:ffi';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
@@ -51,8 +51,10 @@ class JSTag {
|
|||||||
|
|
||||||
final DynamicLibrary qjsLib = Platform.environment['FLUTTER_TEST'] == 'true'
|
final DynamicLibrary qjsLib = Platform.environment['FLUTTER_TEST'] == 'true'
|
||||||
? (Platform.isWindows
|
? (Platform.isWindows
|
||||||
? DynamicLibrary.open("test/build/Debug/flutter_qjs.dll")
|
? DynamicLibrary.open("test/build/Debug/ffiquickjs.dll")
|
||||||
: DynamicLibrary.process())
|
: Platform.isMacOS
|
||||||
|
? DynamicLibrary.open("macos/flutterqjs.framework/flutterqjs")
|
||||||
|
: DynamicLibrary.process())
|
||||||
: (Platform.isWindows
|
: (Platform.isWindows
|
||||||
? DynamicLibrary.open("flutter_qjs_plugin.dll")
|
? DynamicLibrary.open("flutter_qjs_plugin.dll")
|
||||||
: Platform.isAndroid
|
: Platform.isAndroid
|
||||||
@@ -512,17 +514,6 @@ final int Function(
|
|||||||
)>>("jsIsArray")
|
)>>("jsIsArray")
|
||||||
.asFunction();
|
.asFunction();
|
||||||
|
|
||||||
/// void deleteJSValue(JSValueConst *val)
|
|
||||||
final void Function(
|
|
||||||
Pointer val,
|
|
||||||
) deleteJSValue = qjsLib
|
|
||||||
.lookup<
|
|
||||||
NativeFunction<
|
|
||||||
Void Function(
|
|
||||||
Pointer,
|
|
||||||
)>>("deleteJSValue")
|
|
||||||
.asFunction();
|
|
||||||
|
|
||||||
/// JSValue *jsGetProperty(JSContext *ctx, JSValueConst *this_obj,
|
/// JSValue *jsGetProperty(JSContext *ctx, JSValueConst *this_obj,
|
||||||
/// JSAtom prop)
|
/// JSAtom prop)
|
||||||
final Pointer Function(
|
final Pointer Function(
|
||||||
@@ -683,10 +674,8 @@ Pointer jsCall(
|
|||||||
Pointer jsRet = _jsCall(ctx, funcObj, _thisObj, argv.length, jsArgs);
|
Pointer jsRet = _jsCall(ctx, funcObj, _thisObj, argv.length, jsArgs);
|
||||||
if (thisObj == null) {
|
if (thisObj == null) {
|
||||||
jsFreeValue(ctx, _thisObj);
|
jsFreeValue(ctx, _thisObj);
|
||||||
deleteJSValue(_thisObj);
|
|
||||||
}
|
}
|
||||||
jsFreeValue(ctx, func1);
|
jsFreeValue(ctx, func1);
|
||||||
deleteJSValue(func1);
|
|
||||||
free(jsArgs);
|
free(jsArgs);
|
||||||
runtimeOpaques[jsGetRuntime(ctx)].port.sendPort.send('call');
|
runtimeOpaques[jsGetRuntime(ctx)].port.sendPort.send('call');
|
||||||
return jsRet;
|
return jsRet;
|
||||||
|
@@ -45,7 +45,6 @@ class FlutterQjs {
|
|||||||
var err = jsThrowInternalError(ctx, e.toString() + "\n" + stack.toString());
|
var err = jsThrowInternalError(ctx, e.toString() + "\n" + stack.toString());
|
||||||
if (method.address == 0) {
|
if (method.address == 0) {
|
||||||
jsFreeValue(ctx, err);
|
jsFreeValue(ctx, err);
|
||||||
deleteJSValue(err);
|
|
||||||
return Pointer.fromAddress(0);
|
return Pointer.fromAddress(0);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
@@ -112,7 +111,6 @@ class FlutterQjs {
|
|||||||
}
|
}
|
||||||
var ret = runtimeOpaques[_rt]?.promsieToFuture(jsval);
|
var ret = runtimeOpaques[_rt]?.promsieToFuture(jsval);
|
||||||
jsFreeValue(_ctx, jsval);
|
jsFreeValue(_ctx, jsval);
|
||||||
deleteJSValue(jsval);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -26,7 +26,6 @@ class JSRefValue implements JSRef {
|
|||||||
void release() {
|
void release() {
|
||||||
if (val != null) {
|
if (val != null) {
|
||||||
jsFreeValue(ctx, val);
|
jsFreeValue(ctx, val);
|
||||||
deleteJSValue(val);
|
|
||||||
}
|
}
|
||||||
val = null;
|
val = null;
|
||||||
ctx = null;
|
ctx = null;
|
||||||
@@ -73,12 +72,10 @@ class JSFunction extends JSRefValue {
|
|||||||
Pointer jsRet = jsCall(ctx, val, null, args);
|
Pointer jsRet = jsCall(ctx, val, null, args);
|
||||||
for (Pointer jsArg in args) {
|
for (Pointer jsArg in args) {
|
||||||
jsFreeValue(ctx, jsArg);
|
jsFreeValue(ctx, jsArg);
|
||||||
deleteJSValue(jsArg);
|
|
||||||
}
|
}
|
||||||
bool isException = jsIsException(jsRet) != 0;
|
bool isException = jsIsException(jsRet) != 0;
|
||||||
var ret = jsToDart(ctx, jsRet);
|
var ret = jsToDart(ctx, jsRet);
|
||||||
jsFreeValue(ctx, jsRet);
|
jsFreeValue(ctx, jsRet);
|
||||||
deleteJSValue(jsRet);
|
|
||||||
if (isException) {
|
if (isException) {
|
||||||
throw Exception(parseJSException(ctx));
|
throw Exception(parseJSException(ctx));
|
||||||
}
|
}
|
||||||
@@ -92,7 +89,6 @@ Pointer jsGetPropertyStr(Pointer ctx, Pointer val, String prop) {
|
|||||||
Pointer jsProp = jsGetProperty(ctx, val, jsAtom);
|
Pointer jsProp = jsGetProperty(ctx, val, jsAtom);
|
||||||
jsFreeAtom(ctx, jsAtom);
|
jsFreeAtom(ctx, jsAtom);
|
||||||
jsFreeValue(ctx, jsAtomVal);
|
jsFreeValue(ctx, jsAtomVal);
|
||||||
deleteJSValue(jsAtomVal);
|
|
||||||
return jsProp;
|
return jsProp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,10 +101,8 @@ String parseJSException(Pointer ctx, {Pointer e}) {
|
|||||||
err += '\n' + jsToCString(ctx, stack);
|
err += '\n' + jsToCString(ctx, stack);
|
||||||
}
|
}
|
||||||
jsFreeValue(ctx, stack);
|
jsFreeValue(ctx, stack);
|
||||||
deleteJSValue(stack);
|
|
||||||
}
|
}
|
||||||
jsFreeValue(ctx, e);
|
jsFreeValue(ctx, e);
|
||||||
deleteJSValue(e);
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,7 +157,6 @@ Pointer dartToJs(Pointer ctx, dynamic val, {Map<dynamic, dynamic> cache}) {
|
|||||||
);
|
);
|
||||||
jsFreeAtom(ctx, jsAtom);
|
jsFreeAtom(ctx, jsAtom);
|
||||||
jsFreeValue(ctx, jsAtomVal);
|
jsFreeValue(ctx, jsAtomVal);
|
||||||
deleteJSValue(jsAtomVal);
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -182,7 +175,6 @@ Pointer dartToJs(Pointer ctx, dynamic val, {Map<dynamic, dynamic> cache}) {
|
|||||||
);
|
);
|
||||||
jsFreeAtom(ctx, jsAtom);
|
jsFreeAtom(ctx, jsAtom);
|
||||||
jsFreeValue(ctx, jsAtomVal);
|
jsFreeValue(ctx, jsAtomVal);
|
||||||
deleteJSValue(jsAtomVal);
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -219,7 +211,6 @@ dynamic jsToDart(Pointer ctx, Pointer val, {Map<int, dynamic> cache}) {
|
|||||||
} else if (jsIsArray(ctx, val) != 0) {
|
} else if (jsIsArray(ctx, val) != 0) {
|
||||||
Pointer jslength = jsGetPropertyStr(ctx, val, "length");
|
Pointer jslength = jsGetPropertyStr(ctx, val, "length");
|
||||||
int length = jsToInt64(ctx, jslength);
|
int length = jsToInt64(ctx, jslength);
|
||||||
deleteJSValue(jslength);
|
|
||||||
List<dynamic> ret = List();
|
List<dynamic> ret = List();
|
||||||
cache[valptr] = ret;
|
cache[valptr] = ret;
|
||||||
for (int i = 0; i < length; ++i) {
|
for (int i = 0; i < length; ++i) {
|
||||||
@@ -228,10 +219,8 @@ dynamic jsToDart(Pointer ctx, Pointer val, {Map<int, dynamic> cache}) {
|
|||||||
var jsProp = jsGetProperty(ctx, val, jsAtom);
|
var jsProp = jsGetProperty(ctx, val, jsAtom);
|
||||||
jsFreeAtom(ctx, jsAtom);
|
jsFreeAtom(ctx, jsAtom);
|
||||||
jsFreeValue(ctx, jsAtomVal);
|
jsFreeValue(ctx, jsAtomVal);
|
||||||
deleteJSValue(jsAtomVal);
|
|
||||||
ret.add(jsToDart(ctx, jsProp, cache: cache));
|
ret.add(jsToDart(ctx, jsProp, cache: cache));
|
||||||
jsFreeValue(ctx, jsProp);
|
jsFreeValue(ctx, jsProp);
|
||||||
deleteJSValue(jsProp);
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
} else {
|
} else {
|
||||||
@@ -248,9 +237,7 @@ dynamic jsToDart(Pointer ctx, Pointer val, {Map<int, dynamic> cache}) {
|
|||||||
var jsProp = jsGetProperty(ctx, val, jsAtom);
|
var jsProp = jsGetProperty(ctx, val, jsAtom);
|
||||||
ret[jsToDart(ctx, jsAtomValue, cache: cache)] = jsToDart(ctx, jsProp, cache: cache);
|
ret[jsToDart(ctx, jsAtomValue, cache: cache)] = jsToDart(ctx, jsProp, cache: cache);
|
||||||
jsFreeValue(ctx, jsAtomValue);
|
jsFreeValue(ctx, jsAtomValue);
|
||||||
deleteJSValue(jsAtomValue);
|
|
||||||
jsFreeValue(ctx, jsProp);
|
jsFreeValue(ctx, jsProp);
|
||||||
deleteJSValue(jsProp);
|
|
||||||
jsFreeAtom(ctx, jsAtom);
|
jsFreeAtom(ctx, jsAtom);
|
||||||
}
|
}
|
||||||
free(ptab);
|
free(ptab);
|
||||||
@@ -283,7 +270,6 @@ Pointer jsNewContextWithPromsieWrapper(Pointer rt) {
|
|||||||
JSEvalType.GLOBAL);
|
JSEvalType.GLOBAL);
|
||||||
var promiseWrapper = JSRefValue(ctx, jsPromiseWrapper);
|
var promiseWrapper = JSRefValue(ctx, jsPromiseWrapper);
|
||||||
jsFreeValue(ctx, jsPromiseWrapper);
|
jsFreeValue(ctx, jsPromiseWrapper);
|
||||||
deleteJSValue(jsPromiseWrapper);
|
|
||||||
runtimeOpaques[rt].promsieToFuture = (promise) {
|
runtimeOpaques[rt].promsieToFuture = (promise) {
|
||||||
var completer = Completer();
|
var completer = Completer();
|
||||||
var wrapper = promiseWrapper.val;
|
var wrapper = promiseWrapper.val;
|
||||||
@@ -291,7 +277,6 @@ Pointer jsNewContextWithPromsieWrapper(Pointer rt) {
|
|||||||
var jsPromise = jsCall(ctx, wrapper, null, [promise]);
|
var jsPromise = jsCall(ctx, wrapper, null, [promise]);
|
||||||
runtimeOpaques[rt].ref.add(JSPromise(ctx, jsPromise, completer));
|
runtimeOpaques[rt].ref.add(JSPromise(ctx, jsPromise, completer));
|
||||||
jsFreeValue(ctx, jsPromise);
|
jsFreeValue(ctx, jsPromise);
|
||||||
deleteJSValue(jsPromise);
|
|
||||||
return completer.future;
|
return completer.future;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1,19 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
|
||||||
set(CXX_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cxx)
|
include("${CMAKE_CURRENT_SOURCE_DIR}/../cxx/quickjs.cmake")
|
||||||
|
target_compile_options(quickjs PRIVATE "-fPIC")
|
||||||
# quickjs
|
|
||||||
set(QUICK_JS_LIB_DIR ${CXX_LIB_DIR}/quickjs)
|
|
||||||
file (STRINGS "${QUICK_JS_LIB_DIR}/VERSION" QUICKJS_VERSION)
|
|
||||||
add_library(libquickjs SHARED
|
|
||||||
${QUICK_JS_LIB_DIR}/cutils.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libregexp.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libunicode.c
|
|
||||||
${QUICK_JS_LIB_DIR}/quickjs.c
|
|
||||||
)
|
|
||||||
project(libquickjs LANGUAGES C)
|
|
||||||
target_compile_options(libquickjs PRIVATE "-DCONFIG_VERSION=\"${QUICKJS_VERSION}\"")
|
|
||||||
target_compile_options(libquickjs PRIVATE "-DDUMP_LEAKS")
|
|
||||||
|
|
||||||
set(PROJECT_NAME "flutter_qjs")
|
set(PROJECT_NAME "flutter_qjs")
|
||||||
project(${PROJECT_NAME} LANGUAGES CXX)
|
project(${PROJECT_NAME} LANGUAGES CXX)
|
||||||
@@ -33,7 +21,7 @@ target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL)
|
|||||||
target_include_directories(${PLUGIN_NAME} INTERFACE
|
target_include_directories(${PLUGIN_NAME} INTERFACE
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/include")
|
"${CMAKE_CURRENT_SOURCE_DIR}/include")
|
||||||
target_link_libraries(${PLUGIN_NAME} PRIVATE flutter)
|
target_link_libraries(${PLUGIN_NAME} PRIVATE flutter)
|
||||||
target_link_libraries(${PLUGIN_NAME} PRIVATE libquickjs)
|
target_link_libraries(${PLUGIN_NAME} PRIVATE quickjs)
|
||||||
target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::GTK)
|
target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::GTK)
|
||||||
|
|
||||||
# List of absolute paths to libraries that should be bundled with the plugin
|
# List of absolute paths to libraries that should be bundled with the plugin
|
||||||
|
@@ -1,23 +1,9 @@
|
|||||||
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
|
||||||
project(flutterqjs LANGUAGES CXX)
|
project(flutterqjs LANGUAGES CXX)
|
||||||
set(CXX_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cxx)
|
include("${CMAKE_CURRENT_SOURCE_DIR}/../cxx/quickjs.cmake")
|
||||||
|
|
||||||
add_library(flutterqjs SHARED ${CXX_LIB_DIR}/ffi.cpp)
|
add_library(flutterqjs SHARED ${CXX_LIB_DIR}/ffi.cpp)
|
||||||
|
|
||||||
# quickjs
|
|
||||||
set(QUICK_JS_LIB_DIR ${CXX_LIB_DIR}/quickjs)
|
|
||||||
file (STRINGS "${QUICK_JS_LIB_DIR}/VERSION" QUICKJS_VERSION)
|
|
||||||
add_library(quickjs STATIC
|
|
||||||
${QUICK_JS_LIB_DIR}/cutils.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libregexp.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libunicode.c
|
|
||||||
${QUICK_JS_LIB_DIR}/quickjs.c
|
|
||||||
)
|
|
||||||
|
|
||||||
project(quickjs LANGUAGES C)
|
|
||||||
target_compile_options(quickjs PRIVATE "-DCONFIG_VERSION=\"${QUICKJS_VERSION}\"")
|
|
||||||
target_compile_options(quickjs PRIVATE "-DDUMP_LEAKS")
|
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output/$ENV{ABI})
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output/$ENV{ABI})
|
||||||
set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "6SA4A2R2GU" CACHE INTERNAL "")
|
set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "6SA4A2R2GU" CACHE INTERNAL "")
|
||||||
|
@@ -1,21 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
|
||||||
project(ffi_library LANGUAGES CXX)
|
project(ffiquickjs LANGUAGES CXX)
|
||||||
set(CXX_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cxx)
|
|
||||||
|
|
||||||
add_library(flutter_qjs SHARED ${CXX_LIB_DIR}/ffi.cpp)
|
include("${CMAKE_CURRENT_SOURCE_DIR}/../cxx/quickjs.cmake")
|
||||||
|
|
||||||
# quickjs
|
add_library(ffiquickjs SHARED ${CXX_LIB_DIR}/ffi.cpp)
|
||||||
set(QUICK_JS_LIB_DIR ${CXX_LIB_DIR}/quickjs)
|
target_link_libraries(ffiquickjs PRIVATE quickjs)
|
||||||
file (STRINGS "${QUICK_JS_LIB_DIR}/VERSION" QUICKJS_VERSION)
|
|
||||||
add_library(libquickjs STATIC
|
|
||||||
${QUICK_JS_LIB_DIR}/cutils.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libregexp.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libunicode.c
|
|
||||||
${QUICK_JS_LIB_DIR}/quickjs.c
|
|
||||||
)
|
|
||||||
|
|
||||||
project(libquickjs LANGUAGES C)
|
|
||||||
target_compile_options(libquickjs PRIVATE "-DCONFIG_VERSION=\"${QUICKJS_VERSION}\"")
|
|
||||||
target_compile_options(libquickjs PRIVATE "-DDUMP_LEAKS")
|
|
||||||
|
|
||||||
target_link_libraries(flutter_qjs PRIVATE libquickjs)
|
|
@@ -3,7 +3,7 @@
|
|||||||
* @Author: ekibun
|
* @Author: ekibun
|
||||||
* @Date: 2020-09-06 13:02:46
|
* @Date: 2020-09-06 13:02:46
|
||||||
* @LastEditors: ekibun
|
* @LastEditors: ekibun
|
||||||
* @LastEditTime: 2020-09-21 01:39:49
|
* @LastEditTime: 2020-09-24 22:55:33
|
||||||
*/
|
*/
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
@@ -12,7 +12,7 @@ import 'package:flutter_qjs/flutter_qjs.dart';
|
|||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
test('make', () async {
|
test('make.windows', () async {
|
||||||
final utf8Encoding = Encoding.getByName('utf-8');
|
final utf8Encoding = Encoding.getByName('utf-8');
|
||||||
final cmakePath =
|
final cmakePath =
|
||||||
"C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe";
|
"C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe";
|
||||||
@@ -38,7 +38,7 @@ void main() async {
|
|||||||
stdout.write(result.stdout);
|
stdout.write(result.stdout);
|
||||||
stderr.write(result.stderr);
|
stderr.write(result.stderr);
|
||||||
expect(result.exitCode, 0);
|
expect(result.exitCode, 0);
|
||||||
});
|
}, testOn: 'windows');
|
||||||
test('jsToDart', () async {
|
test('jsToDart', () async {
|
||||||
final qjs = FlutterQjs();
|
final qjs = FlutterQjs();
|
||||||
qjs.setMethodHandler((method, args) {
|
qjs.setMethodHandler((method, args) {
|
||||||
@@ -57,8 +57,8 @@ void main() async {
|
|||||||
0.1, true, false, 1, "world", module
|
0.1, true, false, 1, "world", module
|
||||||
]));
|
]));
|
||||||
""", "<eval>").then((value) {
|
""", "<eval>").then((value) {
|
||||||
print(value);
|
print(value);
|
||||||
});
|
});
|
||||||
Future.delayed(Duration(seconds: 5)).then((v) {
|
Future.delayed(Duration(seconds: 5)).then((v) {
|
||||||
qjs.close();
|
qjs.close();
|
||||||
});
|
});
|
||||||
|
@@ -1,19 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.15)
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
include("${CMAKE_CURRENT_SOURCE_DIR}/../cxx/quickjs.cmake")
|
||||||
set(CXX_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cxx)
|
|
||||||
|
|
||||||
# quickjs
|
|
||||||
set(QUICK_JS_LIB_DIR ${CXX_LIB_DIR}/quickjs)
|
|
||||||
file (STRINGS "${QUICK_JS_LIB_DIR}/VERSION" QUICKJS_VERSION)
|
|
||||||
add_library(libquickjs STATIC
|
|
||||||
${QUICK_JS_LIB_DIR}/cutils.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libregexp.c
|
|
||||||
${QUICK_JS_LIB_DIR}/libunicode.c
|
|
||||||
${QUICK_JS_LIB_DIR}/quickjs.c
|
|
||||||
)
|
|
||||||
project(libquickjs LANGUAGES C)
|
|
||||||
target_compile_options(libquickjs PRIVATE "-DCONFIG_VERSION=\"${QUICKJS_VERSION}\"")
|
|
||||||
target_compile_options(libquickjs PRIVATE "-DDUMP_LEAKS")
|
|
||||||
|
|
||||||
set(PROJECT_NAME "flutter_qjs")
|
set(PROJECT_NAME "flutter_qjs")
|
||||||
project(${PROJECT_NAME} LANGUAGES CXX)
|
project(${PROJECT_NAME} LANGUAGES CXX)
|
||||||
@@ -31,7 +17,7 @@ set_target_properties(${PLUGIN_NAME} PROPERTIES
|
|||||||
target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL)
|
target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL)
|
||||||
target_include_directories(${PLUGIN_NAME} INTERFACE
|
target_include_directories(${PLUGIN_NAME} INTERFACE
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}/include")
|
"${CMAKE_CURRENT_SOURCE_DIR}/include")
|
||||||
target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin libquickjs)
|
target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin quickjs)
|
||||||
|
|
||||||
# List of absolute paths to libraries that should be bundled with the plugin
|
# List of absolute paths to libraries that should be bundled with the plugin
|
||||||
set(flutter_qjs_bundled_libraries
|
set(flutter_qjs_bundled_libraries
|
||||||
|
Reference in New Issue
Block a user