From ae132126f9acc2786dd5ec1fbdb60acd40131052 Mon Sep 17 00:00:00 2001 From: NEU-lab <2942375747@qq.com> Date: Sat, 26 Oct 2024 12:38:37 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=89=E6=96=B9?= =?UTF-8?q?=E5=BA=93g3log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: NEU-lab <2942375747@qq.com> --- thirdparty/g3log-1.3/HPKBUILD | 74 ++++++++++++++++ thirdparty/g3log-1.3/HPKCHECK | 34 ++++++++ thirdparty/g3log-1.3/README.OpenSource | 11 +++ thirdparty/g3log-1.3/README_zh.md | 9 ++ thirdparty/g3log-1.3/SHA512SUM | 1 + thirdparty/g3log-1.3/docs/hap_integrate.md | 81 ++++++++++++++++++ .../g3log-1.3/docs/pic/g3log_install_dir.png | Bin 0 -> 19498 bytes thirdparty/g3log-1.3/docs/pic/g3log_test.png | Bin 0 -> 39617 bytes thirdparty/g3log-1.3/g3log-1.3_oh_pkg.patch | 68 +++++++++++++++ 9 files changed, 278 insertions(+) create mode 100644 thirdparty/g3log-1.3/HPKBUILD create mode 100644 thirdparty/g3log-1.3/HPKCHECK create mode 100644 thirdparty/g3log-1.3/README.OpenSource create mode 100644 thirdparty/g3log-1.3/README_zh.md create mode 100644 thirdparty/g3log-1.3/SHA512SUM create mode 100644 thirdparty/g3log-1.3/docs/hap_integrate.md create mode 100644 thirdparty/g3log-1.3/docs/pic/g3log_install_dir.png create mode 100644 thirdparty/g3log-1.3/docs/pic/g3log_test.png create mode 100644 thirdparty/g3log-1.3/g3log-1.3_oh_pkg.patch diff --git a/thirdparty/g3log-1.3/HPKBUILD b/thirdparty/g3log-1.3/HPKBUILD new file mode 100644 index 00000000..92c6d894 --- /dev/null +++ b/thirdparty/g3log-1.3/HPKBUILD @@ -0,0 +1,74 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Contributor: wangjialun <2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangyihao<2471389@stu.neu.edu.cn>, wangying +# Maintainer: wangyihao<2471389@stu.neu.edu.cn>, wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangying + +pkgname=g3log-1.3 +pkgver=1.3 +pkgrel=0 +pkgdesc="G3log is an asynchronous, "crash safe", logger that is easy to use with default logging sinks." +url="https://github.com/KjellKod/g3log/tree/1.3" +archs=("armeabi-v7a" "arm64-v8a") +license=("MIT license") +depends=() +makedepends=() +source="https://github.com/KjellKod/g3log/archive/refs/tags/1.3.zip" + +downloadpackage=true +autounpack=true +buildtools=cmake +patchflag=true + +builddir=g3log-1.3 +packagename=g3log-1.3.zip + +prepare() { + if $patchflag + then + cd $builddir + #解压gtest压缩包到原目录,供激活测试后用;激活ctest批量测试 + patch -p1 < `pwd`/../g3log-1.3_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 "$@" -DCMAKE_C_FLAGS="-Wno-unused-command-line-argument" \ + -DCMAKE_CXX_FLAGS="-Wno-unused-command-line-argument" -B$ARCH-build -S./ -DADD_G3LOG_UNIT_TEST=ON > $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 + cd $OLDPWD +} + + +check() { + echo "The test must be on an OpenHarmony device!" +} + + +cleanbuild() { + rm -rf ${PWD}/$builddir +} \ No newline at end of file diff --git a/thirdparty/g3log-1.3/HPKCHECK b/thirdparty/g3log-1.3/HPKCHECK new file mode 100644 index 00000000..b6b04bae --- /dev/null +++ b/thirdparty/g3log-1.3/HPKCHECK @@ -0,0 +1,34 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Contributor: wangjialun <2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangyihao<2471389@stu.neu.edu.cn> , wangying +# Maintainer: wangyihao<2471389@stu.neu.edu.cn>, wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangying + +source HPKBUILD > /dev/null 2>&1 # 导入HPKBUILD文件 +logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log + +# 在OH环境执行测试的接口 +openharmonycheck() { + res=0 + cd ${builddir}/${ARCH}-build # 进入到测试目录 + ctest > $logfile 2>&1 + #批量测试时,有4个测试用例因找不到符号“backtrace”和“backtrace_symbols”而失败。 + #尝试将libexecinfo.so、libunwind.so.8.0.1等可以替代backtrace功能的部署到开发板并设置环境变量,仍无法解决问题。可能是由于平台本身不支持或限制了完整的堆栈回溯功能。 + res=$? + if [ $res -ne 0 ];then + mkdir ${LYCIUM_FAULT_PATH}/${pkgname} + cp Testing/Temporary/LastTest.log ${LYCIUM_FAULT_PATH}/${pkgname}/ + fi + cd $OLDPWD + return $res +} \ No newline at end of file diff --git a/thirdparty/g3log-1.3/README.OpenSource b/thirdparty/g3log-1.3/README.OpenSource new file mode 100644 index 00000000..be47f171 --- /dev/null +++ b/thirdparty/g3log-1.3/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "g3log-1.3", + "License": " Unlicense license", + "License File": "https://github.com/KjellKod/g3log/blob/master/LICENSE", + "Version Number": "1.3", + "Owner": "2942375747@qq.com", + "Upstream URL": "https://github.com/KjellKod/g3log", + "Description": "G3log is an asynchronous, "crash safe", logger that is easy to use with default logging sinks." + } +] \ No newline at end of file diff --git a/thirdparty/g3log-1.3/README_zh.md b/thirdparty/g3log-1.3/README_zh.md new file mode 100644 index 00000000..1918ace2 --- /dev/null +++ b/thirdparty/g3log-1.3/README_zh.md @@ -0,0 +1,9 @@ +# g3log-1.3三方库说明 +## 功能简介 +g3log是一个异步的,“崩溃安全”的日志记录器。 +## 三方库版本: +- 1.3 +## 使用约束: +- [IDE和SDK版本](../../docs/constraint.md) +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) \ No newline at end of file diff --git a/thirdparty/g3log-1.3/SHA512SUM b/thirdparty/g3log-1.3/SHA512SUM new file mode 100644 index 00000000..cbe8f19b --- /dev/null +++ b/thirdparty/g3log-1.3/SHA512SUM @@ -0,0 +1 @@ +aa01576a0b616060c500438556c00974622f230ef6bb7c3fca1f8ad8ee8fc8e5c4260ebd909029a9726caa0a05dd1a9c766da8a594be078996e3ae789bd93a82 g3log-1.3.zip \ No newline at end of file diff --git a/thirdparty/g3log-1.3/docs/hap_integrate.md b/thirdparty/g3log-1.3/docs/hap_integrate.md new file mode 100644 index 00000000..ecbb7536 --- /dev/null +++ b/thirdparty/g3log-1.3/docs/hap_integrate.md @@ -0,0 +1,81 @@ +# g3log 集成到应用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/g3log-1.3 #三方库g3log-1.3的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── HPKCHECK #测试脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md #三方库简介 + ├── g3log-1.3_oh_pkg.patch #用于g3log-1.3库编译的补丁 + ``` + +- 在lycium目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + + ```shell + cd lycium + ./build.sh g3log-1.3 + ``` + +- 三方库头文件及生成的库 + + 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + + ```shell + g3log-1.3/arm64-v8a g3log-1.3/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的头文件拷贝到该目录下,将编译生成的三方库以及依赖库全部(动态库名字带版本号和不带版本号的都需要)拷贝到工程的libs目录下,如下图所示: +   + +  ![thirdparty_install_dir](pic/g3log_install_dir.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + + ```shell + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/g3log/${OHOS_ARCH}/lib/libg3logger.so) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/g3log/${OHOS_ARCH}/include) + ``` + +## 测试三方库 +- 编译出可执行的文件,使用原库自带的测试用例来做测试 [准备三方库测试环境](../../../lycium/README.md#3ci环境准备) +- 进入到构建目录运行测试用例(注意arm64-v8a为构建64位的目录,armeabi-v7a为构建32位的目录)。 +批量测试时,有4个测试用例因找不到符号“backtrace”和“backtrace_symbols”而失败。尝试将libexecinfo.so、libunwind.so.8.0.1等可以与backtrace功能兼容的轻量级库部署到开发板并设置环境变量,仍无法解决问题。可能是由于平台本身不支持或限制了完整的堆栈回溯功能。 + 执行结果如图所示: + +```shell + cd /data/tpc_c_cplusplus/thirdparty/g3log-1.3/g3log-1.3/arm64-v8a-build + ./ctest +``` + ![g3log_test](pic/g3log_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) \ No newline at end of file diff --git a/thirdparty/g3log-1.3/docs/pic/g3log_install_dir.png b/thirdparty/g3log-1.3/docs/pic/g3log_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..24c3ec3e86d87823b6d63d093812804388c0f749 GIT binary patch literal 19498 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�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 Date: Sat, 26 Oct 2024 12:44:35 +0800 Subject: [PATCH 2/3] change Signed-off-by: NEU-lab <2942375747@qq.com> --- thirdparty/g3log-1.3/HPKCHECK | 2 +- thirdparty/g3log-1.3/README_zh.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/thirdparty/g3log-1.3/HPKCHECK b/thirdparty/g3log-1.3/HPKCHECK index b6b04bae..4420bd91 100644 --- a/thirdparty/g3log-1.3/HPKCHECK +++ b/thirdparty/g3log-1.3/HPKCHECK @@ -23,7 +23,7 @@ openharmonycheck() { cd ${builddir}/${ARCH}-build # 进入到测试目录 ctest > $logfile 2>&1 #批量测试时,有4个测试用例因找不到符号“backtrace”和“backtrace_symbols”而失败。 - #尝试将libexecinfo.so、libunwind.so.8.0.1等可以替代backtrace功能的部署到开发板并设置环境变量,仍无法解决问题。可能是由于平台本身不支持或限制了完整的堆栈回溯功能。 + #尝试将libexecinfo.so、libunwind.so.8.0.1等可以与backtrace功能兼容的轻量级库部署到开发板并设置环境变量,仍无法解决问题。可能是由于平台本身不支持或限制了完整的堆栈回溯功能。 res=$? if [ $res -ne 0 ];then mkdir ${LYCIUM_FAULT_PATH}/${pkgname} diff --git a/thirdparty/g3log-1.3/README_zh.md b/thirdparty/g3log-1.3/README_zh.md index 1918ace2..7d185c23 100644 --- a/thirdparty/g3log-1.3/README_zh.md +++ b/thirdparty/g3log-1.3/README_zh.md @@ -1,6 +1,6 @@ # g3log-1.3三方库说明 ## 功能简介 -g3log是一个异步的,“崩溃安全”的日志记录器。 +g3log是一个异步日志记录器。 ## 三方库版本: - 1.3 ## 使用约束: -- Gitee From 90d7fda8c254894c274c6bdba7aa73feb7caa5cf Mon Sep 17 00:00:00 2001 From: NEU-lab <2942375747@qq.com> Date: Mon, 11 Nov 2024 21:21:40 +0800 Subject: [PATCH 3/3] change Signed-off-by: NEU-lab <2942375747@qq.com> --- thirdparty/{g3log-1.3 => g3log}/HPKBUILD | 4 ++-- thirdparty/{g3log-1.3 => g3log}/HPKCHECK | 0 thirdparty/{g3log-1.3 => g3log}/README.OpenSource | 2 +- thirdparty/{g3log-1.3 => g3log}/README_zh.md | 2 +- thirdparty/{g3log-1.3 => g3log}/SHA512SUM | 0 .../{g3log-1.3 => g3log}/docs/hap_integrate.md | 10 +++++----- .../docs/pic/g3log_install_dir.png | Bin .../{g3log-1.3 => g3log}/docs/pic/g3log_test.png | Bin .../{g3log-1.3 => g3log}/g3log-1.3_oh_pkg.patch | 0 9 files changed, 9 insertions(+), 9 deletions(-) rename thirdparty/{g3log-1.3 => g3log}/HPKBUILD (95%) rename thirdparty/{g3log-1.3 => g3log}/HPKCHECK (100%) rename thirdparty/{g3log-1.3 => g3log}/README.OpenSource (93%) rename thirdparty/{g3log-1.3 => g3log}/README_zh.md (88%) rename thirdparty/{g3log-1.3 => g3log}/SHA512SUM (100%) rename thirdparty/{g3log-1.3 => g3log}/docs/hap_integrate.md (87%) rename thirdparty/{g3log-1.3 => g3log}/docs/pic/g3log_install_dir.png (100%) rename thirdparty/{g3log-1.3 => g3log}/docs/pic/g3log_test.png (100%) rename thirdparty/{g3log-1.3 => g3log}/g3log-1.3_oh_pkg.patch (100%) diff --git a/thirdparty/g3log-1.3/HPKBUILD b/thirdparty/g3log/HPKBUILD similarity index 95% rename from thirdparty/g3log-1.3/HPKBUILD rename to thirdparty/g3log/HPKBUILD index 92c6d894..69bbe93a 100644 --- a/thirdparty/g3log-1.3/HPKBUILD +++ b/thirdparty/g3log/HPKBUILD @@ -14,7 +14,7 @@ # Contributor: wangjialun <2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangyihao<2471389@stu.neu.edu.cn>, wangying # Maintainer: wangyihao<2471389@stu.neu.edu.cn>, wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangying -pkgname=g3log-1.3 +pkgname=g3log pkgver=1.3 pkgrel=0 pkgdesc="G3log is an asynchronous, "crash safe", logger that is easy to use with default logging sinks." @@ -37,7 +37,7 @@ prepare() { if $patchflag then cd $builddir - #解压gtest压缩包到原目录,供激活测试后用;激活ctest批量测试 + #解压gtest压缩包到原目录,供激活测试后用;添加测试到ctest patch -p1 < `pwd`/../g3log-1.3_oh_pkg.patch # patch只需要打一次,关闭打patch patchflag=false diff --git a/thirdparty/g3log-1.3/HPKCHECK b/thirdparty/g3log/HPKCHECK similarity index 100% rename from thirdparty/g3log-1.3/HPKCHECK rename to thirdparty/g3log/HPKCHECK diff --git a/thirdparty/g3log-1.3/README.OpenSource b/thirdparty/g3log/README.OpenSource similarity index 93% rename from thirdparty/g3log-1.3/README.OpenSource rename to thirdparty/g3log/README.OpenSource index be47f171..6c2989c5 100644 --- a/thirdparty/g3log-1.3/README.OpenSource +++ b/thirdparty/g3log/README.OpenSource @@ -1,6 +1,6 @@ [ { - "Name": "g3log-1.3", + "Name": "g3log", "License": " Unlicense license", "License File": "https://github.com/KjellKod/g3log/blob/master/LICENSE", "Version Number": "1.3", diff --git a/thirdparty/g3log-1.3/README_zh.md b/thirdparty/g3log/README_zh.md similarity index 88% rename from thirdparty/g3log-1.3/README_zh.md rename to thirdparty/g3log/README_zh.md index 7d185c23..af5705be 100644 --- a/thirdparty/g3log-1.3/README_zh.md +++ b/thirdparty/g3log/README_zh.md @@ -1,4 +1,4 @@ -# g3log-1.3三方库说明 +# g3log三方库说明 ## 功能简介 g3log是一个异步日志记录器。 ## 三方库版本: diff --git a/thirdparty/g3log-1.3/SHA512SUM b/thirdparty/g3log/SHA512SUM similarity index 100% rename from thirdparty/g3log-1.3/SHA512SUM rename to thirdparty/g3log/SHA512SUM diff --git a/thirdparty/g3log-1.3/docs/hap_integrate.md b/thirdparty/g3log/docs/hap_integrate.md similarity index 87% rename from thirdparty/g3log-1.3/docs/hap_integrate.md rename to thirdparty/g3log/docs/hap_integrate.md index ecbb7536..f0e72c5e 100644 --- a/thirdparty/g3log-1.3/docs/hap_integrate.md +++ b/thirdparty/g3log/docs/hap_integrate.md @@ -17,14 +17,14 @@ - 三方库目录结构 ```shell - tpc_c_cplusplus/thirdparty/g3log-1.3 #三方库g3log-1.3的目录结构如下 + tpc_c_cplusplus/thirdparty/g3log-1.3 #三方库g3log的目录结构如下 ├── docs #三方库相关文档的文件夹 ├── HPKBUILD #构建脚本 ├── HPKCHECK #测试脚本 ├── SHA512SUM #三方库校验文件 ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 ├── README_zh.md #三方库简介 - ├── g3log-1.3_oh_pkg.patch #用于g3log-1.3库编译的补丁 + ├── g3log-1.3_oh_pkg.patch #用于g3log库编译的补丁 ``` - 在lycium目录下编译三方库 @@ -33,7 +33,7 @@ ```shell cd lycium - ./build.sh g3log-1.3 + ./build.sh g3log ``` - 三方库头文件及生成的库 @@ -41,14 +41,14 @@ 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 ```shell - g3log-1.3/arm64-v8a g3log-1.3/armeabi-v7a + g3log/arm64-v8a g3log/armeabi-v7a ``` - [测试三方库](#测试三方库) ## 应用中使用三方库 -- 在IDE的cpp目录下新增thirdparty目录,将编译生成的头文件拷贝到该目录下,将编译生成的三方库以及依赖库全部(动态库名字带版本号和不带版本号的都需要)拷贝到工程的libs目录下,如下图所示: +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的头文件和库文件拷贝到该目录下,将编译生成的三方库(动态库名字带版本号和不带版本号的都需要)拷贝到工程的libs目录下,如下图所示:    ![thirdparty_install_dir](pic/g3log_install_dir.png) diff --git a/thirdparty/g3log-1.3/docs/pic/g3log_install_dir.png b/thirdparty/g3log/docs/pic/g3log_install_dir.png similarity index 100% rename from thirdparty/g3log-1.3/docs/pic/g3log_install_dir.png rename to thirdparty/g3log/docs/pic/g3log_install_dir.png diff --git a/thirdparty/g3log-1.3/docs/pic/g3log_test.png b/thirdparty/g3log/docs/pic/g3log_test.png similarity index 100% rename from thirdparty/g3log-1.3/docs/pic/g3log_test.png rename to thirdparty/g3log/docs/pic/g3log_test.png diff --git a/thirdparty/g3log-1.3/g3log-1.3_oh_pkg.patch b/thirdparty/g3log/g3log-1.3_oh_pkg.patch similarity index 100% rename from thirdparty/g3log-1.3/g3log-1.3_oh_pkg.patch rename to thirdparty/g3log/g3log-1.3_oh_pkg.patch -- Gitee