From 9d7ed960779643d4a429c8e39b834fcb37d10c3f Mon Sep 17 00:00:00 2001 From: dingqian <1052888395@qq.com> Date: Tue, 13 Jun 2023 18:57:55 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0protobuf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dingqian <1052888395@qq.com> --- thirdparty/protobuf/HPKBUILD | 65 ++++++++++++ thirdparty/protobuf/README.OpenSource | 11 ++ thirdparty/protobuf/README_zh.md | 12 +++ thirdparty/protobuf/SHA512SUM | 1 + thirdparty/protobuf/docs/hap_integrate.md | 94 ++++++++++++++++++ .../docs/pic/protobuf_install_dir.png | Bin 0 -> 6583 bytes .../protobuf/docs/pic/protobuf_test.png | Bin 0 -> 4849 bytes .../protobuf/docs/pic/protobuf_usage.png | Bin 0 -> 57869 bytes 8 files changed, 183 insertions(+) create mode 100644 thirdparty/protobuf/HPKBUILD create mode 100644 thirdparty/protobuf/README.OpenSource create mode 100644 thirdparty/protobuf/README_zh.md create mode 100644 thirdparty/protobuf/SHA512SUM create mode 100644 thirdparty/protobuf/docs/hap_integrate.md create mode 100644 thirdparty/protobuf/docs/pic/protobuf_install_dir.png create mode 100644 thirdparty/protobuf/docs/pic/protobuf_test.png create mode 100644 thirdparty/protobuf/docs/pic/protobuf_usage.png diff --git a/thirdparty/protobuf/HPKBUILD b/thirdparty/protobuf/HPKBUILD new file mode 100644 index 00000000..3b233f44 --- /dev/null +++ b/thirdparty/protobuf/HPKBUILD @@ -0,0 +1,65 @@ +# Contributor: liulihong +# Maintainer: liulihong +pkgname=protobuf +pkgver=v4.23.2 +pkgrel=0 +pkgdesc="Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data." +url="https://github.com/protocolbuffers/protobuf" +archs=("armeabi-v7a" "arm64-v8a") +license=("Copyright 2008 Google Inc") +depends=("abseil-cpp" "zlib" "googletest") +makedepends=() +source="https://github.com/protocolbuffers/$pkgname/archive/refs/tags/$pkgver.tar.gz" + +autounpack=true +downloadpackage=true +buildhostprotoc=true + +builddir=$pkgname-${pkgver:1} +packagename=$builddir.tar.gz + +prepare() { + if $buildhostprotoc + then + cp -rf $builddir $builddir-host-build + cd $builddir-host-build + cp $LYCIUM_ROOT/main/abseil-cpp/abseil-cpp*.tar.gz `pwd`/third_party/abseil-cpp/ + tar -zxf `pwd`/third_party/abseil-cpp/abseil-cpp*.tar.gz -C `pwd`/third_party/abseil-cpp + mv `pwd`/third_party/abseil-cpp/abseil-cpp-*/* `pwd`/third_party/abseil-cpp/ + rm `pwd`/third_party/abseil-cpp/abseil-cpp*.tar.gz + cmake . -L -Dprotobuf_BUILD_TESTS=OFF > `pwd`/build.log 2>&1 + make VERBOSE=1 -j4 >> `pwd`/build.log 2>&1 + buildhostprotoc=false + cd $OLDPWD + fi + cp -rf $builddir $builddir-$ARCH-build +} + + +build() { + cd $builddir-$ARCH-build + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -Dprotobuf_WITH_ZLIB=ON \ + -Dprotobuf_BUILD_TESTS=ON -Dprotobuf_ABSL_PROVIDER=package -Dprotobuf_USE_EXTERNAL_GTEST=ON \ + -Dprotobuf_PROTOC_EXE=`pwd`/../$builddir-host-build/protoc \ + -DOHOS_ARCH=$ARCH -B./ -S./ -L -DCMAKE_CXX_FLAGS="-munaligned-access" >> `pwd`/build.log 2>&1 + make VERBOSE=1 -j4 >> `pwd`/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir-$ARCH-build + make install >> `pwd`/build.log 2>&1 + cd $OLDPWD +} + +check() { + echo "The test must be on an OpenHarmony device!" + # ctest 测试,需要拷贝libz.so.1 +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/$builddir ${PWD}/$builddir-host-build ${PWD}/$builddir-armeabi-v7a-build ${PWD}/$builddir-arm64-v8a-build #${PWD}/$packagename +} diff --git a/thirdparty/protobuf/README.OpenSource b/thirdparty/protobuf/README.OpenSource new file mode 100644 index 00000000..74dff58b --- /dev/null +++ b/thirdparty/protobuf/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "protobuf", + "License": "BSD-3-Clause license", + "License File": "LICENSES", + "Version Number": "v4.23.2", + "Owner": "qiandinge@isoftstone.com", + "Upstream URL": "https://github.com/protocolbuffers/protobuf/archive/refs/tags/v4.23.2.tar.gz", + "Description": "Protocol Buffers - Google's data interchange format" + } +] \ No newline at end of file diff --git a/thirdparty/protobuf/README_zh.md b/thirdparty/protobuf/README_zh.md new file mode 100644 index 00000000..c63fce73 --- /dev/null +++ b/thirdparty/protobuf/README_zh.md @@ -0,0 +1,12 @@ +# protobuf三方库说明 +## 功能简介 +protobuf是Google提供的一套数据的序列化框架。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Beta2 +- SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) +- 三方库版本:v4.23.2 +- 当前适配的功能:提供框架 +- [BSD-3-Clause license](https://github.com/protocolbuffers/protobuf/blob/main/LICENSE) + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) \ No newline at end of file diff --git a/thirdparty/protobuf/SHA512SUM b/thirdparty/protobuf/SHA512SUM new file mode 100644 index 00000000..9d68b5ee --- /dev/null +++ b/thirdparty/protobuf/SHA512SUM @@ -0,0 +1 @@ +231bfa7fdbe34b465c9b783d1e5056833de02a3167386d087c17038239b5a8c08ec7cb8fe9d4fe920951d2c021db34fa2edebbf08fb8e42e13ae5525de4d6120 protobuf-4.23.2.tar.gz diff --git a/thirdparty/protobuf/docs/hap_integrate.md b/thirdparty/protobuf/docs/hap_integrate.md new file mode 100644 index 00000000..d0df96f9 --- /dev/null +++ b/thirdparty/protobuf/docs/hap_integrate.md @@ -0,0 +1,94 @@ +# protobuf集成到应用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环境准备) + +## 编译三方库 + +- 下载本仓库 + + ```shell + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/protobuf #三方库protobuf的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` + +- 将protobuf拷贝至tools/main目录下 + + ```shell + cd tpc_c_cplusplus + cp thirdparty/protobuf tools/main -rf + ``` + +- 在tools目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../tools/README.md#编译环境准备) + + ```shell + cd tools + ./build.sh protobuf + ``` + +- 三方库头文件及生成的库 + + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + + ```shell + protobuf/arm64-v8a protobuf/armeabi-v7a + ``` +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 +   + + ![thirdparty_install_dir](pic/protobuf_install_dir.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + + ```shell + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/protobuf/${OHOS_ARCH}/lib/libprotobuf.a) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/protobuf/${OHOS_ARCH}/lib/libutf8_validity.a) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/protobuf/${OHOS_ARCH}/lib/libutf8_range.a) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/protobuf/${OHOS_ARCH}/lib/libprotoc.a) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/protobuf/${OHOS_ARCH}/lib/libprotobuf-lite.a) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/protobuf/${OHOS_ARCH}/include) + ``` + + ![protobuf_usage](pic/protobuf_usage.png) + +## 测试三方库 + +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../tools/README.md#ci环境准备) + +进入到构建目录,执行如下命令ctest(arm64-v8a-build为构建64位的目录,armeabi-v7a-build为构建32位的目录) + + + ![protobuf_test](pic/protobuf_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) diff --git a/thirdparty/protobuf/docs/pic/protobuf_install_dir.png b/thirdparty/protobuf/docs/pic/protobuf_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..68a4fa68bd93051f3173ab7003ac6903ecbeca3a GIT binary patch literal 6583 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 RqkqT%vXV-W%6BGT{udG3vDE+o literal 0 HcmV?d00001 diff --git a/thirdparty/protobuf/docs/pic/protobuf_test.png b/thirdparty/protobuf/docs/pic/protobuf_test.png new file mode 100644 index 0000000000000000000000000000000000000000..0e0871dc735cff518b7f35807cc52b4548ef36ef GIT binary patch literal 4849 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 literal 0 HcmV?d00001 diff --git a/thirdparty/protobuf/docs/pic/protobuf_usage.png b/thirdparty/protobuf/docs/pic/protobuf_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..32e6c491438804830bff63033c01c372a47b68dd GIT binary patch literal 57869 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 @)JqTR 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%0D)f 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 KDOM^x3;7oreSXdW literal 0 HcmV?d00001 -- Gitee From d7feb20e06263dad78a0d0917ac50f4c272103c4 Mon Sep 17 00:00:00 2001 From: dingqian <1052888395@qq.com> Date: Tue, 13 Jun 2023 19:40:30 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E9=80=82=E9=85=8D=E6=A1=86=E6=9E=B6=E6=8F=8F=E8=BF=B0=E8=BF=87?= =?UTF-8?q?=E4=BA=8E=E7=AE=80=E5=8D=95=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dingqian <1052888395@qq.com> --- thirdparty/protobuf/README_zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/thirdparty/protobuf/README_zh.md b/thirdparty/protobuf/README_zh.md index c63fce73..e8653e6d 100644 --- a/thirdparty/protobuf/README_zh.md +++ b/thirdparty/protobuf/README_zh.md @@ -5,7 +5,7 @@ protobuf是Google提供的一套数据的序列化框架。 - IDE版本:DevEco Studio 3.1 Beta2 - SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) - 三方库版本:v4.23.2 -- 当前适配的功能:提供框架 +- 当前适配的功能:提供数据的序列化框架 - [BSD-3-Clause license](https://github.com/protocolbuffers/protobuf/blob/main/LICENSE) ## 集成方式 -- Gitee From 17bfaaa01711584e91445087bb722aca417c49fc Mon Sep 17 00:00:00 2001 From: dingqian <1052888395@qq.com> Date: Tue, 13 Jun 2023 19:44:31 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=96=B0=E5=A2=9Eabseil-cpp,=E9=98=B2?= =?UTF-8?q?=E6=AD=A2protobuf=E7=BC=96=E8=AF=91=E4=B8=8D=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dingqian <1052888395@qq.com> --- thirdparty/abseil-cpp/HPKBUILD | 49 +++++++++++++++++++++++++++++++++ thirdparty/abseil-cpp/SHA512SUM | 1 + 2 files changed, 50 insertions(+) create mode 100644 thirdparty/abseil-cpp/HPKBUILD create mode 100644 thirdparty/abseil-cpp/SHA512SUM diff --git a/thirdparty/abseil-cpp/HPKBUILD b/thirdparty/abseil-cpp/HPKBUILD new file mode 100644 index 00000000..b1b0712a --- /dev/null +++ b/thirdparty/abseil-cpp/HPKBUILD @@ -0,0 +1,49 @@ +# Contributor: liulihong +# Maintainer: liulihong +pkgname=abseil-cpp +pkgver=20230125.3 +pkgrel=0 +pkgdesc="The repository contains the Abseil C++ library code. Abseil is an open-source collection of C++ code (compliant to C++14) designed to augment the C++ standard library." +url="https://github.com/abseil/abseil-cpp" +archs=("armeabi-v7a" "arm64-v8a") +license=("Apache-2.0 license") +depends=() +makedepends=() + +source="https://github.com/abseil/$pkgname/archive/refs/tags/$pkgver.tar.gz" + +autounpack=true +downloadpackage=true + +builddir=$pkgname-$pkgver +packagename=$builddir.tar.gz + +prepare() { + mkdir -p $builddir/$ARCH-build +} + +build() { + cd $builddir + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DABSL_ENABLE_INSTALL=ON -DABSL_BUILD_TESTING=ON \ + -DABSL_USE_GOOGLETEST_HEAD=ON -DOHOS_ARCH=$ARCH -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!" + # 执行 ctest 测试 +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/$builddir #${PWD}/$packagename +} diff --git a/thirdparty/abseil-cpp/SHA512SUM b/thirdparty/abseil-cpp/SHA512SUM new file mode 100644 index 00000000..afd1ba43 --- /dev/null +++ b/thirdparty/abseil-cpp/SHA512SUM @@ -0,0 +1 @@ +50509acfc4128fd31435631f71ac8cd0350acd9e290f78502723149016e7f07c9d84182ba99e0938b1873fecda09393d3fd7af8dabfb0d89cdcdd8a69a917e70 abseil-cpp-20230125.3.tar.gz -- Gitee