Android系统编译,排除部分文件夹,不去包含其目录下的Android.mk

芯片厂商提供的android系统的SDK中分为三部分:android系统源码,kernel源码,boot源码,interface源码.

project:

            |

            ——android

            ——kernel

            ——boot

            ——interface

如果要形成完整的镜像,要分别编译个部分,之后将其生成文件复制到android的out目录,非常繁琐。经过对比研究,决定自己添加脚本,方便整体编译。

project:

            |

            ——android

                    |

                    ——vendor

                            |

                              ——brand

                                        |

                                        ——kernel

                                        ——boot

                                        ——interface



但是当把interface代码整合到android源码的vendor目录下,发生以下情况:

单独编译kernel源码     ok;

单独编译boot源码       ok;

单独编译interface源码     ok;

单独编译android源码       er;


经过排查发现,android系统在编译时回去遍历包含所有子目录下的Android.mk文件,正好interface源码中包含Android.mk文件,正好interface中的部分库和android源码中的定义是冲突的。

删除interface源码,整体编译         ok;

分析冲突发生的原因:

interface源码的编译,完全依赖于Makefile,Android.mk目前根本用不到。之所以这样是因为芯片厂商是在另一款芯片的SDK的基础上上修改而来,但是没有清理多余文件。

处于以下目的:

方便其他工程师使用,必须可以整体编译;

芯片厂商的结构虽然很乱,但是不能作太多修改,防止后续他们弥补过失,自己太被动;

于是考虑在编译Android时不去包含interface目录下的Android.mk

回想Android系统的正常编译应该回去遍历加载所有目录下的Android.mk,找到对应的地方,作减法。


ifneq ($(dont_bother),true)
#
# Include all of the makefiles in the system
#


# Can't use first-makefiles-under here because
# --mindepth=2 makes the prunes not work.
subdir_makefiles := \
$(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git $(subdirs) Android.mk)

$(foreach mk, $(subdir_makefiles), $(info including $(mk) ...)$(eval include $(mk)))

原来系统中是有现成的排除语法可用,于是:

subdir_makefiles := \
$(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git  --prune=interface $(subdirs) Android.mk)

$(foreach mk, $(subdir_makefiles), $(info including $(mk) ...)$(eval include $(mk)))

这样系统在编译时便不会去加载interface目录下的Android.mk




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值