#夏日挑战赛#交叉编译(一)-- musl库浅析 原创 精华
背景
openharmony在编译框架采用了gn + ninja + llvm + clang + musl(当然这里排除内核的编译部分),musl是一个全新为 Linux 基本系统实现的标准库。特点是轻量级、快速、简单、免费、标准兼容和安全。当前rk3568的开发板编译的musl库采用arm的架构进行的编译。其中musl下载地址
编译用例
我们在三方库中增加一个简单的用例。用于当前编译过程分析。
在third_party/cJSON/BUILD.gn增加一个helloworld用例。
其中源文件为:
通过执行
./build.sh --product-name rk3568 --ccache --build-target=helloworld
编译之后我们会发现编译过程中会首先将通过clang 将编译./third_party/musl/crt/arm/crtn.s crti.s编译成对应的crtn.o crti.o 文件
编译过程产生的日志将会重定向输入到build.log .ninja_log,其中,ninja_log是ninja编译过程中产生的日志的输入。build.log 则是编译界面的日志重定向输入。当界面日志所产生参数并不方便了解当前编译信息,我们需要通过修改编译器输出参数来更好的了解编译过程。
build/toolchain/gcc_toolchain.gni文件里为编译相关信息。在asm、cc 等函数中增加日志输出,ninja日志输出通过description 标识来输出,command 为执行命令
description 增加 $command 之后build.log日志中将会记录整个编译过程中编译信息,
通过当前日志我们可以看到编译过程中的依赖关系。
为跟能明确方便了解其中的编译关系,我们可以通过提取命令的方式进行编译
编译helloworld.o文件
编译成执行文件
当然其中的依赖关系记录在对应的rsp 文件中。编译的时候需要通过cp 命令复制出来
通过编译之后,生成对应arm 可以使用helloworld 执行文件。
总结
musl是openharmony 编译的基础,当然如何通过gn + ninja + llvm + clang + musl 搭建独立的框架用于三方库的管理这才是比较有意义的活。有感兴趣的大牛可以一起参与整理一个。
666
期待大佬强强联手
牛叉,赞起!