From ba93efc15e74414e4acd9d30eb5eec07613dcadf Mon Sep 17 00:00:00 2001 From: wupingyuan Date: Sat, 6 May 2023 18:11:48 +0800 Subject: [PATCH] add libtommath Signed-off-by: wupingyuan --- thirdparty/libtommath/HPKBUILD | 72 ++++++++++++++++++ thirdparty/libtommath/README.OpenSource | 11 +++ thirdparty/libtommath/README_zh.md | 12 +++ thirdparty/libtommath/SHA512SUM | 1 + thirdparty/libtommath/docs/hap_integrate.md | 67 ++++++++++++++++ .../docs/pic/libtommath_install_dir.jpg | Bin 0 -> 10866 bytes .../libtommath/docs/pic/libtommath_test.jpg | Bin 0 -> 26433 bytes .../libtommath/docs/pic/libtommath_usage.jpg | Bin 0 -> 30402 bytes 8 files changed, 163 insertions(+) create mode 100644 thirdparty/libtommath/HPKBUILD create mode 100644 thirdparty/libtommath/README.OpenSource create mode 100644 thirdparty/libtommath/README_zh.md create mode 100644 thirdparty/libtommath/SHA512SUM create mode 100644 thirdparty/libtommath/docs/hap_integrate.md create mode 100644 thirdparty/libtommath/docs/pic/libtommath_install_dir.jpg create mode 100644 thirdparty/libtommath/docs/pic/libtommath_test.jpg create mode 100644 thirdparty/libtommath/docs/pic/libtommath_usage.jpg diff --git a/thirdparty/libtommath/HPKBUILD b/thirdparty/libtommath/HPKBUILD new file mode 100644 index 00000000..a0d37c6a --- /dev/null +++ b/thirdparty/libtommath/HPKBUILD @@ -0,0 +1,72 @@ +# Contributor: wupingyuan +# Maintainer: wupingyuan +pkgname=libtommath +pkgver=1.2.0 +pkgrel=0 +pkgdesc="This is the git repository for LibTomMath, a free open source portable number theoretic multiple-precision integer (MPI) library written entirely in C." +url="https://github.com/libtom/libtommath" +archs=("armeabi-v7a" "arm64-v8a") +license=("public domain") +depends=() +makedepends=() +install= +source="https://github.com/libtom/$pkgname/archive/refs/tags/v$pkgver.tar.gz" + +autounpack=true +downloadpackage=true +buildtools="make" +builddir=$pkgname-$pkgver +packagename=$builddir.tar.gz +cc= +ar= +ranlib= + +prepare() { + cp -rf $builddir $builddir-$ARCH-build + cd $builddir-$ARCH-build + ar=${OHOS_SDK}/native/llvm/bin/llvm-ar + ranlib=${OHOS_SDK}/native/llvm/bin/llvm-ranlib + if [ $ARCH == ${archs[0]} ] + then + cc=${OHOS_SDK}/native/llvm/bin/arm-linux-ohos-clang + fi + if [ $ARCH == ${archs[1]} ] + then + cc=${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clang + fi + cd $OLDPWD +} + +build() { + cd $builddir-$ARCH-build + make CC=${cc} AR=${ar} RANLIB=${ranlib} -j4 > `pwd`/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir-$ARCH-build + make install PREFIX=$LYCIUM_ROOT/usr/$pkgname-$ARCH-install >> `pwd`/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +check() { + # 生成测试可执行文件 + cd $builddir-$ARCH-build + make CC=${cc} test_standalone >> `pwd`/build.log 2>&1 + ret=$? + unset cc ar ranlib + cd $OLDPWD + echo "The test must be on an OpenHarmony device!" + # 在OpenHarmony开发板中执行用例 + # ./test + return $ret +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/$builddir $builddir-armeabi-v7a-build $builddir-arm64-v8a-build #${PWD}/$packagename +} \ No newline at end of file diff --git a/thirdparty/libtommath/README.OpenSource b/thirdparty/libtommath/README.OpenSource new file mode 100644 index 00000000..7ec1ec22 --- /dev/null +++ b/thirdparty/libtommath/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "libtommath", + "License": "public domain", + "License File": "LICENSE", + "Version Number": "1.2.0", + "Owner": "wupingyuan@huawei.com", + "Upstream URL": "https://github.com/libtom/libtommath/archive/refs/tags/v1.2.0.tar.gz", + "Description": "This is the git repository for LibTomMath, a free open source portable number theoretic multiple-precision integer (MPI) library written entirely in C." + } +] diff --git a/thirdparty/libtommath/README_zh.md b/thirdparty/libtommath/README_zh.md new file mode 100644 index 00000000..8328689f --- /dev/null +++ b/thirdparty/libtommath/README_zh.md @@ -0,0 +1,12 @@ +# libtommath三方库说明 +## 功能简介 +libtommath是一个完全用C语言编写的免费开源可移植数字理论多精度整数(MPI)库。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Release +- SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) +- 三方库版本:1.2.0 +- 当前适配的功能:数字理论多精度整数 +- [BSD](https://github.com/libtom/libtommath) + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/libtommath/SHA512SUM b/thirdparty/libtommath/SHA512SUM new file mode 100644 index 00000000..72271855 --- /dev/null +++ b/thirdparty/libtommath/SHA512SUM @@ -0,0 +1 @@ +500bce4467d6cdb0b014e6c66d3b994a8d63b51475db6c3cd77c15c8368fbab4e3b5c458fcd5b35838b74c457a33c15b42d2356964f5ef2a0bd31fd544735c9a libtommath-1.2.0.tar.gz diff --git a/thirdparty/libtommath/docs/hap_integrate.md b/thirdparty/libtommath/docs/hap_integrate.md new file mode 100644 index 00000000..a7ee9ee1 --- /dev/null +++ b/thirdparty/libtommath/docs/hap_integrate.md @@ -0,0 +1,67 @@ +# libtommath集成到应用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/libtommath #三方库libtommath的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` + +- 将libtommath拷贝至tools/main目录下 + ``` + cd tpc_c_cplusplus + cp thirdparty/libtommath tools/main -rf + ``` +- 在tools目录下编译三方库 + 编译环境的搭建参考[准备三方库构建环境](../../../tools/README.md#编译环境准备) + ``` + cd tools + ./build.sh libtommath + ``` +- 三方库头文件及生成的库 + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + ``` + libtommath-arm64-v8a-install libtommath-armeabi-v7a-install + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 + ![thirdparty_install_dir](pic/libtommath_install_dir.jpg) +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + ``` + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libtommath-${OHOS_ARCH}-install/lib/libtommath.a) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libtommath-${OHOS_ARCH}-install/include) + ``` + ![libtommath_usage](pic/libtommath_usage.jpg) +## 测试三方库 +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../tools/README.md#ci环境准备) + +进入到构建目录执行./test运行测试用例(arm64-v8a-build为构建64位的目录,armeabi-v7a-build为构建32位的目录) + + ![libtommath_test](pic/libtommath_test.jpg) + +## 参考资料 +- [润和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/libtommath/docs/pic/libtommath_install_dir.jpg b/thirdparty/libtommath/docs/pic/libtommath_install_dir.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc0946664af4322b40a3df55e32bd14a1cea1b62 GIT binary patch literal 10866 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libtommath/docs/pic/libtommath_usage.jpg b/thirdparty/libtommath/docs/pic/libtommath_usage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3fabb0b8e20bc0db77ce3fb22ecfa5df1c24d0d GIT binary patch literal 30402 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

KsJD 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 literal 0 HcmV?d00001 -- Gitee