summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-08-23 07:32:53 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-08-23 07:32:53 +0000
commiteddedb3ed85564b121409b9c5e0735fd6aca3450 (patch)
tree9d095ad56f4aed74389e1c29aa5a0007f57832f0
parentcc471442721cf8acc0c80b4e730934572924f34a (diff)
parentf95f1746bb6b07594da6b1ac0cd43d3a1f74cd3d (diff)
downloaddevelopment-eddedb3ed85564b121409b9c5e0735fd6aca3450.tar.gz
release-request-cff6d9b6-a564-4d17-99cb-c2d0bb282758-for-git_oc-mr1-release-4293817 snap-temp-L12800000095933585
Change-Id: Ia19341b2bf226e8df9350bd8276183136946bbaa
-rw-r--r--vndk/tools/definition-tool/assets/insight/insight-data.js15
-rw-r--r--vndk/tools/definition-tool/assets/insight/insight.css6
-rw-r--r--vndk/tools/definition-tool/assets/insight/insight.js10
-rw-r--r--vndk/tools/definition-tool/datasets/eligible-list-o-mr1-release.csv601
-rw-r--r--vndk/tools/definition-tool/datasets/eligible-list-o-release.csv162
-rw-r--r--vndk/tools/definition-tool/datasets/minimum_tag_file.csv5
-rwxr-xr-xvndk/tools/definition-tool/tests/ndk_toolchain.py202
-rw-r--r--vndk/tools/definition-tool/tests/targets.py121
-rwxr-xr-xvndk/tools/definition-tool/tests/test_elf_linker.py103
-rwxr-xr-xvndk/tools/definition-tool/tests/test_elfdump.py10
-rwxr-xr-xvndk/tools/definition-tool/tests/test_module_info.py7
-rwxr-xr-xvndk/tools/definition-tool/tools/update_dataset.py110
-rwxr-xr-xvndk/tools/definition-tool/vndk_definition_tool.py386
13 files changed, 1297 insertions, 441 deletions
diff --git a/vndk/tools/definition-tool/assets/insight/insight-data.js b/vndk/tools/definition-tool/assets/insight/insight-data.js
index 9ef7a659c..65bec05bf 100644
--- a/vndk/tools/definition-tool/assets/insight/insight-data.js
+++ b/vndk/tools/definition-tool/assets/insight/insight-data.js
@@ -8,14 +8,17 @@
'/system/lib64/libdl.so',
'll-ndk',
'hl-ndk',
+ 'bionic/libc',
+ 'bionic/libm',
+ 'bionic/libdl',
];
var mods = [
- [0, 32, [6], [[1, 2]], []],
- [1, 32, [6], [], [0]],
- [2, 32, [6], [], [0]],
- [3, 64, [6], [[5], [4]], []],
- [4, 64, [7], [[5]], [3]],
- [5, 64, [7], [], [3, 4]],
+ [0, 32, [6], [[1, 2]], [], [8]],
+ [1, 32, [6], [], [0], [9]],
+ [2, 32, [6], [], [0], [10]],
+ [3, 64, [6], [[5], [4]], [], [8]],
+ [4, 64, [7], [[5]], [3], [9]],
+ [5, 64, [7], [], [3, 4], [9, 10]],
];
insight.init(document, strs, mods);
})();
diff --git a/vndk/tools/definition-tool/assets/insight/insight.css b/vndk/tools/definition-tool/assets/insight/insight.css
index 7cff186d6..1c5f709e2 100644
--- a/vndk/tools/definition-tool/assets/insight/insight.css
+++ b/vndk/tools/definition-tool/assets/insight/insight.css
@@ -101,3 +101,9 @@ a:active {
background-color: #fffff0;
transition: background-color 800ms ease;
}
+
+#module_tbody p.module_src_dir {
+ font-family: monospace;
+ font-size: 80%;
+ color: #aaaaaa;
+}
diff --git a/vndk/tools/definition-tool/assets/insight/insight.js b/vndk/tools/definition-tool/assets/insight/insight.js
index 5e08207c9..cd199a8d0 100644
--- a/vndk/tools/definition-tool/assets/insight/insight.js
+++ b/vndk/tools/definition-tool/assets/insight/insight.js
@@ -62,6 +62,7 @@
this.tagIds = new Set(modData[2]);
this.deps = modData[3];
this.users = modData[4];
+ this.srcDirs = modData[5].map(function (x) { return strsData[x]; });
[this.numDirectDeps, this.numIndirectDeps] = countDeps(this.deps);
this.numUsers = this.users.length;
@@ -103,7 +104,14 @@
}
Module.prototype.createModulePathTdDom = function (parent) {
- parent.appendChild(domNewElem('td', this.createModuleLinkDom(this)));
+ let domTd = domNewElem('td');
+ domTd.appendChild(domNewElem('p', this.createModuleLinkDom(this)));
+ for (let dir of this.srcDirs) {
+ let domP = domNewElem('p', 'source: ' + dir);
+ domP.setAttribute('class', 'module_src_dir');
+ domTd.appendChild(domP);
+ }
+ parent.appendChild(domTd);
}
Module.prototype.createTagsTdDom = function (parent) {
diff --git a/vndk/tools/definition-tool/datasets/eligible-list-o-mr1-release.csv b/vndk/tools/definition-tool/datasets/eligible-list-o-mr1-release.csv
new file mode 100644
index 000000000..7fa90fe09
--- /dev/null
+++ b/vndk/tools/definition-tool/datasets/eligible-list-o-mr1-release.csv
@@ -0,0 +1,601 @@
+Path,Tag,v3.7
+/system/${LIB}/android.frameworks.displayservice@1.0.so,VNDK,
+/system/${LIB}/android.frameworks.schedulerservice@1.0.so,VNDK,
+/system/${LIB}/android.frameworks.sensorservice@1.0.so,VNDK,
+/system/${LIB}/android.frameworks.vr.composer@1.0.so,VNDK,
+/system/${LIB}/android.hardware.audio.common@2.0-util.so,VNDK,
+/system/${LIB}/android.hardware.audio.common@2.0.so,VNDK,
+/system/${LIB}/android.hardware.audio.effect@2.0.so,VNDK,
+/system/${LIB}/android.hardware.audio@2.0.so,VNDK,
+/system/${LIB}/android.hardware.automotive.evs@1.0.so,VNDK,
+/system/${LIB}/android.hardware.automotive.vehicle@2.0.so,VNDK,
+/system/${LIB}/android.hardware.automotive.vehicle@2.1.so,VNDK,
+/system/${LIB}/android.hardware.biometrics.fingerprint@2.1.so,VNDK,
+/system/${LIB}/android.hardware.bluetooth@1.0.so,VNDK,
+/system/${LIB}/android.hardware.boot@1.0.so,VNDK,
+/system/${LIB}/android.hardware.broadcastradio@1.0.so,VNDK,
+/system/${LIB}/android.hardware.broadcastradio@1.1.so,VNDK,
+/system/${LIB}/android.hardware.camera.common@1.0.so,VNDK,
+/system/${LIB}/android.hardware.camera.device@1.0.so,VNDK,
+/system/${LIB}/android.hardware.camera.device@3.2.so,VNDK,
+/system/${LIB}/android.hardware.camera.metadata@3.2.so,VNDK,
+/system/${LIB}/android.hardware.camera.provider@2.4.so,VNDK,
+/system/${LIB}/android.hardware.cas.native@1.0.so,VNDK,
+/system/${LIB}/android.hardware.cas@1.0.so,VNDK,
+/system/${LIB}/android.hardware.configstore-utils.so,VNDK,
+/system/${LIB}/android.hardware.configstore@1.0.so,VNDK,
+/system/${LIB}/android.hardware.configstore@1.1.so,VNDK,
+/system/${LIB}/android.hardware.contexthub@1.0.so,VNDK,
+/system/${LIB}/android.hardware.drm@1.0.so,VNDK,
+/system/${LIB}/android.hardware.dumpstate@1.0.so,VNDK,
+/system/${LIB}/android.hardware.gatekeeper@1.0.so,VNDK,
+/system/${LIB}/android.hardware.gnss@1.0.so,VNDK,
+/system/${LIB}/android.hardware.graphics.allocator@2.0.so,VNDK-SP,
+/system/${LIB}/android.hardware.graphics.bufferqueue@1.0.so,VNDK,
+/system/${LIB}/android.hardware.graphics.common@1.0.so,VNDK-SP,
+/system/${LIB}/android.hardware.graphics.composer@2.1.so,VNDK,
+/system/${LIB}/android.hardware.graphics.mapper@2.0.so,VNDK-SP,
+/system/${LIB}/android.hardware.health@1.0.so,VNDK,
+/system/${LIB}/android.hardware.ir@1.0.so,VNDK,
+/system/${LIB}/android.hardware.keymaster@3.0.so,VNDK,
+/system/${LIB}/android.hardware.light@2.0.so,VNDK,
+/system/${LIB}/android.hardware.media.omx@1.0.so,VNDK,
+/system/${LIB}/android.hardware.media@1.0.so,VNDK,
+/system/${LIB}/android.hardware.memtrack@1.0.so,VNDK,
+/system/${LIB}/android.hardware.neuralnetworks@1.0.so,VNDK,
+/system/${LIB}/android.hardware.nfc@1.0.so,VNDK,
+/system/${LIB}/android.hardware.oemlock@1.0.so,VNDK,
+/system/${LIB}/android.hardware.power@1.0.so,VNDK,
+/system/${LIB}/android.hardware.power@1.1.so,VNDK,
+/system/${LIB}/android.hardware.radio.deprecated@1.0.so,VNDK,
+/system/${LIB}/android.hardware.radio@1.0.so,VNDK,
+/system/${LIB}/android.hardware.radio@1.1.so,VNDK,
+/system/${LIB}/android.hardware.renderscript@1.0.so,VNDK-SP,
+/system/${LIB}/android.hardware.sensors@1.0.so,VNDK,
+/system/${LIB}/android.hardware.soundtrigger@2.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.bar@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.baz@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.expression@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.extension.light@2.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.foo@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.hash@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.inheritance@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.libhwbinder@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.memory@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.msgq@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.multithread@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.pointer@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tetheroffload.config@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tetheroffload.control@1.0.so,VNDK,
+/system/${LIB}/android.hardware.thermal@1.0.so,VNDK,
+/system/${LIB}/android.hardware.thermal@1.1.so,VNDK,
+/system/${LIB}/android.hardware.tv.cec@1.0.so,VNDK,
+/system/${LIB}/android.hardware.tv.input@1.0.so,VNDK,
+/system/${LIB}/android.hardware.usb@1.0.so,VNDK,
+/system/${LIB}/android.hardware.usb@1.1.so,VNDK,
+/system/${LIB}/android.hardware.vibrator@1.0.so,VNDK,
+/system/${LIB}/android.hardware.vibrator@1.1.so,VNDK,
+/system/${LIB}/android.hardware.vr@1.0.so,VNDK,
+/system/${LIB}/android.hardware.weaver@1.0.so,VNDK,
+/system/${LIB}/android.hardware.wifi.offload@1.0.so,VNDK,
+/system/${LIB}/android.hardware.wifi.supplicant@1.0.so,VNDK,
+/system/${LIB}/android.hardware.wifi@1.0.so,VNDK,
+/system/${LIB}/android.hardware.wifi@1.1.so,VNDK,
+/system/${LIB}/android.hidl.allocator@1.0.so,VNDK,
+/system/${LIB}/android.hidl.memory@1.0.so,VNDK-SP,
+/system/${LIB}/android.hidl.token@1.0-utils.so,VNDK,
+/system/${LIB}/android.hidl.token@1.0.so,VNDK,
+/system/${LIB}/android.system.net.netd@1.0.so,VNDK,
+/system/${LIB}/android.system.wifi.keystore@1.0.so,VNDK,
+/system/${LIB}/drm/libfwdlockengine.so,FWK-ONLY,
+/system/${LIB}/hw/audio.a2dp.default.so,FWK-ONLY,
+/system/${LIB}/hw/bluetooth.default.so,FWK-ONLY,
+/system/${LIB}/hw/keystore.default.so,FWK-ONLY,
+/system/${LIB}/ld-android.so,LL-NDK-Indirect,
+/system/${LIB}/libEGL.so,SP-NDK,
+/system/${LIB}/libETC1.so,FWK-ONLY,
+/system/${LIB}/libFFTEm.so,FWK-ONLY,
+/system/${LIB}/libGLESv1_CM.so,SP-NDK,
+/system/${LIB}/libGLESv2.so,SP-NDK,
+/system/${LIB}/libGLESv3.so,SP-NDK,
+/system/${LIB}/libLLVM.so,FWK-ONLY,
+/system/${LIB}/libOpenMAXAL.so,FWK-ONLY,
+/system/${LIB}/libOpenSLES.so,FWK-ONLY,
+/system/${LIB}/libRS.so,FWK-ONLY,
+/system/${LIB}/libRSCpuRef.so,VNDK-SP,
+/system/${LIB}/libRSDriver.so,VNDK-SP,
+/system/${LIB}/libRS_internal.so,VNDK-SP,
+/system/${LIB}/libRScpp.so,FWK-ONLY,
+/system/${LIB}/libWnnEngDic.so,FWK-ONLY,
+/system/${LIB}/libWnnJpnDic.so,FWK-ONLY,
+/system/${LIB}/libaaudio.so,FWK-ONLY,
+/system/${LIB}/libandroid.so,FWK-ONLY,
+/system/${LIB}/libandroid_net.so,LL-NDK,
+/system/${LIB}/libandroid_runtime.so,FWK-ONLY,
+/system/${LIB}/libandroid_servers.so,FWK-ONLY,
+/system/${LIB}/libandroidfw.so,FWK-ONLY,
+/system/${LIB}/libappfuse.so,FWK-ONLY,
+/system/${LIB}/libart-compiler.so,FWK-ONLY,
+/system/${LIB}/libart-dexlayout.so,FWK-ONLY,
+/system/${LIB}/libart-disassembler.so,FWK-ONLY,
+/system/${LIB}/libart.so,FWK-ONLY,
+/system/${LIB}/libaudioclient.so,FWK-ONLY,
+/system/${LIB}/libaudioeffect_jni.so,FWK-ONLY,
+/system/${LIB}/libaudioflinger.so,FWK-ONLY,
+/system/${LIB}/libaudiohal.so,FWK-ONLY,
+/system/${LIB}/libaudiomanager.so,FWK-ONLY,
+/system/${LIB}/libaudiopolicyenginedefault.so,FWK-ONLY,
+/system/${LIB}/libaudiopolicymanager.so,FWK-ONLY,
+/system/${LIB}/libaudiopolicymanagerdefault.so,FWK-ONLY,
+/system/${LIB}/libaudiopolicyservice.so,FWK-ONLY,
+/system/${LIB}/libaudioprocessing.so,FWK-ONLY,
+/system/${LIB}/libaudioroute.so,VNDK,
+/system/${LIB}/libaudiospdif.so,FWK-ONLY,
+/system/${LIB}/libaudioutils.so,VNDK,
+/system/${LIB}/libavservices_minijail.so,VNDK,
+/system/${LIB}/libbacktrace.so,VNDK-SP-Indirect,
+/system/${LIB}/libbase.so,VNDK-SP,
+/system/${LIB}/libbatteryservice.so,FWK-ONLY,
+/system/${LIB}/libbcc.so,FWK-ONLY,
+/system/${LIB}/libbcinfo.so,VNDK-SP,
+/system/${LIB}/libbinder.so,VNDK,
+/system/${LIB}/libbinderwrapper.so,FWK-ONLY,
+/system/${LIB}/libblas.so,VNDK-SP-Indirect-Private,
+/system/${LIB}/libbluetooth_jni.so,FWK-ONLY,
+/system/${LIB}/libbrillo-binder.so,FWK-ONLY,
+/system/${LIB}/libbrillo-stream.so,FWK-ONLY,
+/system/${LIB}/libbrillo.so,FWK-ONLY,
+/system/${LIB}/libc++.so,VNDK-SP,
+/system/${LIB}/libc.so,LL-NDK,
+/system/${LIB}/libc_malloc_debug.so,LL-NDK-Indirect,
+/system/${LIB}/libcamera2ndk.so,FWK-ONLY,
+/system/${LIB}/libcamera_client.so,FWK-ONLY,
+/system/${LIB}/libcamera_metadata.so,VNDK,
+/system/${LIB}/libcameraservice.so,FWK-ONLY,
+/system/${LIB}/libcap.so,VNDK,
+/system/${LIB}/libchrome.so,FWK-ONLY,
+/system/${LIB}/libclang_rt.ubsan_standalone-aarch64-android.so,VNDK,
+/system/${LIB}/libclang_rt.ubsan_standalone-arm-android.so,VNDK,
+/system/${LIB}/libclang_rt.ubsan_standalone-i686-android.so,VNDK,
+/system/${LIB}/libclang_rt.ubsan_standalone-mips-android.so,VNDK,
+/system/${LIB}/libclang_rt.ubsan_standalone-mips64-android.so,VNDK,
+/system/${LIB}/libclang_rt.ubsan_standalone-x86_64-android.so,VNDK,
+/system/${LIB}/libcompiler_rt.so,VNDK-SP-Indirect-Private,
+/system/${LIB}/libcrypto.so,VNDK,
+/system/${LIB}/libcrypto_utils.so,VNDK,
+/system/${LIB}/libcups.so,FWK-ONLY,
+/system/${LIB}/libcurl.so,VNDK,
+/system/${LIB}/libcutils.so,VNDK-SP,
+/system/${LIB}/libdebuggerd_client.so,FWK-ONLY,
+/system/${LIB}/libdefcontainer_jni.so,FWK-ONLY,
+/system/${LIB}/libdiskconfig.so,VNDK,
+/system/${LIB}/libdl.so,LL-NDK,
+/system/${LIB}/libdng_sdk.so,FWK-ONLY,
+/system/${LIB}/libdrmframework.so,FWK-ONLY,
+/system/${LIB}/libdrmframework_jni.so,FWK-ONLY,
+/system/${LIB}/libdumpstateaidl.so,FWK-ONLY,
+/system/${LIB}/libdumpstateutil.so,VNDK,
+/system/${LIB}/libevent.so,VNDK,
+/system/${LIB}/libexif.so,VNDK,
+/system/${LIB}/libexpat.so,VNDK,
+/system/${LIB}/libext2_blkid.so,FWK-ONLY,
+/system/${LIB}/libext2_com_err.so,FWK-ONLY,
+/system/${LIB}/libext2_e2p.so,FWK-ONLY,
+/system/${LIB}/libext2_quota.so,FWK-ONLY,
+/system/${LIB}/libext2_uuid.so,FWK-ONLY,
+/system/${LIB}/libext2fs.so,FWK-ONLY,
+/system/${LIB}/libext4_utils.so,FWK-ONLY,
+/system/${LIB}/libf2fs_sparseblock.so,FWK-ONLY,
+/system/${LIB}/libfilterfw.so,FWK-ONLY,
+/system/${LIB}/libfilterpack_imageproc.so,FWK-ONLY,
+/system/${LIB}/libfmq.so,VNDK,
+/system/${LIB}/libframesequence.so,FWK-ONLY,
+/system/${LIB}/libft2.so,FWK-ONLY-RS,
+/system/${LIB}/libgatekeeper.so,VNDK,
+/system/${LIB}/libgiftranscode.so,FWK-ONLY,
+/system/${LIB}/libgui.so,VNDK,
+/system/${LIB}/libhardware.so,VNDK-SP,
+/system/${LIB}/libhardware_legacy.so,VNDK,
+/system/${LIB}/libharfbuzz_ng.so,FWK-ONLY,
+/system/${LIB}/libhidcommand_jni.so,FWK-ONLY,
+/system/${LIB}/libhidl-gen-utils.so,FWK-ONLY,
+/system/${LIB}/libhidlbase.so,VNDK-SP,
+/system/${LIB}/libhidlmemory.so,VNDK-SP,
+/system/${LIB}/libhidltransport.so,VNDK-SP,
+/system/${LIB}/libhwbinder.so,VNDK-SP,
+/system/${LIB}/libhwui.so,FWK-ONLY,
+/system/${LIB}/libicui18n.so,VNDK,
+/system/${LIB}/libicuuc.so,VNDK,
+/system/${LIB}/libimg_utils.so,FWK-ONLY,
+/system/${LIB}/libincident.so,FWK-ONLY,
+/system/${LIB}/libinput.so,FWK-ONLY,
+/system/${LIB}/libinputflinger.so,FWK-ONLY,
+/system/${LIB}/libinputservice.so,FWK-ONLY,
+/system/${LIB}/libion.so,VNDK-SP,
+/system/${LIB}/libiperf.so,FWK-ONLY,
+/system/${LIB}/libiprouteutil.so,FWK-ONLY,
+/system/${LIB}/libjavacore.so,FWK-ONLY,
+/system/${LIB}/libjavacrypto.so,FWK-ONLY,
+/system/${LIB}/libjni_eglfence.so,FWK-ONLY,
+/system/${LIB}/libjni_filtershow_filters.so,FWK-ONLY,
+/system/${LIB}/libjni_jpegstream.so,FWK-ONLY,
+/system/${LIB}/libjni_jpegutil.so,FWK-ONLY,
+/system/${LIB}/libjni_latinime.so,FWK-ONLY,
+/system/${LIB}/libjni_pacprocessor.so,FWK-ONLY,
+/system/${LIB}/libjni_tinyplanet.so,FWK-ONLY,
+/system/${LIB}/libjnigraphics.so,FWK-ONLY,
+/system/${LIB}/libjpeg.so,VNDK,
+/system/${LIB}/libkeymaster_messages.so,VNDK,
+/system/${LIB}/libkeymaster_portable.so,VNDK,
+/system/${LIB}/libkeymaster_staging.so,VNDK,
+/system/${LIB}/libkeystore-engine.so,FWK-ONLY,
+/system/${LIB}/libkeystore_binder.so,FWK-ONLY,
+/system/${LIB}/libldacBT_abr.so,VNDK,
+/system/${LIB}/libldacBT_enc.so,VNDK,
+/system/${LIB}/liblog.so,LL-NDK,
+/system/${LIB}/liblogcat.so,FWK-ONLY,
+/system/${LIB}/liblogwrap.so,FWK-ONLY,
+/system/${LIB}/liblz4.so,VNDK,
+/system/${LIB}/liblzma.so,VNDK-SP-Indirect,
+/system/${LIB}/libm.so,LL-NDK,
+/system/${LIB}/libmdnssd.so,FWK-ONLY,
+/system/${LIB}/libmedia.so,FWK-ONLY,
+/system/${LIB}/libmedia_helper.so,VNDK,
+/system/${LIB}/libmedia_jni.so,FWK-ONLY,
+/system/${LIB}/libmedia_omx.so,VNDK,
+/system/${LIB}/libmediadrm.so,FWK-ONLY,
+/system/${LIB}/libmediaextractorservice.so,FWK-ONLY,
+/system/${LIB}/libmedialogservice.so,FWK-ONLY,
+/system/${LIB}/libmediametrics.so,FWK-ONLY,
+/system/${LIB}/libmediandk.so,FWK-ONLY-RS,
+/system/${LIB}/libmediautils.so,FWK-ONLY,
+/system/${LIB}/libmemtrack.so,VNDK,
+/system/${LIB}/libmemunreachable.so,FWK-ONLY,
+/system/${LIB}/libmetricslogger.so,FWK-ONLY,
+/system/${LIB}/libmidi.so,FWK-ONLY,
+/system/${LIB}/libminijail.so,VNDK,
+/system/${LIB}/libminikin.so,FWK-ONLY,
+/system/${LIB}/libmtp.so,FWK-ONLY,
+/system/${LIB}/libnativebridge.so,FWK-ONLY,
+/system/${LIB}/libnativehelper.so,FWK-ONLY,
+/system/${LIB}/libnativeloader.so,FWK-ONLY,
+/system/${LIB}/libnativewindow.so,SP-NDK,
+/system/${LIB}/libnbaio.so,FWK-ONLY,
+/system/${LIB}/libnetd_client.so,LL-NDK-Indirect,
+/system/${LIB}/libnetdaidl.so,FWK-ONLY,
+/system/${LIB}/libnetlink.so,FWK-ONLY,
+/system/${LIB}/libnetutils.so,VNDK,
+/system/${LIB}/libnl.so,VNDK,
+/system/${LIB}/libopenjdk.so,FWK-ONLY,
+/system/${LIB}/libopenjdkjvm.so,FWK-ONLY,
+/system/${LIB}/libopenjdkjvmti.so,FWK-ONLY,
+/system/${LIB}/libopus.so,VNDK,
+/system/${LIB}/libpac.so,FWK-ONLY,
+/system/${LIB}/libpackagelistparser.so,FWK-ONLY,
+/system/${LIB}/libpagemap.so,VNDK,
+/system/${LIB}/libpcap.so,FWK-ONLY,
+/system/${LIB}/libpcre2.so,VNDK,
+/system/${LIB}/libpcrecpp.so,FWK-ONLY,
+/system/${LIB}/libpdfium.so,FWK-ONLY,
+/system/${LIB}/libpiex.so,VNDK,
+/system/${LIB}/libpixelflinger.so,FWK-ONLY,
+/system/${LIB}/libpng.so,VNDK,
+/system/${LIB}/libpower.so,VNDK,
+/system/${LIB}/libpowermanager.so,FWK-ONLY,
+/system/${LIB}/libprintspooler_jni.so,FWK-ONLY,
+/system/${LIB}/libprocessgroup.so,FWK-ONLY,
+/system/${LIB}/libprocinfo.so,VNDK,
+/system/${LIB}/libprotobuf-cpp-full.so,VNDK,
+/system/${LIB}/libprotobuf-cpp-lite.so,VNDK,
+/system/${LIB}/libradio_metadata.so,VNDK,
+/system/${LIB}/librs_jni.so,FWK-ONLY,
+/system/${LIB}/librtp_jni.so,FWK-ONLY,
+/system/${LIB}/libschedulerservicehidl.so,FWK-ONLY,
+/system/${LIB}/libselinux.so,FWK-ONLY,
+/system/${LIB}/libsensor.so,FWK-ONLY,
+/system/${LIB}/libsensorservice.so,FWK-ONLY,
+/system/${LIB}/libsensorservicehidl.so,FWK-ONLY,
+/system/${LIB}/libservices.so,FWK-ONLY,
+/system/${LIB}/libserviceutility.so,FWK-ONLY,
+/system/${LIB}/libsigchain.so,FWK-ONLY,
+/system/${LIB}/libskia.so,FWK-ONLY,
+/system/${LIB}/libsoftkeymaster.so,FWK-ONLY,
+/system/${LIB}/libsoftkeymasterdevice.so,VNDK,
+/system/${LIB}/libsonic.so,FWK-ONLY,
+/system/${LIB}/libsonivox.so,FWK-ONLY,
+/system/${LIB}/libsoundpool.so,FWK-ONLY,
+/system/${LIB}/libsoundtrigger.so,FWK-ONLY,
+/system/${LIB}/libsoundtriggerservice.so,FWK-ONLY,
+/system/${LIB}/libsparse.so,FWK-ONLY,
+/system/${LIB}/libspeexresampler.so,VNDK,
+/system/${LIB}/libsqlite.so,VNDK,
+/system/${LIB}/libssl.so,VNDK,
+/system/${LIB}/libstagefright.so,FWK-ONLY,
+/system/${LIB}/libstagefright_amrnb_common.so,VNDK,
+/system/${LIB}/libstagefright_enc_common.so,VNDK,
+/system/${LIB}/libstagefright_flacdec.so,VNDK,
+/system/${LIB}/libstagefright_foundation.so,VNDK,
+/system/${LIB}/libstagefright_http_support.so,FWK-ONLY,
+/system/${LIB}/libstagefright_omx.so,VNDK,
+/system/${LIB}/libstagefright_soft_aacdec.so,VNDK,
+/system/${LIB}/libstagefright_soft_aacenc.so,VNDK,
+/system/${LIB}/libstagefright_soft_amrdec.so,VNDK,
+/system/${LIB}/libstagefright_soft_amrnbenc.so,VNDK,
+/system/${LIB}/libstagefright_soft_amrwbenc.so,VNDK,
+/system/${LIB}/libstagefright_soft_avcdec.so,VNDK,
+/system/${LIB}/libstagefright_soft_avcenc.so,VNDK,
+/system/${LIB}/libstagefright_soft_flacdec.so,VNDK,
+/system/${LIB}/libstagefright_soft_flacenc.so,VNDK,
+/system/${LIB}/libstagefright_soft_g711dec.so,VNDK,
+/system/${LIB}/libstagefright_soft_gsmdec.so,VNDK,
+/system/${LIB}/libstagefright_soft_hevcdec.so,VNDK,
+/system/${LIB}/libstagefright_soft_mp3dec.so,VNDK,
+/system/${LIB}/libstagefright_soft_mpeg2dec.so,VNDK,
+/system/${LIB}/libstagefright_soft_mpeg4dec.so,VNDK,
+/system/${LIB}/libstagefright_soft_mpeg4enc.so,VNDK,
+/system/${LIB}/libstagefright_soft_opusdec.so,VNDK,
+/system/${LIB}/libstagefright_soft_rawdec.so,VNDK,
+/system/${LIB}/libstagefright_soft_vorbisdec.so,VNDK,
+/system/${LIB}/libstagefright_soft_vpxdec.so,VNDK,
+/system/${LIB}/libstagefright_soft_vpxenc.so,VNDK,
+/system/${LIB}/libstagefright_xmlparser.so,VNDK,
+/system/${LIB}/libstdc++.so,LL-NDK,
+/system/${LIB}/libsurfaceflinger.so,FWK-ONLY,
+/system/${LIB}/libsurfaceflinger_ddmconnection.so,FWK-ONLY,
+/system/${LIB}/libsuspend.so,VNDK,
+/system/${LIB}/libsync.so,SP-NDK,
+/system/${LIB}/libsysutils.so,VNDK,
+/system/${LIB}/libtextclassifier.so,FWK-ONLY,
+/system/${LIB}/libtinyalsa.so,VNDK,
+/system/${LIB}/libtinyxml2.so,VNDK,
+/system/${LIB}/libui.so,VNDK,
+/system/${LIB}/libunwind.so,VNDK-SP-Indirect,
+/system/${LIB}/libunwindstack.so,VNDK,
+/system/${LIB}/libusbhost.so,VNDK,
+/system/${LIB}/libutils.so,VNDK-SP,
+/system/${LIB}/libvintf.so,FWK-ONLY,
+/system/${LIB}/libvixl-arm.so,VNDK,
+/system/${LIB}/libvixl-arm64.so,VNDK,
+/system/${LIB}/libvndksupport.so,LL-NDK,
+/system/${LIB}/libvorbisidec.so,VNDK,
+/system/${LIB}/libvulkan.so,SP-NDK,
+/system/${LIB}/libwebviewchromium_loader.so,FWK-ONLY,
+/system/${LIB}/libwebviewchromium_plat_support.so,FWK-ONLY,
+/system/${LIB}/libwfds.so,FWK-ONLY,
+/system/${LIB}/libwifi-service.so,FWK-ONLY,
+/system/${LIB}/libwifi-system-iface.so,VNDK,
+/system/${LIB}/libwifi-system.so,FWK-ONLY,
+/system/${LIB}/libwifikeystorehal.so,FWK-ONLY,
+/system/${LIB}/libwilhelm.so,FWK-ONLY,
+/system/${LIB}/libwnndict.so,FWK-ONLY,
+/system/${LIB}/libxml2.so,VNDK,
+/system/${LIB}/libyuv.so,VNDK,
+/system/${LIB}/libz.so,LL-NDK-Indirect,
+/system/${LIB}/libziparchive.so,VNDK,
+/system/${LIB}/tests.vendor@1.0.so,VNDK,
+/system/${LIB}/tests.vendor@1.1.so,VNDK,
+/system/${LIB}/vndk-sp/android.hardware.graphics.allocator@2.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/android.hardware.graphics.common@1.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/android.hardware.graphics.mapper@2.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/android.hardware.renderscript@1.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/android.hidl.memory@1.0-impl.so,VNDK-SP-Indirect-Private,
+/system/${LIB}/vndk-sp/android.hidl.memory@1.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libRS.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libRSCpuRef.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libRSDriver.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libRS_internal.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libbacktrace.so,VNDK-SP-Indirect,
+/system/${LIB}/vndk-sp/libbase.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libbcinfo.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libblas.so,VNDK-SP-Indirect-Private,
+/system/${LIB}/vndk-sp/libc++.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libcompiler_rt.so,VNDK-SP-Indirect-Private,
+/system/${LIB}/vndk-sp/libcutils.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libhardware.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libhidlbase.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libhidlmemory.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libhidltransport.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libhwbinder.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libion.so,VNDK-SP,
+/system/${LIB}/vndk-sp/liblzma.so,VNDK-SP-Indirect,
+/system/${LIB}/vndk-sp/libunwind.so,VNDK-SP-Indirect,
+/system/${LIB}/vndk-sp/libunwindstack.so,VNDK-SP-Indirect,
+/system/${LIB}/vndk-sp/libutils.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libz.so,VNDK-SP,
+/system/${LIB}/vndk/android.frameworks.displayservice@1.0.so,VNDK,
+/system/${LIB}/vndk/android.frameworks.schedulerservice@1.0.so,VNDK,
+/system/${LIB}/vndk/android.frameworks.sensorservice@1.0.so,VNDK,
+/system/${LIB}/vndk/android.frameworks.vr.composer@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.audio.common@2.0-util.so,VNDK,
+/system/${LIB}/vndk/android.hardware.audio.common@2.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.audio.effect@2.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.audio@2.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.automotive.evs@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.automotive.vehicle@2.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.automotive.vehicle@2.1.so,VNDK,
+/system/${LIB}/vndk/android.hardware.biometrics.fingerprint@2.1.so,VNDK,
+/system/${LIB}/vndk/android.hardware.bluetooth@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.boot@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.broadcastradio@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.broadcastradio@1.1.so,VNDK,
+/system/${LIB}/vndk/android.hardware.camera.common@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.camera.device@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.camera.device@3.2.so,VNDK,
+/system/${LIB}/vndk/android.hardware.camera.metadata@3.2.so,VNDK,
+/system/${LIB}/vndk/android.hardware.camera.provider@2.4.so,VNDK,
+/system/${LIB}/vndk/android.hardware.cas.native@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.cas@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.configstore-utils.so,VNDK,
+/system/${LIB}/vndk/android.hardware.configstore@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.configstore@1.1.so,VNDK,
+/system/${LIB}/vndk/android.hardware.contexthub@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.drm@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.dumpstate@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.gatekeeper@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.gnss@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.graphics.bufferqueue@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.graphics.composer@2.1.so,VNDK,
+/system/${LIB}/vndk/android.hardware.health@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.ir@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.keymaster@3.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.light@2.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.media.omx@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.media@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.memtrack@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.neuralnetworks@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.nfc@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.oemlock@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.power@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.power@1.1.so,VNDK,
+/system/${LIB}/vndk/android.hardware.radio.deprecated@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.radio@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.radio@1.1.so,VNDK,
+/system/${LIB}/vndk/android.hardware.sensors@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.soundtrigger@2.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.bar@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.baz@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.expression@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.extension.light@2.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.foo@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.hash@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.inheritance@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.libhwbinder@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.memory@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.msgq@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.multithread@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tests.pointer@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tetheroffload.config@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tetheroffload.control@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.thermal@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.thermal@1.1.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tv.cec@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.tv.input@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.usb@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.usb@1.1.so,VNDK,
+/system/${LIB}/vndk/android.hardware.vibrator@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.vibrator@1.1.so,VNDK,
+/system/${LIB}/vndk/android.hardware.vr@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.weaver@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.wifi.offload@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.wifi.supplicant@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.wifi@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hardware.wifi@1.1.so,VNDK,
+/system/${LIB}/vndk/android.hidl.allocator@1.0.so,VNDK,
+/system/${LIB}/vndk/android.hidl.token@1.0-utils.so,VNDK,
+/system/${LIB}/vndk/android.hidl.token@1.0.so,VNDK,
+/system/${LIB}/vndk/android.system.net.netd@1.0.so,VNDK,
+/system/${LIB}/vndk/android.system.wifi.keystore@1.0.so,VNDK,
+/system/${LIB}/vndk/libEGL.so,SP-NDK,
+/system/${LIB}/vndk/libGLESv2.so,SP-NDK,
+/system/${LIB}/vndk/libaudioroute.so,VNDK,
+/system/${LIB}/vndk/libaudioutils.so,VNDK,
+/system/${LIB}/vndk/libavservices_minijail.so,VNDK,
+/system/${LIB}/vndk/libbinder.so,VNDK,
+/system/${LIB}/vndk/libcamera_metadata.so,VNDK,
+/system/${LIB}/vndk/libcap.so,VNDK,
+/system/${LIB}/vndk/libclang_rt.ubsan_standalone-aarch64-android.so,VNDK,
+/system/${LIB}/vndk/libclang_rt.ubsan_standalone-arm-android.so,VNDK,
+/system/${LIB}/vndk/libclang_rt.ubsan_standalone-i686-android.so,VNDK,
+/system/${LIB}/vndk/libclang_rt.ubsan_standalone-mips-android.so,VNDK,
+/system/${LIB}/vndk/libclang_rt.ubsan_standalone-mips64-android.so,VNDK,
+/system/${LIB}/vndk/libclang_rt.ubsan_standalone-x86_64-android.so,VNDK,
+/system/${LIB}/vndk/libcrypto.so,VNDK,
+/system/${LIB}/vndk/libcrypto_utils.so,VNDK,
+/system/${LIB}/vndk/libcurl.so,VNDK,
+/system/${LIB}/vndk/libdiskconfig.so,VNDK,
+/system/${LIB}/vndk/libdumpstateutil.so,VNDK,
+/system/${LIB}/vndk/libevent.so,VNDK,
+/system/${LIB}/vndk/libexif.so,VNDK,
+/system/${LIB}/vndk/libexpat.so,VNDK,
+/system/${LIB}/vndk/libfmq.so,VNDK,
+/system/${LIB}/vndk/libgatekeeper.so,VNDK,
+/system/${LIB}/vndk/libgui.so,VNDK,
+/system/${LIB}/vndk/libhardware_legacy.so,VNDK,
+/system/${LIB}/vndk/libicui18n.so,VNDK,
+/system/${LIB}/vndk/libicuuc.so,VNDK,
+/system/${LIB}/vndk/libjpeg.so,VNDK,
+/system/${LIB}/vndk/libkeymaster_messages.so,VNDK,
+/system/${LIB}/vndk/libkeymaster_portable.so,VNDK,
+/system/${LIB}/vndk/libkeymaster_staging.so,VNDK,
+/system/${LIB}/vndk/libldacBT_abr.so,VNDK,
+/system/${LIB}/vndk/libldacBT_enc.so,VNDK,
+/system/${LIB}/vndk/liblz4.so,VNDK,
+/system/${LIB}/vndk/libmedia_helper.so,VNDK,
+/system/${LIB}/vndk/libmedia_omx.so,VNDK,
+/system/${LIB}/vndk/libmemtrack.so,VNDK,
+/system/${LIB}/vndk/libminijail.so,VNDK,
+/system/${LIB}/vndk/libnetutils.so,VNDK,
+/system/${LIB}/vndk/libnl.so,VNDK,
+/system/${LIB}/vndk/libopus.so,VNDK,
+/system/${LIB}/vndk/libpagemap.so,VNDK,
+/system/${LIB}/vndk/libpcre2.so,VNDK,
+/system/${LIB}/vndk/libpiex.so,VNDK,
+/system/${LIB}/vndk/libpng.so,VNDK,
+/system/${LIB}/vndk/libpower.so,VNDK,
+/system/${LIB}/vndk/libprocinfo.so,VNDK,
+/system/${LIB}/vndk/libprotobuf-cpp-full.so,VNDK,
+/system/${LIB}/vndk/libprotobuf-cpp-lite.so,VNDK,
+/system/${LIB}/vndk/libradio_metadata.so,VNDK,
+/system/${LIB}/vndk/libsoftkeymasterdevice.so,VNDK,
+/system/${LIB}/vndk/libspeexresampler.so,VNDK,
+/system/${LIB}/vndk/libsqlite.so,VNDK,
+/system/${LIB}/vndk/libssl.so,VNDK,
+/system/${LIB}/vndk/libstagefright_amrnb_common.so,VNDK,
+/system/${LIB}/vndk/libstagefright_enc_common.so,VNDK,
+/system/${LIB}/vndk/libstagefright_flacdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_foundation.so,VNDK,
+/system/${LIB}/vndk/libstagefright_omx.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_aacdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_aacenc.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_amrdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_amrnbenc.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_amrwbenc.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_avcdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_avcenc.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_flacdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_flacenc.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_g711dec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_gsmdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_hevcdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_mp3dec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_mpeg2dec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_mpeg4dec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_mpeg4enc.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_opusdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_rawdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_vorbisdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_vpxdec.so,VNDK,
+/system/${LIB}/vndk/libstagefright_soft_vpxenc.so,VNDK,
+/system/${LIB}/vndk/libstagefright_xmlparser.so,VNDK,
+/system/${LIB}/vndk/libsuspend.so,VNDK,
+/system/${LIB}/vndk/libsync.so,SP-NDK,
+/system/${LIB}/vndk/libsysutils.so,VNDK,
+/system/${LIB}/vndk/libtinyalsa.so,VNDK,
+/system/${LIB}/vndk/libtinyxml2.so,VNDK,
+/system/${LIB}/vndk/libui.so,VNDK,
+/system/${LIB}/vndk/libusbhost.so,VNDK,
+/system/${LIB}/vndk/libvixl-arm.so,VNDK,
+/system/${LIB}/vndk/libvixl-arm64.so,VNDK,
+/system/${LIB}/vndk/libvorbisidec.so,VNDK,
+/system/${LIB}/vndk/libwifi-system-iface.so,VNDK,
+/system/${LIB}/vndk/libxml2.so,VNDK,
+/system/${LIB}/vndk/libyuv.so,VNDK,
+/system/${LIB}/vndk/libziparchive.so,VNDK,
+/system/${LIB}/vndk/tests.vendor@1.0.so,VNDK,
+/system/${LIB}/vndk/tests.vendor@1.1.so,VNDK,
+/vendor/${LIB}/libcld80211.so,VND-ONLY,
+/vendor/${LIB}/libeffects.so,VND-ONLY,
+/vendor/${LIB}/libhwc2on1adapter.so,VND-ONLY,
+/vendor/${LIB}/libnbaio_mono.so,VND-ONLY,
+/vendor/${LIB}/libreference-ril.so,VND-ONLY,
+/vendor/${LIB}/libril.so,VND-ONLY,
+/vendor/${LIB}/librilutils.so,VND-ONLY,
+/vendor/${LIB}/libtinycompress.so,VND-ONLY,
+/vendor/${LIB}/libwebrtc_audio_preprocessing.so,VND-ONLY,
+/vendor/${LIB}/soundfx/libaudiopreprocessing.so,VND-ONLY,
+/vendor/${LIB}/soundfx/libbundlewrapper.so,VND-ONLY,
+/vendor/${LIB}/soundfx/libdownmix.so,VND-ONLY,
+/vendor/${LIB}/soundfx/libeffectproxy.so,VND-ONLY,
+/vendor/${LIB}/soundfx/libldnhncr.so,VND-ONLY,
+/vendor/${LIB}/soundfx/libreverbwrapper.so,VND-ONLY,
+/vendor/${LIB}/soundfx/libvisualizer.so,VND-ONLY,
diff --git a/vndk/tools/definition-tool/datasets/eligible-list-o-release.csv b/vndk/tools/definition-tool/datasets/eligible-list-o-release.csv
index 55e3ed899..47854d4ed 100644
--- a/vndk/tools/definition-tool/datasets/eligible-list-o-release.csv
+++ b/vndk/tools/definition-tool/datasets/eligible-list-o-release.csv
@@ -7,6 +7,9 @@ Path,Tag,v3.7
/system/${LIB}/android.hardware.audio.common@2.0.so,VNDK,
/system/${LIB}/android.hardware.audio.effect@2.0.so,VNDK,
/system/${LIB}/android.hardware.audio@2.0.so,VNDK,
+/system/${LIB}/android.hardware.automotive.evs@1.0.so,VNDK,
+/system/${LIB}/android.hardware.automotive.vehicle@2.0.so,VNDK,
+/system/${LIB}/android.hardware.automotive.vehicle@2.1.so,VNDK,
/system/${LIB}/android.hardware.biometrics.fingerprint@2.1.so,VNDK,
/system/${LIB}/android.hardware.bluetooth@1.0.so,VNDK,
/system/${LIB}/android.hardware.boot@1.0.so,VNDK,
@@ -16,8 +19,8 @@ Path,Tag,v3.7
/system/${LIB}/android.hardware.camera.device@1.0.so,VNDK,
/system/${LIB}/android.hardware.camera.device@3.2.so,VNDK,
/system/${LIB}/android.hardware.camera.provider@2.4.so,VNDK,
-/system/${LIB}/android.hardware.cas@1.0.so,VNDK,
/system/${LIB}/android.hardware.cas.native@1.0.so,VNDK,
+/system/${LIB}/android.hardware.cas@1.0.so,VNDK,
/system/${LIB}/android.hardware.configstore-utils.so,VNDK,
/system/${LIB}/android.hardware.configstore@1.0.so,VNDK,
/system/${LIB}/android.hardware.configstore@1.1.so,VNDK,
@@ -27,13 +30,10 @@ Path,Tag,v3.7
/system/${LIB}/android.hardware.gatekeeper@1.0.so,VNDK,
/system/${LIB}/android.hardware.gnss@1.0.so,VNDK,
/system/${LIB}/android.hardware.graphics.allocator@2.0.so,VNDK-SP,
-/system/${LIB}/vndk-sp/android.hardware.graphics.allocator@2.0.so,VNDK-SP,
/system/${LIB}/android.hardware.graphics.bufferqueue@1.0.so,VNDK,
/system/${LIB}/android.hardware.graphics.common@1.0.so,VNDK-SP,
-/system/${LIB}/vndk-sp/android.hardware.graphics.common@1.0.so,VNDK-SP,
/system/${LIB}/android.hardware.graphics.composer@2.1.so,VNDK,
/system/${LIB}/android.hardware.graphics.mapper@2.0.so,VNDK-SP,
-/system/${LIB}/vndk-sp/android.hardware.graphics.mapper@2.0.so,VNDK-SP,
/system/${LIB}/android.hardware.health@1.0.so,VNDK,
/system/${LIB}/android.hardware.ir@1.0.so,VNDK,
/system/${LIB}/android.hardware.keymaster@3.0.so,VNDK,
@@ -49,9 +49,9 @@ Path,Tag,v3.7
/system/${LIB}/android.hardware.radio@1.0.so,VNDK,
/system/${LIB}/android.hardware.radio@1.1.so,VNDK,
/system/${LIB}/android.hardware.renderscript@1.0.so,VNDK-SP,
-/system/${LIB}/vndk-sp/android.hardware.renderscript@1.0.so,VNDK-SP,
/system/${LIB}/android.hardware.sensors@1.0.so,VNDK,
/system/${LIB}/android.hardware.soundtrigger@2.0.so,VNDK,
+/system/${LIB}/android.hardware.tests.libhwbinder@1.0.so,VNDK,
/system/${LIB}/android.hardware.tetheroffload.config@1.0.so,VNDK,
/system/${LIB}/android.hardware.tetheroffload.control@1.0.so,VNDK,
/system/${LIB}/android.hardware.thermal@1.0.so,VNDK,
@@ -69,24 +69,41 @@ Path,Tag,v3.7
/system/${LIB}/android.hardware.wifi@1.1.so,VNDK,
/system/${LIB}/android.hidl.allocator@1.0.so,VNDK,
/system/${LIB}/android.hidl.base@1.0.so,VNDK-SP,
-/system/${LIB}/vndk-sp/android.hidl.base@1.0.so,VNDK-SP,
/system/${LIB}/android.hidl.manager@1.0.so,VNDK,
-/system/${LIB}/hw/android.hidl.memory@1.0-impl.so,FWK-ONLY,
/system/${LIB}/android.hidl.memory@1.0.so,VNDK-SP,
-/system/${LIB}/vndk-sp/android.hidl.memory@1.0.so,VNDK-SP,
/system/${LIB}/android.hidl.token@1.0-utils.so,VNDK,
/system/${LIB}/android.hidl.token@1.0.so,VNDK,
/system/${LIB}/android.system.wifi.keystore@1.0.so,VNDK,
+/system/${LIB}/drm/libfwdlockengine.so,FWK-ONLY,
/system/${LIB}/hw/audio.a2dp.default.so,FWK-ONLY,
/system/${LIB}/hw/bluetooth.default.so,FWK-ONLY,
/system/${LIB}/hw/keystore.default.so,FWK-ONLY,
/system/${LIB}/ld-android.so,LL-NDK-Indirect,
+/system/${LIB}/libEGL.so,SP-NDK,
+/system/${LIB}/libETC1.so,FWK-ONLY,
+/system/${LIB}/libFFTEm.so,FWK-ONLY,
+/system/${LIB}/libGLESv1_CM.so,SP-NDK,
+/system/${LIB}/libGLESv1_enc.so,FWK-ONLY,
+/system/${LIB}/libGLESv2.so,SP-NDK,
+/system/${LIB}/libGLESv2_enc.so,FWK-ONLY,
+/system/${LIB}/libGLESv3.so,SP-NDK,
+/system/${LIB}/libLLVM.so,VNDK-SP-Indirect-Private,
+/system/${LIB}/libOpenMAXAL.so,FWK-ONLY,
+/system/${LIB}/libOpenSLES.so,FWK-ONLY,
+/system/${LIB}/libOpenglSystemCommon.so,FWK-ONLY,
+/system/${LIB}/libRS.so,FWK-ONLY,
+/system/${LIB}/libRSCpuRef.so,VNDK-SP,
+/system/${LIB}/libRSDriver.so,VNDK-SP,
+/system/${LIB}/libRS_internal.so,VNDK-SP,
+/system/${LIB}/libRScpp.so,FWK-ONLY,
+/system/${LIB}/libWnnEngDic.so,FWK-ONLY,
+/system/${LIB}/libWnnJpnDic.so,FWK-ONLY,
/system/${LIB}/lib_renderControl_enc.so,FWK-ONLY,
/system/${LIB}/libaaudio.so,FWK-ONLY,
+/system/${LIB}/libandroid.so,FWK-ONLY,
/system/${LIB}/libandroid_net.so,LL-NDK,
/system/${LIB}/libandroid_runtime.so,FWK-ONLY,
/system/${LIB}/libandroid_servers.so,FWK-ONLY,
-/system/${LIB}/libandroid.so,FWK-ONLY,
/system/${LIB}/libandroidfw.so,FWK-ONLY,
/system/${LIB}/libappfuse.so,FWK-ONLY,
/system/${LIB}/libart-compiler.so,FWK-ONLY,
@@ -102,63 +119,49 @@ Path,Tag,v3.7
/system/${LIB}/libaudiopolicymanager.so,FWK-ONLY,
/system/${LIB}/libaudiopolicymanagerdefault.so,FWK-ONLY,
/system/${LIB}/libaudiopolicyservice.so,FWK-ONLY,
-/system/${LIB}/soundfx/libaudiopreprocessing.so,FWK-ONLY,
/system/${LIB}/libaudioprocessing.so,FWK-ONLY,
/system/${LIB}/libaudioroute.so,VNDK,
/system/${LIB}/libaudiospdif.so,FWK-ONLY,
/system/${LIB}/libaudioutils.so,VNDK,
/system/${LIB}/libavservices_minijail.so,VNDK,
/system/${LIB}/libbacktrace.so,VNDK-SP-Indirect,
-/system/${LIB}/vndk-sp/libbacktrace.so,VNDK-SP-Indirect,
/system/${LIB}/libbase.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libbase.so,VNDK-SP,
/system/${LIB}/libbatteryservice.so,FWK-ONLY,
/system/${LIB}/libbcc.so,FWK-ONLY,
/system/${LIB}/libbcinfo.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libbcinfo.so,VNDK-SP,
/system/${LIB}/libbinder.so,VNDK,
/system/${LIB}/libbinderwrapper.so,FWK-ONLY,
/system/${LIB}/libblas.so,VNDK-SP-Indirect-Private,
-/system/${LIB}/vndk-sp/libblas.so,VNDK-SP-Indirect-Private,
/system/${LIB}/libbluetooth_jni.so,FWK-ONLY,
/system/${LIB}/libbrillo-binder.so,FWK-ONLY,
/system/${LIB}/libbrillo-stream.so,FWK-ONLY,
/system/${LIB}/libbrillo.so,FWK-ONLY,
-/system/${LIB}/soundfx/libbundlewrapper.so,FWK-ONLY,
-/system/${LIB}/libc_malloc_debug.so,LL-NDK-Indirect,
-/system/${LIB}/libc.so,LL-NDK,
/system/${LIB}/libc++.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libc++.so,VNDK-SP,
+/system/${LIB}/libc.so,LL-NDK,
+/system/${LIB}/libc_malloc_debug.so,LL-NDK-Indirect,
+/system/${LIB}/libcamera2ndk.so,FWK-ONLY,
/system/${LIB}/libcamera_client.so,FWK-ONLY,
/system/${LIB}/libcamera_metadata.so,VNDK,
-/system/${LIB}/libcamera2ndk.so,FWK-ONLY,
/system/${LIB}/libcameraservice.so,FWK-ONLY,
/system/${LIB}/libcap.so,VNDK,
/system/${LIB}/libchrome.so,FWK-ONLY,
/system/${LIB}/libcld80211.so,VND-ONLY,
-/vendor/${LIB}/libcld80211.so,VND-ONLY,
/system/${LIB}/libcompiler_rt.so,VNDK-SP-Indirect-Private,
-/system/${LIB}/vndk-sp/libcompiler_rt.so,VNDK-SP-Indirect-Private,
-/system/${LIB}/libcrypto_utils.so,VNDK,
/system/${LIB}/libcrypto.so,VNDK,
+/system/${LIB}/libcrypto_utils.so,VNDK,
/system/${LIB}/libcups.so,FWK-ONLY,
/system/${LIB}/libcurl.so,VNDK,
/system/${LIB}/libcutils.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libcutils.so,VNDK-SP,
/system/${LIB}/libdebuggerd_client.so,FWK-ONLY,
/system/${LIB}/libdefcontainer_jni.so,FWK-ONLY,
/system/${LIB}/libdiskconfig.so,VNDK,
/system/${LIB}/libdl.so,LL-NDK,
/system/${LIB}/libdng_sdk.so,FWK-ONLY,
-/system/${LIB}/soundfx/libdownmix.so,FWK-ONLY,
-/system/${LIB}/libdrmframework_jni.so,FWK-ONLY,
/system/${LIB}/libdrmframework.so,FWK-ONLY,
+/system/${LIB}/libdrmframework_jni.so,FWK-ONLY,
/system/${LIB}/libdumpstateaidl.so,FWK-ONLY,
/system/${LIB}/libdumpstateutil.so,VNDK,
-/system/${LIB}/soundfx/libeffectproxy.so,FWK-ONLY,
/system/${LIB}/libeffects.so,FWK-ONLY,
-/system/${LIB}/libEGL.so,SP-NDK,
-/system/${LIB}/libETC1.so,FWK-ONLY,
/system/${LIB}/libevent.so,VNDK,
/system/${LIB}/libexif.so,VNDK,
/system/${LIB}/libexpat.so,VNDK,
@@ -170,37 +173,24 @@ Path,Tag,v3.7
/system/${LIB}/libext2fs.so,FWK-ONLY,
/system/${LIB}/libext4_utils.so,FWK-ONLY,
/system/${LIB}/libf2fs_sparseblock.so,FWK-ONLY,
-/system/${LIB}/libFFTEm.so,FWK-ONLY,
/system/${LIB}/libfilterfw.so,FWK-ONLY,
/system/${LIB}/libfilterpack_imageproc.so,FWK-ONLY,
/system/${LIB}/libfmq.so,VNDK,
/system/${LIB}/libframesequence.so,FWK-ONLY,
/system/${LIB}/libft2.so,FWK-ONLY-RS,
-/system/${LIB}/drm/libfwdlockengine.so,FWK-ONLY,
/system/${LIB}/libgatekeeper.so,VNDK,
/system/${LIB}/libgiftranscode.so,FWK-ONLY,
-/system/${LIB}/libGLESv1_CM.so,SP-NDK,
-/system/${LIB}/libGLESv1_enc.so,FWK-ONLY,
-/system/${LIB}/libGLESv2_enc.so,FWK-ONLY,
-/system/${LIB}/libGLESv2.so,SP-NDK,
-/system/${LIB}/libGLESv3.so,SP-NDK,
/system/${LIB}/libgui.so,VNDK,
-/system/${LIB}/libhardware_legacy.so,VNDK,
/system/${LIB}/libhardware.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libhardware.so,VNDK-SP,
+/system/${LIB}/libhardware_legacy.so,VNDK,
/system/${LIB}/libharfbuzz_ng.so,FWK-ONLY,
/system/${LIB}/libhidcommand_jni.so,FWK-ONLY,
/system/${LIB}/libhidl-gen-utils.so,FWK-ONLY,
/system/${LIB}/libhidlbase.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libhidlbase.so,VNDK-SP,
/system/${LIB}/libhidlmemory.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libhidlmemory.so,VNDK-SP,
/system/${LIB}/libhidltransport.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libhidltransport.so,VNDK-SP,
/system/${LIB}/libhwbinder.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libhwbinder.so,VNDK-SP,
/system/${LIB}/libhwc2on1adapter.so,VND-ONLY,
-/vendor/${LIB}/libhwc2on1adapter.so,VND-ONLY,
/system/${LIB}/libhwui.so,FWK-ONLY,
/system/${LIB}/libicui18n.so,VNDK,
/system/${LIB}/libicuuc.so,VNDK,
@@ -210,7 +200,6 @@ Path,Tag,v3.7
/system/${LIB}/libinputflinger.so,FWK-ONLY,
/system/${LIB}/libinputservice.so,FWK-ONLY,
/system/${LIB}/libion.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libion.so,VNDK-SP,
/system/${LIB}/libiperf.so,FWK-ONLY,
/system/${LIB}/libiprouteutil.so,FWK-ONLY,
/system/${LIB}/libjavacore.so,FWK-ONLY,
@@ -224,28 +213,25 @@ Path,Tag,v3.7
/system/${LIB}/libjni_tinyplanet.so,FWK-ONLY,
/system/${LIB}/libjnigraphics.so,FWK-ONLY,
/system/${LIB}/libjpeg.so,VNDK,
+/system/${LIB}/libkeymaster1.so,VNDK,
/system/${LIB}/libkeymaster_messages.so,VNDK,
/system/${LIB}/libkeymaster_portable.so,VNDK,
/system/${LIB}/libkeymaster_staging.so,VNDK,
-/system/${LIB}/libkeymaster1.so,VNDK,
-/system/${LIB}/libkeystore_binder.so,FWK-ONLY,
/system/${LIB}/libkeystore-engine.so,FWK-ONLY,
+/system/${LIB}/libkeystore_binder.so,FWK-ONLY,
/system/${LIB}/libldacBT_abr.so,VNDK,
/system/${LIB}/libldacBT_enc.so,VNDK,
-/system/${LIB}/soundfx/libldnhncr.so,FWK-ONLY,
-/system/${LIB}/libLLVM.so,VNDK-SP-Indirect-Private,
-/system/${LIB}/vndk-sp/libLLVM.so,VNDK-SP-Indirect-Private,
/system/${LIB}/liblog.so,LL-NDK,
/system/${LIB}/liblogcat.so,FWK-ONLY,
/system/${LIB}/liblogwrap.so,FWK-ONLY,
/system/${LIB}/liblz4.so,VNDK,
/system/${LIB}/liblzma.so,VNDK-SP-Indirect,
-/system/${LIB}/vndk-sp/liblzma.so,VNDK-SP-Indirect,
/system/${LIB}/libm.so,LL-NDK,
/system/${LIB}/libmdnssd.so,FWK-ONLY,
+/system/${LIB}/libmedia.so,FWK-ONLY,
/system/${LIB}/libmedia_helper.so,VNDK,
/system/${LIB}/libmedia_jni.so,FWK-ONLY,
-/system/${LIB}/libmedia.so,FWK-ONLY,
+/system/${LIB}/libmedia_omx.so,VNDK,
/system/${LIB}/libmediadrm.so,FWK-ONLY,
/system/${LIB}/libmediaextractorservice.so,FWK-ONLY,
/system/${LIB}/libmedialogservice.so,FWK-ONLY,
@@ -264,18 +250,14 @@ Path,Tag,v3.7
/system/${LIB}/libnativeloader.so,FWK-ONLY,
/system/${LIB}/libnativewindow.so,SP-NDK,
/system/${LIB}/libnbaio.so,VNDK,
-/vendor/${LIB}/libnbaio_mono.so,VND-ONLY,
/system/${LIB}/libnetd_client.so,LL-NDK-Indirect,
/system/${LIB}/libnetdaidl.so,FWK-ONLY,
/system/${LIB}/libnetlink.so,FWK-ONLY,
/system/${LIB}/libnetutils.so,VNDK,
/system/${LIB}/libnl.so,VNDK,
-/system/${LIB}/libOpenglSystemCommon.so,FWK-ONLY,
/system/${LIB}/libopenjdk.so,FWK-ONLY,
/system/${LIB}/libopenjdkjvm.so,FWK-ONLY,
/system/${LIB}/libopenjdkjvmti.so,FWK-ONLY,
-/system/${LIB}/libOpenMAXAL.so,FWK-ONLY,
-/system/${LIB}/libOpenSLES.so,FWK-ONLY,
/system/${LIB}/libopus.so,FWK-ONLY,
/system/${LIB}/libpac.so,FWK-ONLY,
/system/${LIB}/libpackagelistparser.so,FWK-ONLY,
@@ -294,25 +276,13 @@ Path,Tag,v3.7
/system/${LIB}/libprocinfo.so,VNDK,
/system/${LIB}/libprotobuf-cpp-full.so,VNDK,
/system/${LIB}/libprotobuf-cpp-lite.so,VNDK,
-/system/${LIB}/libradio_metadata.so,VNDK,
/system/${LIB}/libradio.so,FWK-ONLY,
+/system/${LIB}/libradio_metadata.so,VNDK,
/system/${LIB}/libradioservice.so,FWK-ONLY,
/system/${LIB}/libreference-ril.so,VND-ONLY,
-/vendor/${LIB}/libreference-ril.so,VND-ONLY,
-/system/${LIB}/soundfx/libreverbwrapper.so,FWK-ONLY,
/system/${LIB}/libril.so,VND-ONLY,
-/vendor/${LIB}/libril.so,VND-ONLY,
/system/${LIB}/librilutils.so,VND-ONLY,
-/vendor/${LIB}/librilutils.so,VND-ONLY,
-/system/${LIB}/libRS_internal.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libRS_internal.so,VNDK-SP,
/system/${LIB}/librs_jni.so,FWK-ONLY,
-/system/${LIB}/libRS.so,FWK-ONLY,
-/system/${LIB}/libRScpp.so,FWK-ONLY,
-/system/${LIB}/libRSCpuRef.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libRSCpuRef.so,VNDK-SP,
-/system/${LIB}/libRSDriver.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libRSDriver.so,VNDK-SP,
/system/${LIB}/librtp_jni.so,FWK-ONLY,
/system/${LIB}/libschedulerservicehidl.so,FWK-ONLY,
/system/${LIB}/libselinux.so,FWK-ONLY,
@@ -334,11 +304,12 @@ Path,Tag,v3.7
/system/${LIB}/libspeexresampler.so,VNDK,
/system/${LIB}/libsqlite.so,VNDK,
/system/${LIB}/libssl.so,VNDK,
+/system/${LIB}/libstagefright.so,FWK-ONLY,
/system/${LIB}/libstagefright_amrnb_common.so,FWK-ONLY,
/system/${LIB}/libstagefright_enc_common.so,FWK-ONLY,
/system/${LIB}/libstagefright_foundation.so,VNDK,
/system/${LIB}/libstagefright_http_support.so,FWK-ONLY,
-/system/${LIB}/libstagefright_omx.so,FWK-ONLY,
+/system/${LIB}/libstagefright_omx.so,VNDK,
/system/${LIB}/libstagefright_soft_aacdec.so,FWK-ONLY,
/system/${LIB}/libstagefright_soft_aacenc.so,FWK-ONLY,
/system/${LIB}/libstagefright_soft_amrdec.so,FWK-ONLY,
@@ -360,46 +331,79 @@ Path,Tag,v3.7
/system/${LIB}/libstagefright_soft_vpxdec.so,FWK-ONLY,
/system/${LIB}/libstagefright_soft_vpxenc.so,FWK-ONLY,
/system/${LIB}/libstagefright_xmlparser@1.0.so,FWK-ONLY,
-/system/${LIB}/libstagefright.so,FWK-ONLY,
/system/${LIB}/libstdc++.so,LL-NDK,
-/system/${LIB}/libsurfaceflinger_ddmconnection.so,FWK-ONLY,
/system/${LIB}/libsurfaceflinger.so,FWK-ONLY,
+/system/${LIB}/libsurfaceflinger_ddmconnection.so,FWK-ONLY,
/system/${LIB}/libsuspend.so,VNDK,
/system/${LIB}/libsync.so,SP-NDK,
/system/${LIB}/libsysutils.so,VNDK,
/system/${LIB}/libtextclassifier.so,FWK-ONLY,
/system/${LIB}/libtinyalsa.so,VNDK,
/system/${LIB}/libtinycompress.so,VND-ONLY,
-/vendor/${LIB}/libtinycompress.so,VND-ONLY,
/system/${LIB}/libtinyxml2.so,VNDK,
/system/${LIB}/libui.so,VNDK,
/system/${LIB}/libunwind.so,VNDK-SP-Indirect,
-/system/${LIB}/vndk-sp/libunwind.so,VNDK-SP-Indirect,
/system/${LIB}/libusbhost.so,VNDK,
/system/${LIB}/libutils.so,VNDK-SP,
-/system/${LIB}/vndk-sp/libutils.so,VNDK-SP,
/system/${LIB}/libvintf.so,FWK-ONLY,
-/system/${LIB}/soundfx/libvisualizer.so,FWK-ONLY,
/system/${LIB}/libvixl-arm.so,VNDK,
/system/${LIB}/libvixl-arm64.so,VNDK,
/system/${LIB}/libvndksupport.so,LL-NDK,
/system/${LIB}/libvorbisidec.so,FWK-ONLY,
/system/${LIB}/libvulkan.so,SP-NDK,
/system/${LIB}/libwebrtc_audio_preprocessing.so,VND-ONLY,
-/vendor/${LIB}/libwebrtc_audio_preprocessing.so,VND-ONLY,
/system/${LIB}/libwebviewchromium_loader.so,FWK-ONLY,
/system/${LIB}/libwebviewchromium_plat_support.so,FWK-ONLY,
/system/${LIB}/libwfds.so,FWK-ONLY,
/system/${LIB}/libwifi-service.so,FWK-ONLY,
-/system/${LIB}/libwifi-system.so,FWK-ONLY,
/system/${LIB}/libwifi-system-iface.so,VNDK,
+/system/${LIB}/libwifi-system.so,FWK-ONLY,
/system/${LIB}/libwifikeystorehal.so,FWK-ONLY,
/system/${LIB}/libwilhelm.so,FWK-ONLY,
/system/${LIB}/libwnndict.so,FWK-ONLY,
-/system/${LIB}/libWnnEngDic.so,FWK-ONLY,
-/system/${LIB}/libWnnJpnDic.so,FWK-ONLY,
/system/${LIB}/libxml2.so,VNDK,
/system/${LIB}/libyuv.so,VNDK,
/system/${LIB}/libz.so,LL-NDK,
/system/${LIB}/libziparchive.so,VNDK,
-/system/${LIB}/android.hardware.tests.libhwbinder@1.0.so,VNDK,
+/system/${LIB}/soundfx/libaudiopreprocessing.so,FWK-ONLY,
+/system/${LIB}/soundfx/libbundlewrapper.so,FWK-ONLY,
+/system/${LIB}/soundfx/libdownmix.so,FWK-ONLY,
+/system/${LIB}/soundfx/libeffectproxy.so,FWK-ONLY,
+/system/${LIB}/soundfx/libldnhncr.so,FWK-ONLY,
+/system/${LIB}/soundfx/libreverbwrapper.so,FWK-ONLY,
+/system/${LIB}/soundfx/libvisualizer.so,FWK-ONLY,
+/system/${LIB}/vndk-sp/android.hardware.graphics.allocator@2.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/android.hardware.graphics.common@1.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/android.hardware.graphics.mapper@2.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/android.hardware.renderscript@1.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/android.hidl.base@1.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/android.hidl.memory@1.0-impl.so,VNDK-SP-Indirect-Private,
+/system/${LIB}/vndk-sp/android.hidl.memory@1.0.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libLLVM.so,VNDK-SP-Indirect-Private,
+/system/${LIB}/vndk-sp/libRSCpuRef.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libRSDriver.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libRS_internal.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libbacktrace.so,VNDK-SP-Indirect,
+/system/${LIB}/vndk-sp/libbase.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libbcinfo.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libblas.so,VNDK-SP-Indirect-Private,
+/system/${LIB}/vndk-sp/libc++.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libcompiler_rt.so,VNDK-SP-Indirect-Private,
+/system/${LIB}/vndk-sp/libcutils.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libhardware.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libhidlbase.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libhidlmemory.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libhidltransport.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libhwbinder.so,VNDK-SP,
+/system/${LIB}/vndk-sp/libion.so,VNDK-SP,
+/system/${LIB}/vndk-sp/liblzma.so,VNDK-SP-Indirect,
+/system/${LIB}/vndk-sp/libunwind.so,VNDK-SP-Indirect,
+/system/${LIB}/vndk-sp/libutils.so,VNDK-SP,
+/vendor/${LIB}/libcld80211.so,VND-ONLY,
+/vendor/${LIB}/libhwc2on1adapter.so,VND-ONLY,
+/vendor/${LIB}/libnbaio_mono.so,VND-ONLY,
+/vendor/${LIB}/libreference-ril.so,VND-ONLY,
+/vendor/${LIB}/libril.so,VND-ONLY,
+/vendor/${LIB}/librilutils.so,VND-ONLY,
+/vendor/${LIB}/libtinycompress.so,VND-ONLY,
+/vendor/${LIB}/libwebrtc_audio_preprocessing.so,VND-ONLY,
diff --git a/vndk/tools/definition-tool/datasets/minimum_tag_file.csv b/vndk/tools/definition-tool/datasets/minimum_tag_file.csv
index 865013dbb..563f8700a 100644
--- a/vndk/tools/definition-tool/datasets/minimum_tag_file.csv
+++ b/vndk/tools/definition-tool/datasets/minimum_tag_file.csv
@@ -6,8 +6,10 @@ Path,Tag
/system/${LIB}/libandroid_net.so,LL-NDK
/system/${LIB}/libc.so,LL-NDK
/system/${LIB}/libdl.so,LL-NDK
+/system/${LIB}/libft2.so,FWK-ONLY-RS
/system/${LIB}/liblog.so,LL-NDK
/system/${LIB}/libm.so,LL-NDK
+/system/${LIB}/libmediandk.so,FWK-ONLY-RS
/system/${LIB}/libnativewindow.so,SP-NDK
/system/${LIB}/libstdc++.so,LL-NDK
/system/${LIB}/libsync.so,SP-NDK
@@ -28,7 +30,9 @@ Path,Tag
/system/${LIB}/vndk-sp/libbcinfo.so,VNDK-SP
/system/${LIB}/vndk-sp/libblas.so,VNDK-SP-Indirect-Private
/system/${LIB}/vndk-sp/libc++.so,VNDK-SP
+/system/${LIB}/vndk-sp/libcompiler_rt.so,VNDK-SP-Indirect-Private
/system/${LIB}/vndk-sp/libcutils.so,VNDK-SP
+/system/${LIB}/vndk-sp/libft2.so,FWK-ONLY-RS
/system/${LIB}/vndk-sp/libhardware.so,VNDK-SP
/system/${LIB}/vndk-sp/libhidlbase.so,VNDK-SP
/system/${LIB}/vndk-sp/libhidlmemory.so,VNDK-SP
@@ -36,5 +40,6 @@ Path,Tag
/system/${LIB}/vndk-sp/libhwbinder.so,VNDK-SP
/system/${LIB}/vndk-sp/libion.so,VNDK-SP
/system/${LIB}/vndk-sp/liblzma.so,VNDK-SP-Indirect
+/system/${LIB}/vndk-sp/libmediandk.so,FWK-ONLY-RS
/system/${LIB}/vndk-sp/libunwind.so,VNDK-SP-Indirect
/system/${LIB}/vndk-sp/libutils.so,VNDK-SP
diff --git a/vndk/tools/definition-tool/tests/ndk_toolchain.py b/vndk/tools/definition-tool/tests/ndk_toolchain.py
new file mode 100755
index 000000000..8ad9144ce
--- /dev/null
+++ b/vndk/tools/definition-tool/tests/ndk_toolchain.py
@@ -0,0 +1,202 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+
+import argparse
+import collections
+import os
+import re
+import subprocess
+import sys
+
+def detect_ndk_dir():
+ ndk_dir = os.getenv('NDK')
+ if not ndk_dir:
+ error_msg = '''error: NDK toolchain is required for this test case.
+error:
+error: Steps:
+error: 1. Download NDK from https://developer.android.com/ndk/downloads/
+error: 2. Unzip the archive (android-ndk-r15c-linux-x86_64.zip)
+error: 3. Set environment variable NDK to the extracted directory
+error: (export NDK=android-ndk-r15c)
+error:'''
+ print(error_msg, file=sys.stderr)
+ raise ValueError('NDK toolchain not specified')
+
+ if not os.path.exists(ndk_dir):
+ raise ValueError('NDK toolchain not found')
+
+ return ndk_dir
+
+def detect_api_level(ndk_dir):
+ try:
+ apis = []
+ pattern = re.compile('android-(\\d+)')
+ for name in os.listdir(os.path.join(ndk_dir, 'platforms')):
+ match = pattern.match(name)
+ if match:
+ apis.append(int(match.group(1)))
+ if not apis:
+ raise ValueError('failed to find latest api')
+ return 'android-{}'.format(max(apis))
+ except IOError:
+ raise ValueError('failed to find latest api')
+
+def detect_host():
+ if sys.platform.startswith('linux'):
+ return 'linux-x86_64'
+ if sys.platform.startswith('darwin'):
+ return 'darwin-x86_64'
+ raise NotImplementedError('unknown host platform')
+
+def get_gcc_dir(ndk_dir, arch, host):
+ return os.path.join(ndk_dir, 'toolchains', arch, 'prebuilt', host)
+
+def get_clang_dir(ndk_dir, host):
+ return os.path.join(ndk_dir, 'toolchains', 'llvm', 'prebuilt', host)
+
+def get_platform_dir(ndk_dir, api, subdirs):
+ return os.path.join(ndk_dir, 'platforms', api, *subdirs)
+
+class Target(object):
+ def __init__(self, name, triple, cflags, ldflags, gcc_toolchain_dir,
+ clang_dir, ndk_include, ndk_lib):
+ self.name = name
+ self.target_triple = triple
+ self.target_cflags = cflags
+ self.target_ldflags = ldflags
+
+ self.gcc_toolchain_dir = gcc_toolchain_dir
+ self.clang_dir = clang_dir
+ self.ndk_include = ndk_include
+ self.ndk_lib = ndk_lib
+
+ def check_paths(self):
+ def check_path(path):
+ if os.path.exists(path):
+ return True
+ print('error: File not found:', path, file=sys.stderr)
+ return False
+
+ ld_exeutable = os.path.join(
+ self.gcc_toolchain_dir, 'bin', self.target_triple + '-ld')
+
+ success = check_path(self.gcc_toolchain_dir)
+ success &= check_path(ld_exeutable)
+ success &= check_path(self.clang_dir)
+ success &= check_path(self.ndk_include)
+ success &= check_path(self.ndk_lib)
+ return success
+
+ def compile(self, obj_file, src_file, cflags):
+ clang = os.path.join(self.clang_dir, 'bin', 'clang')
+
+ cmd = [clang, '-o', obj_file, '-c', src_file]
+ cmd.extend(['-fPIE', '-fPIC'])
+ cmd.extend(['-gcc-toolchain', self.gcc_toolchain_dir])
+ cmd.extend(['-target', self.target_triple])
+ cmd.extend(['-isystem', self.ndk_include])
+ cmd.extend(cflags)
+ cmd.extend(self.target_cflags)
+ subprocess.check_call(cmd)
+
+ def link(self, out_file, obj_files, ldflags):
+ if '-shared' in ldflags:
+ crtbegin = os.path.join(self.ndk_lib, 'crtbegin_so.o')
+ crtend = os.path.join(self.ndk_lib, 'crtend_so.o')
+ else:
+ crtbegin = os.path.join(self.ndk_lib, 'crtbegin_static.o')
+ crtend = os.path.join(self.ndk_lib, 'crtend_android.o')
+
+ clang = os.path.join(self.clang_dir, 'bin', 'clang')
+
+ cmd = [clang, '-o', out_file]
+ cmd.extend(['-fPIE', '-fPIC', '-Wl,--no-undefined', '-nostdlib'])
+ cmd.append('-L' + self.ndk_lib)
+ cmd.extend(['-gcc-toolchain', self.gcc_toolchain_dir])
+ cmd.extend(['-target', self.target_triple])
+ cmd.append(crtbegin)
+ cmd.extend(obj_files)
+ cmd.append(crtend)
+ cmd.extend(ldflags)
+ cmd.extend(self.target_ldflags)
+ if '-shared' not in ldflags:
+ cmd.append('-Wl,-pie')
+ subprocess.check_call(cmd)
+
+def create_targets(ndk_dir=None, api=None, host=None):
+ if ndk_dir is None:
+ ndk_dir = detect_ndk_dir()
+ if api is None:
+ api = detect_api_level(ndk_dir)
+ if host is None:
+ host = detect_host()
+
+ targets = collections.OrderedDict()
+
+ targets['arm'] = Target(
+ 'arm', 'arm-linux-androideabi', [],[],
+ get_gcc_dir(ndk_dir, 'arm-linux-androideabi-4.9', host),
+ get_clang_dir(ndk_dir, host),
+ get_platform_dir(ndk_dir, api, ['arch-arm', 'usr', 'include']),
+ get_platform_dir(ndk_dir, api, ['arch-arm', 'usr', 'lib']))
+
+ targets['arm64'] = Target(
+ 'arm64', 'aarch64-linux-android', [], [],
+ get_gcc_dir(ndk_dir, 'aarch64-linux-android-4.9', host),
+ get_clang_dir(ndk_dir, host),
+ get_platform_dir(ndk_dir, api, ['arch-arm64', 'usr', 'include']),
+ get_platform_dir(ndk_dir, api, ['arch-arm64', 'usr', 'lib']))
+
+ targets['x86'] = Target(
+ 'x86', 'i686-linux-android', ['-m32'], ['-m32'],
+ get_gcc_dir(ndk_dir, 'x86-4.9', host),
+ get_clang_dir(ndk_dir, host),
+ get_platform_dir(ndk_dir, api, ['arch-x86', 'usr', 'include']),
+ get_platform_dir(ndk_dir, api, ['arch-x86', 'usr', 'lib']))
+
+ targets['x86_64'] = Target(
+ 'x86_64', 'x86_64-linux-android', ['-m64'], ['-m64'],
+ get_gcc_dir(ndk_dir, 'x86_64-4.9', host),
+ get_clang_dir(ndk_dir, host),
+ get_platform_dir(ndk_dir, api, ['arch-x86_64', 'usr', 'include']),
+ get_platform_dir(ndk_dir, api, ['arch-x86_64', 'usr', 'lib64']))
+
+ targets['mips'] = Target(
+ 'mips', 'mipsel-linux-android', [], [],
+ get_gcc_dir(ndk_dir, 'mipsel-linux-android-4.9', host),
+ get_clang_dir(ndk_dir, host),
+ get_platform_dir(ndk_dir, api, ['arch-mips', 'usr', 'include']),
+ get_platform_dir(ndk_dir, api, ['arch-mips', 'usr', 'lib']))
+
+ targets['mips64'] = Target(
+ 'mips64', 'mips64el-linux-android',
+ ['-march=mips64el', '-mcpu=mips64r6'],
+ ['-march=mips64el', '-mcpu=mips64r6'],
+ get_gcc_dir(ndk_dir, 'mips64el-linux-android-4.9', host),
+ get_clang_dir(ndk_dir, host),
+ get_platform_dir(ndk_dir, api, ['arch-mips64', 'usr', 'include']),
+ get_platform_dir(ndk_dir, api, ['arch-mips64', 'usr', 'lib64']))
+
+ return targets
+
+def main():
+ parser = argparse.ArgumentParser(
+ description='Dry-run NDK toolchain detection')
+ parser.add_argument('--ndk-dir')
+ parser.add_argument('--api-level')
+ parser.add_argument('--host')
+ args = parser.parse_args()
+
+ targets = create_targets(args.ndk_dir, args.api_level, args.host)
+
+ success = True
+ for name, target in targets.items():
+ success &= target.check_paths()
+ if not success:
+ sys.exit(1)
+
+ print('succeed')
+
+if __name__ == '__main__':
+ main()
diff --git a/vndk/tools/definition-tool/tests/targets.py b/vndk/tools/definition-tool/tests/targets.py
deleted file mode 100644
index 2b2d2ac54..000000000
--- a/vndk/tools/definition-tool/tests/targets.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import subprocess
-import sys
-
-SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-ANDROID_BUILD_TOP = os.path.abspath(os.path.join(SCRIPT_DIR, *(['..'] * 5)))
-
-NDK_VERSION = 'r11'
-API_LEVEL = 'android-24'
-
-def get_prebuilts_host():
- if sys.platform.startswith('linux'):
- return 'linux-x86'
- if sys.platform.startswith('darwin'):
- return 'darwin-x86'
- raise NotImplementedError('unknown platform')
-
-def get_prebuilts_gcc(arch, gcc_version):
- return os.path.join(ANDROID_BUILD_TOP, 'prebuilts', 'gcc',
- get_prebuilts_host(), arch, gcc_version)
-
-def get_prebuilts_clang():
- return os.path.join(ANDROID_BUILD_TOP, 'prebuilts', 'clang', 'host',
- get_prebuilts_host(), 'clang-stable')
-
-def get_prebuilts_ndk(subdirs):
- return os.path.join(ANDROID_BUILD_TOP, 'prebuilts', 'ndk', NDK_VERSION,
- 'platforms', API_LEVEL, *subdirs)
-
-
-class Target(object):
- def __init__(self, name, triple, cflags, ldflags, gcc_toolchain_dir,
- clang_dir, ndk_include, ndk_lib):
- self.name = name
- self.target_triple = triple
- self.target_cflags = cflags
- self.target_ldflags = ldflags
-
- self.gcc_toolchain_dir = gcc_toolchain_dir
- self.clang_dir = clang_dir
- self.ndk_include = ndk_include
- self.ndk_lib = ndk_lib
-
- def compile(self, obj_file, src_file, cflags):
- clang = os.path.join(self.clang_dir, 'bin', 'clang')
-
- cmd = [clang, '-o', obj_file, '-c', src_file]
- cmd.extend(['-fPIE', '-fPIC'])
- cmd.extend(['-gcc-toolchain', self.gcc_toolchain_dir])
- cmd.extend(['-target', self.target_triple])
- cmd.extend(['-isystem', self.ndk_include])
- cmd.extend(cflags)
- cmd.extend(self.target_cflags)
- subprocess.check_call(cmd)
-
- def link(self, out_file, obj_files, ldflags):
- if '-shared' in ldflags:
- crtbegin = os.path.join(self.ndk_lib, 'crtbegin_so.o')
- crtend = os.path.join(self.ndk_lib, 'crtend_so.o')
- else:
- crtbegin = os.path.join(self.ndk_lib, 'crtbegin_static.o')
- crtend = os.path.join(self.ndk_lib, 'crtend_android.o')
-
- clang = os.path.join(self.clang_dir, 'bin', 'clang')
-
- cmd = [clang, '-o', out_file]
- cmd.extend(['-fPIE', '-fPIC', '-Wl,--no-undefined', '-nostdlib'])
- cmd.append('-L' + self.ndk_lib)
- cmd.extend(['-gcc-toolchain', self.gcc_toolchain_dir])
- cmd.extend(['-target', self.target_triple])
- cmd.append(crtbegin)
- cmd.extend(obj_files)
- cmd.append(crtend)
- cmd.extend(ldflags)
- cmd.extend(self.target_ldflags)
- if '-shared' not in ldflags:
- cmd.append('-Wl,-pie')
- subprocess.check_call(cmd)
-
-def create_targets():
- return {
- 'arm': Target('arm', 'arm-linux-androideabi', [],[],
- get_prebuilts_gcc('arm', 'arm-linux-androideabi-4.9'),
- get_prebuilts_clang(),
- get_prebuilts_ndk(['arch-arm', 'usr', 'include']),
- get_prebuilts_ndk(['arch-arm', 'usr', 'lib'])),
-
- 'arm64': Target('arm64', 'aarch64-linux-android', [], [],
- get_prebuilts_gcc('aarch64', 'aarch64-linux-android-4.9'),
- get_prebuilts_clang(),
- get_prebuilts_ndk(['arch-arm64', 'usr', 'include']),
- get_prebuilts_ndk(['arch-arm64', 'usr', 'lib'])),
-
- 'x86': Target('x86', 'x86_64-linux-android', ['-m32'], ['-m32'],
- get_prebuilts_gcc('x86', 'x86_64-linux-android-4.9'),
- get_prebuilts_clang(),
- get_prebuilts_ndk(['arch-x86', 'usr', 'include']),
- get_prebuilts_ndk(['arch-x86', 'usr', 'lib'])),
-
- 'x86_64': Target('x86_64', 'x86_64-linux-android', ['-m64'], ['-m64'],
- get_prebuilts_gcc('x86', 'x86_64-linux-android-4.9'),
- get_prebuilts_clang(),
- get_prebuilts_ndk(['arch-x86_64', 'usr', 'include']),
- get_prebuilts_ndk(['arch-x86_64', 'usr', 'lib64'])),
-
- 'mips': Target('mips', 'mipsel-linux-android', [], [],
- get_prebuilts_gcc('mips', 'mips64el-linux-android-4.9'),
- get_prebuilts_clang(),
- get_prebuilts_ndk(['arch-mips', 'usr', 'include']),
- get_prebuilts_ndk(['arch-mips', 'usr', 'lib'])),
-
- 'mips64': Target('mips64', 'mips64el-linux-android',
- ['-march=mips64el', '-mcpu=mips64r6'],
- ['-march=mips64el', '-mcpu=mips64r6'],
- get_prebuilts_gcc('mips', 'mips64el-linux-android-4.9'),
- get_prebuilts_clang(),
- get_prebuilts_ndk(['arch-mips64', 'usr', 'include']),
- get_prebuilts_ndk(['arch-mips64', 'usr', 'lib64'])),
- }
diff --git a/vndk/tools/definition-tool/tests/test_elf_linker.py b/vndk/tools/definition-tool/tests/test_elf_linker.py
index 6faa9d217..76e0eafa4 100755
--- a/vndk/tools/definition-tool/tests/test_elf_linker.py
+++ b/vndk/tools/definition-tool/tests/test_elf_linker.py
@@ -233,109 +233,6 @@ class ELFLinkerTest(unittest.TestCase):
node = graph.get_lib('/vendor/lib64/libEGL.so')
self.assertEqual([], self._get_paths_from_nodes(node.users))
- def test_compute_predefined_fwk_only_rs(self):
- lib_names = (
- 'libft2',
- 'libmediandk',
- )
-
- # Add VNDK-SP libraries.
- gb = GraphBuilder()
- for name in lib_names:
- gb.add_multilib(PT_SYSTEM, name)
- gb.resolve()
-
- # Compute FWK-ONLY-RS and check the result.
- fwk_only_rs = gb.graph.compute_predefined_fwk_only_rs()
- fwk_only_rs = set(lib.path for lib in fwk_only_rs)
-
- for lib_dir_name in ('lib', 'lib64'):
- lib_dir = '/system/' + lib_dir_name
- for name in lib_names:
- self.assertIn(os.path.join(lib_dir, name + '.so'), fwk_only_rs)
-
- def test_compute_predefined_vndk_sp(self):
- lib_names = (
- 'android.hardware.graphics.allocator@2.0',
- 'android.hardware.graphics.common@1.0',
- 'android.hardware.graphics.mapper@2.0',
- 'android.hardware.renderscript@1.0',
- 'libRSCpuRef',
- 'libRSDriver',
- 'libRS_internal',
- 'libbase',
- 'libbcinfo',
- 'libc++',
- 'libcompiler_rt',
- 'libcutils',
- 'libhardware',
- 'libhidlbase',
- 'libhidltransport',
- 'libhwbinder',
- 'libutils',
- )
-
- # Add VNDK-SP libraries.
- gb = GraphBuilder()
- for name in lib_names:
- gb.add_multilib(PT_SYSTEM, name, extra_dir='vndk-sp')
-
- # Add some unrelated libraries.
- gb.add_multilib(PT_SYSTEM, 'libfoo')
- gb.add_multilib(PT_SYSTEM, 'libbar', extra_dir='vndk-sp')
-
- gb.resolve()
-
- # Compute VNDK-SP and check the result.
- vndk_sp = set(lib.path for lib in gb.graph.compute_predefined_vndk_sp())
-
- for lib_dir_name in ('lib', 'lib64'):
- lib_dir = '/system/' + lib_dir_name + '/vndk-sp'
- for name in lib_names:
- self.assertIn(os.path.join(lib_dir, name + '.so'), vndk_sp)
-
- self.assertNotIn('/system/lib/libfoo.so', vndk_sp)
- self.assertNotIn('/system/lib64/libfoo.so', vndk_sp)
-
- self.assertNotIn('/system/lib/vndk-sp/libbar.so', vndk_sp)
- self.assertNotIn('/system/lib64/vndk-sp/libbar.so', vndk_sp)
-
- def test_compute_predefined_vndk_sp_indirect(self):
- lib_names = (
- 'libbacktrace',
- 'libblas',
- 'liblzma',
- 'libpng',
- 'libunwind',
- )
-
- # Add VNDK-SP-Indirect libraries.
- gb = GraphBuilder()
- for name in lib_names:
- gb.add_multilib(PT_SYSTEM, name, extra_dir='vndk-sp')
-
- # Add some unrelated libraries.
- gb.add_multilib(PT_SYSTEM, 'libfoo')
- gb.add_multilib(PT_SYSTEM, 'libbar', extra_dir='vndk-sp')
-
- gb.resolve()
-
- # Compute VNDK-SP-Indirect and check the result.
- vndk_sp_indirect = gb.graph.compute_predefined_vndk_sp_indirect()
- vndk_sp_indirect = set(lib.path for lib in vndk_sp_indirect)
-
- for lib_dir_name in ('lib', 'lib64'):
- lib_dir = '/system/' + lib_dir_name + '/vndk-sp'
- for name in lib_names:
- self.assertIn(os.path.join(lib_dir, name + '.so'),
- vndk_sp_indirect)
-
- self.assertNotIn('/system/lib/libfoo.so', vndk_sp_indirect)
- self.assertNotIn('/system/lib64/libfoo.so', vndk_sp_indirect)
-
- self.assertNotIn('/system/lib/vndk-sp/libbar.so', vndk_sp_indirect)
- self.assertNotIn('/system/lib64/vndk-sp/libbar.so', vndk_sp_indirect)
-
def test_compute_predefined_sp_hal(self):
gb = GraphBuilder()
diff --git a/vndk/tools/definition-tool/tests/test_elfdump.py b/vndk/tools/definition-tool/tests/test_elfdump.py
index b9e9626e5..b8e3c1ef8 100755
--- a/vndk/tools/definition-tool/tests/test_elfdump.py
+++ b/vndk/tools/definition-tool/tests/test_elfdump.py
@@ -11,7 +11,7 @@ import sys
import unittest
from compat import TemporaryDirectory, makedirs
-import targets
+import ndk_toolchain
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
@@ -30,7 +30,7 @@ def run_elf_dump(path):
class ELFDumpTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
- cls.targets = targets.create_targets()
+ cls.targets = ndk_toolchain.create_targets()
if test_dir_base:
cls.test_dir_base = test_dir_base
@@ -75,12 +75,14 @@ class ELFDumpTest(unittest.TestCase):
# Link libtest-rpath.so.
out_file = os.path.join(cls.test_dir, 'libtest-rpath.so')
target.link(out_file, [obj_file],
- ['-shared', '-lc', '-Wl,-rpath,$ORIGIN/../lib'])
+ ['-shared', '-lc', '-Wl,-rpath,$ORIGIN/../lib',
+ '-Wl,--disable-new-dtags'])
# Link libtest-rpath-multi.so.
out_file = os.path.join(cls.test_dir, 'libtest-rpath-multi.so')
target.link(out_file, [obj_file],
- ['-shared', '-lc', '-Wl,-rpath,/system/lib:/vendor/lib'])
+ ['-shared', '-lc', '-Wl,-rpath,/system/lib:/vendor/lib',
+ '-Wl,--disable-new-dtags'])
# Link libtest-runpath.so.
out_file = os.path.join(cls.test_dir, 'libtest-runpath.so')
diff --git a/vndk/tools/definition-tool/tests/test_module_info.py b/vndk/tools/definition-tool/tests/test_module_info.py
index ba9f6189d..2da17b40d 100755
--- a/vndk/tools/definition-tool/tests/test_module_info.py
+++ b/vndk/tools/definition-tool/tests/test_module_info.py
@@ -15,12 +15,13 @@ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
class ModuleInfoTest(unittest.TestCase):
def test_default(self):
- m = ModuleInfo()
+ m = ModuleInfo.load_from_path_or_default(None)
self.assertEqual([], m.get_module_path('/system/lib64/libA.so'))
def test_get_module_path(self):
- m = ModuleInfo(os.path.join(SCRIPT_DIR, 'testdata', 'test_module_info',
- 'module-info.json'))
+ json_path = os.path.join(SCRIPT_DIR, 'testdata', 'test_module_info',
+ 'module-info.json')
+ m = ModuleInfo.load_from_path_or_default(json_path)
self.assertEqual(['system/core/libA'],
m.get_module_path('/system/lib64/libA.so'))
diff --git a/vndk/tools/definition-tool/tools/update_dataset.py b/vndk/tools/definition-tool/tools/update_dataset.py
new file mode 100755
index 000000000..63053a64c
--- /dev/null
+++ b/vndk/tools/definition-tool/tools/update_dataset.py
@@ -0,0 +1,110 @@
+#!/usr/bin/env python3
+
+# This tool updates extracts the information from Android.bp and updates the
+# datasets for eligible VNDK libraries.
+
+import argparse
+import collections
+import csv
+import json
+import os.path
+import posixpath
+import re
+import sys
+
+def load_make_vars(path):
+ result = collections.OrderedDict([
+ ('SOONG_LLNDK_LIBRARIES', set()),
+ ('SOONG_VNDK_SAMEPROCESS_LIBRARIES', set()),
+ ('SOONG_VNDK_CORE_LIBRARIES', set()),
+ ])
+
+ assign_len = len(' := ')
+
+ with open(path, 'r') as fp:
+ for line in fp:
+ for key, value in result.items():
+ if line.startswith(key):
+ mod_names = line[len(key) + assign_len:].strip().split(' ')
+ value.update(mod_names)
+
+ return result.values()
+
+def load_install_paths(module_info_path):
+ with open(module_info_path, 'r') as fp:
+ data = json.load(fp)
+
+ result = set()
+ patt = re.compile(
+ '.*[\\\\/]target[\\\\/]product[\\\\/][^\\\\/]+([\\\\/].*)$')
+ for name, module in data.items():
+ for path in module['installed']:
+ match = patt.match(path)
+ if not match:
+ continue
+ path = match.group(1)
+ path = path.replace(os.path.sep, '/')
+ path = path.replace('/lib/', '/${LIB}/')
+ path = path.replace('/lib64/', '/${LIB}/')
+ result.add(path)
+ return result
+
+def main():
+ parser =argparse.ArgumentParser()
+ parser.add_argument('tag_file')
+ parser.add_argument('-o', '--output', required=True)
+ parser.add_argument('--make-vars', required=True,
+ help='out/soong/make_vars-$(TARGET).mk')
+ parser.add_argument('--module-info', required=True,
+ help='out/target/product/$(TARGET)/module-info.json')
+ args = parser.parse_args()
+
+ # Load libraries from `out/soong/make_vars-$(TARGET).mk`.
+ llndk, vndk_sp, vndk = load_make_vars(args.make_vars)
+
+ # Load eligible list csv file.
+ with open(args.tag_file, 'r') as fp:
+ reader = csv.reader(fp)
+ header = next(reader)
+ data = dict()
+ for path, tag, comments in reader:
+ data[path] = [path, tag, comments]
+
+ # Delete non-existing libraries.
+ installed_paths = load_install_paths(args.module_info)
+ data = {
+ path: row
+ for path, row in data.items()
+ if path in installed_paths
+ }
+
+ # Reset all /system/${LIB} libraries to FWK-ONLY.
+ for path, row in data.items():
+ if posixpath.dirname(path) == '/system/${LIB}':
+ row[1] = 'FWK-ONLY'
+
+ # Update tags.
+ def update_tag(path, tag):
+ try:
+ data[path][1] = tag
+ except KeyError:
+ data[path] = [path, tag, '']
+
+ for name in llndk:
+ update_tag('/system/${LIB}/' + name + '.so', 'LL-NDK')
+
+ for name in vndk_sp:
+ update_tag('/system/${LIB}/vndk-sp/' + name + '.so', 'VNDK-SP')
+
+ for name in vndk:
+ update_tag('/system/${LIB}/' + name + '.so', 'VNDK')
+ update_tag('/system/${LIB}/vndk/' + name + '.so', 'VNDK')
+
+ # Write updated eligible list file.
+ with open(args.output, 'w') as fp:
+ writer = csv.writer(fp, lineterminator='\n')
+ writer.writerow(header)
+ writer.writerows(sorted(data.values()))
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/vndk/tools/definition-tool/vndk_definition_tool.py b/vndk/tools/definition-tool/vndk_definition_tool.py
index 083bb7cd9..75f54a6ed 100755
--- a/vndk/tools/definition-tool/vndk_definition_tool.py
+++ b/vndk/tools/definition-tool/vndk_definition_tool.py
@@ -187,14 +187,23 @@ class ELF(object):
ELFDATA2MSB: 'Big-Endian',
}
- _ELF_MACHINE_IDS = {
- 0: 'EM_NONE',
- 3: 'EM_386',
- 8: 'EM_MIPS',
- 40: 'EM_ARM',
- 62: 'EM_X86_64',
- 183: 'EM_AARCH64',
- }
+ EM_NONE = 0
+ EM_386 = 3
+ EM_MIPS = 8
+ EM_ARM = 40
+ EM_X86_64 = 62
+ EM_AARCH64 = 183
+
+ def _create_elf_machines(d):
+ elf_machine_ids = {}
+ for key, value in d.items():
+ if key.startswith('EM_'):
+ elf_machine_ids[value] = key
+ return elf_machine_ids
+
+ ELF_MACHINES = _create_elf_machines(locals())
+
+ del _create_elf_machines
@staticmethod
@@ -214,7 +223,7 @@ class ELF(object):
@staticmethod
def get_e_machine_from_name(name):
- return ELF._dict_find_key_by_value(ELF._ELF_MACHINE_IDS, name)
+ return ELF._dict_find_key_by_value(ELF.ELF_MACHINES, name)
__slots__ = ('ei_class', 'ei_data', 'e_machine', 'dt_rpath', 'dt_runpath',
@@ -252,7 +261,7 @@ class ELF(object):
@property
def elf_machine_name(self):
- return self._ELF_MACHINE_IDS.get(self.e_machine, str(self.e_machine))
+ return self.ELF_MACHINES.get(self.e_machine, str(self.e_machine))
@property
def is_32bit(self):
@@ -646,6 +655,22 @@ class TaggedDict(object):
def is_sp_ndk(tag_bit):
return bool(tag_bit & TaggedDict.SP_NDK)
+ @staticmethod
+ def is_vndk_sp(tag_bit):
+ return bool(tag_bit & TaggedDict.VNDK_SP)
+
+ @staticmethod
+ def is_vndk_sp_indirect(tag_bit):
+ return bool(tag_bit & TaggedDict.VNDK_SP_INDIRECT)
+
+ @staticmethod
+ def is_vndk_sp_indirect_private(tag_bit):
+ return bool(tag_bit & TaggedDict.VNDK_SP_INDIRECT_PRIVATE)
+
+ @staticmethod
+ def is_fwk_only_rs(tag_bit):
+ return bool(tag_bit & TaggedDict.FWK_ONLY_RS)
+
class TaggedPathDict(TaggedDict):
def load_from_csv(self, fp):
@@ -801,6 +826,7 @@ class ELFLinkData(object):
self.imported_ext_symbols = collections.defaultdict(set)
self._tag_bit = tag_bit
self.unresolved_symbols = set()
+ self.unresolved_dt_needed = []
self.linked_symbols = dict()
@property
@@ -815,6 +841,22 @@ class ELFLinkData(object):
def is_sp_ndk(self):
return TaggedDict.is_sp_ndk(self._tag_bit)
+ @property
+ def is_vndk_sp(self):
+ return TaggedDict.is_vndk_sp(self._tag_bit)
+
+ @property
+ def is_vndk_sp_indirect(self):
+ return TaggedDict.is_vndk_sp_indirect(self._tag_bit)
+
+ @property
+ def is_vndk_sp_indirect_private(self):
+ return TaggedDict.is_vndk_sp_indirect_private(self._tag_bit)
+
+ @property
+ def is_fwk_only_rs(self):
+ return TaggedDict.is_fwk_only_rs(self._tag_bit)
+
def add_dep(self, dst, ty):
self._deps[ty].add(dst)
dst._users[ty].add(self)
@@ -1035,9 +1077,15 @@ class ELFLinker(object):
ignored_patt = ELFLinker._compile_path_matcher(root, ignored_subdirs)
for path, elf in scan_elf_files(root):
+ # Ignore ELF files with unknown machine ID (eg. DSP).
+ if elf.e_machine not in ELF.ELF_MACHINES:
+ continue
+
+ # Ignore ELF files with matched path.
short_path = os.path.join('/', partition_name, path[prefix_len:])
if ignored_subdirs and ignored_patt.match(path):
continue
+
if alter_subdirs and alter_patt.match(path):
self.add_lib(alter_partition, short_path, elf)
else:
@@ -1082,6 +1130,7 @@ class ELFLinker(object):
dt_needed, lib.elf.dt_rpath, lib.elf.dt_runpath))
print('warning: {}: Missing needed library: {} Tried: {}'
.format(lib.path, dt_needed, candidates), file=sys.stderr)
+ lib.unresolved_dt_needed.append(dt_needed)
continue
lib.add_dep(dep, ELFLinkData.NEEDED)
imported_libs.append(dep)
@@ -1115,53 +1164,95 @@ class ELFLinker(object):
'/vendor/${LIB}',
'/vendor/${LIB}/vndk-sp',
'/system/${LIB}/vndk-sp',
+ '/vendor/${LIB}/vndk',
+ '/system/${LIB}/vndk',
'/system/${LIB}', # For degenerated VNDK libs.
)
VNDK_SP_SEARCH_PATH = (
'/vendor/${LIB}/vndk-sp',
'/system/${LIB}/vndk-sp',
- '/vendor/${LIB}', # To discover missing vndk-sp dependencies.
- '/system/${LIB}', # To discover missing vndk-sp dependencies.
+ '/vendor/${LIB}', # To discover missing VNDK-SP dependencies.
+ '/system/${LIB}', # To discover missing VNDK-SP dependencies or LL-NDK.
+ )
+
+ VNDK_SEARCH_PATH = (
+ '/vendor/${LIB}/vndk-sp',
+ '/system/${LIB}/vndk-sp',
+ '/vendor/${LIB}/vndk',
+ '/system/${LIB}/vndk',
+ '/system/${LIB}', # To discover missing VNDK dependencies or LL-NDK.
)
+
@staticmethod
def _subst_search_path(search_path, elf_class):
lib_dir_name = 'lib' if elf_class == ELF.ELFCLASS32 else 'lib64'
return [path.replace('${LIB}', lib_dir_name) for path in search_path]
- @staticmethod
- def _is_in_vndk_sp_dir(path):
- return os.path.basename(os.path.dirname(path)).startswith('vndk-sp')
+ @classmethod
+ def _get_dirname(cls, path):
+ return os.path.basename(os.path.dirname(path))
+
+ @classmethod
+ def _is_in_vndk_dir(cls, path):
+ return cls._get_dirname(path) == 'vndk'
+
+ @classmethod
+ def _is_in_vndk_sp_dir(cls, path):
+ return cls._get_dirname(path) == 'vndk-sp'
+
+ @classmethod
+ def _classify_vndk_libs(cls, libs):
+ vndk_libs = set()
+ vndk_sp_libs = set()
+ other_libs = set()
+ for lib in libs:
+ dirname = cls._get_dirname(lib.path)
+ if dirname == 'vndk':
+ vndk_libs.add(lib)
+ elif dirname == 'vndk-sp':
+ vndk_sp_libs.add(lib)
+ else:
+ other_libs.add(lib)
+ return (vndk_libs, vndk_sp_libs, other_libs)
def _resolve_elf_class_deps(self, elf_class, generic_refs):
+ # Classify libs.
+ lib_dict = self._compute_lib_dict(elf_class)
system_lib_dict = self.lib_pt[PT_SYSTEM].get_lib_dict(elf_class)
+ system_vndk_libs, system_vndk_sp_libs, system_libs = \
+ self._classify_vndk_libs(system_lib_dict.values())
+
vendor_lib_dict = self.lib_pt[PT_VENDOR].get_lib_dict(elf_class)
- lib_dict = self._compute_lib_dict(elf_class)
+ vendor_vndk_libs, vendor_vndk_sp_libs, vendor_libs = \
+ self._classify_vndk_libs(vendor_lib_dict.values())
+
+ vndk_libs = system_vndk_libs | vendor_vndk_libs
+ vndk_sp_libs = system_vndk_sp_libs | vendor_vndk_sp_libs
# Resolve system libs.
- system_libs = [lib for lib in system_lib_dict.values()
- if not self._is_in_vndk_sp_dir(lib.path)]
search_path = self._subst_search_path(
self.SYSTEM_SEARCH_PATH, elf_class)
resolver = ELFResolver(lib_dict, search_path)
self._resolve_lib_set_deps(system_libs, resolver, generic_refs)
- # Resolve vendor libs.
- vendor_libs = [lib for lib in vendor_lib_dict.values()
- if not self._is_in_vndk_sp_dir(lib.path)]
+ # Resolve vndk-sp libs
search_path = self._subst_search_path(
- self.VENDOR_SEARCH_PATH, elf_class)
+ self.VNDK_SP_SEARCH_PATH, elf_class)
resolver = ELFResolver(lib_dict, search_path)
- self._resolve_lib_set_deps(vendor_libs, resolver, generic_refs)
+ self._resolve_lib_set_deps(vndk_sp_libs, resolver, generic_refs)
- # Resolve vndk-sp libs
- vndk_sp = [lib for lib in lib_dict.values()
- if self._is_in_vndk_sp_dir(lib.path)]
+ # Resolve vndk libs
+ search_path = self._subst_search_path(self.VNDK_SEARCH_PATH, elf_class)
+ resolver = ELFResolver(lib_dict, search_path)
+ self._resolve_lib_set_deps(vndk_libs, resolver, generic_refs)
+
+ # Resolve vendor libs.
search_path = self._subst_search_path(
- self.VNDK_SP_SEARCH_PATH, elf_class)
+ self.VENDOR_SEARCH_PATH, elf_class)
resolver = ELFResolver(lib_dict, search_path)
- self._resolve_lib_set_deps(vndk_sp, resolver, generic_refs)
+ self._resolve_lib_set_deps(vendor_libs, resolver, generic_refs)
def resolve_deps(self, generic_refs=None):
self._resolve_elf_class_deps(ELF.ELFCLASS32, generic_refs)
@@ -1171,53 +1262,6 @@ class ELFLinker(object):
patt = re.compile('|'.join('(?:' + p + ')' for p in path_patterns))
return set(lib for lib in self.all_libs() if patt.match(lib.path))
- def compute_predefined_fwk_only_rs(self):
- """Find all fwk-only-rs libraries."""
- path_patterns = (
- '^/system/lib(?:64)?/(?:vndk-sp/)?libft2\\.so$',
- '^/system/lib(?:64)?/(?:vndk-sp/)?libmediandk\\.so',
- )
- return self.compute_path_matched_lib(path_patterns)
-
- def compute_predefined_vndk_sp(self):
- """Find all vndk-sp libraries."""
- path_patterns = (
- # Visible to SP-HALs
- '^.*/android\\.hardware\\.graphics\\.allocator@2\\.0\\.so$',
- '^.*/android\\.hardware\\.graphics\\.common@1\\.0\\.so$',
- '^.*/android\\.hardware\\.graphics\\.mapper@2\\.0\\.so$',
- '^.*/android\\.hardware\\.renderscript@1\\.0\\.so$',
- '^.*/libRSCpuRef\\.so$',
- '^.*/libRSDriver\\.so$',
- '^.*/libRS_internal\\.so$',
- '^.*/libbase\\.so$',
- '^.*/libbcinfo\\.so$',
- '^.*/libc\\+\\+\\.so$',
- '^.*/libcompiler_rt\\.so$',
- '^.*/libcutils\\.so$',
- '^.*/libhardware\\.so$',
- '^.*/libhidlbase\\.so$',
- '^.*/libhidltransport\\.so$',
- '^.*/libhwbinder\\.so$',
- '^.*/libutils\\.so$',
-
- # Only for o-release
- '^.*/android\\.hidl\\.base@1\\.0\\.so$',
- )
- return self.compute_path_matched_lib(path_patterns)
-
- def compute_predefined_vndk_sp_indirect(self):
- """Find all vndk-sp-indirect libraries."""
- path_patterns = (
- # Invisible to SP-HALs
- '^.*/libbacktrace\\.so$',
- '^.*/libblas\\.so$',
- '^.*/liblzma\\.so$',
- '^.*/libpng\\.so$',
- '^.*/libunwind\\.so$',
- )
- return self.compute_path_matched_lib(path_patterns)
-
def compute_predefined_sp_hal(self):
"""Find all same-process HALs."""
path_patterns = (
@@ -1358,6 +1402,19 @@ class ELFLinker(object):
ll_ndk = set(lib for lib in self.all_libs() if lib.is_ll_ndk)
sp_ndk = set(lib for lib in self.all_libs() if lib.is_sp_ndk)
+ # Find pre-defined libs.
+ fwk_only_rs = set(lib for lib in self.all_libs() if lib.is_fwk_only_rs)
+ predefined_vndk_sp = set(
+ lib for lib in self.all_libs() if lib.is_vndk_sp)
+ predefined_vndk_sp_indirect = set(
+ lib for lib in self.all_libs() if lib.is_vndk_sp_indirect)
+ predefined_vndk_sp_indirect_private = set(
+ lib for lib in self.all_libs()
+ if lib.is_vndk_sp_indirect_private)
+
+ # FIXME: Don't squash VNDK-SP-Indirect-Private into VNDK-SP-Indirect.
+ predefined_vndk_sp_indirect |= predefined_vndk_sp_indirect_private
+
# Find SP-HAL libs.
sp_hal = self.compute_predefined_sp_hal()
@@ -1382,9 +1439,6 @@ class ELFLinker(object):
sp_hal_dep = self.compute_closure(sp_hal, is_not_sp_hal_dep)
sp_hal_dep -= sp_hal
- # Find FWK-ONLY-RS libs.
- fwk_only_rs = self.compute_predefined_fwk_only_rs()
-
# Find VNDK-SP libs.
def is_not_vndk_sp(lib):
return lib.is_ll_ndk or lib.is_sp_ndk or lib in sp_hal or \
@@ -1392,7 +1446,6 @@ class ELFLinker(object):
follow_ineligible_vndk_sp, warn_ineligible_vndk_sp = \
self._parse_action_on_ineligible_lib(action_ineligible_vndk_sp)
- predefined_vndk_sp = self.compute_predefined_vndk_sp()
vndk_sp = set()
for lib in itertools.chain(sp_hal, sp_hal_dep):
for dep in lib.deps:
@@ -1426,13 +1479,22 @@ class ELFLinker(object):
# Find dependencies of unused predefined VNDK-SP libs.
def is_not_vndk_sp_indirect_unused(lib):
return is_not_vndk_sp_indirect(lib) or lib in vndk_sp_indirect
- vndk_sp_indirect_unused = self.compute_closure(
+ vndk_sp_unused_deps = self.compute_closure(
vndk_sp_unused, is_not_vndk_sp_indirect_unused)
+ vndk_sp_unused_deps -= vndk_sp_unused
+
+ vndk_sp_indirect_unused = set(lib for lib in predefined_vndk_sp_indirect
+ if self._is_in_vndk_sp_dir(lib.path))
+ vndk_sp_indirect_unused -= vndk_sp_indirect
vndk_sp_indirect_unused -= vndk_sp_unused
+ vndk_sp_indirect_unused |= vndk_sp_unused_deps
# TODO: Compute VNDK-SP-Indirect-Private.
vndk_sp_indirect_private = set()
+ assert not (vndk_sp & vndk_sp_indirect)
+ assert not (vndk_sp_unused & vndk_sp_indirect_unused)
+
# Define helper functions for vndk_sp sets.
def is_vndk_sp_public(lib):
return lib in vndk_sp or lib in vndk_sp_unused or \
@@ -1455,8 +1517,10 @@ class ELFLinker(object):
vndk_sp_indirect_unused.remove(lib)
vndk_sp_indirect.add(lib)
- closure = self.compute_closure({lib}, is_not_vndk_sp_indirect)
- closure -= vndk_sp
+ # Add the dependencies to vndk_sp_indirect if they are not vndk_sp.
+ closure = self.compute_closure(
+ {lib}, lambda lib: lib not in vndk_sp_indirect_unused)
+ closure.remove(lib)
vndk_sp_indirect_unused.difference_update(closure)
vndk_sp_indirect.update(closure)
@@ -1476,7 +1540,6 @@ class ELFLinker(object):
candidates = collect_vndk_ext(candidates)
# Find VNDK-SP-Indirect-Ext libs.
- predefined_vndk_sp_indirect = self.compute_predefined_vndk_sp_indirect()
vndk_sp_indirect_ext = set()
def collect_vndk_sp_indirect_ext(libs):
result = set()
@@ -1649,8 +1712,8 @@ class ELFLinker(object):
def _create_internal(scan_elf_files, system_dirs, system_dirs_as_vendor,
system_dirs_ignored, vendor_dirs,
vendor_dirs_as_system, vendor_dirs_ignored,
- extra_deps, generic_refs):
- graph = ELFLinker()
+ extra_deps, generic_refs, tagged_paths):
+ graph = ELFLinker(tagged_paths)
if system_dirs:
for path in system_dirs:
@@ -1678,19 +1741,20 @@ class ELFLinker(object):
def create(system_dirs=None, system_dirs_as_vendor=None,
system_dirs_ignored=None, vendor_dirs=None,
vendor_dirs_as_system=None, vendor_dirs_ignored=None,
- extra_deps=None, generic_refs=None):
+ extra_deps=None, generic_refs=None, tagged_paths=None):
return ELFLinker._create_internal(
scan_elf_files, system_dirs, system_dirs_as_vendor,
system_dirs_ignored, vendor_dirs, vendor_dirs_as_system,
- vendor_dirs_ignored, extra_deps, generic_refs)
+ vendor_dirs_ignored, extra_deps, generic_refs, tagged_paths)
@staticmethod
def create_from_dump(system_dirs=None, system_dirs_as_vendor=None,
vendor_dirs=None, vendor_dirs_as_system=None,
- extra_deps=None, generic_refs=None):
+ extra_deps=None, generic_refs=None, tagged_paths=None):
return ELFLinker._create_internal(
scan_elf_dump_files, system_dirs, system_dirs_as_vendor,
- vendor_dirs, vendor_dirs_as_system, extra_deps, generic_refs)
+ vendor_dirs, vendor_dirs_as_system, extra_deps, generic_refs,
+ tagged_paths)
#------------------------------------------------------------------------------
@@ -1760,6 +1824,43 @@ class GenericRefs(object):
#------------------------------------------------------------------------------
+# Module Info
+#------------------------------------------------------------------------------
+
+class ModuleInfo(object):
+ def __init__(self, json=None):
+ if not json:
+ self._mods = dict()
+ return
+
+ mods = collections.defaultdict(set)
+ installed_path_patt = re.compile(
+ '.*[\\\\/]target[\\\\/]product[\\\\/][^\\\\/]+([\\\\/].*)$')
+ for name, module in json.items():
+ for path in module['installed']:
+ match = installed_path_patt.match(path)
+ if match:
+ for path in module['path']:
+ mods[match.group(1)].add(path)
+ self._mods = { installed_path: sorted(src_dirs)
+ for installed_path, src_dirs in mods.items() }
+
+ def get_module_path(self, installed_path):
+ return self._mods.get(installed_path, [])
+
+ @staticmethod
+ def load(f):
+ return ModuleInfo(json.load(f))
+
+ @staticmethod
+ def load_from_path_or_default(path):
+ if not path:
+ return ModuleInfo()
+ with open(path, 'r') as f:
+ return ModuleInfo.load(f)
+
+
+#------------------------------------------------------------------------------
# Commands
#------------------------------------------------------------------------------
@@ -1857,6 +1958,8 @@ class ELFGraphCommand(Command):
'--aosp-system',
help='compare with AOSP generic system image directory')
+ parser.add_argument('--tag-file', help='lib tag file')
+
def get_generic_refs_from_args(self, args):
if args.load_generic_refs:
return GenericRefs.create_from_sym_dir(args.load_generic_refs)
@@ -1885,14 +1988,20 @@ class ELFGraphCommand(Command):
generic_refs = self.get_generic_refs_from_args(args)
+ if args.tag_file:
+ tagged_paths = TaggedPathDict.create_from_csv_path(args.tag_file)
+ else:
+ tagged_paths = None
+
graph = ELFLinker.create(args.system, args.system_dir_as_vendor,
args.system_dir_ignored,
args.vendor, args.vendor_dir_as_system,
args.vendor_dir_ignored,
args.load_extra_deps,
- generic_refs=generic_refs)
+ generic_refs=generic_refs,
+ tagged_paths=tagged_paths)
- return (generic_refs, graph)
+ return (generic_refs, graph, tagged_paths)
class VNDKCommandBase(ELFGraphCommand):
@@ -1902,8 +2011,6 @@ class VNDKCommandBase(ELFGraphCommand):
parser.add_argument('--no-default-dlopen-deps', action='store_true',
help='do not add default dlopen dependencies')
- parser.add_argument('--tag-file', help='lib tag file')
-
parser.add_argument(
'--action-ineligible-vndk-sp', default='warn',
help='action when a sp-hal uses non-vndk-sp libs '
@@ -1917,7 +2024,7 @@ class VNDKCommandBase(ELFGraphCommand):
def create_from_args(self, args):
"""Create all essential data structures for VNDK computation."""
- generic_refs, graph = \
+ generic_refs, graph, tagged_paths = \
super(VNDKCommandBase, self).create_from_args(args)
if not args.no_default_dlopen_deps:
@@ -1926,11 +2033,6 @@ class VNDKCommandBase(ELFGraphCommand):
'minimum_dlopen_deps.txt')
graph.load_extra_deps(minimum_dlopen_deps)
- if args.tag_file:
- tagged_paths = TaggedPathDict.create_from_csv_path(args.tag_file)
- else:
- tagged_paths = None
-
return (generic_refs, graph, tagged_paths)
@@ -2066,12 +2168,16 @@ class DepsInsightCommand(VNDKCommandBase):
def add_argparser_options(self, parser):
super(DepsInsightCommand, self).add_argparser_options(parser)
+ parser.add_argument('--module-info')
+
parser.add_argument(
'--output', '-o', help='output directory')
def main(self, args):
generic_refs, graph, tagged_paths = self.create_from_args(args)
+ module_info = ModuleInfo.load_from_path_or_default(args.module_info)
+
# Compute vndk heuristics.
vndk_lib = graph.compute_degenerated_vndk(
generic_refs, tagged_paths, args.action_ineligible_vndk_sp,
@@ -2120,6 +2226,10 @@ class DepsInsightCommand(VNDKCommandBase):
return deps
+ def collect_source_dir_paths(lib):
+ return [get_str_idx(path)
+ for path in module_info.get_module_path(lib.path)]
+
def collect_tags(lib):
tags = []
for field_name in _VNDK_RESULT_FIELD_NAMES:
@@ -2133,7 +2243,8 @@ class DepsInsightCommand(VNDKCommandBase):
32 if lib.elf.is_32bit else 64,
collect_tags(lib),
collect_deps(lib),
- collect_path_sorted_lib_idxs(lib.users)])
+ collect_path_sorted_lib_idxs(lib.users),
+ collect_source_dir_paths(lib)])
# Generate output files.
makedirs(args.output, exist_ok=True)
@@ -2172,8 +2283,12 @@ class DepsCommand(ELFGraphCommand):
'--symbols', action='store_true',
help='print symbols')
+ parser.add_argument('--module-info')
+
def main(self, args):
- generic_refs, graph = self.create_from_args(args)
+ generic_refs, graph, tagged_paths = self.create_from_args(args)
+
+ module_info = ModuleInfo.load_from_path_or_default(args.module_info)
results = []
for partition in range(NUM_PARTITIONS):
@@ -2204,8 +2319,12 @@ class DepsCommand(ELFGraphCommand):
else:
for name, assoc_libs in results:
print(name)
+ for module_path in module_info.get_module_path(name):
+ print('\tMODULE_PATH:', module_path)
for assoc_lib, symbols in assoc_libs:
print('\t' + assoc_lib)
+ for module_path in module_info.get_module_path(assoc_lib):
+ print('\t\tMODULE_PATH:', module_path)
for symbol in symbols:
print('\t\t' + symbol)
return 0
@@ -2246,7 +2365,7 @@ class DepsClosureCommand(ELFGraphCommand):
def main(self, args):
- generic_refs, graph = self.create_from_args(args)
+ generic_refs, graph, tagged_paths = self.create_from_args(args)
# Find root/excluded libraries by their paths.
def report_error(path):
@@ -2275,37 +2394,56 @@ class DepsClosureCommand(ELFGraphCommand):
return 0
-class ModuleInfo(object):
- def __init__(self, module_info_path=None):
- if not module_info_path:
- self.json = dict()
- else:
- with open(module_info_path, 'r') as f:
- self.json = json.load(f)
+class DepsUnresolvedCommand(ELFGraphCommand):
+ def __init__(self):
+ super(DepsUnresolvedCommand, self).__init__(
+ 'deps-unresolved',
+ help='Show unresolved dt_needed entries or symbols')
- def get_module_path(self, installed_path):
- for name, module in self.json.items():
- if any(path.endswith(installed_path)
- for path in module['installed']):
- return module['path']
- return []
+ def add_argparser_options(self, parser):
+ super(DepsUnresolvedCommand, self).add_argparser_options(parser)
+ parser.add_argument('--module-info')
+ parser.add_argument('--path-filter')
+
+ def _dump_unresolved(self, lib, module_info):
+ if not lib.unresolved_symbols and not lib.unresolved_dt_needed:
+ return
+
+ print(lib.path)
+ for module_path in module_info.get_module_path(lib.path):
+ print('\tMODULE_PATH:', module_path)
+ for dt_needed in sorted(lib.unresolved_dt_needed):
+ print('\tUNRESOLVED_DT_NEEDED:', dt_needed)
+ for symbol in sorted(lib.unresolved_symbols):
+ print('\tUNRESOLVED_SYMBOL:', symbol)
+ def main(self, args):
+ generic_refs, graph, tagged_paths = self.create_from_args(args)
+ module_info = ModuleInfo.load_from_path_or_default(args.module_info)
+
+ libs = graph.all_libs()
+ if args.path_filter:
+ path_filter = re.compile(args.path_filter)
+ libs = [lib for lib in libs if path_filter.match(lib.path)]
+
+ for lib in sorted(libs):
+ self._dump_unresolved(lib, module_info)
class CheckDepCommandBase(ELFGraphCommand):
def add_argparser_options(self, parser):
super(CheckDepCommandBase, self).add_argparser_options(parser)
- parser.add_argument('--tag-file', required=True)
-
parser.add_argument('--module-info')
@staticmethod
def _dump_dep(lib, bad_deps, module_info):
print(lib.path)
- for module_path in sorted(module_info.get_module_path(lib.path)):
+ for module_path in module_info.get_module_path(lib.path):
print('\tMODULE_PATH:', module_path)
for dep in sorted(bad_deps):
print('\t' + dep.path)
+ for module_path in module_info.get_module_path(dep.path):
+ print('\t\tMODULE_PATH:', module_path)
for symbol in lib.get_dep_linked_symbols(dep):
print('\t\t' + symbol)
@@ -2354,12 +2492,12 @@ class CheckDepCommand(CheckDepCommandBase):
return num_errors
def main(self, args):
- generic_refs, graph = self.create_from_args(args)
+ generic_refs, graph, tagged_paths = self.create_from_args(args)
tagged_paths = TaggedPathDict.create_from_csv_path(args.tag_file)
tagged_libs = TaggedLibDict.create_from_graph(graph, tagged_paths)
- module_info = ModuleInfo(args.module_info)
+ module_info = ModuleInfo.load_from_path_or_default(args.module_info)
num_errors = self._check_vendor_dep(graph, tagged_libs, module_info)
@@ -2412,12 +2550,12 @@ class CheckEligibleListCommand(CheckDepCommandBase):
return num_errors
def main(self, args):
- generic_refs, graph = self.create_from_args(args)
+ generic_refs, graph, tagged_paths = self.create_from_args(args)
tagged_paths = TaggedPathDict.create_from_csv_path(args.tag_file)
tagged_libs = TaggedLibDict.create_from_graph(graph, tagged_paths)
- module_info = ModuleInfo(args.module_info)
+ module_info = ModuleInfo.load_from_path_or_default(args.module_info)
num_errors = self._check_eligible_vndk_dep(graph, tagged_libs,
module_info)
@@ -2432,7 +2570,6 @@ class DepGraphCommand(ELFGraphCommand):
def add_argparser_options(self, parser):
super(DepGraphCommand, self).add_argparser_options(parser)
- parser.add_argument('--tag-file', required=True)
parser.add_argument('--output', '-o', help='output directory')
def _get_tag_from_lib(self, lib, tagged_paths):
@@ -2487,7 +2624,7 @@ class DepGraphCommand(ELFGraphCommand):
return data, violate_libs
def main(self, args):
- generic_refs, graph = self.create_from_args(args)
+ generic_refs, graph, tagged_paths = self.create_from_args(args)
tagged_paths = TaggedPathDict.create_from_csv_path(args.tag_file)
data, violate_libs = self._get_dep_graph(graph, tagged_paths)
@@ -2524,6 +2661,7 @@ def main():
register_subcmd(DepsCommand())
register_subcmd(DepsClosureCommand())
register_subcmd(DepsInsightCommand())
+ register_subcmd(DepsUnresolvedCommand())
register_subcmd(CheckDepCommand())
register_subcmd(CheckEligibleListCommand())
register_subcmd(DepGraphCommand())