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
G=>GvI8DN?K
literal 0
HcmV?d00001
diff --git a/thirdparty/tinyxpath/tinyxpath_oh_pkg.patch b/thirdparty/tinyxpath/tinyxpath_oh_pkg.patch
new file mode 100755
index 00000000..78665f09
--- /dev/null
+++ b/thirdparty/tinyxpath/tinyxpath_oh_pkg.patch
@@ -0,0 +1,129 @@
+diff -uprN tinyxpath/cmake/PackageConfig.cmake.in tinyxpath-1.3.1/cmake/PackageConfig.cmake.in
+--- tinyxpath/cmake/PackageConfig.cmake.in 1969-12-31 16:00:00.000000000 -0800
++++ tinyxpath-1.3.1/cmake/PackageConfig.cmake.in 2023-02-20 23:38:20.888215070 -0800
+@@ -0,0 +1,11 @@
++@PACKAGE_INIT@
++
++#set(@PROJECT_NAME@_INCLUDE_DIRS @CMAKE_INSTALL_PREFIX@/@TARGET_INSTALL_INCLUDEDIR@/@TARGET_NAME@)
++#set(@PROJECT_NAME@_LIBRARIES @TARGET_NAME@)
++set(@PROJECT_NAME@_INCLUDE_DIRS ${PACKAGE_PREFIX_DIR}/include)
++set(@PROJECT_NAME@_LIBRARIES ${PACKAGE_PREFIX_DIR}/lib/lib@TARGET_NAME@.a)
++
++include(CMakeFindDependencyMacro)
++
++include(${CMAKE_CURRENT_LIST_DIR}/@TARGET_NAME@Targets.cmake)
++check_required_components(@TARGET_NAME@)
+diff -uprN tinyxpath/CMakeLists.txt tinyxpath-1.3.1/CMakeLists.txt
+--- tinyxpath/CMakeLists.txt 1969-12-31 16:00:00.000000000 -0800
++++ tinyxpath-1.3.1/CMakeLists.txt 2023-03-13 19:30:44.305558572 -0700
+@@ -0,0 +1,109 @@
++cmake_minimum_required (VERSION 3.12)
++
++project(TINYXPATH VERSION 1.3.0)
++enable_language(CXX C ASM)
++enable_testing()
++option(BUILD_SAMPLE "Build sample" OFF)
++set(BUILD_SHARED_LIBS FALSE CACHE BOOL "If TRUE, tinyxpath is built as a shared library, otherwise as a static library")
++
++set(TARGET_NAME tinyxpath)
++set(TARGET_SAMPLE_NAME tinyxpath_test)
++
++set(TARGET_INSTALL_INCLUDEDIR include)
++set(TARGET_INSTALL_BINDIR bin)
++set(TARGET_INSTALL_LIBDIR lib)
++
++set(TARGET_SRC_PATH ${CMAKE_CURRENT_SOURCE_DIR})
++set(TARGET_SRC ${TARGET_SRC_PATH}/tinystr.cpp
++ ${TARGET_SRC_PATH}/tinyxml.cpp
++ ${TARGET_SRC_PATH}/tinyxmlerror.cpp
++ ${TARGET_SRC_PATH}/tinyxmlparser.cpp
++ ${TARGET_SRC_PATH}/action_store.cpp
++ ${TARGET_SRC_PATH}/lex_util.cpp
++ ${TARGET_SRC_PATH}/node_set.cpp
++ ${TARGET_SRC_PATH}/tokenlist.cpp
++ ${TARGET_SRC_PATH}/xml_util.cpp
++ ${TARGET_SRC_PATH}/xpath_expression.cpp
++ ${TARGET_SRC_PATH}/xpath_processor.cpp
++ ${TARGET_SRC_PATH}/xpath_stack.cpp
++ ${TARGET_SRC_PATH}/xpath_stream.cpp
++ ${TARGET_SRC_PATH}/xpath_syntax.cpp
++ ${TARGET_SRC_PATH}/xpath_static.cpp)
++if(BUILD_SAMPLE)
++ set(TARGET_SAMPLE_SRC ${TARGET_SRC_PATH}/htmlutil.cpp ${TARGET_SRC_PATH}/main.cpp)
++endif()
++
++set(TARGET_INCLUDE ${TARGET_SRC_PATH})
++
++add_library(${TARGET_NAME} ${TARGET_SRC})
++target_include_directories(${TARGET_NAME} PRIVATE ${TARGET_INCLUDE})
++
++if(BUILD_SHARED_LIBS)
++ SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
++ SOVERSION ${PROJECT_VERSION_MAJOR})
++endif()
++
++if(BUILD_SAMPLE)
++ add_executable(${TARGET_SAMPLE_NAME} ${TARGET_SAMPLE_SRC})
++ target_include_directories(${TARGET_SAMPLE_NAME} PRIVATE ${TARGET_INCLUDE})
++ target_link_libraries(${TARGET_SAMPLE_NAME} PUBLIC ${TARGET_NAME})
++endif()
++
++install(TARGETS ${TARGET_NAME}
++ EXPORT ${TARGET_NAME}
++ PUBLIC_HEADER DESTINATION ${TARGET_INSTALL_INCLUDEDIR}
++ PRIVATE_HEADER DESTINATION ${TARGET_INSTALL_INCLUDEDIR}
++ RUNTIME DESTINATION ${TARGET_INSTALL_BINDIR}
++ LIBRARY DESTINATION ${TARGET_INSTALL_LIBDIR}
++ ARCHIVE DESTINATION ${TARGET_INSTALL_LIBDIR})
++
++install(FILES ${TARGET_SRC_PATH}/xpath_processor.h
++ ${TARGET_SRC_PATH}/action_store.h
++ ${TARGET_SRC_PATH}/byte_stream.h
++ ${TARGET_SRC_PATH}/lex_token.h
++ ${TARGET_SRC_PATH}/lex_util.h
++ ${TARGET_SRC_PATH}/node_set.h
++ ${TARGET_SRC_PATH}/tinystr.h
++ ${TARGET_SRC_PATH}/tinyxml.h
++ ${TARGET_SRC_PATH}/tinyxpath_conf.h
++ ${TARGET_SRC_PATH}/tokenlist.h
++ ${TARGET_SRC_PATH}/xml_util.h
++ ${TARGET_SRC_PATH}/xpath_expression.h
++ ${TARGET_SRC_PATH}/xpath_processor.h
++ ${TARGET_SRC_PATH}/xpath_stack.h
++ ${TARGET_SRC_PATH}/xpath_static.h
++ ${TARGET_SRC_PATH}/xpath_stream.h
++ ${TARGET_SRC_PATH}/xpath_syntax.h
++ DESTINATION ${TARGET_INSTALL_INCLUDEDIR}/${TARGET_NAME})
++
++install(
++ EXPORT ${TARGET_NAME}
++ FILE ${TARGET_NAME}Targets.cmake
++ DESTINATION ${TARGET_INSTALL_LIBDIR}/cmake/${TARGET_NAME}
++)
++
++include(CMakePackageConfigHelpers)
++
++write_basic_package_version_file(
++ ${TARGET_NAME}ConfigVersion.cmake
++ VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
++ COMPATIBILITY SameMajorVersion
++)
++
++configure_package_config_file(
++ cmake/PackageConfig.cmake.in ${TARGET_NAME}Config.cmake
++ INSTALL_DESTINATION ${TARGET_INSTALL_LIBDIR}/cmake/${TARGET_NAME}
++)
++
++install(FILES
++ ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}Config.cmake
++ ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}ConfigVersion.cmake
++ DESTINATION
++ ${TARGET_INSTALL_LIBDIR}/cmake/${TARGET_NAME}
++)
++
++if (BUILD_SAMPLE)
++ add_test(NAME test
++ WORKING_DIRECTORY ${TARGET_SRC_PATH}
++ COMMAND ${TARGET_SAMPLE_NAME})
++endif()
+\ No newline at end of file
diff --git a/unrar/CMakeLists.txt b/thirdparty/unrar/CMakeLists.txt
similarity index 100%
rename from unrar/CMakeLists.txt
rename to thirdparty/unrar/CMakeLists.txt
diff --git a/unrar/README.OpenSource b/thirdparty/unrar/README.OpenSource
similarity index 100%
rename from unrar/README.OpenSource
rename to thirdparty/unrar/README.OpenSource
diff --git a/unrar/README_zh.md b/thirdparty/unrar/README_zh.md
similarity index 100%
rename from unrar/README_zh.md
rename to thirdparty/unrar/README_zh.md
diff --git a/unrar/docs/hap_integrate.md b/thirdparty/unrar/docs/hap_integrate.md
similarity index 97%
rename from unrar/docs/hap_integrate.md
rename to thirdparty/unrar/docs/hap_integrate.md
index 495681c5..82f3fc89 100644
--- a/unrar/docs/hap_integrate.md
+++ b/thirdparty/unrar/docs/hap_integrate.md
@@ -7,7 +7,7 @@
- 下载本仓库,并解压
- 三方库目录结构
```
- tpc_c_cplusplus/unrar #三方库unrar的目录结构如下
+ tpc_c_cplusplus/thirdparty/unrar #三方库unrar的目录结构如下
├── docs #存放三方库相关文档的文件夹
├── CmakeLists.txt #构建脚本,支持hap包集成
├── package.json #三方库组件定义文件
diff --git a/unrar/docs/pic/content.png b/thirdparty/unrar/docs/pic/content.png
similarity index 100%
rename from unrar/docs/pic/content.png
rename to thirdparty/unrar/docs/pic/content.png
diff --git a/unrar/docs/pic/unrar1.png b/thirdparty/unrar/docs/pic/unrar1.png
similarity index 100%
rename from unrar/docs/pic/unrar1.png
rename to thirdparty/unrar/docs/pic/unrar1.png
diff --git a/unrar/package.json b/thirdparty/unrar/package.json
similarity index 100%
rename from unrar/package.json
rename to thirdparty/unrar/package.json
diff --git a/xerces-c/BUILD.gn b/thirdparty/xerces-c/BUILD.gn
similarity index 100%
rename from xerces-c/BUILD.gn
rename to thirdparty/xerces-c/BUILD.gn
diff --git a/xerces-c/CMakeLists.txt b/thirdparty/xerces-c/CMakeLists.txt
similarity index 100%
rename from xerces-c/CMakeLists.txt
rename to thirdparty/xerces-c/CMakeLists.txt
diff --git a/xerces-c/README.OpenSource b/thirdparty/xerces-c/README.OpenSource
similarity index 100%
rename from xerces-c/README.OpenSource
rename to thirdparty/xerces-c/README.OpenSource
diff --git a/xerces-c/README_zh.md b/thirdparty/xerces-c/README_zh.md
similarity index 100%
rename from xerces-c/README_zh.md
rename to thirdparty/xerces-c/README_zh.md
diff --git a/xerces-c/adapted/config.h b/thirdparty/xerces-c/adapted/config.h
similarity index 100%
rename from xerces-c/adapted/config.h
rename to thirdparty/xerces-c/adapted/config.h
diff --git a/xerces-c/adapted/xercesc/util/XercesVersion.hpp b/thirdparty/xerces-c/adapted/xercesc/util/XercesVersion.hpp
similarity index 100%
rename from xerces-c/adapted/xercesc/util/XercesVersion.hpp
rename to thirdparty/xerces-c/adapted/xercesc/util/XercesVersion.hpp
diff --git a/xerces-c/adapted/xercesc/util/Xerces_autoconf_config.hpp b/thirdparty/xerces-c/adapted/xercesc/util/Xerces_autoconf_config.hpp
similarity index 100%
rename from xerces-c/adapted/xercesc/util/Xerces_autoconf_config.hpp
rename to thirdparty/xerces-c/adapted/xercesc/util/Xerces_autoconf_config.hpp
diff --git a/xerces-c/bundle.json b/thirdparty/xerces-c/bundle.json
similarity index 100%
rename from xerces-c/bundle.json
rename to thirdparty/xerces-c/bundle.json
diff --git a/xerces-c/docs/hap_integrate.md b/thirdparty/xerces-c/docs/hap_integrate.md
similarity index 96%
rename from xerces-c/docs/hap_integrate.md
rename to thirdparty/xerces-c/docs/hap_integrate.md
index 4f75c3ca..a96939ee 100755
--- a/xerces-c/docs/hap_integrate.md
+++ b/thirdparty/xerces-c/docs/hap_integrate.md
@@ -7,7 +7,7 @@
- 下载本仓库,并解压
- 三方库目录结构
```
- tpc_c_cplusplus/xerces-c #三方库xerces-c的目录结构如下
+ tpc_c_cplusplus/thirdparty/xerces-c #三方库xerces-c的目录结构如下
├── adapted #存放三方库适配需要的代码文件
├── docs #存放三方库相关文档的文件夹
├── CmakeLists.txt #构建脚本,支持hap包集成
diff --git a/xerces-c/docs/pic/content.png b/thirdparty/xerces-c/docs/pic/content.png
similarity index 100%
rename from xerces-c/docs/pic/content.png
rename to thirdparty/xerces-c/docs/pic/content.png
diff --git a/xerces-c/docs/pic/hap_xerces_test.png b/thirdparty/xerces-c/docs/pic/hap_xerces_test.png
similarity index 100%
rename from xerces-c/docs/pic/hap_xerces_test.png
rename to thirdparty/xerces-c/docs/pic/hap_xerces_test.png
diff --git a/xerces-c/docs/pic/result.png b/thirdparty/xerces-c/docs/pic/result.png
similarity index 100%
rename from xerces-c/docs/pic/result.png
rename to thirdparty/xerces-c/docs/pic/result.png
diff --git a/xerces-c/docs/rom_integrate.md b/thirdparty/xerces-c/docs/rom_integrate.md
similarity index 95%
rename from xerces-c/docs/rom_integrate.md
rename to thirdparty/xerces-c/docs/rom_integrate.md
index da79bbb5..27ca0289 100755
--- a/xerces-c/docs/rom_integrate.md
+++ b/thirdparty/xerces-c/docs/rom_integrate.md
@@ -11,7 +11,7 @@
```
- 三方库目录结构
```
- tpc_c_cplusplus/xerces-c #三方库xerces-c的目录结构如下
+ tpc_c_cplusplus/thirdparty/xerces-c #三方库xerces-c的目录结构如下
├── adapted #存放三方库适配需要的代码文件
├── docs #存放三方库相关文档的文件夹
├── BUILD.gn #构建脚本,支持rom包集成
@@ -21,7 +21,7 @@
```
- 将三方库拷贝到OpenHarmony源码的third_party目录下
```
- cp ~/tpc_c_cplusplus/xerces-c ~/openharmony/third_party -rf
+ cp ~/tpc_c_cplusplus/thirdparty/xerces-c ~/openharmony/third_party -rf
```
### 准备三方库源码
```
diff --git a/xz/BUILD.gn b/thirdparty/xz/BUILD.gn
similarity index 100%
rename from xz/BUILD.gn
rename to thirdparty/xz/BUILD.gn
diff --git a/xz/README.OpenSource b/thirdparty/xz/README.OpenSource
similarity index 100%
rename from xz/README.OpenSource
rename to thirdparty/xz/README.OpenSource
diff --git a/xz/README_zh.md b/thirdparty/xz/README_zh.md
similarity index 100%
rename from xz/README_zh.md
rename to thirdparty/xz/README_zh.md
diff --git a/xz/adapted/config.h b/thirdparty/xz/adapted/config.h
similarity index 100%
rename from xz/adapted/config.h
rename to thirdparty/xz/adapted/config.h
diff --git a/xz/adapted/test_file.sh b/thirdparty/xz/adapted/test_file.sh
similarity index 100%
rename from xz/adapted/test_file.sh
rename to thirdparty/xz/adapted/test_file.sh
diff --git a/xz/bundle.json b/thirdparty/xz/bundle.json
similarity index 100%
rename from xz/bundle.json
rename to thirdparty/xz/bundle.json
diff --git a/xz/docs/pic/test_result.jpg b/thirdparty/xz/docs/pic/test_result.jpg
similarity index 100%
rename from xz/docs/pic/test_result.jpg
rename to thirdparty/xz/docs/pic/test_result.jpg
diff --git a/xz/docs/rom_integrate.md b/thirdparty/xz/docs/rom_integrate.md
similarity index 94%
rename from xz/docs/rom_integrate.md
rename to thirdparty/xz/docs/rom_integrate.md
index a4730fdd..92d0ddf9 100644
--- a/xz/docs/rom_integrate.md
+++ b/thirdparty/xz/docs/rom_integrate.md
@@ -20,7 +20,7 @@
- 三方库目录结构
```shell
- cd tpc_c_cplusplus/xz # 进入到仓库代码库目录
+ cd tpc_c_cplusplus/thirdparty/xz # 进入到仓库代码库目录
```
```shell
@@ -36,7 +36,7 @@
- 将本仓库xz文件夹拷贝到third_party下
```shell
- cp ~/tpc_c_cplusplus/xz ~/openharmony/third_party/ -arf
+ cp ~/tpc_c_cplusplus/thirdparty/xz ~/openharmony/third_party/ -arf
```
## 准备三方库源码
diff --git a/zstd/BUILD.gn b/thirdparty/zstd/BUILD.gn
similarity index 100%
rename from zstd/BUILD.gn
rename to thirdparty/zstd/BUILD.gn
diff --git a/zstd/README.OpenSource b/thirdparty/zstd/README.OpenSource
similarity index 100%
rename from zstd/README.OpenSource
rename to thirdparty/zstd/README.OpenSource
diff --git a/zstd/README_zh.md b/thirdparty/zstd/README_zh.md
similarity index 100%
rename from zstd/README_zh.md
rename to thirdparty/zstd/README_zh.md
diff --git a/zstd/bundle.json b/thirdparty/zstd/bundle.json
similarity index 100%
rename from zstd/bundle.json
rename to thirdparty/zstd/bundle.json
diff --git a/zstd/docs/pic/results.png b/thirdparty/zstd/docs/pic/results.png
similarity index 100%
rename from zstd/docs/pic/results.png
rename to thirdparty/zstd/docs/pic/results.png
diff --git a/zstd/docs/rom_integrate.md b/thirdparty/zstd/docs/rom_integrate.md
similarity index 98%
rename from zstd/docs/rom_integrate.md
rename to thirdparty/zstd/docs/rom_integrate.md
index e5b28e03..21f1a861 100644
--- a/zstd/docs/rom_integrate.md
+++ b/thirdparty/zstd/docs/rom_integrate.md
@@ -11,7 +11,7 @@
```
- 三方库目录结构
```
- tpc_c_cplusplus/zstd
+ tpc_c_cplusplus/thirdparty/zstd
|-- docs # 存放三方库相关文档的文件夹
|-- BUILD.gn # 构建脚本,支持rom包集成
|-- bundle.json # 三方库组件定义文件
@@ -20,7 +20,7 @@
```
- 将本仓库文件夹拷贝到third_party下
```
- cp ~/tpc_c_cplusplus/zstd ~/openharmony/third_party/ -rf
+ cp ~/tpc_c_cplusplus/thirdparty/zstd ~/openharmony/third_party/ -rf
```
## 准备三方库源码
- 将源码下载到zstd目录并将其解压出来。
diff --git a/thirdparty_template/README_zh.md b/thirdparty_template/README_zh.md
deleted file mode 100755
index 1c4bcf56..00000000
--- a/thirdparty_template/README_zh.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# xxx 三方库说明
-## 功能简介
-这个是xxx, 主要功能是xxx,简单的一句话介绍
-## 使用约束
-
-- IDE版本:
-
-- ROM版本:
-
-- API版本:
-
-- 三方库版本:
-
-- 当前适配的功能:完成了xxx功能的适配
-
-- [License:xxx]()(链接指向源三方库中的license)
-
-## 集成方式
-
-+ [系统Rom包集成](docs/rom_integrate.md)
-+ [应用Hap包集成](docs/hap_integrate.md)
diff --git a/thirdparty_template/ohos.build b/thirdparty_template/ohos.build
deleted file mode 100755
index e955101a..00000000
--- a/thirdparty_template/ohos.build
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "subsystem": "thirdparty",
- "parts":{
- "xxx": {
- "module_list": [
- ]
- }
- }
-}
\ No newline at end of file
diff --git a/tools/Buildtools/README.md b/tools/Buildtools/README.md
new file mode 100755
index 00000000..11dbcc1f
--- /dev/null
+++ b/tools/Buildtools/README.md
@@ -0,0 +1,25 @@
+## 下载ohos sdk
+[参考OHOS_SDK-Usage](../doc/ohos_use_sdk/OHOS_SDK-Usage.md)
+
+## 配置环境变量
+```shell
+ # 此处是我的ohos sdk解压目录, 使用者需自行配置自己的目录
+ export OHOS_SDK=/home/ohos/tools/OH_SDK/ohos-sdk/linux
+```
+
+## 拷贝编译工具
+```
+ # 校验压缩包
+ sha512sum -c SHA512SUM
+ #输出 toolchain.tar.gz: OK
+ # 解压拷贝编译工具
+ tar -zxvf toolchain.tar.gz
+ cp toolchain/* ${OHOS_SDK}/native/llvm/bin
+```
+
+## 设置ohos编译宏
+由于 ohos_sdk 没有为OpenHarmony提供系统识别的宏,因此我们需要在 ${OHOS_SDK}/native/build/cmake/ohos.toolchain.cmake 文件末尾,添加
+```
+ add_definitions(-DOHOS_NDK)
+```
+用于系统识别
\ No newline at end of file
diff --git a/tools/Buildtools/SHA512SUM b/tools/Buildtools/SHA512SUM
new file mode 100755
index 00000000..08d6dc6b
--- /dev/null
+++ b/tools/Buildtools/SHA512SUM
@@ -0,0 +1 @@
+392ced3d95dec1be7354eb4d530df2bb3a1798da327b133592646ea6040841f1645a4690309ce72a3d0d28da083eaf53557c6345905b715083d0d9062445d4b7 toolchain.tar.gz
\ No newline at end of file
diff --git a/tools/Buildtools/toolchain.tar.gz b/tools/Buildtools/toolchain.tar.gz
new file mode 100755
index 0000000000000000000000000000000000000000..e533e7906b07a3ba9eb61dc6ff1ce65333b1d703
GIT binary patch
literal 389
zcmV;00eb!)iwFP!000001MQdHZh|lr$GPSyj@3KEY@yJL#bgh$yJeXbtB_zx0F&+Q
zSB)P`H+x~x=+5tgHuU2_PyaoqO<5LcCUZUVI)fU7h}R_(F>RMSJjOZYf(sf&9%U>x
z%@B9@Ne5PSBP#%}%*y&)KU@2q((L^&t7TB+di5Ese>F%8sTaec3mZ27ha%efpR;v8
z<9?BNKwTKO@z4F=?~SI$`BPbEzNvi7@@hOW4=tAp$bgcGpU>gVR2hNZ7)X$&ruO~}
zO{TOD1~S+V9Buaufgmu8x=_vd=cY1UUx=@YT5SgQ;dRps@)~4ODLMNBslmKkEtPJb
z{+fL=%RImJ(mez%{mUxN5`J<9TyDdze}1I@goPpM{~Ea0e_Q=0Tgt%+u-CtT>$Q6X
z&c}Z@Hmv$j#Bu!RafJH62Hoo4b@a#B?;3mjzx)nh(|>fh|Lx*`7-9Z@6}ry/dev/null 2>&1
+ if [ $? -ne 0 ]
+ then
+ echo "cmake 命令未安装,请先安装jq命令"
+ exit 1
+ fi
+ echo "cmake 命令已安装"
+ which make >/dev/null 2>&1
+ if [ $? -ne 0 ]
+ then
+ echo "make 命令未安装,请先安装jq命令"
+ exit 1
+ fi
+ echo "make 命令已安装"
+ which autoreconf >/dev/null 2>&1
+ if [ $? -ne 0 ]
+ then
+ echo "autoreconf 命令未安装,请先安装jq命令"
+ exit 1
+ fi
+ echo "autoreconf 命令已安装"
+ which patch >/dev/null 2>&1
+ if [ $? -ne 0 ]
+ then
+ echo "patch 命令未安装,请先安装jq命令"
+ exit 1
+ fi
+ echo "patch 命令已安装"
+ if [ ! -d `pwd`/usr ]
+ then
+ echo "创建 `pwd`/usr 目录"
+ mkdir -p `pwd`/usr
+ fi
+
+}
+
+hpkPaths=()
+donelist=()
+donelibs=()
+readdonelibs() {
+ if [ -f $1 ]
+ then
+ count=0
+ while read line
+ do
+ doneflags=false
+ libinfos=(${line//,/ })
+ libname=${libinfos[0]}
+ for lib in ${donelibs[@]}
+ do
+ if [ $lib == $libname ]
+ then
+ doneflags=true
+ fi
+ done
+ if ! $doneflags
+ then
+ donelibs[$count]=$libname
+ count=$((count+1))
+ fi
+
+ done < $1
+ fi
+ donelist=(${donelibs[@]})
+}
+
+makelibsdir(){
+ jobs=($*)
+ for job in ${jobs[@]}
+ do
+ doneflags=false
+ for donelib in ${donelibs[@]}
+ do
+ if [ $donelib == $job ]
+ then
+ doneflags=true
+ fi
+ done
+ if $doneflags
+ then
+ continue
+ fi
+ tmppath=`pwd`/main/$job
+ if [ -d $tmppath ]
+ then
+ hpkPaths[${#hpkPaths[@]}]=$tmppath
+ fi
+ done
+}
+
+# 找到main目录下的所有目录
+# 参数1 为项目根路径
+findmainhpkdir(){
+ # hpkPaths=`find $1 -maxdepth 1 -type d`
+ # # echo $hpkPaths
+ # # remove root dir
+ # hpkPaths=(${hpkPaths[*]/$1})
+
+ tmplibs=()
+ for file in $(ls $1)
+ do
+ if [ -d $1/$file ]
+ then
+ tmplibs[${#tmplibs[@]}]=$file
+ fi
+ done
+ makelibsdir ${tmplibs[@]}
+}
+
+# 进入每一个目录 将script 目录下的脚本都链接过去
+prepareshell(){
+ for hpkdir in ${hpkPaths[@]}
+ do
+ cd $hpkdir
+ ln -fs `pwd`/../../script/build_hpk.sh build_hpk.sh
+ ln -fs `pwd`/../../script/envset.sh envset.sh
+ cd ${OLDPWD}
+ done
+}
+
+# 恢复脚本
+cleanhpkdir(){
+ for hpkdir in ${hpkPaths[@]}
+ do
+ cd $hpkdir
+ rm build_hpk.sh envset.sh
+ cd ${OLDPWD}
+ done
+}
+
+# 编译库本身
+nextroundlist=()
+notdonelist=()
+buildhpk(){
+ nextroundlist=(${hpkPaths[*]})
+
+ while $jobFlag
+ do
+ lastroundlen=${#nextroundlist[*]}
+ notdonelist=(${nextroundlist[*]})
+ nextroundlist=()
+ len=${#notdonelist[*]}
+ for ((i=0; i < $len; i=i+1))
+ do
+ cd ${notdonelist[$i]}
+ bash ${PWD}/build_hpk.sh "${donelist[*]}" # > blackhole.log 2>&1 #入参已经完成的list
+ res=$?
+ if [ $res -eq 0 ]
+ then
+ donelist[${#donelist[@]}]=${notdonelist[$i]##*/}
+ elif [ $res -eq 101 ]
+ then
+ nextroundlist[${#nextroundlist[@]}]=${notdonelist[$i]}
+ else
+ echo "${notdonelist[$i]} build ERROR"
+ fi
+ cd ${OLDPWD}
+ done
+ if [ ${#nextroundlist[*]} -eq 0 ]
+ then
+ echo "ALL JOBS DONE!!!"
+ break
+ fi
+ if [ $lastroundlen -eq ${#nextroundlist[*]} ]
+ then
+ echo "Please check the dependencies of these items:"
+ echo " "${nextroundlist[*]}
+ jobFlag=false
+ fi
+ done
+}
+
+main(){
+ checkbuildenv
+
+ readdonelibs "`pwd`/usr/hpk_build.csv"
+
+ if [ $# -ne 0 ]
+ then
+ makelibsdir $*
+ else
+ findmainhpkdir ${PWD}/main
+ # exit 2
+ fi
+
+ prepareshell
+ buildhpk
+
+ cleanhpkdir
+}
+
+main $*
diff --git a/tools/doc/cmake_specification.md b/tools/doc/cmake_specification.md
new file mode 100755
index 00000000..079e138f
--- /dev/null
+++ b/tools/doc/cmake_specification.md
@@ -0,0 +1,74 @@
+CMAKE 规范
+
+1. CMakeLists.txt 只能作为cmake的文件名
+
+2. add_subdirectory()只能添加当前目录子目录,不能添加当前目录的父目录,兄目录,孙目录
+
+3. 顶层CMakeLists.txt所在的目录必须包含本工程所有的源码,不能访问该目录以外的源码
+
+4. cmake脚本必须以 .cmake 结尾 # ***.cmake 为cmake脚本 cjsonconfigure.cmake
+
+5. cmake脚本中不可以调用CMakeLists.txt # include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)
+
+6. 不可以再cmake脚本中调用add_subdirectory(),隐藏了代码的物理结构
+
+7. 同一个代码库中相同部署关系的不同模块,使用同一个CMake工程
+
+8. 支持通过find_package()机制访问发布件
+
+9. cmake命令小写,属性大写
+
+10. 自定义变量名禁止 CMAKE 开头
+
+11. 明确写出target依赖,不要使用通配符
+
+12. 不使用过时以及未公开的cmake命令 cmake_minimum_required(VERSION 3.4.1)
+
+13. 路径变量采用完整路径,不要相对路径
+
+ set(XXX ${CMAKE_CURRENT_SOURCE_DIR }/x.cpp)
+
+ CMAKE_SOURCE_DIR 表示代码根路径,即顶层CMakeLists.txt所在路径
+
+ CMAKE_CURRENT_SOURCE_DIR 当前CMakeLists.txt所在路径
+
+ CMAKE_BINARY_DIR 目标文件根目录,cmake的执行目录
+
+ CMAKE_CURRENT_BINARY_DIR 当前目标文件路径
+
+ CMAKE_CURRENT_LIST_DIR 当前脚本文件路径
+
+14. 优先使用target_*** 命令
+
+ target_compile_definitions
+
+ target_compile_features **在CMAKE_C_COMPILE_FEATURES,CMAKE_CUDA_COMPILE_FEATURES或CMAKE_CXX_COMPILE_FEATURES内**
+
+ target_compile_options
+
+ target_include_directories
+
+ target_link_directories
+
+ target_link_libraries
+
+ target_link_options
+
+ target_sources
+
+15. target_link_libraries() 显示声明库的依赖关系和PRIVATE/PUBLIC/INTERFACE属性
+
+ PRIVATE:
+
+ PUBLIC:
+
+ INTERFACE:
+
+16. add_libray 函数使用
+
+ add_libray(targetName [STATIC | SHARED | MODULE])
+
+ add_libray(targetName INTERFACE)
+
+ add_libray(targetName IMPORTED)
+
diff --git a/tools/doc/ohos_use_sdk/OHOS_SDK-Usage--depend-libs.md b/tools/doc/ohos_use_sdk/OHOS_SDK-Usage--depend-libs.md
new file mode 100755
index 00000000..486c6480
--- /dev/null
+++ b/tools/doc/ohos_use_sdk/OHOS_SDK-Usage--depend-libs.md
@@ -0,0 +1,272 @@
+# OpenHarmony Linux 环境 SDK 使用说明(进阶--依赖库的解决方法)
+
+ 我们在移植三方库的时候,很多库是有依赖的。面对这种情况我们应该如何处理。下面以libzip为例讲解下如何为ohos编译带依赖的库。
+
+## 编译libzip
+
+### 源码准备
+
+下载最新版本的 libzip 和 xz (libzip 是可以依赖 xz 项目中的 liblzma.so 的)
+
+```shell
+#解压源码
+ohos@ubuntu20:~/openHarmony/ohos_libzip$ ls
+libzip-1.9.2.tar.gz xz-5.4.1.tar.gz
+ohos@ubuntu20:~/openHarmony/ohos_libzip$
+ohos@ubuntu20:~/openHarmony/ohos_libzip$ tar -zxf xz-5.4.1.tar.gz
+ohos@ubuntu20:~/openHarmony/ohos_libzip$ tar -zxf libzip-1.9.2.tar.gz
+ohos@ubuntu20:~/openHarmony/ohos_libzip$ ls
+libzip-1.9.2 libzip-1.9.2.tar.gz xz-5.4.1 xz-5.4.1.tar.gz
+ohos@ubuntu20:~/openHarmony/ohos_libzip$
+```
+
+### 编译libzip
+
+```
+ohos@ubuntu20:~/openHarmony/ohos_libzip$
+ohos@ubuntu20:~/openHarmony/ohos_libzip$ export OHOS_SDK=/home/ohos/tools/OH_SDK/ohos-sdk/linux
+ohos@ubuntu20:~/openHarmony/ohos_libzip$ cd libzip-1.9.2/
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2$ ls
+android AUTHORS cmake-config.h.in examples libzip-config.cmake.in man regress THANKS
+API-CHANGES.md cmake CMakeLists.txt INSTALL.md libzip.pc.in NEWS.md SECURITY.md TODO.md
+appveyor.yml cmake-compat cmake-zipconf.h.in lib LICENSE README.md src
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2$ mkdir ohos64build
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2$ cd ohos64build/
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build$ ${OHOS_SDK}/native/build-tools/cmake/bin/cmake -DCMAKE_TOOLCHAIN_FILE=${OHOS_SDK}/native/build/cmake/ohos.toolchain.cmake .. -L
+-- The C compiler identification is Clang 12.0.1
+-- Check for working C compiler: /home/ohos/tools/OH_NDK/ohos-sdk/linux/native/llvm/bin/clang
+-- Check for working C compiler: /home/ohos/tools/OH_NDK/ohos-sdk/linux/native/llvm/bin/clang -- works
+-- Detecting C compiler ABI info
+-- Detecting C compiler ABI info - done
+-- Detecting C compile features
+-- Detecting C compile features - done
+-- Looking for include file CommonCrypto/CommonCrypto.h
+-- Looking for include file CommonCrypto/CommonCrypto.h - not found
+-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
+-- Could NOT find Nettle (missing: Nettle_LIBRARY Nettle_INCLUDE_DIR) (Required is at least version "3.0")
+-- Could NOT find GnuTLS (missing: GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR)
+-- Could NOT find MbedTLS (missing: MbedTLS_LIBRARY MbedTLS_INCLUDE_DIR) (Required is at least version "1.0")
+# 删除大量日志
+-- Check if the system is big endian - little endian
+-- Found ZLIB: /home/ohos/tools/OH_NDK/ohos-sdk/linux/native/sysroot/usr/lib/aarch64-linux-ohos/libz.so (found suitable version "1.2.12", minimum required is "1.1.2")
+-- Could NOT find BZip2 (missing: BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)
+CMake Warning at CMakeLists.txt:186 (message):
+ -- bzip2 library not found; bzip2 support disabled
+
+# 可以发现此时是无法找到 liblzma 的,这样虽然没有报错,但是编译出来的libzip是不支持 lzma 算法的。为了使我们编译出来的libzip支持lamz算法,我们希望这里能找到liblzma.so
+-- Could NOT find LibLZMA (missing: LIBLZMA_LIBRARY LIBLZMA_INCLUDE_DIR LIBLZMA_HAS_AUTO_DECODER LIBLZMA_HAS_EASY_ENCODER LIBLZMA_HAS_LZMA_PRESET) (Required is at least version "5.2")
+CMake Warning at CMakeLists.txt:195 (message):
+ -- lzma library not found; lzma/xz support disabled
+
+
+-- Could NOT find Zstd (missing: Zstd_LIBRARY Zstd_INCLUDE_DIR) (Required is at least version "1.3.6")
+CMake Warning at CMakeLists.txt:204 (message):
+ -- zstd library not found; zstandard support disabled
+
+
+CMake Warning at CMakeLists.txt:226 (message):
+ -- neither Common Crypto, GnuTLS, mbed TLS, OpenSSL, nor Windows
+ Cryptography found; AES support disabled
+
+
+-- Looking for getopt
+-- Looking for getopt - found
+-- Found Perl: /usr/local/bin/perl (found version "5.34.1")
+-- Configuring done
+-- Generating done
+-- Build files have been written to: /home/ohos/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build
+-- Cache values
+BUILD_DOC:BOOL=ON
+BUILD_EXAMPLES:BOOL=ON
+BUILD_REGRESS:BOOL=ON
+BUILD_SHARED_LIBS:BOOL=ON
+BUILD_TOOLS:BOOL=ON
+CMAKE_ASM_FLAGS:STRING=
+CMAKE_ASM_FLAGS_DEBUG:STRING=
+CMAKE_ASM_FLAGS_RELEASE:STRING=
+CMAKE_BUILD_TYPE:STRING=
+CMAKE_CXX_FLAGS:STRING=
+CMAKE_CXX_FLAGS_DEBUG:STRING=
+CMAKE_CXX_FLAGS_RELEASE:STRING=
+CMAKE_INSTALL_PREFIX:PATH=/usr/local
+CMAKE_TOOLCHAIN_FILE:FILEPATH=/home/ohos/tools/OH_SDK/ohos-sdk/linux/native/build/cmake/ohos.toolchain.cmake
+DOCUMENTATION_FORMAT:STRING=mdoc
+ENABLE_BZIP2:BOOL=ON
+ENABLE_COMMONCRYPTO:BOOL=ON
+ENABLE_GNUTLS:BOOL=ON
+ENABLE_LZMA:BOOL=ON
+ENABLE_MBEDTLS:BOOL=ON
+ENABLE_OPENSSL:BOOL=ON
+ENABLE_WINDOWS_CRYPTO:BOOL=ON
+ENABLE_ZSTD:BOOL=ON
+LIBZIP_DO_INSTALL:BOOL=ON
+MDOCTOOL:FILEPATH=/usr/bin/groff
+SHARED_LIB_VERSIONNING:BOOL=ON
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build$
+```
+
+### 解决依赖无法找到的问题
+
+#### 先编译安装 xz
+
+```
+ohos@ubuntu20:~/openHarmony/ohos_libzip$ cd xz-5.4.1/
+ohos@ubuntu20:~/openHarmony/ohos_libzip/xz-5.4.1$ mkdir ohos64build
+ohos@ubuntu20:~/openHarmony/ohos_libzip/xz-5.4.1$ cd ohos64build/
+ohos@ubuntu20:~/openHarmony/ohos_libzip/xz-5.4.1/ohos64build$ ${OHOS_SDK}/native/build-tools/cmake/bin/cmake -DCMAKE_TOOLCHAIN_FILE=${OHOS_SDK}/native/build/cmake/ohos.toolchain.cmake .. -L -DCMAKE_INSTALL_PREFIX=`pwd`/../../usr/ -DBUILD_SHARED_LIBS=ON
+ # 指定安装目录为~/openHarmony/ohos_libzip/usr
+-- The C compiler identification is Clang 12.0.1
+-- Check for working C compiler: /home/ohos/tools/OH_SDK/ohos-sdk/linux/native/llvm/bin/clang
+-- Check for working C compiler: /home/ohos/tools/OH_SDK/ohos-sdk/linux/native/llvm/bin/clang -- works
+-- Detecting C compiler ABI info
+-- Detecting C compiler ABI info - done
+-- Detecting C compile features
+# 删除大量 cmake 日志
+CMAKE_CXX_FLAGS_RELEASE:STRING=
+CMAKE_INSTALL_PREFIX:PATH=/home/ohos/openHarmony/ohos_libzip/usr
+CMAKE_TOOLCHAIN_FILE:FILEPATH=/home/ohos/tools/OH_SDK/ohos-sdk/linux/native/build/cmake/ohos.toolchain.cmake
+CREATE_LZMA_SYMLINKS:BOOL=ON
+CREATE_XZ_SYMLINKS:BOOL=ON
+TUKLIB_FAST_UNALIGNED_ACCESS:BOOL=ON
+TUKLIB_USE_UNSAFE_TYPE_PUNNING:BOOL=OFF
+liblzma_INSTALL_CMAKEDIR:STRING=lib/cmake/liblzma
+ohos@ubuntu20:~/openHarmony/ohos_libzip/xz-5.4.1/ohos64build$
+ohos@ubuntu20:~/openHarmony/ohos_libzip/xz-5.4.1/ohos64build$ make -j4
+Scanning dependencies of target lzcat.1
+Scanning dependencies of target xzcat.1
+Scanning dependencies of target unlzma.1
+Scanning dependencies of target liblzma
+[ 0%] Built target lzcat.1
+[ 0%] Built target xzcat.1
+#删除大量 make 日志
+[100%] Built target lzma
+Scanning dependencies of target unlzma
+[100%] Built target unlzma
+ohos@ubuntu20:~/openHarmony/ohos_libzip/xz-5.4.1/ohos64build$ make install
+[ 65%] Built target liblzma
+[ 66%] Built target test_vli
+#删除大量 make install 日志
+-- Installing: /home/ohos/openHarmony/ohos_libzip/usr/share/man/man1/lzcat.1
+ohos@ubuntu20:~/openHarmony/ohos_libzip/xz-5.4.1/ohos64build$
+#检查编译好的 liblzma 库
+ohos@ubuntu20:~/openHarmony/ohos_libzip/xz-5.4.1/ohos64build$ ls ../../usr/
+bin include lib share
+ohos@ubuntu20:~/openHarmony/ohos_libzip/xz-5.4.1/ohos64build$ cd ../../usr/lib/
+ohos@ubuntu20:~/openHarmony/ohos_libzip/usr/lib$ file *
+cmake: directory
+liblzma.a: current ar archive
+liblzma.so: symbolic link to liblzma.so.5
+liblzma.so.5: symbolic link to liblzma.so.5.4.1
+liblzma.so.5.4.1: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=709b7d1f2a5caf197f168982bf374638b8479a3e, with debug_info, not stripped
+ohos@ubuntu20:~/openHarmony/ohos_libzip/usr/lib$
+```
+
+#### 再次编译 libzip
+
+```
+
+ohos@ubuntu20:~/openHarmony/ohos_libzip/usr/lib$ cd ../../libzip-1.9.2/ohos64build/
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build$ ls
+CMakeCache.txt cmake_install.cmake config.h examples libzip-config.cmake libzip.pc Makefile regress zipconf.h
+CMakeFiles compile_commands.json CTestTestfile.cmake lib libzip-config-version.cmake libzip-targets.cmake man src
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build$ rm * -rf
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build$ ${OHOS_SDK}/native/build-tools/cmake/bin/cmake -DCMAKE_TOOLCHAIN_FILE=${OHOS_SDK}/native/build/cmake/ohos.toolchain.cmake .. -L -DCMAKE_INSTALL_PREFIX=`pwd`/../../usr/ -DCMAKE_FIND_ROOT_PATH=`pwd`/../../usr
+#-DCMAKE_INSTALL_PREFIX= 指定了libzip编译好后的安装目录
+#-DCMAKE_FIND_ROOT_PATH= 指定了cmake find package 的路径,如果有多个需要用";"隔开
+-- The C compiler identification is Clang 12.0.1
+-- Check for working C compiler: /home/ohos/tools/OH_SDK/ohos-sdk/linux/native/llvm/bin/clang
+-- Check for working C compiler: /home/ohos/tools/OH_SDK/ohos-sdk/linux/native/llvm/bin/clang -- works
+# 删除大量 cmake 日志
+-- Check if the system is big endian - little endian
+-- Found ZLIB: /home/ohos/tools/OH_SDK/ohos-sdk/linux/native/sysroot/usr/lib/aarch64-linux-ohos/libz.so (found suitable version "1.2.12", minimum required is "1.1.2")
+-- Could NOT find BZip2 (missing: BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)
+CMake Warning at CMakeLists.txt:186 (message):
+ -- bzip2 library not found; bzip2 support disabled
+CHECK_STARTLooking for lzma_auto_decoder in /home/ohos/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build/../../usr/lib/liblzma.so
+CHECK_PASSfound
+CHECK_STARTLooking for lzma_easy_encoder in /home/ohos/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build/../../usr/lib/liblzma.so
+CHECK_PASSfound
+CHECK_STARTLooking for lzma_lzma_preset in /home/ohos/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build/../../usr/lib/liblzma.so
+CHECK_PASSfound
+# 日志显示找到了 liblzma 并满足版本要求
+-- Found LibLZMA: /home/ohos/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build/../../usr/lib/liblzma.so (found suitable version "5.4.1", minimum required is "5.2")
+-- Could NOT find Zstd (missing: Zstd_LIBRARY Zstd_INCLUDE_DIR) (Required is at least version "1.3.6")
+CMake Warning at CMakeLists.txt:204 (message):
+ -- zstd library not found; zstandard support disabled
+
+
+CMake Warning at CMakeLists.txt:226 (message):
+ -- neither Common Crypto, GnuTLS, mbed TLS, OpenSSL, nor Windows
+ Cryptography found; AES support disabled
+
+
+-- Looking for getopt
+-- Looking for getopt - found
+-- Found Perl: /usr/local/bin/perl (found version "5.34.1")
+# 删除大量 cmake 日志
+MDOCTOOL:FILEPATH=/usr/bin/groff
+SHARED_LIB_VERSIONNING:BOOL=ON
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build$
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build$ make -j && make install
+Scanning dependencies of target nonrandomopen
+Scanning dependencies of target man
+Scanning dependencies of target liboverride
+Scanning dependencies of target testinput
+Scanning dependencies of target zip
+[ 1%] Preparing ZIP_SOURCE_GET_ARGS.3
+# 删除大量的 make && make install 日志
+-- Installing: /home/ohos/openHarmony/ohos_libzip/usr/bin/zipcmp
+-- Set runtime path of "/home/ohos/openHarmony/ohos_libzip/usr/bin/zipcmp" to "/home/ohos/openHarmony/ohos_libzip/usr/lib"
+-- Installing: /home/ohos/openHarmony/ohos_libzip/usr/bin/zipmerge
+-- Set runtime path of "/home/ohos/openHarmony/ohos_libzip/usr/bin/zipmerge" to "/home/ohos/openHarmony/ohos_libzip/usr/lib"
+-- Installing: /home/ohos/openHarmony/ohos_libzip/usr/bin/ziptool
+-- Set runtime path of "/home/ohos/openHarmony/ohos_libzip/usr/bin/ziptool" to "/home/ohos/openHarmony/ohos_libzip/usr/lib"
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build$
+# 检查编译出的libzip
+ohos@ubuntu20:~/openHarmony/ohos_libzip/libzip-1.9.2/ohos64build$ cd ../../usr/
+ohos@ubuntu20:~/openHarmony/ohos_libzip/usr$ ls
+bin include lib share
+ohos@ubuntu20:~/openHarmony/ohos_libzip/usr$ ls bin/
+lzcat lzma unlzma unxz xz xzcat xzdec zipcmp zipmerge ziptool
+ohos@ubuntu20:~/openHarmony/ohos_libzip/usr$ ls lib/
+cmake liblzma.a liblzma.so liblzma.so.5 liblzma.so.5.4.1 libzip.so libzip.so.5 libzip.so.5.5 pkgconfig
+ohos@ubuntu20:~/openHarmony/ohos_libzip/usr$ file lib/libzip.so.5.5
+lib/libzip.so.5.5: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0a2918c4f372d034a02297310869a18d9dd2ae1a, with debug_info, not stripped
+ohos@ubuntu20:~/openHarmony/ohos_libzip/usr$ readelf -d lib/libzip.so.5.5
+
+Dynamic section at offset 0x1fff8 contains 28 entries:
+ Tag Type Name/Value
+ 0x000000000000001d (RUNPATH) Library runpath: [/home/ohos/openHarmony/ohos_libzip/usr/lib]
+ 0x0000000000000001 (NEEDED) Shared library: [liblzma.so.5] # 可以看到 liblzma.so.5 是 NEEDED
+ 0x0000000000000001 (NEEDED) Shared library: [libz.so]
+ 0x0000000000000001 (NEEDED) Shared library: [libc.so]
+ 0x000000000000000e (SONAME) Library soname: [libzip.so.5]
+ 0x000000000000001e (FLAGS) BIND_NOW
+ 0x000000006ffffffb (FLAGS_1) Flags: NOW
+ 0x0000000000000007 (RELA) 0x28a0
+ 0x0000000000000008 (RELASZ) 3120 (bytes)
+ 0x0000000000000009 (RELAENT) 24 (bytes)
+ 0x000000006ffffff9 (RELACOUNT) 123
+ 0x0000000000000017 (JMPREL) 0x34d0
+ 0x0000000000000002 (PLTRELSZ) 2760 (bytes)
+ 0x0000000000000003 (PLTGOT) 0x22220
+ 0x0000000000000014 (PLTREL) RELA
+ 0x0000000000000006 (SYMTAB) 0x2a8
+ 0x000000000000000b (SYMENT) 24 (bytes)
+ 0x0000000000000005 (STRTAB) 0x1ca8
+ 0x000000000000000a (STRSZ) 3060 (bytes)
+ 0x000000006ffffef5 (GNU_HASH) 0x13a0
+ 0x0000000000000004 (HASH) 0x16f8
+ 0x0000000000000019 (INIT_ARRAY) 0x21c90
+ 0x000000000000001b (INIT_ARRAYSZ) 8 (bytes)
+ 0x000000000000001a (FINI_ARRAY) 0x21c98
+ 0x000000000000001c (FINI_ARRAYSZ) 16 (bytes)
+ 0x000000000000000c (INIT) 0x2051c
+ 0x000000000000000d (FINI) 0x2052c
+ 0x0000000000000000 (NULL) 0x0
+ohos@ubuntu20:~/openHarmony/ohos_libzip/usr$
+```
+
+完成。
+
+大家可以自己试试 zstd openssl 等库的依赖实现。
\ No newline at end of file
diff --git a/tools/doc/ohos_use_sdk/OHOS_SDK-Usage.md b/tools/doc/ohos_use_sdk/OHOS_SDK-Usage.md
new file mode 100755
index 00000000..11d7f144
--- /dev/null
+++ b/tools/doc/ohos_use_sdk/OHOS_SDK-Usage.md
@@ -0,0 +1,369 @@
+Linux 环境下 使用 OpenHarmony SDK 编译,OpenHarmony standard 系统北向应用 c/c++ 库
+
+## OpenHarmony Linux 环境 SDK 使用说明
+
+### 下载SDK
+
+ 从 openHarmony SDK [官方发布渠道](https://gitee.com/openharmony-sig/oh-inner-release-management/blob/master/Release-Testing-Version.md)(13b8b5812ce3b3b135743baa6629ed84bd380d8c)下载SDK
+
+
+
+ 可以同时下载对应的系统镜像(这里提供的是 32bit OHOS 镜像下载),后面依次为 Windows/Linux 环境下的 SDK,SDK 分为两个版本 full 版本和 public 版本。这两个版本的 SDK 中关于 c/c++ 编译的部分是相同的,因此我们下载那个都一样( full 版本的 SDK 在 ets 层提供了更多的 API )。再后面是 mac 环境的OHOS SDK 。根据自己环境自行下载对应版本的 SDK 。
+
+### 解压SDK
+
+```shell
+ tar -zxvf version-Master_Version-OpenHarmony_3.2.10.3-20230105_163913-ohos-sdk-full.tar.gz
+```
+
+进入解压得到 ohos_sdk 目录,可以看到 Linux 和 windows 两个平台的 SDK 目录,我们进入 linux。
+
+```
+ohos@ubuntu20:~/tools/OH_SDK$ cd ohos-sdk
+ohos@ubuntu20:~/tools/OH_SDK/ohos-sdk$ ls
+linux windows
+ohos@ubuntu20:~/tools/OH_SDK/ohos-sdk$ cd linux/
+ohos@ubuntu20:~/tools/OH_SDK/ohos-sdk/linux$ ls
+ets-linux-x64-4.0.1.2-Canary1.zip native-linux-x64-4.0.1.2-Canary1.zip toolchains-linux-x64-4.0.1.2-Canary1.zip
+js-linux-x64-4.0.1.2-Canary1.zip previewer-linux-x64-4.0.1.2-Canary1.zip
+```
+
+解压 Linux 环境下的 OHOS SDK 工具包,得到对应的工具目录。由于我们是 c/c++ 库的编译,我们只关注 native 目录。
+
+```shell
+ohos@ubuntu20:~/tools/OH_SDK/ohos-sdk/linux$ for i in *.zip;do unzip ${i};done
+ohos@ubuntu20:~/tools/OH_SDK/ohos-sdk/linux$ ls
+ets native toolchains
+ets-linux-x64-4.0.1.2-Canary1.zip native-linux-x64-4.0.1.2-Canary1.zip toolchains-linux-x64-4.0.1.2-Canary1.zip
+js previewer
+js-linux-x64-4.0.1.2-Canary1.zip previewer-linux-x64-4.0.1.2-Canary1.zip
+```
+
+### native 目录介绍
+
+```sh
+ohos@ubuntu20:~/tools/OH_SDK/ohos-sdk/linux$ cd native/
+ohos@ubuntu20:~/tools/OH_SDK/ohos-sdk/linux/native$ ls
+build docs nativeapi_syscap_config.json NOTICE.txt sysroot
+build-tools llvm ndk_system_capability.json oh-uni-package.json
+```
+
+build 目录存放的是 构建时 cmake 依赖的配置文件
+
+build-tools 目录存放的是 构建工具包含 cmake 和 ninja,我们后面采用 make 进行构建。
+
+docs 目录存放 使用说明
+
+llvm 目录存放 clang 编译器
+
+sysroot 目录为编译器的 sysroot 目录,存放 SDK 内部的已经包含的库和对应的头文件
+
+oh-uni-package.json 为 SDK 信息描述,如版本
+
+NOTICE.txt 为注意事项,内容多为 SDK 的详细描述
+
+ndk_system_capability.json 记录 SDK 提供的能力
+
+nativeapi_syscap_config.json 记录 SDK 提供的能力对应的头文件
+
+**build和build-tools目录提供构建时的 cmake,ninja,以及 toolchain 依赖。llvm 提供编译工具链。sysroot 提供 usr 系统资源**
+
+## OHOS SDK 使用
+本片介绍基本用法, 涉及到库有依赖的情况请[移步](./OHOS_SDK-Usage--depend-libs.md).
+### 编译cmake构建的库
+
+ SDK 采用 cmake 作为默认的编译脚本工具和 deveco 开发工具是一致的。并且 cmake 也是现如今 c/c++ 开发最流行的编译构建脚本。以下我使用 cjson 作为实例演示一下 OHOS SDK 构建 cmake 项目的步骤。
+
+ 首先下载/clone cJSON 源码,我这里下载的 v1.7.15 版本
+
+```shell
+ohos@ubuntu20:~/openHarmony$ git clone https://github.com/DaveGamble/cJSON.git -b v1.7.15
+Cloning into 'cJSON'...
+remote: Enumerating objects: 4545, done.
+remote: Total 4545 (delta 0), reused 0 (delta 0), pack-reused 4545
+Receiving objects: 100% (4545/4545), 2.45 MiB | 1.65 MiB/s, done.
+Resolving deltas: 100% (3026/3026), done.
+Note: switching to 'd348621ca93571343a56862df7de4ff3bc9b5667'.
+
+You are in 'detached HEAD' state. You can look around, make experimental
+changes and commit them, and you can discard any commits you make in this
+state without impacting any branches by switching back to a branch.
+
+If you want to create a new branch to retain commits you create, you may
+do so (now or later) by using -c with the switch command. Example:
+
+ git switch -c
+
+Or undo this operation with:
+
+ git switch -
+
+Turn off this advice by setting config variable advice.detachedHead to false
+
+ohos@ubuntu20:~/openHarmony$
+```
+
+ 进入 cJson 目录,创建 ohos64build 目录(存放构建文件)。执行 cmake,生成 makefile
+
+```
+ohos@ubuntu20:~/openHarmony/cJSON/ohos64build$ /home/ohos/tools/OH_SDK/ohos-sdk/linux/native/build-tools/cmake/bin/cmake -DCMAKE_TOOLCHAIN_FILE=/home/ohos/tools/OH_SDK/ohos-sdk/linux/native/build/cmake/ohos.toolchain.cmake .. -L
+ # 如果需要编译静态库则需要设置 cmake 变量 -DBUILD_SHARED_LIBS=OFF
+ # 可以通过-DCMAKE_INSTALL_PREFIX=xxx 设置库的安装目录
+ # 编译 arm32 -DOHOS_ARCH=armeabi-v7a
+-- The C compiler identification is Clang 12.0.1
+-- Check for working C compiler: /home/ohos/tools/OH_SDK/ohos-sdk/linux/native/llvm/bin/clang # 采用sdk内的编译器
+-- Check for working C compiler: /home/ohos/tools/OH_SDK/ohos-sdk/linux/native/llvm/bin/clang -- works
+# 删除大量 cmake 日志
+ENABLE_PUBLIC_SYMBOLS:BOOL=ON
+ENABLE_SAFE_STACK:BOOL=OFF
+ENABLE_SANITIZERS:BOOL=OFF
+ENABLE_TARGET_EXPORT:BOOL=ON
+ENABLE_VALGRIND:BOOL=OFF
+ohos@ubuntu20:~/openHarmony/cJSON/ohos64build$
+```
+
+ 注意这里执行的 cmake 是 SDK 内的 cmake ,不是你自己系统上原有的 cmake 。包括 toolchain file 也是 SDK 内的。执行 make 即可编译出 cjson 库
+
+```
+ohos@ubuntu20:~/openHarmony/cJSON/ohos64build$ make
+Scanning dependencies of target cjson
+[ 2%] Building C object CMakeFiles/cjson.dir/cJSON.c.o
+clang: warning: argument unused during compilation: '--gcc-toolchain=/home/ohos/tools/OH_SDK/ohos-sdk/linux/native/llvm' [-Wunused-command-line-argument]
+# 删除大量 make 日志
+[100%] Linking C executable fuzz_main
+[100%] Built target fuzz_main
+ohos@ubuntu20:~/openHarmony/cJSON/ohos64build$
+```
+
+ 使用 file 命令,查看编译出的 elf 文件的属性。可以看到动态库和可执行程序都是 ARM aarch64 架构的。ohos cmake toolchainfile 在不设置 cpu 架构时默认为 aarch64 . 如果你需要编译 arm32 的需要在cmake时加上参数 -DOHOS_ARCH=armeabi-v7a
+
+```sh
+ohos@ubuntu20:~/openHarmony/cJSON/ohos64build$ ls
+cJSONConfig.cmake cJSON_test CMakeFiles CTestTestfile.cmake libcjson.pc libcjson.so.1 Makefile
+cJSONConfigVersion.cmake CMakeCache.txt cmake_install.cmake fuzzing libcjson.so libcjson.so.1.7.15 tests
+ohos@ubuntu20:~/openHarmony/cJSON/ohos64build$ file libcjson.so.1.7.15 cJSON_test
+libcjson.so.1.7.15: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=98d32cd8235a77985fec1419150fe2c97c8c8c38, with debug_info, not stripped
+cJSON_test: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1, BuildID[sha1]=20770aaad711d8286819f193e8d10034cdb3cedc, with debug_info, not stripped
+ohos@ubuntu20:~/openHarmony/cJSON/ohos64build$
+```
+
+### 编译非 cmake 构建的库
+
+ 开源社区存在着大量的非 cmake 构建的库,如何使用 OpenHarmony 的 SDK 编译它们呢?
+
+#### 方法1:我们可以使用 cmake 构建脚本重写开源库的构建过程
+
+ 这种方法需要分析源库的构建脚本或者分析源库的编译构建日志,我这里推荐简单点的分析构建日志(可以不必去学习 configure 的语法)。很多库为了性能一般会对代码进行处理器级的优化(SIMD: SSE,AVX; NEON),因此编译构建日志最好采用交叉编译工具链的日志,不要盲目的根据 x86_64 的构建日志进行翻译(cmake)。如果使用此方法请参考 oh 三方库 [cmake 编写指导](https://gitee.com/huangminzhong/cmake_study)及[编写规范](../cmake_specification.md)。
+
+#### 方法2:使用项目原生的构建工具例如 configure、makefile
+
+ 如何使用原生的构建工具?首先我们需要知道构建脚本并不是直接调用 gcc 或者 clang 编译工具链的。而是优先调用 CC 环境变量以达到调用 c 编译器的目的,对应的 CXX 环境变量对应 c++ 编译器...。等等一系列的编译工具都有自己对应的环境变量。通过设置这些环境变量,让构建工具使用 ohos SDK 的编译工具链。
+
+ 设置 ohos 64bit 库编译工具链环境变量
+
+```
+#aarch64-linux-ohos
+export OHOS_SDK=/home/ohos/tools/OH_SDK/ohos-sdk/linux # 此处是我的ohos_sdk解压目录,请替换为你自己的解压目录
+export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
+export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos"
+export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos"
+export LD=${OHOS_SDK}/native/llvm/bin/ld.lld
+export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
+export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
+export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
+export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
+export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
+export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
+export CFLAGS="-fPIC -D__MUSL__=1"
+export CXXFLAGS="-fPIC -D__MUSL__=1"
+```
+
+ 设置 ohos 32bit 库编译工具链环境变量
+
+```
+linux-arm
+export OHOS_SDK=/home/ohos/tools/OH_SDK/ohos-sdk/linux # 此处是我的ohos_sdk解压目录,请替换为你自己的解压目录
+export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
+export CC="${OHOS_SDK}/native/llvm/bin/clang --target=arm-linux-ohos"
+export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=arm-linux-ohos"
+export LD=${OHOS_SDK}/native/llvm/bin/ld.lld
+export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
+export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
+export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
+export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
+export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
+export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
+export CFLAGS="-fPIC -march=armv7a -D__MUSL__=1"
+export CXXFLAGS="-fPIC -march=armv7a -D__MUSL__=1"
+```
+
+ 使用unset 命令可以撤销环境变量
+
+```
+ unset OHOS_SDK AS CC CXX LD STRIP RANLIB OBJDUMP OBJCOPY NM AR CFLAGS CXXFLAGS
+```
+
+ 设置好编译工具链之后,只要按照标准的 configure 用法即可.
+
+### 实例操作
+
+ 下面以 openssl 为例,使用 ohos 的 SDK 编译 openharmony 系统下的 openssl 库( openssl 官方仓使用 configure 编译)。
+
+ 首先下载/clone openssl 官方源码,我是用的版本为 OpenSSL_1_1_1t
+
+```
+ohos@ubuntu20:~/openHarmony$ git clone https://github.com/openssl/openssl.git -b OpenSSL_1_1_1t
+Cloning into 'openssl'...
+remote: Enumerating objects: 446051, done.
+remote: Counting objects: 100% (342/342), done.
+remote: Compressing objects: 100% (183/183), done.
+remote: Total 446051 (delta 207), reused 259 (delta 159), pack-reused 445709
+Receiving objects: 100% (446051/446051), 272.13 MiB | 1.53 MiB/s, done.
+Resolving deltas: 100% (316557/316557), done.
+Note: switching to '830bf8e1e4749ad65c51b6a1d0d769ae689404ba'.
+
+You are in 'detached HEAD' state. You can look around, make experimental
+changes and commit them, and you can discard any commits you make in this
+state without impacting any branches by switching back to a branch.
+
+If you want to create a new branch to retain commits you create, you may
+do so (now or later) by using -c with the switch command. Example:
+
+ git switch -c
+
+Or undo this operation with:
+
+ git switch -
+
+Turn off this advice by setting config variable advice.detachedHead to false
+```
+
+ 设置需要的编译工具链环境变量,这里设置的时 ohos64bit 库的编译工具链,如果需要编译 ohos32bit 库请设置为 32bit 编译工具链
+
+```
+ohos@ubuntu20:~/openHarmony/openssl$ export OHOS_SDK=/home/ohos/tools/OH_SDK/ohos-sdk/linux #这里根据自己的SDK解压目录设置
+ohos@ubuntu20:~/openHarmony/openssl$ export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
+ohos@ubuntu20:~/openHarmony/openssl$ export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos"
+ohos@ubuntu20:~/openHarmony/openssl$ export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos"
+ohos@ubuntu20:~/openHarmony/openssl$ export LD=${OHOS_SDK}/native/llvm/bin/lld
+ohos@ubuntu20:~/openHarmony/openssl$ export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
+ohos@ubuntu20:~/openHarmony/openssl$ export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
+ohos@ubuntu20:~/openHarmony/openssl$ export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
+ohos@ubuntu20:~/openHarmony/openssl$ export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
+ohos@ubuntu20:~/openHarmony/openssl$ export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
+ohos@ubuntu20:~/openHarmony/openssl$ export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
+ohos@ubuntu20:~/openHarmony/openssl$ export CFLAGS="-fPIC -D__MUSL__=1"
+ohos@ubuntu20:~/openHarmony/openssl$ export CXXFLAGS="-fPIC -D__MUSL__=1"
+```
+
+ 执行 Configure 构建脚本
+
+```
+ohos@ubuntu20:~/openHarmony/openssl$ ./Configure linux-aarch64 --prefix=/home/ohos/openHarmony/openssl_instrall
+ # 在需要选择系统的时候由于configure不识别ohos,因此我们需要使用Linux aarch64等价系统和cpu架构 为了方便打包,需要指定安装目录
+Configuring OpenSSL version 1.1.1t (0x1010114fL) for linux-aarch64
+Using os-specific seed configuration
+Creating configdata.pm
+Creating Makefile
+
+**********************************************************************
+*** ***
+*** OpenSSL has been successfully configured ***
+*** ***
+*** If you encounter a problem while building, please open an ***
+*** issue on GitHub ***
+*** and include the output from the following command: ***
+*** ***
+*** perl configdata.pm --dump ***
+*** ***
+*** (If you are new to OpenSSL, you might want to consult the ***
+*** 'Troubleshooting' section in the INSTALL file first) ***
+*** ***
+**********************************************************************
+ohos@ubuntu20:~/openHarmony/openssl$ make
+/usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
+ "-oMakefile" include/crypto/bn_conf.h.in > include/crypto/bn_conf.h
+/usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
+ "-oMakefile" include/crypto/dso_conf.h.in > include/crypto/dso_conf.h
+/usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
+ "-oMakefile" include/openssl/opensslconf.h.in > include/openssl/opensslconf.h
+make depend && make _all
+make[1]: Entering directory '/home/ohos/openHarmony/openssl'
+make[1]: Leaving directory '/home/ohos/openHarmony/openssl'
+make[1]: Entering directory '/home/ohos/openHarmony/openssl'
+/home/ohos/tools/OH_SDK/ohos-sdk/linux/native/llvm/bin/clang -I. -Iinclude -fPIC -pthread -Wa,--noexecstack -Qunused-arguments -fPIC --target=aarch64-linux-ohos -D__MUSL__=1 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/ohos/openHarmony/openssl_install/ssl\"" -DENGINESDIR="\"/home/ohos/openHarmony/openssl_install/lib/engines-1.1\"" -DNDEBUG -MMD -MF apps/app_rand.d.tmp -MT apps/app_rand.o -c -o apps/app_rand.o apps/app_rand.c
+# 删除大量 make 日志
+${LDCMD:-/home/ohos/tools/OH_SDK/ohos-sdk/linux/native/llvm/bin/clang} -pthread -Wa,--noexecstack -Qunused-arguments -fPIC --target=aarch64-linux-ohos -D__MUSL__=1 -L. \
+ -o test/x509aux test/x509aux.o \
+ test/libtestutil.a -lcrypto -ldl -pthread
+/usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
+ "-oMakefile" apps/CA.pl.in > "apps/CA.pl"
+chmod a+x apps/CA.pl
+/usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
+ "-oMakefile" apps/tsget.in > "apps/tsget.pl"
+chmod a+x apps/tsget.pl
+/usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
+ "-oMakefile" tools/c_rehash.in > "tools/c_rehash"
+chmod a+x tools/c_rehash
+/usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
+ "-oMakefile" util/shlib_wrap.sh.in > "util/shlib_wrap.sh"
+chmod a+x util/shlib_wrap.sh
+make[1]: Leaving directory '/home/ohos/openHarmony/openssl'
+ohos@ubuntu20:~/openHarmony/openssl$ make install
+make depend && make _build_libs
+make[1]: Entering directory '/home/ohos/openHarmony/openssl'
+make[1]: Leaving directory '/home/ohos/openHarmony/openssl'
+make[1]: Entering directory '/home/ohos/openHarmony/openssl'
+make[1]: Nothing to be done for '_build_libs'.
+make[1]: Leaving directory '/home/ohos/openHarmony/openssl'
+created directory `/home/ohos/openHarmony/openssl_install/lib'
+*** Installing runtime libraries
+install libcrypto.so.1.1 -> /home/ohos/openHarmony/openssl_install/lib/libcrypto.so.1.1
+install libssl.so.1.1 -> /home/ohos/openHarmony/openssl_install/lib/libssl.so.1.1
+*** Installing development files
+created directory `/home/ohos/openHarmony/openssl_install/include'
+created directory `/home/ohos/openHarmony/openssl_install/include/openssl'
+install ./include/openssl/aes.h -> /home/ohos/openHarmony/openssl_install/include/openssl/aes.h
+install ./include/openssl/asn1.h -> /home/ohos/openHarmony/openssl_install/include/openssl/asn1.h
+install ./include/openssl/asn1_mac.h -> /home/ohos/openHarmony/openssl_install/include/openssl/asn1_mac.h
+# 删除大量 install 日志
+/home/ohos/openHarmony/openssl_install/share/doc/openssl/html/man7/X25519.html
+/home/ohos/openHarmony/openssl_install/share/doc/openssl/html/man7/X448.html -> /home/ohos/openHarmony/openssl_install/share/doc/openssl/html/man7/X25519.html
+/home/ohos/openHarmony/openssl_install/share/doc/openssl/html/man7/x509.html
+ohos@ubuntu20:~/openHarmony/openssl$
+```
+
+ 安装完成后查看安装目录,可以看到可执行程序,动态库,静态库,头文件均已安装到指定目录
+
+```
+ohos@ubuntu20:~/openHarmony/openssl$ cd ../openssl_install/
+ohos@ubuntu20:~/openHarmony/openssl_install$ ls
+bin include lib share ssl
+ohos@ubuntu20:~/openHarmony/openssl_install$ ls bin/
+c_rehash openssl
+ohos@ubuntu20:~/openHarmony/openssl_install$ ls lib/
+engines-1.1 libcrypto.a libcrypto.so libcrypto.so.1.1 libssl.a libssl.so libssl.so.1.1 pkgconfig
+ohos@ubuntu20:~/openHarmony/openssl_install$ ls include/
+openssl
+ohos@ubuntu20:~/openHarmony/openssl_install$ ls include/openssl/
+aes.h bnerr.h comp.h dh.h engine.h md2.h opensslconf.h rand_drbg.h seed.h store.h x509.h
+asn1err.h bn.h conf_api.h dsaerr.h e_os2.h md4.h opensslv.h randerr.h sha.h symhacks.h x509v3err.h
+asn1.h buffererr.h conferr.h dsa.h err.h md5.h ossl_typ.h rand.h srp.h tls1.h x509v3.h
+asn1_mac.h buffer.h conf.h dtls1.h evperr.h mdc2.h pem2.h rc2.h srtp.h tserr.h x509_vfy.h
+asn1t.h camellia.h cryptoerr.h ebcdic.h evp.h modes.h pemerr.h rc4.h ssl2.h ts.h
+asyncerr.h cast.h crypto.h ecdh.h hmac.h objectserr.h pem.h rc5.h ssl3.h txt_db.h
+async.h cmac.h cterr.h ecdsa.h idea.h objects.h pkcs12err.h ripemd.h sslerr.h uierr.h
+bioerr.h cmserr.h ct.h ecerr.h kdferr.h obj_mac.h pkcs12.h rsaerr.h ssl.h ui.h
+bio.h cms.h des.h ec.h kdf.h ocsperr.h pkcs7err.h rsa.h stack.h whrlpool.h
+blowfish.h comperr.h dherr.h engineerr.h lhash.h ocsp.h pkcs7.h safestack.h storeerr.h x509err.h
+ohos@ubuntu20:~/openHarmony/openssl_install$ file lib/*
+lib/engines-1.1: directory
+lib/libcrypto.a: current ar archive
+lib/libcrypto.so: symbolic link to libcrypto.so.1.1
+lib/libcrypto.so.1.1: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, with debug_info, not stripped
+lib/libssl.a: current ar archive
+lib/libssl.so: symbolic link to libssl.so.1.1
+lib/libssl.so.1.1: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, with debug_info, not stripped
+lib/pkgconfig: directory
+
+```
diff --git "a/tools/doc/ohos_use_sdk/ohos_sdk\344\270\213\350\275\275.png" "b/tools/doc/ohos_use_sdk/ohos_sdk\344\270\213\350\275\275.png"
new file mode 100755
index 0000000000000000000000000000000000000000..dae8a157f1b38d7aaa1672cc743c1579a214e276
GIT binary patch
literal 97904
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 |