Coder Social home page Coder Social logo

awtk-jerryscript's Introduction

awtk-jerryscript

ZLG 开源 GUI 引擎 awtk 针对三星开源 JS 引擎 jerryscript 的绑定。

准备

  1. 获取 awtk 并编译
git clone https://github.com/zlgopen/awtk.git
cd awtk; scons; cd -

AWTK 的编译环境请参考 AWTK 的文档。

  1. 获取 awtk-jerryscript 并编译
git clone https://github.com/zlgopen/awtk-jerryscript.git
cd awtk-jerryscript
git clone https://github.com/jerryscript-project/jerryscript.git 3rd/jerryscript/jerryscript
cd 3rd/jerryscript/jerryscript
git reset --hard 3737a28eafd580a2bee2794e4f5edd0c0471a0c6
  • 生成资源
python ./scripts/update_res.py all

或者通过 designer 生成资源

  • 编译PC版本
scons
  • 编译LINUX FB版本
scons LINUX_FB=true

完整编译选项请参考编译选项

运行

./bin/awtkRun xxxx

请把 xxxx 换成具体的 js 文件, xxxx对应的js文件需要放在assets/default/raw/scripts目录下。

如:

./bin/awtkRun basic

更新绑定(由本项目的维护人员完成)

./sync.sh

在非 bash 终端(如 Windows 平台的 cmd.exe),需要根据 sync.sh 的内容手工执行相应的命令。

文档

本文以 Linux/MacOS 为例,Windows 可能会微妙差异,请酌情处理。

注意事项

如果希望自己的应用程序,同时支持 AWTK-JS 和 AWTK-WEB,还需要注意下列事项:

  • 避免直接调用 gc() 函数。

  • 避免使用模态对话框。

  • 避免使用动态 GIF 图片。

  • 避免直接使用 value_t/color_t/bitmap_t/object_t 等类。

编译 awtk-iotjs 版本

iotjs 用的 jerryscript 2.4, 而 awtk-jerryscript 用的jerryscrip 3.0。 编译 awtk-iotjs 版本需要 checkout jerryscript 2.4,再编译:

cd 3rd/jerryscript/jerryscript && git checkout 8ba0d1b6ee5a065a42f3b306771ad8e3c0d819bc && cd -
scons IOTJS=true

awtk-jerryscript's People

Contributors

menway avatar xianjimli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

awtk-jerryscript's Issues

编译时报错 error: use of undeclared identifier 'EVT_DONE' 环境macos

报错信息如下
src/c/tk_jerryscript.c:2307:34: error: use of undeclared identifier 'EVT_DONE';
did you mean 'EVT_NONE'?
return jsvalue_create_int(ctx, EVT_DONE);
^~~~~~~~
EVT_NONE
/Users/zhangyuchen/Work/code/awtk/src/tkc/event.h:40:3: note: 'EVT_NONE'
declared here
EVT_NONE = 0,
^
src/c/tk_jerryscript.c:16854:28: warning: implicit declaration of function
'file_chooser_cast' is invalid in C99 [-Wimplicit-function-declaration]
ret = (file_chooser_t*)file_chooser_cast(data);
^
src/c/tk_jerryscript.c:16854:11: warning: cast to 'file_chooser_t ' (aka
'struct _file_chooser_t ') from smaller integer type 'int'
[-Wint-to-pointer-cast]
ret = (file_chooser_t
)file_chooser_cast(data);
^
src/c/tk_jerryscript.c:16915:24: warning: implicit declaration of function
'file_chooser_get_dir' is invalid in C99 [-Wimplicit-function-declaration]
ret = (const char
)file_chooser_get_dir(chooser);
^
src/c/tk_jerryscript.c:16915:11: warning: cast to 'const char ' from smaller
integer type 'int' [-Wint-to-pointer-cast]
ret = (const char
)file_chooser_get_dir(chooser);
^
src/c/tk_jerryscript.c:16930:24: warning: implicit declaration of function
'file_chooser_get_filename' is invalid in C99
[-Wimplicit-function-declaration]
ret = (const char*)file_chooser_get_filename(chooser);
^
src/c/tk_jerryscript.c:16930:11: warning: cast to 'const char ' from smaller
integer type 'int' [-Wint-to-pointer-cast]
ret = (const char
)file_chooser_get_filename(chooser);
^
src/c/tk_jerryscript.c:16944:19: warning: implicit declaration of function
'file_chooser_is_aborted' is invalid in C99
[-Wimplicit-function-declaration]
ret = (bool_t)file_chooser_is_aborted(chooser);
^
7 warnings and 1 error generated.
scons: *** [src/c/tk_jerryscript.o] Error 1
scons: building terminated because of errors.

cannot find module awtk_config

import awtk_config as awtk

scons: Reading SConscript files ...
ModuleNotFoundError: No module named 'awtk_config':
  File "D:\Files\Code\Github\awtk\awtk-js\SConstruct", line 6:
    import awtk_config as awtk

scons 报错undefined reference to ‘jerry_get_boolean_value’

JerryScript维护团队在2021/06/24 为了解决自己的bug#4685,提交了个版本8f71871a39216381c25f0b33ed659f12e46ef63a,备注为Remove jerry_get_boolean_value (#4685) 。而awtk-jerryscript编译时需要依赖jerry_get_boolean_value ,导致报错,麻烦尽快更新下。另提一点建议,希望doc中可以指定一下依赖的jerryscript版本,不然这种问题很难排查。谢谢,维护团队辛苦了。

js环境

是否支持 node下用vue框架引用组件

scons 报错undefined reference to ‘jerry_get_boolean_value’

JerryScript维护团队在2021/06/24 为了解决自己的bug#4685,提交了个版本8f71871a39216381c25f0b33ed659f12e46ef63a,备注为Remove jerry_get_boolean_value (#4685) 。而awtk-jerryscript编译时需要依赖jerry_get_boolean_value ,导致报错,麻烦尽快更新下。另提一点建议,希望doc中可以指定一下依赖的jerryscript版本,不然这种问题很难排查。谢谢,维护团队辛苦了。

awtk-web编译js项目报错

环境:Win10
步骤:
1.获取 awtk 并编译

git clone https://github.com/zlgopen/awtk.git
cd awtk; scons; cd 

通过。

2.获取 awtk-jerryscript 并编译

git clone https://github.com/zlgopen/awtk-jerryscript.git
cd awtk-jerryscript
git clone https://github.com/jerryscript-project/jerryscript.git 3rd/jerryscript/jerryscript
cd 3rd/jerryscript/jerryscript
git reset --hard 3737a28eafd580a2bee2794e4f5edd0c0471a0c6

通过。

3.运行

cd d:/awtk-jerryscript
.\bin\awtkRun.exe  .\res\assets\default\raw\scripts\demoui.js

运行demo示例正常

4.部署到浏览器
修改D:\awtk-jerryscript\design\default\scripts\demoui_web.json

{
"name":"demouijs",
"version":"1.0",
"app_type":"js",
"assets" : "../../../../awtk/design", //原assets路径为:"../../../awtk/design"
"sources":["demoui.js"]
}

编译:

cd ../awtk-web
python build.py D:\awtk-jerryscript\design\default\scripts\demoui_web.json all

输出:

...
"D:\\emsdk\\upstream\\bin\\clang.exe" -cc1 -triple wasm32-unknown-emscripten -emit-obj -mrelax-all -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -debug-info-kind=constructor -dwarf-version=4 -debugger-tuning=gdb "-fdebug-compilation-dir=D:\\awtk-web" -v "-fcoverage-compilation-dir=D:\\awtk-web" -resource-dir "D:\\emsdk\\upstream\\lib\\clang\\19" -isystem "D:\\emsdk\\upstream\\emscripten\\cache\\sysroot\\include\\SDL2" -D EMSCRIPTEN -D SAFE_HEAP=1 -D ASSERTIONS=1 -D STACK_OVERFLOW_CHECK=1 -D AWTK_WEB_JS -D WITH_DATA_READER_WRITER -D HAS_STD_MALLOC -D NDEBUG -D AWTK_WEB -I src/c -D WITH_WINDOW_ANIMATORS -D WITH_NANOVG_GPU -I "D:\\awtk-web\\webroot\\demouijs\\res" -I "D:\\awtk/3rd" -I "D:\\awtk" -I "D:\\awtk\\src" -I "D:\\awtk\\src/ext_widgets" -isysroot "D:\\emsdk\\upstream\\emscripten\\cache\\sysroot" -internal-isystem "D:\\emsdk\\upstream\\lib\\clang\\19\\include" -internal-isystem "D:\\emsdk\\upstream\\emscripten\\cache\\sysroot/include/wasm32-emscripten" -internal-isystem "D:\\emsdk\\upstream\\emscripten\\cache\\sysroot/include" -Werror=implicit-function-declaration -ferror-limit 19 -fmessage-length=120 -fvisibility=default -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -fcolor-diagnostics "-iwithsysroot/include\\compat" -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o "C:\\Users\\nihaoa\\AppData\\Local\\Temp\\emscripten_temp_peq6rwbh\\main_302.o" -x c "D:\\awtk-web\\src\\c\\main.c"
clang -cc1 version 19.0.0git based upon LLVM 19.0.0git default target x86_64-pc-windows-msvc
ignoring nonexistent directory "D:\emsdk\upstream\emscripten\cache\sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
 src/c
 D:\awtk-web\webroot\demouijs\res
 D:\awtk/3rd
 D:\awtk
 D:\awtk\src
 D:\awtk\src/ext_widgets
 D:\emsdk\upstream\emscripten\cache\sysroot\include\SDL2
 D:\emsdk\upstream\emscripten\cache\sysroot/include\compat
 D:\emsdk\upstream\lib\clang\19\include
 D:\emsdk\upstream\emscripten\cache\sysroot/include
End of search list.
D:\awtk-web\src\c\main.c:11:10: fatal error: 'assets_web.inc' file not found
   11 | #include "assets_web.inc"
      |          ^~~~~~~~~~~~~~~~
1 error generated.
emcc: error: 'D:/emsdk/upstream/bin\clang.exe -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=D:\emsdk\upstream\emscripten\cache\sysroot -DEMSCRIPTEN -Werror=implicit-function-declaration -isystem D:\emsdk\upstream\emscripten\cache\sysroot\include\SDL2 -Xclang -iwithsysroot/include\compat -v -g3 -g -DSAFE_HEAP=1 -DASSERTIONS=1 -DSTACK_OVERFLOW_CHECK=1 -DAWTK_WEB_JS -DWITH_DATA_READER_WRITER -DHAS_STD_MALLOC -DNDEBUG -DAWTK_WEB -Isrc/c -DWITH_WINDOW_ANIMATORS -DWITH_NANOVG_GPU -ID:\awtk-web\webroot\demouijs\res -ID:\awtk/3rd -ID:\awtk -ID:\awtk\src -ID:\awtk\src/ext_widgets D:\awtk-web\src\c\main.c -c -o C:\Users\nihaoa\AppData\Local\Temp\emscripten_temp_peq6rwbh\main_302.o' failed (returned 1)
D:\awtk-web\webroot\demouijs\js\app.js
api/awtk_api_browser_prefix.js
api/awtk_api.js
D:\awtk-jerryscript\design\default\scripts\demoui.js
['api/awtk_api_browser_prefix.js', 'api/awtk_api.js', 'D:\\awtk-jerryscript\\design\\default\\scripts\\demoui.js'] D:\awtk-web\webroot\demouijs\js\app.js
D:\awtk-web\webroot\demouijs\js\awtk_web.js
D:\awtk-web\webroot\demouijs\assets_web.js
src/js/browser.js
gen/app_config.js
src/js/webgl2d.js
src/js/image_cache.js
src/js/assets_manager.js
src/js/image_loader.js
src/js/input_method_web.js
src/js/utils.js
src/js/edit_element.js
src/js/vgcanvas_web.js
src/js/awtk_wrap.js
src/js/key_event.js
src/js/events_source.js
src/js/main_loop_web.js

win10下编译报错 无法解析的外部符号 scanner_scan_bracket scanner_check_directives

成功编译awtk, 但在尝试编译awtk-jerryscript遇到:
正在创建库 bin\awtkRun.lib 和对象 bin\awtkRun.exp
jerryscript.lib(jerry-all-in.obj) : error LNK2019: 无法解析的外部符号 scanner_scan_bracket,该符号在函数 scanner_scan_primary_expression 中被引用
jerryscript.lib(jerry-all-in.obj) : error LNK2019: 无法解析的外部符号 scanner_check_directives,该符号在函数 scanner_scan_all 中被引用
bin\awtkRun.exe : fatal error LNK1120: 2 个无法解析的外部命令
scons: *** [bin\awtkRun.exe] Error 1120
scons: building terminated because of errors.

编译环境 visual studio 2019 / Windows 10 SDK (10.0.17763.0)
python 3.7.6

win在执行scons报错

src\c\tk_jerryscript.c(189): error C2039: “size”: 不是“_event_t”的成员
D:\源码\awtk\src\tkc/event.h(109): note: 参见“_event_t”的声明
src\c\tk_jerryscript.c(189): error C2198: “jsvalue_create_int”: 用于调用的参数太少
src\c\tk_jerryscript.c(2051): error C2065: “EVT_KEY_LONG_PRESS”: 未声明的标识符
src\c\tk_jerryscript.c(6198): error C2065: “WIDGET_PROP_AUTO_ADJUST_SIZE”: 未声明的标识符
src\c\tk_jerryscript.c(6198): warning C4047: “函数”:“const char *”与“int”的间接级别不同
src\c\tk_jerryscript.c(6198): warning C4024: “jsvalue_create_string”: 形参和实参 2 的类型不同
src\c\tk_jerryscript.c(6205): error C2065: “WIDGET_PROP_SINGLE_INSTANCE”: 未声明的标识符
src\c\tk_jerryscript.c(6205): warning C4047: “函数”:“const char *”与“int”的间接级别不同
src\c\tk_jerryscript.c(6205): warning C4024: “jsvalue_create_string”: 形参和实参 2 的类型不同
src\c\tk_jerryscript.c(6291): error C2065: “WIDGET_PROP_LINE_WRAP”: 未声明的标识符
src\c\tk_jerryscript.c(6291): warning C4047: “函数”:“const char *”与“int”的间接级别不同
src\c\tk_jerryscript.c(6291): warning C4024: “jsvalue_create_string”: 形参和实参 2 的类型不同
src\c\tk_jerryscript.c(6567): error C2065: “WIDGET_PROP_CLOSE_IM_WHEN_BLURED”: 未声明的标识符
src\c\tk_jerryscript.c(6567): warning C4047: “函数”:“const char *”与“int”的间接级别不同
src\c\tk_jerryscript.c(6567): warning C4024: “jsvalue_create_string”: 形参和实参 2 的类型不同
src\c\tk_jerryscript.c(8776): error C2198: “widget_set_visible”: 用于调用的参数太少
src\c\tk_jerryscript.c(8836): warning C4090: “函数”: 不同的“const”限定符
src\c\tk_jerryscript.c(9306): warning C4090: “函数”: 不同的“const”限定符
src\c\tk_jerryscript.c(9323): warning C4090: “函数”: 不同的“const”限定符
src\c\tk_jerryscript.c(9340): warning C4090: “函数”: 不同的“const”限定符
src\c\tk_jerryscript.c(9759): error C2039: “auto_adjust_size”: 不是“_widget_t”的成员
D:\源码\awtk\src\base/widget.h(256): note: 参见“_widget_t”的声明
src\c\tk_jerryscript.c(9759): error C2198: “jsvalue_create_bool”: 用于调用的参数太少
src\c\tk_jerryscript.c(12208): warning C4090: “函数”: 不同的“const”限定符
src\c\tk_jerryscript.c(14367): error C2039: “line_wrap”: 不是“_label_t”的成员
D:\源码\awtk\src\widgets/label.h(76): note: 参见“_label_t”的声明
src\c\tk_jerryscript.c(14367): error C2198: “jsvalue_create_bool”: 用于调用的参数太少
src\c\tk_jerryscript.c(14929): error C2039: “close_im_when_blured”: 不是“_edit_t”的成员
D:\源码\awtk\src\widgets/edit.h(99): note: 参见“_edit_t”的声明
src\c\tk_jerryscript.c(14929): error C2198: “jsvalue_create_bool”: 用于调用的参数太少
src\c\tk_jerryscript.c(19053): error C2039: “yslidable”: 不是“_rich_text_t”的成员
D:\源码\awtk\src\ext_widgets\rich_text/rich_text.h(86): note: 参见“_rich_text_t”的声明
src\c\tk_jerryscript.c(19053): error C2198: “jsvalue_create_bool”: 用于调用的参数太少
src\c\tk_jerryscript.c(19430): error C2065: “value_change_event_t”: 未声明的标识符
src\c\tk_jerryscript.c(19430): error C2065: “ret”: 未声明的标识符
src\c\tk_jerryscript.c(19430): warning C4047: “=”:“int”与“void *”的间接级别不同
src\c\tk_jerryscript.c(19430): error C2106: “=”: 左操作数必须为左值
src\c\tk_jerryscript.c(19432): error C2065: “ret”: 未声明的标识符
src\c\tk_jerryscript.c(19432): error C2065: “value_change_event_t”: 未声明的标识符
src\c\tk_jerryscript.c(19432): error C2059: 语法错误:“)”
src\c\tk_jerryscript.c(19434): error C2065: “ret”: 未声明的标识符
src\c\tk_jerryscript.c(19434): warning C4022: “jsvalue_create_pointer”: 指针与实参 2 不匹配
src\c\tk_jerryscript.c(19947): error C2039: “open_im_when_focused”: 不是“_mledit_t”的成员
D:\源码\awtk\src\ext_widgets\mledit/mledit.h(59): note: 参见“_mledit_t”的声明
src\c\tk_jerryscript.c(19947): error C2198: “jsvalue_create_bool”: 用于调用的参数太少
src\c\tk_jerryscript.c(19959): error C2039: “close_im_when_blured”: 不是“_mledit_t”的成员
D:\源码\awtk\src\ext_widgets\mledit/mledit.h(59): note: 参见“_mledit_t”的声明
src\c\tk_jerryscript.c(19959): error C2198: “jsvalue_create_bool”: 用于调用的参数太少
src\c\tk_jerryscript.c(23053): error C2039: “single_instance”: 不是“_window_base_t”的成员
D:\源码\awtk\src\base/window_base.h(51): note: 参见“_window_base_t”的声明
src\c\tk_jerryscript.c(23053): error C2198: “jsvalue_create_bool”: 用于调用的参数太少
scons: *** [src\c\tk_jerryscript.obj] Error 2
scons: building terminated because of errors.

这个可以和awtk designer联动吗

目前想法是用awtk designer设计xml ui, 后台逻辑用javascript设计,看了下1.2.2的版本可以打开这个项目,可以显示部分Ui, 就是非常老(0.1.5版本),发现能识别jerryscript插件,但是awtkStudio自带的sdk无法编译,只能用github上下的awtk,问下这个后面考虑更新支持吗

image

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.