diff --git a/thirdparty/caffe/HPKBUILD b/thirdparty/caffe/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..e15a6d8542e501cc5527ac0a69e47e062cb90596 --- /dev/null +++ b/thirdparty/caffe/HPKBUILD @@ -0,0 +1,227 @@ +# Contributor: huangminzhong +# Maintainer: huangminzhong +pkgname=caffe +pkgver=1.0 +pkgrel=0 +pkgdesc="Caffe is a deep learning framework made with expression, speed, and modularity in mind. It is developed by Berkeley AI Research (BAIR)/The Berkeley Vision and Learning Center (BVLC) and community contributors." +url="https://github.com/BVLC/caffe" +archs=("armeabi-v7a" "arm64-v8a") +license=("Copyright (c) 2014-2017 The Regents of the University of California") +depends=("snappy" "leveldb" "opencv" "szip" "hdf5" "boost" "glog" "zlib" "gflags" "googletest") +source="https://github.com/BVLC/$pkgname/archive/refs/tags/$pkgver.tar.gz" +downloadpackage=true +autounpack=true +builddir=$pkgname-$pkgver +packagename=$builddir.tar.gz + +# oh的sdk无法编译fortran语言,这里借用系统的交叉工具链来编译 +makedepends=("arm-linux-gnueabi-gfortran" "aarch64-linux-gnu-gfortran") + +# protobuf使用v3.6.1版本 +protobufpkgname=protobuf +protobufbuildhostflag=true +protobufpkgver=v3.6.1 +protobufsource="https://github.com/protocolbuffers/$protobufpkgname/archive/refs/tags/$protobufpkgver.tar.gz" +protobufbuilddir=$protobufpkgname-${protobufpkgver:1} +protobufpackagename=$protobufbuilddir.tar.gz +protoc= + +# BLAS使用3.11.0版本 +blaspkgname=BLAS +blaspkgver=3.11.0 +blassource="http://www.netlib.org/blas/blas-3.11.0.tgz" +blasbuilddir=$blaspkgname-$blaspkgver +blaspackagename=$blasbuilddir.tgz +blaslibs= + +# CBLAS官网没有明确版本 +cblaspkgname=CBLAS +cblassource="http://www.netlib.org/blas/blast-forum/cblas.tgz" +cblasbuilddir=$cblaspkgname +cblaspackagename=cblasbuilddir.tgz +cblaslibs= +cblasinclude= + +patchflag=true +unpackagethirdpartyflag=true +fc= +ar= +cc= + +# 预设编译blas需要的工具链 +setcompiler() { + if [ "$ARCH" == "armeabi-v7a" ];then + fc=arm-linux-gnueabi-gfortran + ar=arm-linux-gnueabi-ar + cc=${OHOS_SDK}/native/llvm/bin/arm-linux-ohos-clang + fi + + if [ "$ARCH" == "arm64-v8a" ];then + fc=aarch64-linux-gnu-gfortran + ar=aarch64-linux-gnu-ar + cc=${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clang + fi +} + +downloadthirdparty() { + if [ ! -f "$protobufpackagename" ];then + curl -L -f $protobufsource > $protobufpackagename + if [ "$?" != "0" ];then + echo "download $protobufbuilddir fail" + return 1 + fi + fi + if [ ! -f "$blaspackagename" ];then + curl -L -f $blassource > $blaspackagename + if [ "$?" != "0" ];then + echo "download $blasbuilddir fail" + return 1 + fi + fi + + if [ ! -f "$cblaspackagename" ];then + curl -L -f $cblassource > $cblaspackagename + if [ "$?" != "0" ];then + echo "download $cblasbuilddir fail" + return 1 + fi + fi + + return 0 +} + +unpackagethirdparty() { + tar xvfz $protobufpackagename > /dev/null 2>&1 + tar xvfz $blaspackagename > /dev/null 2>&1 + tar xvfz $cblaspackagename > /dev/null 2>&1 +} + +patchthirdparty() { + # 该文件依赖gfortran.so,需要裁剪掉 + mv $blasbuilddir/xerbla.f $blasbuilddir/xerbla.f.bak + cd $builddir + # caffe原库调用opencv时宏参数找不到,这里为报错的文件添加opencv宏定义相关的头文件 + patch -p1 < ../caffe_oh_pkg.patch + cd $OLDPWD +} + +protobufbuildhost() { + if [ $protobufbuildhostflag == false ];then + return 1 + fi + + mkdir -p $protobufbuilddir/cmake/build + cd $protobufbuilddir/cmake/build + cmake .. -Dprotobuf_BUILD_TESTS=OFF > `pwd`/build.log 2>&1 + make -j4 VERBOSE=1 >> build.log 2>&1 + ./protoc --version + if [ "$?" != "0" ];then + echo "compile linux protoc fail" + return 1 + fi + protoc=`pwd`/protoc + cd $OLDPWD + protobufbuildhostflag=false + return 0 +} + +buildprotobuf() { + mkdir -p $protobufbuilddir/cmake/$ARCH-build + cd $protobufbuilddir/cmake/$ARCH-build + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DOHOS_ARCH=$ARCH -Dprotobuf_BUILD_TESTS=OFF .. -L > build.log 2>&1 + make -j4 >> build.log 2>&1 + make install >> build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +buildblas() { + cd $blasbuilddir + $fc -c -O3 -fPIC *.f > `pwd`/build.log + $ar rv libblas.a *.o >> `pwd`/build.log + ret=$? + blaslibs=`pwd`/libblas.a + cd $OLDPWD + return $ret +} + +buildcblas() { + cp -rf $cblasbuilddir $cblasbuilddir-$ARCH-build + cp Makefile.ohos $cblasbuilddir-$ARCH-build/Makefile.in + cd $cblasbuilddir-$ARCH-build + make CC=$cc FC=$fc -j4 alllib > `pwd`/build.log 2>&1 + ret=$? + cblaslibs=`pwd`/lib/cblas_ohos.a + cblasinclude=`pwd`/include + cd $OLDPWD + return $ret +} + +prepare() { + downloadthirdparty + if [ "$?" != "0" ];then + exit 1 + fi + + if [ $unpackagethirdpartyflag == true ];then + unpackagethirdparty + unpackagethirdpartyflag=false + fi + + setcompiler + if [ $patchflag == true ];then + patchthirdparty + patchflag=false + fi + + protobufbuildhost + mkdir -p $builddir/$ARCH-build +} + +buildthirdparty() { + buildblas + if [ "$?" != "0" ];then + echo "build blas fail" + exit 1 + fi + buildcblas + if [ "$?" != "0" ];then + echo "build cblas fail" + exit 1 + fi + + buildprotobuf "$@" + if [ "$?" != "0" ];then + echo "build protobuf fail" + exit 1 + fi +} + +build() { + buildthirdparty "$@" + cd $builddir + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@;$LYCIUM_ROOT/usr/caffe/$ARCH" -DOHOS_ARCH=$ARCH -B$ARCH-build -DUSE_LMDB=OFF -DBLAS=clbas -DBUILD_python=OFF -DBUILD_python_layer=OFF -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=FALSE -DProtobuf_PROTOC_EXECUTABLE=$protoc -DCMAKE_SHARED_LINKER_FLAGS="$blaslibs $cblaslibs" -DCMAKE_CXX_FLAGS="-I$cblasinclude" -S./ -L > $ARCH-build/build.log 2>&1 + make -j4 -C $ARCH-build >> `pwd`/$ARCH-build/build.log 2>&1 && make -j4 test.testbin -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!" + # cp caffe_test.sh $builddir + # cd $builddir + # ./caffe_test.sh $ARCH +} + +cleanbuild(){ + rm -rf ${PWD}/$builddir ${PWD}/$protobufbuilddir ${PWD}/$blasbuilddir ${PWD}/$cblasbuilddir-armeabi-v7a-build \ + ${PWD}/$cblasbuilddir-arm64-v8a-build #${PWD}/$packagename ${PWD}/$protobufpackagename ${PWD}/$blaspackagename ${PWD}/$cblaspackagename +} diff --git a/thirdparty/caffe/Makefile.ohos b/thirdparty/caffe/Makefile.ohos new file mode 100644 index 0000000000000000000000000000000000000000..4ce042050e3509f6a2b0e835eea0f1e77f543386 --- /dev/null +++ b/thirdparty/caffe/Makefile.ohos @@ -0,0 +1,49 @@ +# +# Makefile.ohos +# +# +# If you compile, change the name to Makefile.in. +# +# + +#----------------------------------------------------------------------------- +# Shell +#----------------------------------------------------------------------------- + +SHELL = /bin/sh + +#----------------------------------------------------------------------------- +# Platform +#----------------------------------------------------------------------------- + +PLAT = ohos + +#----------------------------------------------------------------------------- +# Libraries and includs +#----------------------------------------------------------------------------- + +BLLIB = libblas.a +CBLIB = ../lib/cblas_$(PLAT).a + +#----------------------------------------------------------------------------- +# Compilers +#----------------------------------------------------------------------------- + +CC = +FC = +LOADER = $(FC) + +#----------------------------------------------------------------------------- +# Flags for Compilers +#----------------------------------------------------------------------------- + +CFLAGS = -O3 -DADD_ +FFLAGS = -O3 + +#----------------------------------------------------------------------------- +# Archive programs and flags +#----------------------------------------------------------------------------- + +ARCH = ar +ARCHFLAGS = r +RANLIB = echo diff --git a/thirdparty/caffe/OAT.xml b/thirdparty/caffe/OAT.xml new file mode 100644 index 0000000000000000000000000000000000000000..bec1efe7d954d0b6e12271d2131e1e11016af7d6 --- /dev/null +++ b/thirdparty/caffe/OAT.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/caffe/README.OpenSource b/thirdparty/caffe/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..77cbb5d15c3bb91c024341cc34e1ed39c91d268d --- /dev/null +++ b/thirdparty/caffe/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "caffe", + "License": "Copyright (c) 2014-2017 The Regents of the University of California", + "License File": "COPYING", + "Version Number": "1.0", + "Owner": "kanchengc@isoftstone.com", + "Upstream URL": "https://github.com/BVLC/caffe/archive/refs/tags/1.0.tar.gz", + "Description": "Caffe is a deep learning framework made with expression, speed, and modularity in mind." + } +] diff --git a/thirdparty/caffe/README_zh.md b/thirdparty/caffe/README_zh.md new file mode 100644 index 0000000000000000000000000000000000000000..2bdc1b90e48812d1cf6a838dabe9058baee6b7bd --- /dev/null +++ b/thirdparty/caffe/README_zh.md @@ -0,0 +1,12 @@ +# caffe三方库说明 +## 功能简介 +Caffe:一个用于深度学习的快速开放框架。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Beta2 +- SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) +- 三方库版本:1.0 +- 当前适配的功能:支持深度学习 +- [Copyright (c) 2014-2017 The Regents of the University of California](https://github.com/BVLC/caffe/blob/master/LICENSE) + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/caffe/SHA512SUM b/thirdparty/caffe/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..dcbc1dc0bfec2965190449dec0ea9ac599247dd5 --- /dev/null +++ b/thirdparty/caffe/SHA512SUM @@ -0,0 +1 @@ +6e80530a03eb11c77ad391cdaf4d6dfd5aad034e8e6966da15f38c6a0369f9a4510c49319116970b12874f17fbe22bf5d0ff5738ce980a0191b4d4e4187220d1 caffe-1.0.tar.gz \ No newline at end of file diff --git a/thirdparty/caffe/caffe_oh_pkg.patch b/thirdparty/caffe/caffe_oh_pkg.patch new file mode 100644 index 0000000000000000000000000000000000000000..50344628ea8adfaa324bc21bfb179aaddaa3778d --- /dev/null +++ b/thirdparty/caffe/caffe_oh_pkg.patch @@ -0,0 +1,30 @@ +diff -uprN caffe-1.0/src/caffe/layers/window_data_layer.cpp caffe-1.0-ohos/src/caffe/layers/window_data_layer.cpp +--- caffe-1.0/src/caffe/layers/window_data_layer.cpp 2017-04-16 00:17:48.000000000 +0800 ++++ caffe-1.0-ohos/src/caffe/layers/window_data_layer.cpp 2023-06-07 14:55:24.540518069 +0800 +@@ -1,4 +1,5 @@ + #ifdef USE_OPENCV ++#include + #include + #include + +Binary files caffe-1.0/src/caffe/layers/.window_data_layer.cpp.swp and caffe-1.0-ohos/src/caffe/layers/.window_data_layer.cpp.swp differ +diff -uprN caffe-1.0/src/caffe/test/test_io.cpp caffe-1.0-ohos/src/caffe/test/test_io.cpp +--- caffe-1.0/src/caffe/test/test_io.cpp 2017-04-16 00:17:48.000000000 +0800 ++++ caffe-1.0-ohos/src/caffe/test/test_io.cpp 2023-06-07 15:04:38.350290765 +0800 +@@ -1,4 +1,5 @@ + #ifdef USE_OPENCV ++#include + #include + #include + #include +diff -uprN caffe-1.0/src/caffe/util/io.cpp caffe-1.0-ohos/src/caffe/util/io.cpp +--- caffe-1.0/src/caffe/util/io.cpp 2017-04-16 00:17:48.000000000 +0800 ++++ caffe-1.0-ohos/src/caffe/util/io.cpp 2023-06-07 14:56:02.560471691 +0800 +@@ -3,6 +3,7 @@ + #include + #include + #ifdef USE_OPENCV ++#include + #include + #include + #include diff --git a/thirdparty/caffe/caffe_test.sh b/thirdparty/caffe/caffe_test.sh new file mode 100644 index 0000000000000000000000000000000000000000..972d1859bec78e6577aa66edc4097e97d72cfeab --- /dev/null +++ b/thirdparty/caffe/caffe_test.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +testitem=(AccuracyLayerTest ArgMaxLayerTest BatchNormLayerTest BatchReindexLayerTest BenchmarkTest BiasLayerTest BlobMathTest CommonTest ConcatLayerTest ContrastiveLossLayerTest ConvolutionLayerTest CropLayerTest DataTransformTest DeconvolutionLayerTest DummyDataLayerTest EltwiseLayerTest EmbedLayerTest EuclideanLossLayerTest ConstantFillerTest UniformFillerTest PositiveUnitballFillerTest GaussianFillerTest XavierFillerTest MSRAFillerTest FilterLayerTest FlattenLayerTest SGDSolverTest AdaGradSolverTest NesterovSolverTest AdaDeltaSolverTest AdamSolverTest RMSPropSolverTest HDF5OutputLayerTest HingeLossLayerTest Im2colLayerTest ImageDataLayerTest InfogainLossLayerTest InnerProductLayerTest InternalThreadTest IOTest LayerFactoryTest LRNLayerTest LSTMLayerTest CPUMathFunctionsTest MaxPoolingDropoutTest MemoryDataLayerTest MultinomialLogisticLossLayerTest MVNLayerTest NetTest FilterNetTest NeuronLayerTest PoolingLayerTest PowerLayerTest ProtoTest RandomNumberGeneratorTest ReductionLayerTest ReshapeLayerTest RNNLayerTest ScaleLayerTest SigmoidCrossEntropyLossLayerTest SliceLayerTest SoftmaxLayerTest SoftmaxWithLossLayerTest SolverTest SolverFactoryTest SplitLayerTest SplitLayerInsertionTest SPPLayerTest CPUStochasticPoolingLayerTest SyncedMemoryTest TanHLayerTest ThresholdLayerTest TileLayerTest PaddingLayerUpgradeTest NetUpgradeTest SolverTypeUpgradeTest) + +cpu= + +if [ "$1" == "armeabi-v7a" ];then + cpu="armeabi-v7a" +elif [ "$1" == "arm64-v8a" ];then + cpu="arm64-v8a" +else + echo "please input ./caffe_test.sh armeabi-v7a or ./caffe_test.sh arm64-v8a" + exit 1 +fi + +for item in ${testitem[@]} +do + ./$cpu-build/test/test.testbin --gtest_filter=*$item* +done + +#GPU相关,原库测试本来就关闭的 +#./linuxbuild/test/test.testbin --gtest_filter=*BlobSimpleTest* +#该用例需要加载一个插件,目前不知道是什么插件,Linux上面也会执行失败 +#./linuxbuild/test/test.testbin --gtest_filter=*HDF5DataLayerTest* + diff --git a/thirdparty/caffe/docs/hap_integrate.md b/thirdparty/caffe/docs/hap_integrate.md new file mode 100644 index 0000000000000000000000000000000000000000..713451f6caadd2c183061d98640c3bd7b6e6d57d --- /dev/null +++ b/thirdparty/caffe/docs/hap_integrate.md @@ -0,0 +1,121 @@ +# caffe集成到应用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/caffe #三方库caffe的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── SHA512SUM #三方库校验文件 + ├── caffe_oh_pkg.patch #补丁 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── Makefile.ohos #编译caffe所需依赖库cblas的makefile + ├── caffe_test.sh #三方库自测脚本 + ├── README_zh.md + ``` + +- 将snappy leveldb opencv szip hdf5 boost glog zlib gflags googletest caffe拷贝至tools/main目录下 + ``` + cd tpc_c_cplusplus + cp thirdparty/caffe tools/main -rf + cp thirdparty/leveldb tools/main -rf + cp thirdparty/opencv tools/main -rf + cp thirdparty/szip tools/main -rf + cp thirdparty/hdf5 tools/main -rf + cp thirdparty/boost tools/main -rf + cp thirdparty/glog tools/main -rf + cp thirdparty/zlib tools/main -rf + cp thirdparty/gflags tools/main -rf + cp thirdparty/googletest tools/main -rf + ``` +- 在tools目录下编译三方库 + 编译环境的搭建参考[准备三方库构建环境](../../../tools/README.md#编译环境准备) + ``` + cd tools + ./build.sh ./build.sh snappy leveldb opencv szip hdf5 boost glog zlib gflags googletest caffe + ``` +- 三方库头文件及生成的库 + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + ``` + caffe/arm64-v8a caffe/armeabi-v7a + liboost/arm64-v8a boost/armeabi-v7a + iboostb/arm64-v8a boost/armeabi-v7a + gflags/arm64-v8a gflags/armeabi-v7a + glog/arm64-v8a glog/armeabi-v7a + googletest/arm64-v8a googletest/armeabi-v7a + hdf5/arm64-v8a hdf5/armeabi-v7a + leveldb/arm64-v8a leveldb/armeabi-v7a + opencv/arm64-v8a opencv/armeabi-v7a + snappy/arm64-v8a snappy/armeabi-v7a + szip/arm64-v8a szip/armeabi-v7a + zlib/arm64-v8a zlib/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 + ![thirdparty_install_dir](pic/caffe_install_dir.png) +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + ``` + #将三方库加入工程中 +target_link_libraries(entry PUBLIC libace_napi.z.so) +target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/cafffe/${OHOS_ARCH}/lib/libcaffe.so.1.0.0) +target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/boost/${OHOS_ARCH}/lib/libboost_atomic.so.1.81.0) +``` + #将三方库的头文件加入工程中 +target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/caffe/${OHOS_ARCH}/include) +target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/boost/${OHOS_ARCH}/include) + ``` + ![caffe_usage](pic/caffe_usage.png) +## 测试三方库 +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../tools/README.md#ci环境准备) + +- 将tools/caffe/caffe_test.sh 文件拷贝到 tools/caffe/caffe-1.0目录 +- 将编译生成的tools/caffe目录 压缩成caffe.tar.gz文件 +- 将编译生成的tools/usr目录 压缩成usr.tar.gz文件 + +- 将准备好的文件推送到开发板,在windows命令行进行如下操作 + + ``` + hdc_std shell mount -o remount,rw / #修改系统权限为可读写 + + hdc_std file send libc++_shared.so /system/lib64 + + hdc_std file send caffe.tar.gz /data/local/tmp + + hdc_std file send usr.tar.gz /data/local/tmp + + hdc_std shell #进入开发板 + + cd /data/local/tmp目录 + tar -zxf caffe.tar.gz #解压 + tar -zxf usr.tar.gz #解压 + + cd /data/local/tmp/caffe/caffe-1.0 + + LD_LIBRARY_PATH=/data/local/tmp/usr/boost/arm64-v8a/lib:/data/local/tmp/usr/caffe/arm64-v8a/lib:/data/local/tmp/usr/gflags/arm64-v8a/lib:/data/local/tmp/usr/glog/arm64-v8a/lib:/data/local/tmp/usr/googletest/arm64-v8a/lib:/data/local/tmp/usr/hdf5/arm64-v8a/lib:/data/local/tmp/usr/leveldb/arm64-v8a/lib:/data/local/tmp/usr/opencv/arm64-v8a/lib:/data/local/tmp/usr/snappy/arm64-v8a/lib:/data/local/tmp/usr/szip/arm64-v8a/lib:/data/local/tmp/usr/zlib/arm64-v8a/lib /bin/sh ./caffe_test.sh arm64-v8a #64位系统 执行命令 + + LD_LIBRARY_PATH=/data/local/tmp/usr/boost/armeabi-v7a/lib:/data/local/tmp/usr/caffe/armeabi-v7a/lib:/data/local/tmp/usr/gflags/armeabi-v7a/lib:/data/local/tmp/usr/glog/armeabi-v7a/lib:/data/local/tmp/usr/googletest/armeabi-v7a/lib:/data/local/tmp/usr/hdf5/armeabi-v7a/lib:/data/local/tmp/usr/leveldb/armeabi-v7a/lib:/data/local/tmp/usr/opencv/armeabi-v7a/lib:/data/local/tmp/usr/snappy/armeabi-v7a/lib:/data/local/tmp/usr/szip/armeabi-v7a/lib:/data/local/tmp/usr/zlib/armeabi-v7a/lib /bin/sh ./caffe_test.sh armeabi-v7a #32位系统 执行命令 + + ``` + + ![caffe_test](pic/caffe_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/caffe/docs/pic/caffe_install_dir.png b/thirdparty/caffe/docs/pic/caffe_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bbc5de11bd6803089e2a15e48ccb0038b51de5 Binary files /dev/null and b/thirdparty/caffe/docs/pic/caffe_install_dir.png differ diff --git a/thirdparty/caffe/docs/pic/caffe_test.png b/thirdparty/caffe/docs/pic/caffe_test.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3ce7dcbb627cbdae0b2132d71ba5c93edc65a0 Binary files /dev/null and b/thirdparty/caffe/docs/pic/caffe_test.png differ diff --git a/thirdparty/caffe/docs/pic/caffe_usage.png b/thirdparty/caffe/docs/pic/caffe_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..c0b456680ab25a6cda71fb211ac438846ac6cc2e Binary files /dev/null and b/thirdparty/caffe/docs/pic/caffe_usage.png differ diff --git a/thirdparty/gflags/HPKBUILD b/thirdparty/gflags/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..af719e9cb3f41200258df0bf1a2de5f041a54e09 --- /dev/null +++ b/thirdparty/gflags/HPKBUILD @@ -0,0 +1,44 @@ +# Contributor: huangminzhong +# Maintainer: huangminzhong +pkgname=gflags +pkgver=v2.2.2 +pkgrel=0 +pkgdesc="The gflags package contains a C++ library that implements commandline flags processing." +url="https://github.com/gflags/gflags" +archs=("armeabi-v7a" "arm64-v8a") +license=("BSD 3-Clause New or Revised License") +depends=() +makedepends=() +source="https://github.com/gflags/$pkgname/archive/refs/tags/$pkgver.tar.gz" +downloadpackage=true +autounpack=true + +builddir=$pkgname-${pkgver:1} +packagename=$builddir.tar.gz + +prepare() { + mkdir -p $builddir/$ARCH-build +} + +build() { + cd $builddir + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DOHOS_ARCH=$ARCH -B$ARCH-build -DBUILD_TESTING=ON -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/gflags/SHA512SUM b/thirdparty/gflags/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..d3b0418c3737a42dcc29026ca80c0baada0ce650 --- /dev/null +++ b/thirdparty/gflags/SHA512SUM @@ -0,0 +1 @@ +98c4703aab24e81fe551f7831ab797fb73d0f7dfc516addb34b9ff6d0914e5fd398207889b1ae555bac039537b1d4677067dae403b64903577078d99c1bdb447 gflags-2.2.2.tar.gz \ No newline at end of file diff --git a/thirdparty/glog/HPKBUILD b/thirdparty/glog/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..aaba494eb92f231be7492c10ca7151d8fbfff743 --- /dev/null +++ b/thirdparty/glog/HPKBUILD @@ -0,0 +1,46 @@ +# Contributor: huangminzhong +# Maintainer: huangminzhong +pkgname=glog +pkgver=v0.6.0 +pkgrel=0 +pkgdesc="Google Logging (glog) is a C++14 library that implements application-level logging. The library provides logging APIs based on C++-style streams and various helper macros." +url="https://github.com/google/glog" +archs=("armeabi-v7a" "arm64-v8a") +license=("glog license") +depends=("googletest" "gflags") +makedepends=() +source="https://github.com/google/$pkgname/archive/refs/tags/$pkgver.tar.gz" +downloadpackage=true +autounpack=true + +builddir=$pkgname-${pkgver:1} +packagename=$builddir.tar.gz + +prepare() { + mkdir -p $builddir/$ARCH-build +} + +build() { + cd $builddir + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DOHOS_ARCH=$ARCH -B$ARCH-build -DBUILD_TESTING=ON -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!" + # cd $ARCH-build + # ctest +} + +cleanbuild(){ + rm -rf ${PWD}/$builddir # ${PWD}/$packagename +} diff --git a/thirdparty/glog/SHA512SUM b/thirdparty/glog/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..05653804e66f0573639f2905aee8dae9179d1da3 --- /dev/null +++ b/thirdparty/glog/SHA512SUM @@ -0,0 +1 @@ +fd2c42583d0dd72c790a8cf888f328a64447c5fb9d99b2e2a3833d70c102cb0eb9ae874632c2732424cc86216c8a076a3e24b23a793eaddb5da8a1dc52ba9226 glog-0.6.0.tar.gz \ No newline at end of file diff --git a/thirdparty/hdf5/HPKBUILD b/thirdparty/hdf5/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..a5376b27a4476cecaadb38bbaaf649616ff3fe5f --- /dev/null +++ b/thirdparty/hdf5/HPKBUILD @@ -0,0 +1,71 @@ +# Contributor: huangminzhong +# Maintainer: huangminzhong +pkgname=hdf5 +pkgver=hdf5-1_14_1-2 +pkgrel=0 +pkgdesc="This repository contains a high-performance library's source code and a file format specification that implement the HDF5® data model." +url="https://github.com/HDFGroup/hdf5" +archs=("armeabi-v7a" "arm64-v8a") +license=("hdf5 license") +depends=() +makedepends=() +source="https://github.com/HDFGroup/$pkgname/archive/refs/tags/$pkgver.tar.gz" + +autounpack=true +downloadpackage=true + +buildhost=true + +builddir=$pkgname-${pkgver} +packagename=$builddir.tar.gz + +prepare() { + mkdir -p $builddir/$ARCH-build + mkdir -p $builddir/host-build + + if [ $buildhost == true ];then + cd $builddir + cmake -Bhost-build -S./ -L > `pwd`/host-build/build.log 2>&1 + make -j4 -C host-build H5detect H5make_libsettings >> `pwd`/host-build/build.log 2>&1 + cd $OLDPWD + buildhost=false + fi +} + +build() { + cd $builddir + # 该库直接交叉编译会报错,错误会提示我们将某些变量配置为"advanced" + cmake "$@" -DOHOS_ARCH=$ARCH -B$ARCH-build -S./ -DH5_LONG_TO_LDOUBLE_SPECIAL_RUN="advanced" -DH5_LONG_TO_LDOUBLE_SPECIAL_RUN__TRYRUN_OUTPUT="advanced" \ + -DH5_LDOUBLE_TO_LONG_SPECIAL_RUN="advanced" -DH5_LDOUBLE_TO_LONG_SPECIAL_RUN__TRYRUN_OUTPUT="advanced" -DH5_LDOUBLE_TO_LLONG_ACCURATE_RUN="advanced" \ + -DH5_LDOUBLE_TO_LLONG_ACCURATE_RUN__TRYRUN_OUTPUT="advanced" -DH5_LLONG_TO_LDOUBLE_CORRECT_RUN="advanced" -DH5_LLONG_TO_LDOUBLE_CORRECT_RUN__TRYRUN_OUTPUT="advanced" \ + -DH5_DISABLE_SOME_LDOUBLE_CONV_RUN="advanced" -DH5_DISABLE_SOME_LDOUBLE_CONV_RUN__TRYRUN_OUTPUT="advanced" -DHDF5_BUILD_CPP_LIB=ON -L > `pwd`/$ARCH-build/build.log 2>&1 + + # 第一次编译会报错终止,因为需要生成并运行能在本地环境上执行的文件 + make -j4 -C $ARCH-build >> `pwd`/$ARCH-build/build.log 2>&1 + + # 拷贝ubuntu上生成得可执行文件 + cp host-build/bin/* $ARCH-build/bin + + # 继续编译 + 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!" + # ctest +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/$builddir # ${PWD}/$packagename +} diff --git a/thirdparty/hdf5/SHA512SUM b/thirdparty/hdf5/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..2cb558d809dce0b236497fd9b734291ba980bd23 --- /dev/null +++ b/thirdparty/hdf5/SHA512SUM @@ -0,0 +1 @@ +8a5edf7aec57cf0b2056d837251f4226e0e070b4b272a30d150151b7ea94156c7760bb4b16a95642a3aabb663e166ba33c56a63e3b90793edd4ace0724293920 hdf5-hdf5-1_14_1-2.tar.gz \ No newline at end of file diff --git a/thirdparty/leveldb/HPKBUILD b/thirdparty/leveldb/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..e49f72006df05cc1b2fbd593048e8add865e874b --- /dev/null +++ b/thirdparty/leveldb/HPKBUILD @@ -0,0 +1,46 @@ +# Contributor: huangminzhong +# Maintainer: huangminzhong +pkgname=leveldb +pkgver=1.23 +pkgrel=0 +pkgdesc="LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values." +url="https://github.com/google/leveldb" +archs=("armeabi-v7a" "arm64-v8a") +license=("BSD 3-Clause New or Revised License") +depends=("snappy") +makedepends=() +source="https://github.com/google/$pkgname/archive/refs/tags/$pkgver.tar.gz" + +downloadpackage=true +autounpack=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 "$@" -DOHOS_ARCH=$ARCH -B$ARCH-build -DLEVELDB_BUILD_BENCHMARKS=OFF -DLEVELDB_BUILD_TESTS=OFF -DCMAKE_CXX_FLAGS="-Wno-unused-command-line-argument" -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/leveldb/SHA512SUM b/thirdparty/leveldb/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..76d861b5c38ce9d470a4c09fe8bc1a5dc14621b0 --- /dev/null +++ b/thirdparty/leveldb/SHA512SUM @@ -0,0 +1 @@ +ac15eac29387b9f702a901b6567d47a9f8c17cf5c7d8700a77ec771da25158c83b04959c33f3d4de7a3f033ef08f545d14ba823a8d527e21889c4b78065b0f84 leveldb-1.23.tar.gz \ No newline at end of file diff --git a/thirdparty/opencv/HPKBUILD b/thirdparty/opencv/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..c1d7f7970c270a631e8f9a5a7036bb1342cf554d --- /dev/null +++ b/thirdparty/opencv/HPKBUILD @@ -0,0 +1,47 @@ +# Contributor: Jeff Han +# Maintainer: Jeff Han +pkgname=opencv +pkgver=4.7.0 +pkgrel=0 +pkgdesc="" +url="" +archs=("armeabi-v7a" "arm64-v8a") +license=("MIT") +depends=() +makedepends=() + +source="https://github.com/opencv/$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 "$@" -DOHOS_ARCH=$ARCH -B$ARCH-build -S./ -L > `pwd`/$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/opencv/SHA512SUM b/thirdparty/opencv/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..03c0457ccd8c6ef9dd6d8c4890088c4cae57d4a7 --- /dev/null +++ b/thirdparty/opencv/SHA512SUM @@ -0,0 +1 @@ +f799e1eb4ef1eb81212319cf908d0a64d2d5179c8da86b919b06e96a6870a9f3ed33251223a841b71711349018ea6782c174179fa59958a1573e22d11cc9347d opencv-4.7.0.tar.gz diff --git a/thirdparty/snappy/HPKBUILD b/thirdparty/snappy/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..78adcde5e4574951cb4acfa24fef453a826fb2e8 --- /dev/null +++ b/thirdparty/snappy/HPKBUILD @@ -0,0 +1,45 @@ +# Contributor: huangminzhong +# Maintainer: huangminzhong +pkgname=snappy +pkgver=1.1.10 +pkgrel=0 +pkgdesc="Snappy is a compression/decompression library. It does not aim for maximum compression, or compatibility with any other compression library; instead, it aims for very high speeds and reasonable compression." +url="https://github.com/google/snappy" +archs=("armeabi-v7a" "arm64-v8a") +license=("snappy license") +depends=() +makedepends=() +source="https://github.com/google/$pkgname/archive/refs/tags/$pkgver.tar.gz" + +downloadpackage=true +autounpack=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 "$@" -DOHOS_ARCH=$ARCH -B$ARCH-build -DSNAPPY_BUILD_TESTS=OFF -DSNAPPY_BUILD_BENCHMARKS=OFF -S./ -L > `pwd`/$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/snappy/SHA512SUM b/thirdparty/snappy/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..92c2a177e802dfc0d6a3eaa253974c4b73f6b79c --- /dev/null +++ b/thirdparty/snappy/SHA512SUM @@ -0,0 +1 @@ +3578597f1d4ec09104ce0296b825b013590351230dfe56c635081fd282ce7a13a34caf2c283ac77bd24065e2d27af6db068d1f84b98cec2fd39a0e37a0d77070 snappy-1.1.10.tar.gz \ No newline at end of file diff --git a/thirdparty/szip/HPKBUILD b/thirdparty/szip/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..41816b631317587edbef4533e295435d6cc4b6b6 --- /dev/null +++ b/thirdparty/szip/HPKBUILD @@ -0,0 +1,49 @@ +# Contributor: huangminzhong +# Maintainer: huangminzhong +pkgname=szip +pkgver=2.1.1 +pkgrel=0 +pkgdesc="Szip compression software, providing lossless compression of scientific data, has been provided with HDF software products as of HDF5 Release 1.6.0 and HDF4 Release 2.0." +url="https://support.hdfgroup.org/doc_resource/SZIP" +archs=("armeabi-v7a" "arm64-v8a") +license=("szip license") +depends=() +makedepends=() +source="https://support.hdfgroup.org/ftp/lib-external/$pkgname/$pkgver/src/$pkgname-$pkgver.tar.gz" +downloadpackage=true +autounpack=true + +builddir=$pkgname-$pkgver +packagename=$builddir.tar.gz + +prepare() { + mkdir -p $builddir/$ARCH-build +} + +build() { + cd $builddir + # 该库直接交叉编译会失败,提示部分变量必须配置成"advanced" + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DOHOS_ARCH=$ARCH -B$ARCH-build -DBUILD_TESTING=ON -DHAVE_DEFAULT_SOURCE_RUN="advanced" -DHAVE_DEFAULT_SOURCE_RUN__TRYRUN_OUTPUT="advanced" -DTEST_LFS_WORKS_RUN="advanced" -DTEST_LFS_WORKS_RUN__TRYRUN_OUTPUT="advanced" -S./ -L > `pwd`/$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 + cd $LYCIUM_ROOT/usr/$pkgname/$ARCH/lib + ln -s libszip.a libsz.a + cd $OLDPWD +} + +check() { + echo "The test must be on an OpenHarmony device!" + # ctest +} + +cleanbuild(){ + rm -rf ${PWD}/$builddir # ${PWD}/$packagename +} diff --git a/thirdparty/szip/SHA512SUM b/thirdparty/szip/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..1015e775129bbdb4364e63fe3ad7af617cf19c9a --- /dev/null +++ b/thirdparty/szip/SHA512SUM @@ -0,0 +1 @@ +ada6406efb096cd8a2daf8f9217fe9111a96dcae87e29d1c31f58ddd2ad2aa7bac03f23c7205dc9360f3b62d259461759330c7189ef0c2fe559704b1ea9d40dd szip-2.1.1.tar.gz \ No newline at end of file