From 321d7a88382dc332f217908d7f304d729fdd2407 Mon Sep 17 00:00:00 2001 From: liucheng Date: Thu, 20 Jul 2023 15:37:39 +0800 Subject: [PATCH] xxHash fix Signed-off-by: liucheng --- thirdparty/xxHash/HPKCHECK | 16 ++++++++++++++++ thirdparty/xxHash/README_zh.md | 2 +- thirdparty/xxHash/docs/hap_integrate.md | 11 ++++------- thirdparty/xxHash/docs/pic/install_dir.png | Bin 9807 -> 15395 bytes 4 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 thirdparty/xxHash/HPKCHECK diff --git a/thirdparty/xxHash/HPKCHECK b/thirdparty/xxHash/HPKCHECK new file mode 100644 index 00000000..bbf76314 --- /dev/null +++ b/thirdparty/xxHash/HPKCHECK @@ -0,0 +1,16 @@ +#Contributor: liucheng <1596268623@qq.com> +#Maintainer: liucheng <1596268623@qq.com> + +source HPKBUILD > /dev/null 2>&1 +logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log + + +openharmonycheck() { + res=0 + cd xxHash-${ARCH}-build/${builddir}/ + /bin/bash tests/unicode_lint.sh > ${logfile} 2>&1 + res=$? + cd $OLDPWD + + return $res +} diff --git a/thirdparty/xxHash/README_zh.md b/thirdparty/xxHash/README_zh.md index 2a4cc7ca..297317f7 100644 --- a/thirdparty/xxHash/README_zh.md +++ b/thirdparty/xxHash/README_zh.md @@ -3,7 +3,7 @@ xxHash是一种极快的哈希算法,在RAM速度限制下处理。 代码具有高度可移植性 ## 使用约束 - IDE版本:DevEco Studio 3.1 Release -- SDK版本:ohos_sdk_public 4.0.8.1 (API Version 9 Release) +- SDK版本:ohos_sdk_public 4.0.8.1 (API Version 10 Release) - 三方库版本:v0.8.1 - xxHash是一种极快的哈希算法,在RAM速度限制下处理。 代码具有高度可移植性 diff --git a/thirdparty/xxHash/docs/hap_integrate.md b/thirdparty/xxHash/docs/hap_integrate.md index 588d0efa..1213beb9 100644 --- a/thirdparty/xxHash/docs/hap_integrate.md +++ b/thirdparty/xxHash/docs/hap_integrate.md @@ -14,7 +14,6 @@ ``` git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 ``` - - 三方库目录结构 ``` tpc_c_cplusplus/thirdparty/xxHash #三方库的目录结构如下 @@ -25,22 +24,19 @@ ├── README_zh.md ``` -- 编译三方库 +- 在lycium目录下编译三方库 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) - ``` cd lycium ./build.sh xxHash ``` - - 三方库头文件及生成的库 - 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件 - + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件 ``` xxHash/arm64-v8a xxHash/armeabi-v7a ``` - + - [测试三方库](#测试三方库) ## 应用中使用三方库 @@ -55,6 +51,7 @@ target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${ #将三方库的头文件加入工程中 target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/xxHash/${OHOS_ARCH}/include) ``` + ![thirdparty_usage](pic/usage.png) ## 测试三方库 三方库的测试使用原库自带的测试用例来做测试 diff --git a/thirdparty/xxHash/docs/pic/install_dir.png b/thirdparty/xxHash/docs/pic/install_dir.png index ae43ab62a4cf41cba2daded770dfde89d6519e84..e233259ab5a2bfe25b596933b7efd11ebccc0148 100755 GIT binary patch literal 15395 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 -- Gitee