refactor cmake

This commit is contained in:
ekibun
2020-09-25 00:01:18 +08:00
parent fc27d0f2db
commit 3c41d0d250
14 changed files with 45 additions and 142 deletions

View File

@@ -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} )

View File

@@ -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)
{ {

View File

@@ -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
View 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")

View File

@@ -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}"
) )

View File

@@ -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;
@@ -736,4 +725,4 @@ final Pointer Function(
Pointer, Pointer,
Pointer, Pointer,
)>>("jsNewPromiseCapability") )>>("jsNewPromiseCapability")
.asFunction(); .asFunction();

View File

@@ -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;
} }
} }

View File

@@ -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;
}; };

View File

@@ -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

View File

@@ -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 "")

View File

@@ -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)

View File

@@ -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();
}); });

View File

@@ -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