aboutsummaryrefslogtreecommitdiff
path: root/scripts/construct_context.py
Commit message (Collapse)AuthorAgeFilesLines
* Move CLC construction to Ninja phase.Jiakai Zhang2023-05-301-36/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before this change, dexpreopt was often broken with optional libraries. This was because the CLC construction was done in Soong at an early stage, where we don't have sufficient information to determine whether an optional library is installed or not. For example, the "Settings" package uses an optional library called "androidx.window.extensions". On some devices, the library is installed, but on some other devices, it's not. Soong always adds the library to the CLC, meaning the CLC is wrong for devices which don't have the library. This change fixes the problem. See the tests below. After this change, the CLC construction is done by a Python script invoked at a very late stage. It uses product_packages.txt, which is generated by Make, to determine whether an optional library is installed or not, and filter out libraries that are not installed. Note that optional libraries are still added as dependencies by Soong. This is because dependencies have to be added at an early stage. This means what dex2oat eventually uses will be a subset of the dependencies, which is fine. Bug: 282877248 Test: m Test: atest construct_context_test Test: - 1. lunch aosp_cf_x86_64_phone-userdebug && m 2. Check the .invocation file of the "Settings" package (defined in .bp file) 3. See androidx.window.extensions Test: - 1. lunch aosp_redfin-userdebug && m 2. Check the .invocation file of the "Settings" package (defined in .bp file) 3. Don't see androidx.window.extensions Test: Check the .invocation file of the "Dialer" package (defined in .mk file) Test: - 1. Build a Pixel 5 system image and flash it to a Pixel 5 device. 2. adb shell pm art dump 3. See "reason=prebuilt" instead of "reason=vdex". (https://diff.googleplex.com/#key=fB6Ls9q2QGSN, before: left, after: right) Change-Id: Ia112bd7c2328373e68db6bffb74bf34030f683d8
* Apply pylint to scripts/construct_context*.pySpandan Das2021-08-261-38/+59
| | | | | | | | | | | | | | 1. Run pyformat scripts/construct_context.py -s 4 --force_quote_type none -i to fix formatting 2. Wrap #pylint: [disable|enable]=line-too-long in tests Test: m construct_context construct_context_test Test: pylint --rcfile tools/repohooks/tools/pylintrc build/soong/scripts/construct_context.py build/soong/scripts/construct_context_test.py Bug: 195738175 Change-Id: I2e756b17aae3e70ddaa03356c78f1f2f85c0f6a5
* Allow modules that don't run verify_uses_libraries to have nonempty CLC.Ulya Trafimovich2021-03-221-2/+2
| | | | | | | | | | | | | | | | There are modules that would have passed verify_uses_library check, but don't run it for some reason (the check gets enabled either with an explicit setting, or if the module has nonempty <ues-library> lists in the build properties). Previously all such modules were assumed to have empty CLC, which is not always true. In particular, compatibility libraries are ignored, which affected e.g. Calendar and messaging apps. This CL gives such apps a chance to have correct CLC. The goal for the future is to enforce verify_library_check by default. Bug: 132357300 Test: lunch aosp_cf_x86_64_phone-userdebug && m Change-Id: Iea3be0fc9d7775c52950848b5a3fd3b7fcd36c53
* Move part of logic from construct_context.py to Soong.Ulya Trafimovich2020-10-271-26/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | construct_context.py is a script that runs at Ninja stage and constructs class loader context arguments for dex2oat. Previously it accepted lists of library paths and concatenated them into one class loader context string. The script also handled the dependency of "android.hidl.manager" on "android.hidl.base" that is not tracked by the build system and must be handled in a special way. Now that class loader context representation is going to change from flat lists to trees, passing paths to individual libraries as script arguments is no longer possible, because a list of paths cannot represent a class loader context tree. Passing the trees in a serialized form is also inconvenient, because the script would have to parse them, which would complicate it a lot. Therefore this patch ports all the concatenation and "android.hidl.base" handling to Soong. It is not possible to port the remaining script to Soong because Soong has no information about the targetSdkVersiion of the dexpreopted apps (it is in the manifest and sometimes in an APK, and has to be extracted at Ninja time). Test: construct_context_test.py Test: new subtests in TestUsesLibs Test: lunch aosp_cf_x86_phone-userdebug && m Bug: 132357300 Change-Id: Icdb03cf00d1e27e4cff3844b89bfaec4de502dd7
* Rewrite construct_context.sh in Python.Ulya Trafimovich2020-07-011-0/+90
This allows to reuse SDK version comparison routine from other Python scripts. With the addition of non-numeric versions comparison has become more complex, and the deleted shell script did it incorrectly: it used comparisons like `[[ "S" -lt 28 ]]` which results in "true" as strings are converted to zero in numeric context. This resulted in adding legacy libraries to class loader context of apps targeting recent SDK versions. The error was masked because currently there is only one non-AOSP app that uses the script (GoogleDialer), and it targets numeric SDK version. Test: lunch aosp_cf_x86_phone-userdebug && m Bug: 132357300 Change-Id: I26e752e29b5453fd3e29d5dbfbe4d9df9c0a55b7