文档内容拷贝自:
codebase_host/yunhal/opendoc/zh/user_guide/compile_system.md
联系人:赤土
版本: commit-id(919ecf862c7969563619020f7444b442164cf34b
)
本节主要描述YunOS系统编译方法,包括整体编译、模块编译、编译清理等。
XMAKE编译主要分以下几个步骤:
在编译之前,需要选择编译产品、编译类型、编译参数等。一套源码,configure完成之后,下次编译如果不修改编译参数等信息,无需再次执行该操作。
为方便使用,xmake对现有产品提供了一个默认初始化脚本xmake.sh,执行命令:cd xmake && xmake.sh
然后选择对应产品。
如果默认脚本命令不能满足要求,也可以自己选取相应选项执行:cd xmake && ./configure --with-platform=XMAKE_PLATFORM --with-product=XMAKE_PRODUCT --with-board=XMAKE_BOARD --with-buildtype=XMAKE_BUILD_TYPE
上述四个选项为必选项,分别表示为:
XMAKE_PLATFORM
表示平台,如 phone、tvXMAKE_PRODUCT
表示平台下面的产品,如 9832XMAKE_BOARD
表示board相关配置信息,如 sprd、MTKXMAKE_BUILD_TYPE
表示编译类型,可以选择eng|user|userdebug除了上述的一些configure选项意外,xmake还提供了其他的一些功能选项:
--enable-debug
:是否开启debug信息--enable-kernel
:是否编译kernel--enable-ccache
:是否打开ccache功能--enable-distcc
:是否开启分布式(需要搭建分布式环境)--enable-hostgcc
: 使用服务器自带gcc(默认使用xmake预置gcc,适用于某些高版本服务器)此部分主要是export出一些宏给xmake使用,以及给出一些辅助函数方便操作。此部分操作也不用每次执行编译命令行前执行,只需要在configure完成后执行,或者新打开一个终端后执行。
执行命令:source xmake/xdirs
该操作执行以后,就可以执行后续的编译命令了。
当然,环境初始化操作执行以后,会带来一些辅助命令行:
xroot
:进入源码根目录xout
:进入输出目录xtree
:查看输出目录tree,参数为数字。如 xtree 8xrm
:删除输出目录上面两步操作执行完成后,我们接下来就可以执行编译命令了。xmake提供了xmake
、make
、mm
、mma
等操作命令。
在介绍具体命令行之前,先说明下大模块、小模块的概念。
大模块: 指的是一个大的功能模块,即product.mk里XMAKE_PRODUCT_PKGS
中的模块名,如 v8,apidemo-js等。(与xmake3.0里xmake.conf定义模块名相同)
小模块: yunos.mk里定义的每个独立模块,模块名即LOCAL_MODULE
名。
xmake
可以用于整体编译,以及大模块编译,支持tab键补全。
make
源码根目录下执行,可以用于整体编译,以及小模块编译,不支持tab补全。
mm
cd到目标所在目录下执行,不编译依赖模块,依赖缺失会报错。
mma
cd到目标所在目录下执行,如果依赖没有生成,会重新生成依赖目标。
下面给出一些具体的编译命令:
整体编译命令
xmake
也可以使用
make [option]
option支持-k -j等make编译参数。
大模块编译
xmake xxx
小模块编译命令
make [option] xxx
清除编译结果命令
整体清除xmake clean 或make clean
大模块清除xmake clean-xxx 或 cd xxx && mm clean
小模块清除make clean-xxx
xmake的编译结果,默认生成在源码的out目录。
编译结果目录结构为:out/ platforms /{ XMAKE_PROJECT}
XMAKE_PROJECT
是由产品信息拼接而成的,具体为:${XMAKE_PLATFORM}.${XMAKE_PRODUCT}.${XMAKE_BOARD}.${XMAKE_BUILD_TYPE}.${XMAKE_TARGET}
host输出目录:out/${XMAKE_PROJECT}/host
target输出目录:out/${XMAKE_PROJECT}/target
out/${XMAKE_PROJECT}/target/rootfs
–>安装到target的文件out/${XMAKE_PROJECT/target/symbols
–>符号信息out/${XMAKE_PROJECT}/target/obj
–>编译中间文件