Add prebuilt ABI checker support to soong
This commit adds prebuilt ABI checker support to soong so that
`cc_prebuilt_library_shared` and `cc_prebuilt_binary` are checked.
To opt out the check, add `check_elf_files: false` to your module.
Bug: 119086738
Test: lunch aosp_sailfish-userdebug && CHECK_ELF_FILES=true make check-elf-files
Change-Id: Idb4290c8f48aad545894a7ae718a537cbf832233
diff --git a/cc/androidmk.go b/cc/androidmk.go
index fa0017d..0e4245e 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -362,3 +362,40 @@
fmt.Fprintln(w, "LOCAL_NO_NOTICE_FILE := true")
})
}
+
+func (p *prebuiltLinker) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
+ ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) {
+ if p.properties.Check_elf_files != nil {
+ fmt.Fprintln(w, "LOCAL_CHECK_ELF_FILES :=", *p.properties.Check_elf_files)
+ } else {
+ // soong_cc_prebuilt.mk does not include check_elf_file.mk by default
+ // because cc_library_shared and cc_binary use soong_cc_prebuilt.mk as well.
+ // In order to turn on prebuilt ABI checker, set `LOCAL_CHECK_ELF_FILES` to
+ // true if `p.properties.Check_elf_files` is not specified.
+ fmt.Fprintln(w, "LOCAL_CHECK_ELF_FILES := true")
+ }
+ })
+}
+
+func (p *prebuiltLibraryLinker) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
+ ctx.subAndroidMk(ret, p.libraryDecorator)
+ if p.shared() {
+ ctx.subAndroidMk(ret, &p.prebuiltLinker)
+ androidMkWriteAllowUndefinedSymbols(p.baseLinker, ret)
+ }
+}
+
+func (p *prebuiltBinaryLinker) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) {
+ ctx.subAndroidMk(ret, p.binaryDecorator)
+ ctx.subAndroidMk(ret, &p.prebuiltLinker)
+ androidMkWriteAllowUndefinedSymbols(p.baseLinker, ret)
+}
+
+func androidMkWriteAllowUndefinedSymbols(linker *baseLinker, ret *android.AndroidMkData) {
+ ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) {
+ allow := linker.Properties.Allow_undefined_symbols
+ if allow != nil {
+ fmt.Fprintln(w, "LOCAL_ALLOW_UNDEFINED_SYMBOLS :=", *allow)
+ }
+ })
+}