From 0071d6100bff7ee4a4d0a673db6ecd4d3378edc5 Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Tue, 9 May 2023 19:36:33 +0800 Subject: [PATCH] add log4cplus Signed-off-by: zhongluping <278527840@qq.com> --- thirdparty/log4cplus/HPKBUILD | 55 +++++++++++ thirdparty/log4cplus/README.OpenSource | 11 +++ thirdparty/log4cplus/README_zh.md | 17 ++++ thirdparty/log4cplus/SHA512SUM | 1 + thirdparty/log4cplus/docs/hap_integrate.md | 91 ++++++++++++++++++ .../log4cplus/docs/pic/log4cplus_test.png | Bin 0 -> 28151 bytes 6 files changed, 175 insertions(+) create mode 100755 thirdparty/log4cplus/HPKBUILD create mode 100755 thirdparty/log4cplus/README.OpenSource create mode 100755 thirdparty/log4cplus/README_zh.md create mode 100755 thirdparty/log4cplus/SHA512SUM create mode 100755 thirdparty/log4cplus/docs/hap_integrate.md create mode 100755 thirdparty/log4cplus/docs/pic/log4cplus_test.png diff --git a/thirdparty/log4cplus/HPKBUILD b/thirdparty/log4cplus/HPKBUILD new file mode 100755 index 00000000..fc16d642 --- /dev/null +++ b/thirdparty/log4cplus/HPKBUILD @@ -0,0 +1,55 @@ +# Contributor: huangminzhong +# Maintainer: huangminzhong +pkgname=log4cplus +pkgver=REL_2_1_0 +pkgrel=0 +pkgdesc="" +url="" +archs=("armeabi-v7a" "arm64-v8a") +license=("BSD" "Apache license 2.0") +depends=() +makedepends=() +install= +source="https://github.com/log4cplus/$pkgname/archive/refs/tags/$pkgver.tar.gz" +downloadpackage=true +autounpack=true +syncsubmodule=true # 用于同步子模块 + +builddir=$pkgname-${pkgver} +packagename=$builddir.tar.gz + +prepare() { + mkdir -p $builddir/$ARCH-build + if [ $syncsubmodule == true ];then + cd "$builddir" + # 同步子模块,这里采用git submodule update容易失败,进行git clone下载 + git clone https://github.com/philsquared/Catch.git -b v2.13.9 catch >> `pwd`/build.log 2>&1 + git clone https://github.com/log4cplus/ThreadPool.git threadpool >> `pwd`/build.log 2>&1 + cd $OLDPWD + syncsubmodule=false + fi +} + +build() { + cd $builddir + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DOHOS_ARCH=$ARCH -B$ARCH-build -S./ -L > $ARCH-build/build.log 2>&1 + make -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!" +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/$builddir # ${PWD}/$packagename +} diff --git a/thirdparty/log4cplus/README.OpenSource b/thirdparty/log4cplus/README.OpenSource new file mode 100755 index 00000000..353049b6 --- /dev/null +++ b/thirdparty/log4cplus/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "log4cplus", + "License": "BSD/Apache license", + "License File": "LICENSE", + "Version Number": "REL_2_1_0", + "Owner": "huangminzhong2@huawei.com", + "Upstream URL": "https://github.com/log4cplus/log4cplus", + "Description": "log4cplus is a simple to use C++ logging API providing thread-safe, flexible, and arbitrarily granular control over log management and configuration" + } +] diff --git a/thirdparty/log4cplus/README_zh.md b/thirdparty/log4cplus/README_zh.md new file mode 100755 index 00000000..2aa00879 --- /dev/null +++ b/thirdparty/log4cplus/README_zh.md @@ -0,0 +1,17 @@ +# log4cplus三方库说明 + +## 功能简介 + +log4cplus是一个简单易用的C++日志记录API,它对日志管理和配置提供了线程安全、灵活和任意粒度的控制. + +## 使用约束 + +- IDE版本:DevEco Studio 3.1 Beta2 +- SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) +- 三方库版本:REL_2_1_0 +- 当前适配的功能:支持输出日志并将日志保存到本地 +- [BSD/Apache license](https://github.com/log4cplus/log4cplus/blob/master/LICENSE) + +## 集成方式 + +- [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/log4cplus/SHA512SUM b/thirdparty/log4cplus/SHA512SUM new file mode 100755 index 00000000..51a50e44 --- /dev/null +++ b/thirdparty/log4cplus/SHA512SUM @@ -0,0 +1 @@ +fd26ae73e898af6896046e5e567bfc664bc8e81568c8cdbe5ff6316054b875af7fa946f7b1f011a96b0d3b53dc3f7f9411cbc2ffa07b674777cb0def2743ede8 log4cplus-REL_2_1_0.tar.gz \ No newline at end of file diff --git a/thirdparty/log4cplus/docs/hap_integrate.md b/thirdparty/log4cplus/docs/hap_integrate.md new file mode 100755 index 00000000..9827e120 --- /dev/null +++ b/thirdparty/log4cplus/docs/hap_integrate.md @@ -0,0 +1,91 @@ +# log4cplus集成到应用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/log4cplus #三方库log4cplus的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` + +- 将log4cplus拷贝至tools/main目录下 + + ```shell + cd tpc_c_cplusplus + cp thirdparty/log4cplus tools/main -rf + ``` + +- 在tools目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../tools/README.md#编译环境准备) + + ```shell + cd tools + ./build.sh log4cplus + ``` + +- 三方库头文件及生成的库 + + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + + ```shell + log4cplus/arm64-v8a log4cplus/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 + +  ![thirdparty_install_dir](../../thirdparty_template/docs/pic/xxx_install_dir.png) + + 其中`xxx`代表三方库名,即为`log4cplus` + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + + ```shell + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/log4cplus/${OHOS_ARCH}/lib/liblog4cplusS.a) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/log4cplus/${OHOS_ARCH}/include) + ``` + + ![log4cplus_usage](../../thirdparty_template/docs/pic/xxx_usage.png) + +## 测试三方库 + +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../tools/README.md#ci环境准备) + +进入到构建目录执行ctest运行测试用例(arm64-v8a-build为构建64位的目录,armeabi-v7a-build为构建32位的目录) + + ![log4cplus_test](pic/log4cplus_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/log4cplus/docs/pic/log4cplus_test.png b/thirdparty/log4cplus/docs/pic/log4cplus_test.png new file mode 100755 index 0000000000000000000000000000000000000000..9e4b88e844970a987aab6b4105b28385de9659fa GIT binary patch literal 28151 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