From fc66ef6c6d28f8ac16c9eb9fc553ece4c91890ee Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Fri, 27 Oct 2023 09:15:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- README_zh.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/README_zh.md b/README_zh.md index 36541419..04166067 100755 --- a/README_zh.md +++ b/README_zh.md @@ -4,6 +4,16 @@ 本仓库主要用于存放已经适配OpenHarmony的C/C++三方库的适配脚本和OpenHarmony三方库适配指导文档、三方库适配相关的工具。 +本仓库适配的三方库主要是通过[openharmony linux SDK进行交叉编译](lycium/doc/ohos_use_sdk/OHOS_SDK-Usage.md)并集成到北向应用中。基于该交叉编译方式,提供了一套快速交叉编译的工具:lycium交叉编译工具. + +## lycium交叉编译工具 + +lycium交叉编译工具的使用请阅读[lycium交叉编译框架](lycium/README.md)。 + +## 北向应用集成三方库 + +- [北向应用集成三方库](docs/thirdparty_knowledge.md) + ## 本仓库目录 ```shell @@ -16,16 +26,16 @@ tpc_c_cplusplus ...... ``` +## 三方库列表 + +- [C/C++三方库列表](docs/thirdparty_list.md) + ## 如何贡献 - [遵守仓库目录结构](#本仓库目录) - [遵守OpenHarmony编码贡献规范](https://gitee.com/openharmony-sig/knowledge_demo_smart_home/blob/master/dev/docs/contribute/README.md) - [贡献三方库](thirdparty/README_zh.md) -## 三方库列表 - -- [C/C++三方库列表](docs/thirdparty_list.md) - -## 北向应用集成三方库 +## FAQ -- [北向应用集成三方库](docs/thirdparty_knowledge.md) +[C/C++三方库常见FAQ](./)。 -- Gitee From 039c5a01387b74aef521814f4217ff6521e37a3f Mon Sep 17 00:00:00 2001 From: zhongluping <278527840@qq.com> Date: Fri, 27 Oct 2023 10:18:01 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhongluping <278527840@qq.com> --- README_zh.md | 29 +++-- docs/FAQ.md | 17 +++ docs/cmake_portting.md | 233 +++++++++++++++++++++++++++++++++ docs/configure_portting.md | 253 ++++++++++++++++++++++++++++++++++++ docs/make_portting.md | 170 ++++++++++++++++++++++++ lycium/Buildtools/README.md | 44 +++++-- lycium/README.md | 75 +++++++---- 7 files changed, 770 insertions(+), 51 deletions(-) create mode 100755 docs/FAQ.md create mode 100755 docs/cmake_portting.md create mode 100755 docs/configure_portting.md create mode 100755 docs/make_portting.md diff --git a/README_zh.md b/README_zh.md index 04166067..a2cba34b 100755 --- a/README_zh.md +++ b/README_zh.md @@ -4,38 +4,41 @@ 本仓库主要用于存放已经适配OpenHarmony的C/C++三方库的适配脚本和OpenHarmony三方库适配指导文档、三方库适配相关的工具。 -本仓库适配的三方库主要是通过[openharmony linux SDK进行交叉编译](lycium/doc/ohos_use_sdk/OHOS_SDK-Usage.md)并集成到北向应用中。基于该交叉编译方式,提供了一套快速交叉编译的工具:lycium交叉编译工具. +## 三方库适配 -## lycium交叉编译工具 +本仓库的三方库主要是通过[OpenHarmony linux SDK进行交叉编译](lycium/doc/ohos_use_sdk/OHOS_SDK-Usage.md)适配的,并集成到应用端使用。当前已经适配交叉编译的构建方式有: -lycium交叉编译工具的使用请阅读[lycium交叉编译框架](lycium/README.md)。 +- [cmake 编译构建](./docs/cmake_portting.md) +- [configure 编译构建方式](./docs/configure_portting.md) +- [make 编译构建](./docs/make_portting.md) -## 北向应用集成三方库 +为了帮助开发者快速便捷的完成C/C++三方库交叉编译,我们开发了一套交叉编译框架[lycium](./lycium/README.md),其涵盖了以上三种构建方式。 -- [北向应用集成三方库](docs/thirdparty_knowledge.md) +## 已适配三方库 + +- [c/c++三方库](./thirdparty/) + +## 应用端集成三方库知识赋能 + +- [应用端集成三方库知识赋能](docs/thirdparty_knowledge.md) ## 本仓库目录 ```shell tpc_c_cplusplus ├── README_zh.md # 仓库主页 -├── docs # 说明文档/三方库适配文档 +├── docs # 说明文档/三方库适配文档8 ├── lycium # 三方库适配相关工具 ├── thirdparty # 已经适配OpenHarmony的三方库的构建脚本 ├── LICENSE # 本仓库的开源license文件 ...... ``` -## 三方库列表 - -- [C/C++三方库列表](docs/thirdparty_list.md) - ## 如何贡献 - [遵守仓库目录结构](#本仓库目录) -- [遵守OpenHarmony编码贡献规范](https://gitee.com/openharmony-sig/knowledge_demo_smart_home/blob/master/dev/docs/contribute/README.md) -- [贡献三方库](thirdparty/README_zh.md) +- [通过lycium快速交叉编译C/C++三方库](./lycium/) ## FAQ -[C/C++三方库常见FAQ](./)。 +[C/C++三方库常见FAQ](./docs/FAQ.md)。 diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100755 index 00000000..4d150955 --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,17 @@ +# C/C++三方库常见 FAQ + +- 交叉编译完后在测试设备上运行测试用例失败,如测试bzip2时提示`/bin/sh: ./bzip2: No such file or directory`? + +1. 确保文件已经推送到开发板 +2. 确保文件的CPU架构和测试设备系统架构是一致的,可通过`file`查看文件属性,通过`getconf LONG_BIT`查看系统位数,如本错误示例中: + + ```shell + # file bzip2 # 查看文件架构时arm64位的 + bzip2: ELF shared object, 64-bit LSB arm64, dynamic (/lib/ld-musl-aarch64.so.1) + # + # getconf LONG_BIT # 查看系统位数 + 32 + # + ``` + + 文件属性与系统位数不匹配,故提示无法找到该文件。 diff --git a/docs/cmake_portting.md b/docs/cmake_portting.md new file mode 100755 index 00000000..f577068a --- /dev/null +++ b/docs/cmake_portting.md @@ -0,0 +1,233 @@ +# CMake交叉编译构建 + +## 简介 + +CMake 是一个跨平台的构建工具,它可以生成与构建系统无关的 Makefile 或 IDE 项目文件。CMake 的配置过程是跨平台的,因此可以在不同的操作系统上运行例如 Linux、Windows 和 macOS。
+CMake 的配置过程包括创建一个名为 CMakeLists.txt 的脚本文件,在该文件中定义项目的配置选项、依赖项和编译规则。然后通过运行 CMake 工具它会根据 CMakeLists.txt 文件生成适用于目标平台的 Makefile 或其他构建系统的文件。如果对`CMakeLists.txt`不熟悉的话,请先阅读[从零开始编写一个cmake构建脚本](./cmake_compile.md)。 + +本文通过cJSON库来讲解如何将一个cmake构建方式的三方库在linux环境上通过`OpenHarmony SDK`进行交叉编译。 + +## 编译前准备 + +### OpenHarmony SDK 准备 + +1. 从 OpenHarmony SDK [官方发布渠道](https://gitee.com/openharmony-sig/oh-inner-release-management/blob/master/Release-Testing-Version.md) 下载对应版本的SDK。 +2. 解压SDK + + ```shell + owner@ubuntu:~/workspace$ tar -zxvf version-Master_Version-OpenHarmony_3.2.10.3-20230105_163913-ohos-sdk-full.tar.gz + ``` + +3. 进入到sdk的linux目录,解压工具包: + + ```shell + owner@ubuntu:~/workspace$ cd ohos_sdk/linux + owner@ubuntu:~/workspace/ohos-sdk/linux$ for i in *.zip;do unzip ${i};done # 通过for循环一次解压所有的工具包 + owner@ubuntu:~/workspace/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 + ``` + +### 三方库源码准备 + + 适配三方库如果没有指定版本,我们一般取三方库最新版本,不建议使用master的代码,这里我们下载cJSON v1.7.15 版本的源码: + + ```shell + owner@ubuntu:~/workspace$ git clone https://github.com/DaveGamble/cJSON.git -b v1.7.15 # 通过git下载指定版本的源码 + 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 + + owner@ubuntu:~/workspace$ + ``` + +## 编译&安装 + +1. 新建编译目录 + + 为了不污染源码目录文件,我们推荐在三方库源码目录新建一个编译目录,用于生成需要编译的配置文件,本用例中我们在cJSON目录下新建一个build目录: + + ```shell + owner@ubuntu:~/workspace$ cd sJSON # 进入cJSON目录 + owner@ubuntu:~/workspace/cJSON$ mkdir build && cd build # 创建编译目录并进入到编译目录 + owner@ubuntu:~/workspace/cJSON/build$ + ``` + +2. 配置交叉编译参数,生成Makefile + + ```shell + owner@ubuntu:~/workspace/cJSON/build$ /home/owner/workspace/ohos-sdk/linux/native/build-tools/cmake/bin/cmake -DCMAKE_TOOLCHAIN_FILE=//home/owner/workspace/ohos-sdk/linux/native/build/cmake/ohos.toolchain.cmake -DCMAKE_INSTALL_PREFIX=/home/owner/workspace/usr/cJSON -DOHOS_ARCH=arm64-v8a .. -L # 执行cmake命令 + -- 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 + owner@ubuntu:~/workspace/cJSON/build$ ls # 执行完cmake成功后在当前目录生成Makefile文件 + cJSONConfig.cmake cJSONConfigVersion.cmake CMakeCache.txt CMakeFiles cmake_install.cmake CTestTestfile.cmake fuzzing libcjson.pc Makefile tests + ``` + + **注意这里执行的 cmake 必须是 SDK 内的 cmake,不是你自己系统上原有的 cmake 。否则会不识别参数OHOS_ARCH。** + + 参数说明: + 1) CMAKE_TOOLCHAIN_FILE: 交叉编译置文件路径,必须设置成工具链中的配置文件。 + 2) CMAKE_INSTALL_PREFIX: 配置安装三方库路径。 + 3) OHOS_ARCH: 配置交叉编译的CPU架构,一般为arm64-v8a(编译64位的三方库)、armeabi-v7a(编译32位的三方库),本示例中我们设置编译64位的cJSON库。 + 4) -L: 显示cmake中可配置项目 + +3. 执行编译 + + cmake执行成功后,在build目录下生成了Makefile,我们就可以直接执行make对cJSON进行编译了: + + ```shell + owner@ubuntu:~/workspace/cJSON/build$ make # 执行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/owner/workspace/ohos-sdk/linux/native/llvm' [-Wunused-command-line-argument] + /home/owner/workspace/cJSON/cJSON.c:561:9: warning: 'long long' is an extension when C99 mode is not enabled [-Wlong-long] + ... + 删除大量 make 日志 + ... + clang: warning: argument unused during compilation: '--gcc-toolchain=//home/owner/workspace/ohos-sdk/linux/native/llvm' [-Wunused-command-line-argument] + [ 97%] Building C object fuzzing/CMakeFiles/fuzz_main.dir/cjson_read_fuzzer.c.o + clang: warning: argument unused during compilation: '--gcc-toolchain=//home/owner/workspace/ohos-sdk/linux/native/llvm' [-Wunused-command-line-argument] + [100%] Linking C executable fuzz_main + [100%] Built target fuzz_main + owner@ubuntu:~/workspace/cJSON/build$ + ``` + +4. 查看编译后文件属性 + + 编译成功后我们可以通过file命令查看文件的属性,以此判断交叉编译是否成功,如下信息显示libcjson.so为aarch64架构文件,即交叉编译成功: + + ```shell + owner@ubuntu:~/workspace/cJSON/build$ file libcjson.so.1.7.15 # 查看文件属性命令 + libcjson.so.1.7.15: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=c0aaff0b401feef924f074a6cb7d19b5958f74f5, with debug_info, not stripped + ``` + +5. 执行安装命令 + + 编译成功后,我们可以执行make install将编译好的二进制文件以及头文件安装到cmake配置的安装路径下: + + ```shell + owner@ubuntu:~/workspace/cJSON/build$ make install # 执行安装命令 + [ 4%] Built target cjson + [ 8%] Built target cJSON_test + ... + 删除大量make install信息 + ... + -- Installing: /home/owner/workspace/usr/cJSON/lib/cmake/cJSON/cJSONConfig.cmake + -- Installing: /home/owner/workspace/usr/cJSON/lib/cmake/cJSON/cJSONConfigVersion.cmake + owner@ubuntu:~/workspace/cJSON/build$ + owner@ubuntu:~/workspace/cJSON/build$ ls /home/owner/workspace/usr/cJSON # 查看安装文件 + include lib + owner@ubuntu:~/workspace/cJSON/build$ ls /home/owner/workspace/usr/cJSON/lib/ + cmake libcjson.so libcjson.so.1 libcjson.so.1.7.15 pkgconfig + ``` + +## 测试 + +交叉编译完后,需要对三方库进行测试验证。为了保证三方库功能的完整性,我们基于原生库的测试用例进行测试验证。为此,我们集成了一套可以在OH环境上进行make、cmake、 ctest等操作的工具,具体请阅读[OH测试环境配置](../lycium/CItools/README_zh.md)文档。 + +1. 测试环境配置 + + 请参考[OH测试环境配置](../lycium/CItools/README_zh.md)。 + +2. 准备测试资源 + + 使用原生库的测试用例进行测试,为了保证测试时不进行编译操作,需要把整个编译的源码作为测试资源包推送到开发板,且需要保证三方库在开发板的路径与编译时路径一致: + + ```shell + owner@ubuntu:~/workspace$ tar -zcf cJSON.tar.gz cJSON/ + ``` + + 打包完资源后需要将资源通过[hdc_std](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-toolchain-hdc-guide.md#%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87)工具将资源包推送到开发板: + + ```shell + hdc_std file send X:\workspace\cJSON.tar.gz /data/ # 推送资源到开发板 + hdc_std shell # 进入开发板系统 + # mkdir -p /home/owner/ # 设置与编译时同样的路径 + # cd /home/owner/ + # ln -s workspace /data/ # 系统根目录空间有限,建议通过软链接配置路径 + # cd workspace + # tar -zxf cJSON.tar.gz # 解压测试资源 + ``` + +3. 执行测试 + + 进入到cJSON的编译目录build,执行ctest测试命令进行测试: + + ```shell + # cd /home/owner/workspace/cJSON/build + # ctest # 执行ctest测试命令,以下为测试信息 + Test project /home/owner/workspace/cJSON/build + Start 1: cJSON_test + 1/19 Test #1: cJSON_test ....................... Passed 0.02 sec + Start 2: parse_examples + 2/19 Test #2: parse_examples ................... Passed 0.02 sec + Start 3: parse_number + 3/19 Test #3: parse_number ..................... Passed 0.02 sec + Start 4: parse_hex4 + 4/19 Test #4: parse_hex4 ....................... Passed 0.10 sec + Start 5: parse_string + 5/19 Test #5: parse_string ..................... Passed 0.01 sec + Start 6: parse_array + 6/19 Test #6: parse_array ...................... Passed 0.01 sec + Start 7: parse_object + 7/19 Test #7: parse_object ..................... Passed 0.01 sec + Start 8: parse_value + 8/19 Test #8: parse_value ...................... Passed 0.01 sec + Start 9: print_string + 9/19 Test #9: print_string ..................... Passed 0.01 sec + Start 10: print_number + 10/19 Test #10: print_number ..................... Passed 0.01 sec + Start 11: print_array + 11/19 Test #11: print_array ...................... Passed 0.01 sec + Start 12: print_object + 12/19 Test #12: print_object ..................... Passed 0.01 sec + Start 13: print_value + 13/19 Test #13: print_value ...................... Passed 0.01 sec + Start 14: misc_tests + 14/19 Test #14: misc_tests ....................... Passed 0.01 sec + Start 15: parse_with_opts + 15/19 Test #15: parse_with_opts .................. Passed 0.01 sec + Start 16: compare_tests + 16/19 Test #16: compare_tests .................... Passed 0.01 sec + Start 17: cjson_add + 17/19 Test #17: cjson_add ........................ Passed 0.01 sec + Start 18: readme_examples + 18/19 Test #18: readme_examples .................. Passed 0.01 sec + Start 19: minify_tests + 19/19 Test #19: minify_tests ..................... Passed 0.01 sec + + 100% tests passed, 0 tests failed out of 19 + + Total Test time (real) = 0.37 sec + ``` + + 由以上测试结果可以看出,所有测试用例通过! diff --git a/docs/configure_portting.md b/docs/configure_portting.md new file mode 100755 index 00000000..c24d35bc --- /dev/null +++ b/docs/configure_portting.md @@ -0,0 +1,253 @@ +# configure 交叉编译 + +## 简介 + +configure 是一个由 GNU Autoconf 提供的脚本用于自动生成 Makefile。Autoconf 是一个用于创建可移植的源代码包的工具,它可以检测系统的特性和能力并生成适合当前系统的配置文件。
+在使用 configure 进行编译时,首先运行 configure 脚本,它会根据当前系统的特性和用户指定的选项生成一个或多个 Makefile。这些 Makefile 包含了编译该软件所需的详细规则和指令。
+本文通过jpeg库来展示如何将一个configure构建方式的三方库在linux环境上通过`OpenHarmony SDK`进行交叉编译。 + +## 编译前准备 + +### OHOS SDK准备 + +1. 从 openHarmony SDK [官方发布渠道](https://gitee.com/openharmony-sig/oh-inner-release-management/blob/master/Release-Testing-Version.md) 下载SDK + +2. 解压SDK + + ```shell + owner@ubuntu:~/workspace$ tar -zxvf version-Master_Version-OpenHarmony_3.2.10.3-20230105_163913-ohos-sdk-full.tar.gz + ``` + +3. 进入到sdk的linux目录,解压工具(C/C++三方库主要使用到native工具) + + ```shell + owner@ubuntu:~/workspace$ cd ohos_sdk/linux + owner@ubuntu:~/workspace/ohos-sdk/linux$ for i in *.zip;do unzip ${i};done + owner@ubuntu:~/workspace/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 + ``` + +### 三方库源码准备 + +1. 下载三方库代码: + + ```shell + owner@ubuntu:~/workspace$ wget http://www.ijg.org/files/jpegsrc.v9e.tar.gz ## 下载指定版本的源码包 + ``` + +2. 解压源码包 + + ```shell + owner@ubuntu:~/workspace$ tar -zxvf jpegsrc.v9e.tar.gz ## 解压源码包 + ``` + +## 编译 & 安装 + +1. 查看configure配置 + + 进入到jpeg目录执行configure配置,如若对configure配置项不熟悉,我们可以通过运行`configure --help`查看: + + ```shell + owner@ubuntu:~/workspace/jpeg-9e$ ./configure --help + `configure` configures libjpeg 9.5.0 to adapt to many kinds of systems. + Usage: ./configure [OPTION]... [VAR=VALUE]... + ... + # 去除大量不必要信息 + ... + # 配置安装选项 + Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [/usr/local] + ... + # 去除大量不必要信息 + ... + # 配置编译的主机选项(--host),默认配置为linux + System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] + # cJSON库配置可选项 + Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-ld-version-script + enable linker version script (default is enabled + when possible) + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-maxmem=N enable use of temp files, set max mem usage to N MB + ... + # 去除大量不必要信息 + ... + # 配置编译命令(默认使用linux gcc相关配置) + Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + + Use these variables to override the choices made by `configure` or to help + it to find libraries and programs with nonstandard names/locations. + Report bugs to the package provider. + ``` + + 由configure的帮助信息我们可以知道,jpeg交叉编译需要配置主机(编译完后需要运行的系统机器), 需要配置交叉编译命令以以及配置安装路径等选项。 + +2. 配置交叉编译命令,在命令行输入以下命令: + + ```shell + export OHOS_SDK=/home/owner/tools/OHOS_SDK/ohos-sdk/linux/ ## 配置SDK路径,此处需配置成自己的sdk解压目录 + export AS=${OHOS_SDK}/native/llvm/bin/llvm-as + export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos" ## 32bit的target需要配置成 --target=arm-linux-ohos + export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos" ## 32bit的target需要配置成 --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 -D__MUSL__=1" ## 32bit需要增加配置 -march=armv7a + export CXXFLAGS="-fPIC -D__MUSL__=1" ## 32bit需要增加配置 -march=armv7a + ``` + +3. 执行configure命令 + + 安装路劲以及host配置可以在configure时执行,此处以配置arm64位为例,如若需要配置32位,将`aarch64-arm`替换成`arm-linux`即可。 + + ```shell + owner@ubuntu:~/workspace/jpeg-9e$ ./configure --prefix=/home/owner/workspace/usr/jpeg --host=aarch64-linux # 执行configure命令配置交叉编译信息 + checking build system type... x86_64-pc-linux-gnu + checking host system type... x86_64-pc-linux-gnu + checking target system type... x86_64-pc-linux-gnu + ... + # 删除大量configure信息 + ... + configure: creating ./config.status + config.status: creating Makefile + config.status: creating libjpeg.pc + config.status: creating jconfig.h + config.status: executing depfiles commands + config.status: executing libtool commands + ``` + + 执行完confiure没有提示任何错误,即说明confiure配置成功,在当前目录会生成Makefile文件。 + +4. 执行make编译命令 + + configure执行成功后,在当前目录会生成Makefile文件,直接运行make即可进行交叉编译: + + ```shell + owner@ubuntu:~/workspace/jpeg-9e$ make # 执行make编译命令 + make all-am + make[1]: Entering directory '/home/owner/workspace/jpeg-9e' + CC cjpeg.o + CC rdppm.o + ... + # 删除大量make信息 + ... + CC rdcolmap.o + CCLD djpeg + CC jpegtran.o + CC transupp.o + CCLD jpegtran + CC rdjpgcom.o + CCLD rdjpgcom + CC wrjpgcom.o + CCLD wrjpgcom + make[1]: Leaving directory '/home/owner/workspace/jpeg-9e' + ``` + +5. 执行安装命令 + + ```shell + owner@ubuntu:~/workspace/jpeg-9e$ make install + ``` + +6. 执行完后对应的文件安装到prefix配置的路径`/home/owner/workspace/usr/jpeg`, 查看对应文件属性: + + ```shell + owner@ubuntu:~/workspace/jpeg-9e$ cd /home/owner/workspace/usr/jpeg + owner@ubuntu:~/workspace/usr/jpeg$ ls + bin include lib share + owner@ubuntu:~/workspace/usr/jpeg$ ls lib + libjpeg.a libjpeg.la libjpeg.so libjpeg.so.9 libjpeg.so.9.5.0 pkgconfig + owner@ubuntu:~/workspace/usr/jpeg$ ls include/ + jconfig.h jerror.h jmorecfg.h jpeglib.h + owner@ubuntu:~/workspace/usr/jpeg$ file lib/libjpeg.so.9.5.0 + lib/libjpeg.so.9.5.0: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, with debug_info, not stripped + ``` + +## 测试 + +交叉编译完后,该测试验证我们的三方库。为了保证原生库功能完整,我们基于原生库的测试用例进行测试验证。为此,我们需要集成了一套可以在OH环境上进行cmake, ctest等操作的环境,具体请阅读 [lycium CItools](https://gitee.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/CItools/README_zh.md)。 + +1. 测试环境配置,请参考 [lycium CItools](https://gitee.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/CItools/README_zh.md)。 + +2. 打包测试资源 + + 使用原生库的测试用例进行测试,我们为了保证测试时不进行编译操作,我们需要把整个编译的源码作为测试资源包推送到开发板,且需要保证三方库在开发板的路径与编译时路径一致: + + ```shell + owner@ubuntu:~/workspace$ tar -zcf jpeg-9e.tar.gz jpeg-9e/ + ``` + +3. 将测试资源推送到开发板 ,打开命令行工具,执行[hdc_std](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-toolchain-hdc-guide.md#%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87)命令进行文件传输: + + ```shell + hdc_std file send X:\workspace\jpeg-9e.tar.gz /data/ ## 推送资源到开发板 + hdc_std shell ## 进入开发板系统 + # mkdir -p /home/owner/ ## 设置与编译时同样的路径 + # cd /home/owner/ + # ln -s workspace /data/ ## 系统根目录空间有限,建议通过软链接配置路径 + # cd workspace + # tar -zxf jpeg-9e.tar.gz ## 解压测试资源 + ``` + +4. 执行测试 + + 进入到三方库编译路径,执行`make check-local`进行测试: + + ```shell + # cd /home/owner/workspace/jpeg-9e + # make check-local # 执行测试命令,以下为测试用例信息 + rm -f testout* + ./djpeg -dct int -ppm -outfile testout.ppm ./testorig.jpg + ./djpeg -dct int -gif -outfile testout.gif ./testorig.jpg + ./djpeg -dct int -bmp -colors 256 -outfile testout.bmp ./testorig.jpg + ./cjpeg -dct int -outfile testout.jpg ./testimg.ppm + ./djpeg -dct int -ppm -outfile testoutp.ppm ./testprog.jpg + ./cjpeg -dct int -progressive -opt -outfile testoutp.jpg ./testimg.ppm + ./jpegtran -outfile testoutt.jpg ./testprog.jpg + cmp ./testimg.ppm testout.ppm + cmp ./testimg.gif testout.gif + cmp ./testimg.bmp testout.bmp + cmp ./testimg.jpg testout.jpg + cmp ./testimg.ppm testoutp.ppm + cmp ./testimgp.jpg testoutp.jpg + cmp ./testorig.jpg testoutt.jpg + ``` + +当测试结果中未出现任何错误提示,则表示当前测试成功。至此,jpeg三方库使用OpenHarmony SDK交叉编译成功。 diff --git a/docs/make_portting.md b/docs/make_portting.md new file mode 100755 index 00000000..172484dd --- /dev/null +++ b/docs/make_portting.md @@ -0,0 +1,170 @@ +# make 交叉编译 + +## 简介 + +make 是一个标准的 Unix 构建工具,用于自动化编译过程。它读取 Makefile 中的规则和依赖项并根据这些规则来构建源代码。make 会检查源代码文件的时间戳,以确定哪些文件需要重新编译。它会自动解决依赖关系并按正确的顺序编译源文件。通过在终端中运行 make 命令,make 将根据 Makefile 中的指令逐步构建代码,生成最终的可执行程序或库文件。 + +直接通过make方式构建的三方库,其原库的Makefie文件已固定,因此如果需要交叉编译此类三方库,需要先分析原库的Makefile文件,查看其编译工具的具体配置方式。 + +本文通过bzip2三方库来分享如何通过OpenHarmony SDK来交叉编译make构建方式的三方库。 + +## 编译前准备 + +### OHOS SDK准备 + +1. 从 openHarmony SDK [官方发布渠道](https://gitee.com/openharmony-sig/oh-inner-release-management/blob/master/Release-Testing-Version.md) 下载SDK + +2. 解压SDK + + ```shell + owner@ubuntu:~/workspace$ tar -zxvf version-Master_Version-OpenHarmony_3.2.10.3-20230105_163913-ohos-sdk-full.tar.gz + ``` + +3. 进入到sdk的linux目录,解压工具(C/C++三方库主要使用到native工具) + + ```shell + owner@ubuntu:~/workspace$ cd ohos_sdk/linux + owner@ubuntu:~/workspace/ohos-sdk/linux$ for i in *.zip;do unzip ${i};done + owner@ubuntu:~/workspace/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 + ``` + +### 三方库源码准备 + +1. 下载三方库代码: + + 下载bzip2 v1.0.6版本的源码包 + + ```shell + owner@ubuntu:~/workspace$ wget https://sourceforge.net/projects/bzip2/files/bzip2-1.0.6.tar.gz ## 下载指定版本的源码包 + ``` + +2. 解压源码包 + + ```shell + owner@ubuntu:~/workspace$ tar -zxf bzip2-1.0.6.tar.gz ## 解压源码包 + owner@ubuntu:~/workspace$ + owner@ubuntu:~/workspace$ cd bzip2-1.0.6/ # 进入到bzip2源码目录 + owner@ubuntu:~/workspace/bzip2-1.0.6$ + ``` + +## 编译&安装 + +1. 分析Makefile文件 + + 通过分析原库的Makefile文件可知其以下几个内容需要进行重新配置 + + 1) 编译命令配置 + + ```shell + # To assist in cross-compiling + CC=gcc + AR=ar + RANLIB=ranlib + LDFLAGS= + ``` + + 默认配置linux下gcc的编译命令,编译时我们需要配置成OpenHarmony交叉编译命令即可。 + + 2) 安装路径配置 + + ```shell + # Where you want it installed when you do 'make install' + PREFIX=/usr/local + ``` + + 默认配置的安装目录为系统的/usr/local/下,如果需要执行安装的话,需配置成用户目录下。 + +2. 配置交叉编译命令,执行交叉编译 + + 分析完Makefile后即可配置交叉编译命令进行编译 + + ```shell + owner@ubuntu:~/workspace/bzip2-1.0.6$ make CC="/home/owner/workspace/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos" AR=/home/owner/workspace/ohos-sdk/linux/native/llvm/bin/llvm-ar RANDLIB=/home/owner/workspace/ohos-sdk/linux/native/llvm/bin/llvm-ranlib -j4 libbz2.a bzip2 bzip2recover + /home/owner/workspace/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64 -c huffman.c + /home/owner/workspace/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64 -c crctable.c + ... + 删除大量make信息 + ... + /home/owner/workspace/ohos-sdk/linux/native/llvm/bin/llvm-ar cq libbz2.a blocksort.o huffman.o crctable.o randtable.o compress.o decompress.o bzlib.o + ranlib libbz2.a + 1 warning generated. + /home/owner/workspace/ohos-sdk/linux/native/llvm/bin/clang --target=aarch64-linux-ohos -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64 -o bzip2 bzip2.o -L. -lbz2 + owner@ubuntu:~/workspace/bzip2-1.0.6$ + ``` + + **特别说明:CC配置除了配置交叉编译的clang外,还需要配置target的架构,即配置成aarch64位,按此配置编译出来的文件才能在64位设备上运行,如若需要编译32位的文件,则target配置成arm-linux-ohos即可** + +3. 查看编译成功后的文件 + + ```shell + owner@ubuntu:~/workspace/bzip2-1.0.6$ file bzip2 # 使用file查看生成的文件属性 + bzip2: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1, with debug_info, not stripped + owner@ubuntu:~/workspace/bzip2-1.0.6$ + ``` + + 编译时配置了`aarch64-linux-ohos`,故生成的文件属性为`ARM aarch64`,交叉编译成功。 + +4. 执行安装 + + 通过之前分析Makefile知道,在安装时需要配置`PREFIX`这个安装路径的变量: + + ```shell + owner@ubuntu:~/workspace/bzip2-1.0.6$ make install PREFIX=/home/owner/workspace/usr/bzip2/ # 执行make install安装 + owner@ubuntu:~/workspace/bzip2-1.0.6$ + owner@ubuntu:~/workspace/bzip2-1.0.6$ ls /home/owner/workspace/usr/bzip2/ # 查看安装文件 + bin include lib man + owner@ubuntu:~/workspace/bzip2-1.0.6$ + ``` + +## 测试 + +交叉编译完后,该测试验证我们的三方库。为了保证原生库功能完整,我们基于原生库的测试用例进行测试验证。为此,我们需要集成了一套可以在OH环境上进行cmake, ctest等操作的环境,具体请阅读 [lycium CItools](https://gitee.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/CItools/README_zh.md)。 + +1. 测试环境配置,请参考 [lycium CItools](https://gitee.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/CItools/README_zh.md)。 +2. 准备测试资源 + + 使用原生库的测试用例进行测试,我们为了保证测试时不进行编译操作,我们需要把整个编译的源码作为测试资源包通过[hdc工具](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-toolchain-hdc-guide.md#%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87)推送到开发板,且需要保证三方库在开发板的路径与编译时路径一致: + + ```shell + owner@ubuntu:~/workspace$ tar -zcvf bzip2.tar.gz bzip2-1.0.6/ + hdc_std file send X:\workspace\bzip2.tar.gz /data/ ## 推送资源到开发板 + hdc_std shell ## 进入开发板系统 + # mkdir -p /home/owner/ ## 设置与编译时同样的路径 + # cd /home/owner/ + # ln -s workspace /data/ ## 系统根目录空间有限,建议通过软链接配置路径 + # cd workspace + # tar -zxf bzip2.tar.gz ## 解压测试资源 + ``` + +3. 执行测试 + + ```shell + hdc_std shell + # cd /home/owner/worspace/bzip2-1.0.6 + # make check ## 执行测试命令,以下为测试信息 + Doing 6 tests (3 compress, 3 uncompress) ... + If there's a problem, things might stop at this point. + + ./bzip2 -1 < sample1.ref > sample1.rb2 + ./bzip2 -2 < sample2.ref > sample2.rb2 + ./bzip2 -3 < sample3.ref > sample3.rb2 + ./bzip2 -d < sample1.bz2 > sample1.tst + ./bzip2 -d < sample2.bz2 > sample2.tst + ./bzip2 -ds < sample3.bz2 > sample3.tst + cmp sample1.bz2 sample1.rb2 + cmp sample2.bz2 sample2.rb2 + cmp sample3.bz2 sample3.rb2 + cmp sample1.tst sample1.ref + cmp sample2.tst sample2.ref + cmp sample3.tst sample3.ref + ... + + # echo $? ## 查看测试结果 + 0 + ``` + +bzip2执行了6条测试用例,且未提示任何错误,说明此库测试成功。当不确定此库是否测试成功时,我们还可以在执行完测试命令后在命令行手动查看测试结果,通过输入 `echo $?`,如命令行输出`0`表示测试成功,`非0`代表测试失败。 diff --git a/lycium/Buildtools/README.md b/lycium/Buildtools/README.md index 25a55d0a..f2c39783 100644 --- a/lycium/Buildtools/README.md +++ b/lycium/Buildtools/README.md @@ -1,25 +1,47 @@ +# OpenHarmony交叉编译环境配置 + +## 简介 + +本文介绍在使用`lycium`框架快速交叉编译三方库前如何进行环境配置。 + +## 基本工具准备 + +`lycium`框架支持多种构建方式的三方库,为了保障三方库能正常编译,我们需要保证编译环境中包含以下几个基本编译命令: +`gcc`, `cmake`, `make`, `pkg-config`, `autoconf`, `autoreconf`, `automake`, +如若缺少相关命令,可通过官网下载对应版本的工具包,也可以在编译机上通过命令安装,如若`Ubuntu`系统上缺少`cmake`可以通过以下命令安装: + +```shell +sudo apt install cmake +``` + ## 下载ohos sdk + [参考OHOS_SDK-Usage](../doc/ohos_use_sdk/OHOS_SDK-Usage.md) ## 配置环境变量 + +`lycium`支持的是C/C++三方库的交叉编译,SDK工具链只涉及到`native`目录下的工具,故OHOS_SDK的路径需配置成`native`工具的父目录,linux环境中配置SDK环境变量方法如下: + ```shell - # 此处是我的ohos sdk解压目录, 使用者需自行配置自己的目录 - export OHOS_SDK=/home/ohos/tools/OH_SDK/ohos-sdk/linux + export OHOS_SDK=/home/ohos/tools/OH_SDK/ohos-sdk/linux # 此处SDK的路径使用者需配置成自己的sdk解压目录 ``` ## 拷贝编译工具 -``` - # 校验压缩包 - sha512sum -c SHA512SUM - #输出 toolchain.tar.gz: OK - # 解压拷贝编译工具 - tar -zxvf toolchain.tar.gz - cp toolchain/* ${OHOS_SDK}/native/llvm/bin + +为了简化开发中命令的配置,我们针对arm架构以及aarch64架构集成了几个编译命令,存放在`lycium/Buildtools`目录下,在使用`lycium`工具前,需要将这些编译命令拷贝到SDK对应的目录下,具体操作如下: + +```shell + cd lycium/Buildtools # 进入到工具包目录 + sha512sum -c SHA512SUM # 可校验工具包是否正常, 若输出"toolchain.tar.gz: OK"则说明工具包正常,否则说明工具包异常,需重新下载 + tar -zxvf toolchain.tar.gz # 解压拷贝编译工具 + cp toolchain/* ${OHOS_SDK}/native/llvm/bin # 将命令拷贝到工具链的native/llvm/bin目录下 ``` ## 设置编译机cmake识别OHOS系统 -由于sdk中的cmake版本过低, 导致很多开源库在cmake阶段报错. 这个时候就需要用户在编译机上安装一个高版本的cmake(推荐使用3.26版本). 但是 + +由于sdk中的cmake版本过低, 导致很多开源库在cmake阶段报错. 这个时候就需要用户在编译机上安装一个高版本的cmake(推荐使用3.26及以上版本). 但是 cmake官方是不支持OHOS的. 解决方案: -``` + +```shell cp $OHOS_SDK/native/build-tools/cmake/share/cmake-3.16/Modules/Platform/OHOS.cmake xxx(代表你编译机安装的cmake的路径)/cmake-3.26.3-linux-x86_64/share/cmake-3.26/Modules/Platform ``` diff --git a/lycium/README.md b/lycium/README.md index 397722f8..9174fc0a 100644 --- a/lycium/README.md +++ b/lycium/README.md @@ -1,58 +1,79 @@ -# HPKBUILD build script! +# lycium 交叉编译框架 -协助开发者, 在 OpenHarmony 系统上快速编译、验证以及长期维护 c/c++ 库. +## 简介 -## 使用 +lycium是一款协助开发者通过shell语言实现C/C++三方库快速交叉编译,并在OpenHarmony 系统上快速验证的编译框架工具。开发者只需要设置对应C/C++三方库的编译方式以及编译参数,通过lycium就能快速的构建出能在OpenHarmony 系统运行的二进制文件。 -执行脚本build.sh,自动编译thridparty目录下的所有开源库,并打包安装到 usr\/\$pkgname/$ARCH 目录 +## 原则 -```shell - ./build.sh # 默认编译 thirdparty 目录下的多有库 -``` +**移植过程,不可以改源码(即不patchc/cpp文件,不patch构建脚本)。如移植必须patch,patch必须评审,给出充分理由。(不接受业务patch)** + +## 目录结构介绍 ```shell - ./build.sh aaa bbb ccc ... # 编译 thirdparty 目录下指定的 aaa bbb ccc ...库 当 aaa 库存在依赖时,必须保证入参中包含依赖,否则 aaa 库不会编译 +lycium +├── doc # lycium工具相关说明文档 +├── Buildtools # 存放编译环境准备说明 +├── CItools # 测试环境搭建相关说明文档 +├── script # 项目依赖的脚本 +├── template # thirdparty 目录中库的构建/测试模板 +├── build.sh # 顶层构建脚本 +├── test.sh # 顶层测试脚本 ``` -## 原则 +## 通过lycium工具快速共建C/C++三方库 -**移植过程,不可以改源码(即不patchc/cpp文件,不patch构建脚本)。如移植必须patch,patch必须评审,给出充分理由。(不接受业务patch)** +### 编译环境准备 -## 如何贡献 +请阅读 [Buildtools README](./Buildtools/README.md) -为 lycium 项目共享,开源三方库 +### 修改三方库的编译方式以及编译参数 -### 1.编译环境准备 +lycium框架提供了[HPKBUILD](./lycium/template/HPKBUILD)文件供开发者对相应的C/C++三方库的编译配置。具体方法: -请阅读 [Buildtools README](./Buildtools/README.md) +1. 在[thirdparty](../thirdparty/)目录下新建需要共建的三方库名字pkgname。 +2. 将[HPKBUILD](./template/HPKBUILD)模板文件拷贝到新建三方库目录下。 +3. 根据三方库实际情况修改[HPKBUILD](./template/HPKBUILD)模板,文件修改可参考[minizip共建](../docs/thirdparty_port.md#快速适配三方库实例)。 -### 2.HPKBUILD 编写说明 +### 快速编译三方库 -请阅读 [template README](./template/README.md) +配置完三方库的编译方式参数后,在[lycium](./)目录执行./build.sh pkgname,进行自动编译三方库,并打包安装到当前目录的 usr/\$pkgname/$ARCH 目录 -### 3.编译方法 +```shell + ./build.sh # 默认编译 thirdparty 目录下的多有库 +``` -请参照[使用介绍](##使用) +```shell + ./build.sh aaa bbb ccc ... # 编译 thirdparty 目录下指定的 aaa bbb ccc ...库 当 aaa 库存在依赖时,必须保证入参中包含依赖,否则 aaa 库不会编译 +``` -### 4.编译后三方库使用 +**lycium框架是通过linux shell脚本语言编写的,如果对shell语言不熟悉的开发者可以先学习[Linux Shell编程基础教程](https://blog.51cto.com/centos5/912584)。或者查找其他linux shell编程资料** + +### 编译后三方库使用 请阅读[北向应用如何使用三方库二进制文件](doc/app_calls_third_lib.md) -### 5.CI环境准备 +### 快速验证C/C++三方库 + +1. 测试环境准备 -请查阅 [lycium CItools](./CItools/README_zh.md) + 业界内C/C++三方库测试框架多种多样,我们无法将其统一,因此为了保证原生库功能完整,我们基于原生库的测试用例进行测试验证。为此,我们需要集成了一套可以在OH环境上进行cmake, ctest等操作的环境,具体请阅读 [lycium CItools](./CItools/README_zh.md)。 -### 6.测试通过即可提交PR,附带测试成功的截屏 +2. 测试脚本编写 -## 介绍 + lycium框架提供了[HPKCHECK](./template/HPKCHECK)文件供开发者对相应的C/C++三方库的自动化测试,开发者只需在脚本中配置当前三方库需要测试的命令即可。 -Buildtools: 存放编译环境准备说明 +3. 测试运行 -script: 项目依赖的脚本 + 由于我们运行的是原生库的测试用例,因此我们需要将原生库的源码及生成文件都作为测试资源打包到开发板进行测试(直接将tpc_c_cplusplus直接打包成一个测试资源,并且保证测试资源在开发板的测试路径与编译路径保持一致,避免部分原生库因编译时对测试文件配置了路径而导致测试不过),然后在[lycium](./)目录下执行脚本./test.sh,自动运行thridparty目录下已编译的三方库,并在终端显示已测试三方库总数以及通过和未通过的三方库。 -template: thirdparty 目录中库的构建模板 + ```shell + ./test.sh # 默认测试 thirdparty 目录下的所有已编译的三方库 + ``` -build.sh: 顶层构建脚本 + ```shell + ./test.sh aaa bbb ccc ... # 测试 thirdparty 目录下指定的 aaa bbb ccc ...库 当指定的库未编译时不会进行测试 + ``` ## TODO -- Gitee