diff --git a/thirdparty/libwtf/HPKBUILD b/thirdparty/libwtf/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..d2f344533cb34d5a2ab7e7d663c567a19b1fba50 --- /dev/null +++ b/thirdparty/libwtf/HPKBUILD @@ -0,0 +1,67 @@ +# Contributor: Jeff Han +# Maintainer: Jeff Han + +pkgname=libwtf # 项目源码为WebKit, 但是只移植了JavaScriptCore能力 +pkgver=webkitgtk-2.41.90 +pkgrel=0 +pkgdesc="Home of the WebKit project, the browser engine used by Safari, Mail, App Store and many other applications on macOS, iOS and Linux." +url="https://github.com/WebKit/WebKit" +archs=("arm64-v8a") # armeabi-v7a 会导致编译器bug +license=("MIT") +depends=("icu") +makedepends=() + +source="https://github.com/WebKit/WebKit/archive/refs/tags/$pkgver.tar.gz" + +autounpack=true +downloadpackage=true +patchflag=true + +builddir=WebKit-${pkgver} +packagename=$builddir.tar.gz + +prepare() { + if $patchflag + then + cd $builddir + # 添加系统识别 + patch -p1 < `pwd`/../JavaScriptCore_oh_pkg.patch + # patch只需要打一次,关闭打patch + patchflag=false + cd $OLDPWD + fi + mkdir -p $builddir/$ARCH-build +} + +build() { + cd $builddir + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -B$ARCH-build -S./ \ + -DCMAKE_CXX_FLAGS="-I$PKGBUILD_ROOT/$builddir/Source/WTF/" -DENABLE_WEBCORE=OFF \ + -DENABLE_WEBKIT=OFF -DPORT="JSCOnly" -DENABLE_STATIC_JSC=ON -DCMAKE_BUILD_TYPE="Release" \ + -DSHOULD_INSTALL_JS_SHELL=OFF > $buildlog 2>&1 + $MAKE VERBOSE=1 -C $ARCH-build >> $buildlog 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir + $MAKE -C $ARCH-build install >> $buildlog 2>&1 + mkdir -p $LYCIUM_ROOT/usr/$pkgname/$ARCH/lib/ + mkdir -p $LYCIUM_ROOT/usr/$pkgname/$ARCH/include/ + cp $ARCH-build/lib/*.a $LYCIUM_ROOT/usr/$pkgname/$ARCH/lib/ + cp -r $ARCH-build/WTF/Headers/wtf/* $LYCIUM_ROOT/usr/$pkgname/$ARCH/include/ + cd $OLDPWD +} + +check() { + cd $builddir/$ARCH-build/Tools/TestWebKitAPI + sed -i 's/TestWTF PROPERTIES TIMEOUT "60"/TestWTF PROPERTIES TIMEOUT "600"/g' CTestTestfile.cmake + echo "The test must be on an OpenHarmony device!" +} + +# 清理环境 +cleanbuild() { + rm -rf ${PWD}/$builddir #${PWD}/$packagename +} diff --git a/thirdparty/libwtf/HPKCHECK b/thirdparty/libwtf/HPKCHECK new file mode 100644 index 0000000000000000000000000000000000000000..c4d54103fe1654a972c7369e924b6717b57eec93 --- /dev/null +++ b/thirdparty/libwtf/HPKCHECK @@ -0,0 +1,19 @@ +# Contributor: lpzhong <278527840@qq.com> +# Maintainer: lpzhong <278527840@qq.com> + +source HPKBUILD > /dev/null 2>&1 +logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log +openharmonycheck() { + res=0 + cd ${builddir}/${ARCH}-build + ctest > ${logfile} 2>&1 + res=$? + if [ $res -ne 0 ] + then + mkdir -p ${LYCIUM_FAULT_PATH}/${pkgname} + cp Testing/Temporary/LastTest.log ${LYCIUM_FAULT_PATH}/${pkgname}/ + fi + cd $OLDPWD + + return $res +} diff --git a/thirdparty/libwtf/JavaScriptCore_oh_pkg.patch b/thirdparty/libwtf/JavaScriptCore_oh_pkg.patch new file mode 100644 index 0000000000000000000000000000000000000000..16fd1947565c4160cf35c8012e077e7db70bcfb6 --- /dev/null +++ b/thirdparty/libwtf/JavaScriptCore_oh_pkg.patch @@ -0,0 +1,18 @@ +diff -rupN WebKit-webkitgtk-2.41.90/Source/WTF/wtf/PlatformJSCOnly.cmake WebKit-webkitgtk-2.41.90_patched/Source/WTF/wtf/PlatformJSCOnly.cmake +--- WebKit-webkitgtk-2.41.90/Source/WTF/wtf/PlatformJSCOnly.cmake 2023-08-18 14:55:39.118994293 +0800 ++++ WebKit-webkitgtk-2.41.90_patched/Source/WTF/wtf/PlatformJSCOnly.cmake 2023-08-18 15:07:32.164508099 +0800 +@@ -105,6 +105,14 @@ elseif (CMAKE_SYSTEM_NAME MATCHES "Linux + + unix/MemoryPressureHandlerUnix.cpp + ) ++elseif (CMAKE_SYSTEM_NAME MATCHES "OHOS") ++ list(APPEND WTF_SOURCES ++ linux/CurrentProcessMemoryStatus.cpp ++ linux/MemoryFootprintLinux.cpp ++ linux/RealTimeThreads.cpp ++ ++ unix/MemoryPressureHandlerUnix.cpp ++ ) + list(APPEND WTF_PUBLIC_HEADERS + linux/ProcessMemoryFootprint.h + linux/CurrentProcessMemoryStatus.h diff --git a/thirdparty/libwtf/OAT.xml b/thirdparty/libwtf/OAT.xml new file mode 100644 index 0000000000000000000000000000000000000000..eeb1f946d683c0b81976cd06522096062a6901b9 --- /dev/null +++ b/thirdparty/libwtf/OAT.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/libwtf/README.OpenSource b/thirdparty/libwtf/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..03c90cc6e06fa4811458327bfd4fdeea31e1e43e --- /dev/null +++ b/thirdparty/libwtf/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "libwtf", + "License": "MIT License", + "License File": "LICENSE", + "Version Number": "webkitgtk-2.41.90", + "Owner": "xiafeng@huawei.com", + "Upstream URL": "https://github.com/WebKit/webkit", + "Description": "Libwtf is a network template framework." + } +] \ No newline at end of file diff --git a/thirdparty/libwtf/README_zh.md b/thirdparty/libwtf/README_zh.md new file mode 100644 index 0000000000000000000000000000000000000000..15c4ae136f20db576e84c08f91df148555498882 --- /dev/null +++ b/thirdparty/libwtf/README_zh.md @@ -0,0 +1,11 @@ +# libwtf三方库说明 +## 功能简介 +libwtf是一个网络模版框架。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Release +- SDK版本:ohos_sdk_public 4.0.8.1 (API Version 10 Release) +- 三方库版本:webkitgtk-2.41.90 +- 当前适配的功能: 提供网络模版框架能力。 + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/libwtf/SHA512SUM b/thirdparty/libwtf/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..dac0cf1af01a6b882d37a1c561c9356497fdd357 --- /dev/null +++ b/thirdparty/libwtf/SHA512SUM @@ -0,0 +1,2 @@ +45ba6ef7acf391da9bd8925c68488af880e53a5603396e6f1ddc186c739f911810316b0cf9d6dead32836db44b212a6b1992c85d024cd20fdc5368f074149ba0 WebKit-webkitgtk-2.41.90.tar.gz +3d0be46a0e323b311a853cb102b956e35c2b4f0630e651018ec22c882b263b6d758366d7c6d907da5db5a61d0329a44abb37b5cda5810fc181551a39bd67ad89 JavaScriptCore_oh_pkg.patch diff --git a/thirdparty/libwtf/docs/hap_integrate.md b/thirdparty/libwtf/docs/hap_integrate.md new file mode 100644 index 0000000000000000000000000000000000000000..eeb4875f62576e8d6e6c413caa4e18e30432e4ad --- /dev/null +++ b/thirdparty/libwtf/docs/hap_integrate.md @@ -0,0 +1,106 @@ +--- +typora-copy-images-to: pic +--- + +# libwtf 集成到应用hap + +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- [开发环境准备](../../../docs/hap_integrate_environment.md) + +## 编译三方库 + +- 下载本仓库 + + ```shell + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/libwtf #三方库libwtf的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── HPKCHECK #测试脚本 + ├── SHA512SUM #三方库校验文件 + ├── OAT.xml #OAT开源审查文本文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md #三方库简介 + ├── libhevc_ohos_pkg.patch #原生库的补丁文件 + ``` + +- 在lycium目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + + ```shell + cd lycium + ./build.sh libwtf + ``` + +- 三方库头文件及生成的库 + + 在lycium目录下会生成usr目录,该目录下存在已编译完成的64位三方库。原库CMakeList.txts中,写明暂不支持32位。 + + ```shell + libwtf/arm64-v8a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录新建一个thirdparty目录,将生成的二进制文件以及头文件拷贝到该目录下,每种架构目录下包含了该库的头文件(include)、二进制文件(lib),如下图所示: + + +![img](pic\libwtf_install_dir.png) + + + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + + ```shell + # 将三方库及依赖加入工程 + # icu依赖 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/icu/${OHOS_ARCH}/lib/libicudata.so) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/icu/${OHOS_ARCH}/lib/libicui18n.so) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/icu/${OHOS_ARCH}/lib/libicuio.so) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/icu/${OHOS_ARCH}/lib/libicutu.so) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/icu/${OHOS_ARCH}/lib/libicuuc.so) + # 头文件 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/icu/${OHOS_ARCH}/include) + + + + # libwtf库 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libwtf/${OHOS_ARCH}/lib/libWTF.a) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libwtf/${OHOS_ARCH}/lib/libJavaScriptCore.a) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libwtf/${OHOS_ARCH}/lib/libbmalloc.a) + # 头文件64 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libwtf/${OHOS_ARCH}/include) + ``` + + **备注:源码有c++20语法,所以deveco中build-profile中修改参数`"cppFlags": "-std=c++20",`** + + + +## 测试三方库 + +在lycium目录下,执行脚本 +```shell +cd lycium +./test.sh libwtf +``` +**注:当前鸿蒙系统,未改时区时,会有以下几条测试用例不通过(忽略)** + +![libwtf单元测试结果](pic\libwtf_test.png) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) +- [通过DevEco Studio开发一个NAPI工程](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md) \ No newline at end of file diff --git a/thirdparty/libwtf/docs/pic/libwtf_install_dir.png b/thirdparty/libwtf/docs/pic/libwtf_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..fc22ea5bda7a9da4c999bc965c5d4f257e68479c Binary files /dev/null and b/thirdparty/libwtf/docs/pic/libwtf_install_dir.png differ diff --git a/thirdparty/libwtf/docs/pic/libwtf_test.png b/thirdparty/libwtf/docs/pic/libwtf_test.png new file mode 100644 index 0000000000000000000000000000000000000000..9290aae9b95d9b6d1432dd041e0b6c9197f50c48 Binary files /dev/null and b/thirdparty/libwtf/docs/pic/libwtf_test.png differ diff --git a/thirdparty/libwtf/docs/pic/libwtf_usage.png b/thirdparty/libwtf/docs/pic/libwtf_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..303be34f26b6b7d860a2f0b90fe84f986603ca1f Binary files /dev/null and b/thirdparty/libwtf/docs/pic/libwtf_usage.png differ