diff --git a/README_zh.md b/README_zh.md index 77978e8d987a511de6810bb81aa860cb93e02146..36541419b067e3f4b2c04dd2b8899dbed419e3b3 100755 --- a/README_zh.md +++ b/README_zh.md @@ -10,7 +10,7 @@ tpc_c_cplusplus ├── README_zh.md # 仓库主页 ├── docs # 说明文档/三方库适配文档 -├── tools # 三方库适配相关工具 +├── lycium # 三方库适配相关工具 ├── thirdparty # 已经适配OpenHarmony的三方库的构建脚本 ├── LICENSE # 本仓库的开源license文件 ...... diff --git a/docs/thirdparty_port.md b/docs/thirdparty_port.md index 16b5264dedd84305e44c6a9fe9eff95c4aaa666b..59e1cd0c5870d91b7770809275239edce0d856a0 100755 --- a/docs/thirdparty_port.md +++ b/docs/thirdparty_port.md @@ -20,12 +20,12 @@ OpenHarmony的应用编译开发使用的是[DevEco Studio](https://developer.harmonyos.com/cn/develop/deveco-studio#download),而该工具目前只支持cmake的编译,但开源的C/C++三方库编译方式多样化,包含cmake,configured等方式。对于原生库cmake无法在IDE上编译构建的,我们需要分析问题原因并需要针对IDE修改原生CMakeLists.txt。而非cmake编译方式的三方库,我们也需要分析该库的编译方式进行手写CMakeLists.txt文件将该库编译方式改为cmake编译构建。这些过程比较耗时,尤其对一些大型的C/C++三方库. -针对于这些问题,我们开发一套基于linux下用原生库的编译脚本进行交叉编译三方库的[工具](../tools/README.md)。该工具协助开发者,在 linux系统上快速编译构建能在OpenHamony上运行的c/c++ 三方库。 +针对于这些问题,我们开发一套基于linux下用原生库的编译脚本进行交叉编译三方库的[工具](../lycium/README.md)。该工具协助开发者,在 linux系统上快速编译构建能在OpenHamony上运行的c/c++ 三方库。 ### 三方库测试验证 业界内C/C++三方库测试框架多种多样,我们无法将其统一,因此为了保证原生库功能完整,我们基于原生库的测试用例进行测试验证。为此,我们需要集成了一套可以在OH环境上进行make test等操作的环境,具体方法可参照: -[CItools README](https://gitee.com/han_jin_fei/lycium-citools) +[CItools 介绍](../lycium/CItools/README_zh.md) ### 三方库的使用 @@ -33,7 +33,7 @@ OpenHarmony的应用编译开发使用的是[DevEco Studio](https://developer.ha ## 快速适配三方库实例 -我们可以通过[工具](../tools/README.md)在 linux系统上快速编译构建能在OpenHamony上运行的c/c++ 三方库,该现在支持cmake以及config及make等构建方式,下面以minizip-ng三方库为例详细讲解lycium工具的使用。 +我们可以通过[工具](../lycium/README.md)在 linux系统上快速编译构建能在OpenHamony上运行的c/c++ 三方库,该现在支持cmake以及config及make等构建方式,下面以minizip-ng三方库为例详细讲解lycium工具的使用。 ### 使用约束 @@ -43,8 +43,8 @@ OpenHarmony的应用编译开发使用的是[DevEco Studio](https://developer.ha ### 环境搭建 -- 工具下载:[工具](../tools) -- 环境搭建参照[编译环境搭建](../tools/Buildtools/README.md) +- 工具下载:[工具](../lycium) +- 环境搭建参照[编译环境搭建](../lycium/Buildtools/README.md) - OpenHarmony SDK版本下载地址: [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) ### 编译脚本规则 @@ -175,7 +175,7 @@ cleanbuild() { 该函数主要清理当前库的编译环境。 -编译脚本模板更多信息可以参照[HPKBUILD](../tools/template/HPKBUILD)。 +编译脚本模板更多信息可以参照[HPKBUILD](../lycium/template/HPKBUILD)。 ### minizip快速适配 @@ -184,7 +184,7 @@ cleanbuild() { - 在main目录下创建minizip-ng三方库目录,以及对应的xz(该库编译完后会生成liblzma.a以及对应的liblzma.so),openssl和bzip2. ``` shell - cd tools/main + cd lycium/main mkdir minizip-ng mkdir xz mkdir openssl @@ -424,13 +424,13 @@ cleanbuild() { ### minizip编译构建 -编写完HPKBUILD文件后,我们就可以进行三方库的编译了。在`tools`目录执行如下指令进行编译: +编写完HPKBUILD文件后,我们就可以进行三方库的编译了。在`lycium`目录执行如下指令进行编译: ```shell ./build.sh minizip-ng xz bzip2 openssl googletest ``` -其中minizip-ng是我们需要编译的三方库,而xz,bzip2,openssl以及googletest是minizip-ng三方库的依赖库。进行编译完后,会在`tools/usr`下生成对应架构的三方库的的库文件和头文件等。 +其中minizip-ng是我们需要编译的三方库,而xz,bzip2,openssl以及googletest是minizip-ng三方库的依赖库。进行编译完后,会在`lycium/usr`下生成对应架构的三方库的的库文件和头文件等。 ```shell minizip-ng/arm64-v8a minizip-ng/armeabi-v7a diff --git a/lycium/CItools/README_zh.md b/lycium/CItools/README_zh.md new file mode 100755 index 0000000000000000000000000000000000000000..268e2a1b504048ba1d1de67de35b2f98e45ae015 --- /dev/null +++ b/lycium/CItools/README_zh.md @@ -0,0 +1,23 @@ +# 三方库测试验证工具说明文档 + +## 背景 +业界内C/C++三方库测试框架多种多样,我们无法将其统一,为了保证三方库功能完整,我们基于原生库的测试用例进行测试验证。为此,我们需要集成了一套可以在OHOS上进行make test等操作的环境;有如下两种集成方式。 + +## 集成方式 + +### 二进制文件集成 + +我们已经编译出测试验证工具的二进制文件,可以直接参考[CItools README](https://gitee.com/han_jin_fei/lycium-citools)文档,进行环境搭建;如需了解编译过程,请查看源码编译集成段落。 + +### 源码编译集成 + +cmake、make等工具源码集成指导文档,如下列表所示,可按照指导文档编译出二进制文件,再拷贝到OHOS上,进行环境搭建。 + +| 工具名称 | 编译指导文档路径32位 | 编译指导文档路径64位 | +| :--------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| cmake 32位 | [cmake_32位](./cmake/cmake_armeabi_v7a_compilation_instructions.md) | [cmake_64位](./cmake/cmake_arm64_v8a_compilation_instructions.md) | +| make | [make_32位](./make/make_armeabi-v7a_Compilation_instructions.md) | [make_64位](./make/make_arm64_v8a_Compilation_instructions.md) | +| busybox | [busybox_32位](./busybox/busybox_armeabi-v7a_Compilation_instructions.md) | [busybox_64位](./busybox/busybox_arm64_v8a_Compilation_instructions.md) | +| perl | [perl_32位](./perl/perl_armeabi-v7a_Compilation_instructions.md) | [perl_64位](./perl/perl_arm64_v8a_Compilation_instructions.md) | +| shell_cmd | [shell_cmd_32位](./shell_cmd/shell_cmd_armeabi_v7a_Compilation_instructions.md) | [shell_cmd_64位](./shell_cmd/shell_cmd_arm64_v8a_Compilation_instructions.md) | + diff --git a/lycium/doc/cmake_specification.md b/lycium/doc/cmake_specification.md new file mode 100755 index 0000000000000000000000000000000000000000..079e138fa2d03f88c0f180ac7b0076e63ef0795c --- /dev/null +++ b/lycium/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) +