1. 编译相关
1.1. bp makefile通用规则
编译规则:
- bp 可以引用bp定义的module
- bp不能引用mk定义的module
- mk可以引用mk和bp定义的module
传统的写法下, bp中不能引用外部的make定义的变量
可以借助原生文件的写法, 在soong_config.mk中引用mk文件
build/core/soong_config.mk
–include miui/build/soong/import_miui_soong_vars.mk
在mk文件中可以加bp规则的hook
1 2 3 4
| ifeq (true,$(ENABLE_MIUI_DEBUGGING)) _adb_local_cflags := -UALLOW_ADBD_ROOT -DALLOW_ADBD_ROOT=1 -DALLOW_ADBD_DISABLE_VERITY -DALLOW_ADBD_NO_AUTH $(call add_additional_soong_var, adbd_defaults, cflags, $(_adb_local_cflags)) endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| cc_defaults { name: "adbd_defaults", defaults: ["adb_defaults"],
cflags: ["-UADB_HOST", "-DADB_HOST=0"], ... }
cc_library { name: "libadbd", defaults: ["adbd_defaults", "host_adbd_supported"], recovery_available: true, ... }
|
参照上述写法, 可以在bp中引用外部的mk变量
bp中的required规则可以无视上述规则. 即bp可以required mk定义的module
1.2. recovery bp相关编译规则
在androidq上新增了recovery_available
和recovery
变量
定义了recovery_available
后, 如果目标需要被recovery引用(主系统也需要用), 需要添加 recovery_available:true
如果目标只是给recovery用的可以添加recovery:true
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| cc_library { name: "libadbd", defaults: ["adbd_defaults", "host_adbd_supported"], recovery_available: true, ... }
cc_binary { name: "fastbootd", defaults: ["fastboot_defaults"],
recovery: true, ... shared_libs: [ ... "libadbd", "libasyncio", ], }
|
定义recovery_available
的module可以直接被引用, 如编译fastbootd时, 指定shared_libs
可以直接引用libadbd
如果不能直接引用的, 如required规则, 则需要添加.recovery
后缀, 而定义了recovery
的module则不需要添加.recovery
后缀
如binary
不能被直接引用, 可以被required规则引用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| cc_binary { name: "recovery", recovery: true, ... required: [ ... "mke2fs.recovery", "recovery_deps", ], }
cc_binary { name: "mke2fs", host_supported: true, recovery_available: true, defaults: ["e2fsprogs-defaults"], ... }
|
或者可以被PRODUCT_PACKAGES引用
1 2 3 4 5 6
| PRODUCT_PACKAGES += \ adbd.recovery \ android.hardware.health@2.0-impl-default.recovery \ cgroups.recovery.json \ charger.recovery \ init_second_stage.recovery \
|
被PRODUCT_PACKAGES
引用后, 在生成recoveryimage时会拷贝对应的module放到对应位置的module path下