From d3a5ff8db045886ee52ca0a47ba2ead2351a7d8c Mon Sep 17 00:00:00 2001 From: shann-wen Date: Tue, 13 Jun 2023 20:24:43 +0800 Subject: [PATCH] add thrift Signed-off-by: shann-wen --- thirdparty/thrift/HPKBUILD | 60 ++++++++++++ thirdparty/thrift/OAT.xml | 20 ++++ thirdparty/thrift/README.OpenSource | 11 +++ thirdparty/thrift/README_zh.md | 12 +++ thirdparty/thrift/SHA512SUM | 1 + thirdparty/thrift/docs/hap_integrate.md | 86 ++++++++++++++++++ .../thrift/docs/pic/thrift_install_dir.jpg | Bin 0 -> 6677 bytes thirdparty/thrift/docs/pic/thrift_test.jpg | Bin 0 -> 30520 bytes thirdparty/thrift/docs/pic/thrift_usage.jpg | Bin 0 -> 39483 bytes 9 files changed, 190 insertions(+) create mode 100644 thirdparty/thrift/HPKBUILD create mode 100644 thirdparty/thrift/OAT.xml create mode 100644 thirdparty/thrift/README.OpenSource create mode 100644 thirdparty/thrift/README_zh.md create mode 100644 thirdparty/thrift/SHA512SUM create mode 100644 thirdparty/thrift/docs/hap_integrate.md create mode 100644 thirdparty/thrift/docs/pic/thrift_install_dir.jpg create mode 100644 thirdparty/thrift/docs/pic/thrift_test.jpg create mode 100644 thirdparty/thrift/docs/pic/thrift_usage.jpg diff --git a/thirdparty/thrift/HPKBUILD b/thirdparty/thrift/HPKBUILD new file mode 100644 index 00000000..a282a0a8 --- /dev/null +++ b/thirdparty/thrift/HPKBUILD @@ -0,0 +1,60 @@ +# Contributor: lpzhong <278527840@qq.com> +# Maintainer: lpzhong <278527840@qq.com> +pkgname=thrift +pkgver=v0.18.1 +pkgrel=0 +pkgdesc="Thrift is a lightweight, language-independent software stack for point-to-point RPC implementation" +url="https://github.com/apache/thrift" +archs=("armeabi-v7a" "arm64-v8a") +license="Apache License" +depends=("boost" "openssl" "zlib") +makedepends=() +source="https://github.com/apache/${pkgname}/archive/refs/tags/${pkgver}.tar.gz" + +autounpack=true +downloadpackage=true +buildtools="cmake" +buildhostthrift=true + +builddir=$pkgname-${pkgver:1} +packagename=$builddir.tar.gz + +prepare() { + if [ $buildhostthrift ]; then + mkdir -p ${builddir}/host-build + cd ${builddir}/host-build + cmake -DWITH_JAVA=OFF -DWITH_JAVASCRIPT=OFF -DWITH_NODEJS=OFF -DWITH_C_GLIB=OFF -DWITH_PYTHON=OFF .. -L > build.log 2>&1 + make -j4 >> build.log 2>&1 + buildhostthrift=false + cd $OLDPWD + fi + + mkdir -p ${builddir}/${ARCH}-build +} + +build() { + cd $builddir + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DOHOS_ARCH=$ARCH -B$ARCH-build -DWITH_LIBEVENT=OFF -DWITH_HASKELL=OFF -DWITH_JAVA=OFF -DWITH_JAVASCRIPT=OFF -DWITH_NODEJS=OFF -DTHRIFT_COMPILER=`pwd`/host-build/compiler/cpp/bin/thrift -DWITH_C_GLIB=OFF -DWITH_PYTHON=OFF -B${ARCH}-build -S./ -L > `pwd`/${ARCH}-build/build.log 2>&1 + make VERBOSE=1 -j4 -C ${ARCH}-build >> `pwd`/${ARCH}-build/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd ${builddir} + make -C ${ARCH}-build install >> `pwd`/${ARCH}-build/build.log 2>&1 + cd $OLDPWD +} + +check() { + echo "The test must be on an OpenHarmony device!" + # real test CMD + # 进入到编译目录执行[说明:测试时设备需要连接网络] + # ctest +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/${builddir} # ${PWD}/$packagename +} diff --git a/thirdparty/thrift/OAT.xml b/thirdparty/thrift/OAT.xml new file mode 100644 index 00000000..06855414 --- /dev/null +++ b/thirdparty/thrift/OAT.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/thrift/README.OpenSource b/thirdparty/thrift/README.OpenSource new file mode 100644 index 00000000..aadfc01c --- /dev/null +++ b/thirdparty/thrift/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "thrift", + "License": "Apache License 2.0", + "License File": "https://github.com/apache/thrift/blob/master/LICENSE", + "Version Number": "v0.18.1", + "Owner": "swkec@isoftstone.com", + "Upstream URL": "https://github.com/apache/thrift/archive/refs/tags/v0.18.1.tar.gz", + "Description": "Thrift is an interface description language and binary communication protocol used to define and create cross-language services. It is designed as a remote procedure call (RPC) framework and was developed by Facebook for "large-scale cross-language service development"." + } +] diff --git a/thirdparty/thrift/README_zh.md b/thirdparty/thrift/README_zh.md new file mode 100644 index 00000000..363ac574 --- /dev/null +++ b/thirdparty/thrift/README_zh.md @@ -0,0 +1,12 @@ +# thrift三方库说明 +## 功能简介 +Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Beta2 +- SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) +- 三方库版本:v0.18.1 +- 当前适配的功能:支持跨语言服务创建、数据传输和远程过程调用的高性能二进制协议 +- [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/thrift/SHA512SUM b/thirdparty/thrift/SHA512SUM new file mode 100644 index 00000000..4dbfcfc6 --- /dev/null +++ b/thirdparty/thrift/SHA512SUM @@ -0,0 +1 @@ +16d1863e1eceb7b35e74d52aa14aab81641e779a3ed5cb668ef25e72d4a7adc2d7574d1597c07d779ea42e9f3240ac44446eef819bbfed0f7a2f6380f755f534 thrift-0.18.1.tar.gz diff --git a/thirdparty/thrift/docs/hap_integrate.md b/thirdparty/thrift/docs/hap_integrate.md new file mode 100644 index 00000000..ac05a6ca --- /dev/null +++ b/thirdparty/thrift/docs/hap_integrate.md @@ -0,0 +1,86 @@ +# thrift集成到应用hap +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 +## 开发环境 +- ubuntu20.04 +- [OpenHarmony3.2Release镜像](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fdayu200_standard_arm32.tar.gz) +- [ohos_sdk_public 3.2.11.9 (API Version 9 Release)](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fohos-sdk-windows_linux-public.tar.gz) +- [DevEco Studio 3.1 Beta2](https://gitee.com/link?target=https%3A%2F%2Fcontentcenter-vali-drcn.dbankcdn.cn%2Fpvt_2%2FDeveloperAlliance_package_901_9%2Ff3%2Fv3%2FuJyuq3syQ2ak4hE1QZmAug%2Fdevecostudio-windows-3.1.0.400.zip%3FHW-CC-KV%3DV1%26HW-CC-Date%3D20230408T013335Z%26HW-CC-Expire%3D315360000%26HW-CC-Sign%3D96262721EDC9B34E6F62E66884AB7AE2A94C2A7B8C28D6F7FC891F46EB211A70) +- [准备三方库构建环境](../../../tools/README.md#编译环境准备) +- [准备三方库测试环境](../../../tools/README.md#ci环境准备) +## 编译三方库 +- 下载本仓库 + ``` + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` +- 三方库目录结构 + ``` + tpc_c_cplusplus/thirdparty/thrift #三方库thrift的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` + +- 将thrift拷贝至tools/main目录下 + ``` + cd tpc_c_cplusplus + cp thirdparty/thrift tools/main -rf + ``` +- 在tools目录下编译三方库 + 编译环境的搭建参考[准备三方库构建环境](../../../tools/README.md#编译环境准备) + ``` + cd tools + ./build.sh boost openssl zlib thrift + ``` +- 三方库头文件及生成的库 + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + ``` + thrift/arm64-v8a thrift/armeabi-v7a + boost/arm64-v8a boost/armeabi-v7a + openssl/arm64-v8a openssl/armeabi-v7a + zlib/arm64-v8a zlib/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 + ![thirdparty_install_dir](pic/thrift_install_dir.jpg) +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + ``` + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libboost_atomic.so.1.81.0) + target_link_libraries(entry PRIVATE ${CMAKE_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libboost_chrono.so.1.81.0) + target_link_libraries(entry PRIVATE ${CMAKE_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libboost_container.so.1.81.0) + target_link_libraries(entry PRIVATE ${CMAKE_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libboost_context.so.1.81.0) + ... + + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/thrift/${OHOS_ARCH}/include) + ``` + ![thrift_usage](pic/thrift_usage.jpg) +## 测试三方库 +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../tools/README.md#ci环境准备) + +- 将编译生成的可执行文件及生成的动态库准备好 + +- 将准备好的文件推送到开发板,在windows命令行进行如下操作 + + ``` + hdc_std shell mount -o remount,rw / #修改系统权限为可读写 + hdc_std file send libc++_shared.so /system/lib + ... + hdc_std shell #进入开发板 + chmod 777 * #添加权限 + ctest #执行测试用例 + ``` + + ![thrift_test](pic/thrift_test.jpg) +StalenessCheckTest测试选项需要依赖python环境,导致测试错误 +## 参考资料 +- [润和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) diff --git a/thirdparty/thrift/docs/pic/thrift_install_dir.jpg b/thirdparty/thrift/docs/pic/thrift_install_dir.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6522b0c83bd03ba8cf105cd2fa7fd3424f309a0 GIT binary patch literal 6677 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 Y9k-&T+b_94kgNaxu>IrQ3xuBdA2tK0KmY&$ literal 0 HcmV?d00001 diff --git a/thirdparty/thrift/docs/pic/thrift_test.jpg b/thirdparty/thrift/docs/pic/thrift_test.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66bd5daffa02d324611de139fc3598354d4175e3 GIT binary patch literal 30520 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%0DU4qq&=-%cLapogUB# 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 literal 0 HcmV?d00001 diff --git a/thirdparty/thrift/docs/pic/thrift_usage.jpg b/thirdparty/thrift/docs/pic/thrift_usage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73d9ef8340d897db3f5a8d447609cecba2c5f915 GIT binary patch literal 39483 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 literal 0 HcmV?d00001 -- Gitee