aboutsummaryrefslogtreecommitdiff
path: root/java/platform_bootclasspath.go
Commit message (Collapse)AuthorAgeFilesLines
...
* | Workaround to make AlwaysUsePrebuiltSdks() work with platform_bootclasspathPaul Duffin2021-05-191-2/+9
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The AlwaysUsePrebuiltSdks() causes all java_sdk_library_import modules to be preferred over the source, i.e. as if they had prefer: true set. That interacts badly with the work that is being done to integrate the bootclasspath_fragment/platform_bootclasspath modules into the build. It would work fine once that integration has been completed but in the interim it causes problems. e.g. it does not cause a problem in AOSP because those java_sdk_library_import modules that are affected have already been integrated into the build properly. Unfortunately, internally that is not the case because there are java_sdk_library/java_sdk_library_import modules that still need to be updated. Before the java_sdk_library_import can be safely preferred each java_sdk_library/java_sdk_library_import module that contributes to the bootclasspath must: * Be in the contents of matching bootclasspath_fragment and prebuilt_bootclasspath_fragment modules. * Have an apex and one of a prebuilt_apex/apex_set that contains the dex implementation jar and lists the prebuilt_bootclasspath_fragment name in its exported_bootclasspath_fragments property. Safely preferred in this context means that the whole build will continue to work rather than the current situation which is that only some of the build will work and some will fail if an attempt is actually made to build it. Unfortunately, many java_sdk_library_import modules are missing: * The prebuilt_bootclasspath_fragment. * The exported_bootclasspath_fragments property on the prebuilt_apex/apex_set that contains them. Together these cause the following symptoms: 1. The java_sdk_library_import does not have a dex implementation jar. 2. The java_sdk_library_import does not have a myapex variant. These workarounds will avoid Soong reporting build failures. However, the build will still fail if an attempt is made to build anything produced by the platform-bootclasspath, e.g. hidden API processing or a system image. Bug: 188505921 Bug: 179354495 Test: m TARGET_BUILD_APPS=Calendar Change-Id: I3226e21cd6a7f9e4d6bbe94e54129ac5e1d4c679 Merged-In: I3226e21cd6a7f9e4d6bbe94e54129ac5e1d4c679
* Generate monolithic hidden API files direct from class jarsPaul Duffin2021-05-141-112/+32
| | | | | | | | | | | | | | | | | | | | | Previously, the monolithic hidden API files, e.g. hiddenapi-index.csv file, were generated in two steps. First, each module created its own files using the information in its class jars. Then, the monolithic files were created by merging those module specific files into a larger file. This change switches to generating the monolithic files directly from the class jar files and bypassing the intermediate files. In order to ensure that this change did not change the monolithic files it is necessary for the hiddenapi-metadata.csv to go through a reformatting step. Hopefully, this will be able to be removed in a follow up change. Bug: 179354495 Test: verified that the monolithic out/soong/hiddenapi/... files are unchanged by this change Change-Id: I5a78e747516014b7c0f402a4b4431b14be6a84b2
* Use java_sdk_library in bootclasspath_fragment contents as stubsPaul Duffin2021-05-141-1/+1
| | | | | | | | | | | A java_sdk_library specified in the bootclasspath_fragment contents must be providing APIs for the bootclasspath_fragment and so must be treated as if they were specified in the stub_libs. This avoids having to specify them in both contents and stub_libs. Bug: 179354495 Test: m nothing Change-Id: I535065ee1a79b439e2676f35e06a75d4626adcaf
* Generate hidden API flags for a bootclasspath_fragmentPaul Duffin2021-05-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | This change adds support for generating the hidden API flags for the contents of a bootclasspath_fragment. Currently, it will only work for the art-bootclasspath-fragment as it has no support for creating dependencies between bootclasspath_fragment modules which will be needed for handling any other bootclasspath_fragment. The hidden API flag generation added by this change is completely separate to the normal hidden API processing and is not as yet encoded in dex jars so will have no effect on the runtime. The generated files are provided for use by other modules and copied into the sdk snapshot. That is needed to allow the build to verify that the hidden API flags generated by the individual bootclasspath_fragment modules are consistent with the flags generated for the whole bootclasspath, whether building from source or prebuilts. Bug: 179354495 Test: m art-module-sdk m out/soong/.intermediates/art/build/boot/art-bootclasspath-fragment/android_common_apex10000/modular-hiddenapi/all-flags.csv m out/soong/hiddenapi/hiddenapi-flags.csv - test that the former file is a subset of the latter and that where they overlap they are identical. Change-Id: Ie27303e2960953db1b7abe95510e3bca4411b09a
* Build boot images in bootclasspath_fragment/platform_bootclasspathPaul Duffin2021-05-121-0/+4
| | | | | | | | | | | | | | | | | | Moves the building of boot images from the dexpreopt_bootjars singleton to the bootclasspath_fragment and platform_bootclasspath. The art boot image is generated by the art-bootclasspath-fragment module and the framework boot image by the platform-bootclasspath module. This does temporarly duplicate the generation of an identical boot profile for each image. As part of the work to modularize the boot image profile each image will have its own custom default boot profile. Bug: 177892522 Bug: 186455808 Test: m droid and TreeHugger Change-Id: I23cf05ec7648749b21c7cf6fcba282b46649a981
* Move copying of dex files from dexpreopt_bootjars singletonPaul Duffin2021-05-121-2/+9
| | | | | | | | | | The art dex files are copied in the bootclasspath_fragment and the non-updatable and updatable dex files are copied in the platform_bootclasspath. Bug: 177892522 Test: m nothing Change-Id: I5d3d533d1a7a9f8e7ae20c12eb33029a898a2cd6
* Generate empty classpaths.proto for bootclasspath_fragment.go.satayev2021-05-111-0/+1
| | | | | | | | | | | | | - Adds all required details for bootclasspath_fragment to implement classpath_fragment. - Keeps the actual boot jars in platform-bootclasspath to begin with. - Makes sure to put the file in apex/etc/classpath on device. Note that for platform versions of classpath fragment AndroidMkEntries perform the installation, while for APEXes it must be plumbed via apex.go. Bug: 180105615 Test: m && launch_cvd; atest CtsClasspathsTestCases Change-Id: I6101ebdf5b8bcbe95c0b7ce21f3f67a2685aef50
* Declare ConfiguredJarList in specific fragment implementations.satayev2021-05-071-2/+19
| | | | | | | | | | | | | Each specific classpath_fragment module knows what jars must be part of the corresponding classpaths.proto config. Note that bootclasspath_fragment does not implement classpath_fragment yet, thus all boot jars and all system server jars go into corresponding platform classpaths. Bug: 180105615 Test: m && launch_cvd; atest CtsClasspathsTestCases Change-Id: I6a8c7b0a5d17d62e790a441b8e2c5c1a816e7f30
* Split SYSTEMSERVERCLASSPATH entries from platform_bootclasspath.satayev2021-05-071-2/+2
| | | | | | | | | | | Boot jars are different to system server jars at build level, due to added complexity of dexpreopt. As a logical separation add a new classpath fragment type and split existing classpaths.proto generation into relevant pieces. Bug: 180105615 Test: m && launch_cvd; atest CtsClasspathsTestCases Change-Id: I88bec09fc920166ffd0092faef980754ddeb6593
* Rename classpath_fragment.go methods for better readability.satayev2021-05-061-2/+2
| | | | | | Bug: 180105615 Test: m nothing Change-Id: Ic663c22e5b7cbab487dc1fe99805e08843c3213d
* Support dex_import on platform_bootclasspathPaul Duffin2021-05-041-0/+2
| | | | | | | | | Maintain compatibility with previous behavior by ignoring dex_import during hidden API processing. Bug: 179354495 Test: m nothing Change-Id: I976b02129bf981b7b61dce233567d6f89e04f92d
* Merge "Fix build failure when building unbundled apps (second try)"Paul Duffin2021-04-301-17/+56
|\
| * Fix build failure when building unbundled apps (second try)Paul Duffin2021-04-301-17/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous attempt, which simply skipped the hidden API processing altogether when unbundled builds were enabled failed when attempting to build module snapshots as while they enabled an unbundled build they actually need the hidden API processing to be performed. This change just checks whether missing dependencies are allowed and if so it fakes up any missing files so that the build will only fail if they are not present AND they are used. Bug: 186695448 Bug: 185828824 Test: tapas Calendar m -j60 Change-Id: Ie13fed05af0aba51f45f6791fce944d0e4285037
* | Move configuration checks from getBootImageJarPaul Duffin2021-04-301-0/+41
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | The getBootImageJar function will be removed once the boot image creation has been moved to the platform_bootclasspath and bootclasspath_fragment module types. However, the consistency checks that it performs are still useful so this change moves them out first. The ART boot image related checks are now performed in the bootclasspath_fragment module type. A previous change accidentally disabled the checks when the contents property was not empty which has been fixed. Also, the error messages have been tweaked to make it clear that the art-bootclasspath-fragment is now the source of truth as to its contents not the configuration. The framework boot image related checks are now performed in the platform_bootclasspath module type. Initially, this change included an extra check to make sure that UpdatableBootJars comes from updatable APEXes but that broke because framework-wifi and framework-tethering are not currently marked as updatable in AOSP. Bug: 177892522 Test: m nothing Change-Id: I80fb600fa2c7cec4566b3461c6a33c4c6f0743f4
* Merge "Revert "Fix build failure when building unbundled apps""Treehugger Robot2021-04-301-11/+1
|\
| * Revert "Fix build failure when building unbundled apps"Vishnu Nair2021-04-301-11/+1
| | | | | | | | | | | | | | | | | | This reverts commit c027119e73e9a211b7d2c1cafc978a750f11e920. Reason for revert: b/186797512 Test: vendor/google/build/build_mainline_modules.sh -j80 Change-Id: I2bb062cce09ac6717702c4f6b110acbb2887adec
* | Merge "Fix build failure when building unbundled apps"Paul Duffin2021-04-291-1/+11
|\|
| * Fix build failure when building unbundled appsPaul Duffin2021-04-291-1/+11
| | | | | | | | | | | | | | | | Bug: 186695448 Bug: 185828824 Test: tapas Calendar m -j60 Change-Id: I1c5365f6d2afb2f2d159e6f6ed004647ec6d2427
* | Move generation of hidden API make vars to platform_bootclasspathPaul Duffin2021-04-291-1/+11
|/ | | | | | | | | Bug: 179354495 Test: rm out/soong/make_vars* m nothing grep INTERNAL_PLATFORM_HIDDENAPI_FLAGS out/soong/make_vars* - make sure it is still out/soong/hiddenapi/hiddenapi-flags.csv Change-Id: I86e56512a9a2091f446bad25294d41ea1f4341ee
* Make platform_bootclasspath a singleton modulePaul Duffin2021-04-291-3/+15
| | | | | | | | | | | This is needed in order to allow it to implement MakeVars so it can create make variables just like the dexpreopt_bootjars and hiddenapi singletons currently do. Bug: 177892522 Bug: 179354495 Test: m nothing Change-Id: Ida5bf8abeecde531e1f6430151650065445804ac
* Move dumpOatRules to platform_bootclasspathPaul Duffin2021-04-291-0/+2
| | | | | | | | | | Bug: 177892522 Test: m oat-dump-boot - test output to make sure that this change does not change the generated files, at least no more than no changes do as the output from this rule is not deterministic. See b/186459873. Change-Id: Ib2b4203d9bb1fd0ee9443aee4e58b54b38b491cf
* Move generateUpdatableBcpPackagesRule to platform_bootclasspathPaul Duffin2021-04-291-2/+5
| | | | | | | | | | | | | Changes generateUpdatableBcpPackagesRule to use ModuleContext instead of SingletonContext and moves the call from dexpreoptBootJar's GenerateSingletonBuildActions method to platform_bootclasspath's GenerateAndroidBuildActions. Bug: 177892522 Test: lunch art_module_arm64 m out/soong/module_arm64/dex_bootjars/updatable-bcp-packages.txt - make sure it is not affected by this change Change-Id: I9741ae1eb9573cafe12dd7a17dc1d8449b224dc8
* Differentiate between art, non-updatable and updatable modulesPaul Duffin2021-04-291-10/+27
| | | | | | | | Bug: 177892522 Test: lunch art_module_arm64 m out/soong/module_arm64/dex_bootjars/updatable-bcp-packages.txt - make sure it is not affected by this change Change-Id: I3d35f1664cbbaba5df3f5809859dd9815a26d05d
* Extract logic to gather deps added for <apex>:<module> pairsPaul Duffin2021-04-291-8/+2
| | | | | | | | | | | | | | | Trades having to traverse a module's direct dependencies multiple times for reusable code. While at the minute the amount of duplicated code is small (checking a tag and appending to a list) follow up changes will modify the gatherApexModulePairDepsWithTag module to improve error reporting greatly increasing the benefit of deduping. The cost of traversing a module's direct dependencies is very small as there will be only a very few dependencies. Bug: 177892522 Test: m nothing Change-Id: I16389102abd8038e1bfa52b63f4153bdf92ff553
* Move bootFrameworkProfileRule to platform_bootclasspathPaul Duffin2021-04-281-3/+21
| | | | | | | | | | | | | | | | | Changes bootFrameworkProfileRule to use ModuleContext instead of SingletonContext and moves the call from dexpreoptBootJar's GenerateSingletonBuildActions method to platform_bootclasspath's GenerateAndroidBuildActions. Changing the context also allows the code to switch from bootFrameworkProfileRule to GetGlobalSoongConfig. Also extracts the shouldBuildBootImages function so it can be used by platform_bootclasspath to preserve the existing behavior. Bug: 177892522 Test: m droid Change-Id: I30d3ca10be7f84348ad3aa9cc984dd15b8f6f4e9
* Remove unused setting of BootImageInfo for platform_bootclasspathPaul Duffin2021-04-251-11/+0
| | | | | | | | | The BootImageInfo is used to populate an apex. A platform_bootclasspath module cannot be part of an apex so does not need to provide one. Bug: 177892522 Test: m nothing Change-Id: I1e1c4962d9d8106a12af80107c4c35828f54ff81
* Generalize the platformBootclasspathDepsMutatorPaul Duffin2021-04-231-20/+13
| | | | | | | | | | Adds a BootclasspathDepsMutator that is currently only implemented by the platform_bootclasspath but which can be implemented by bootclasspath_fragment too. Bug: 177892522 Test: m nothing Change-Id: Ibe35854281004d6e40bf1f797144fb582e8c08b9
* Extract general bootclasspath related code into java/bootclasspath.goPaul Duffin2021-04-231-106/+4
| | | | | | | | | | | | The platform_bootclasspath and bootclasspath_fragment modules provide different capabilities but are related and so have some common functionality. This change moves some platform_bootclasspath code that will be of use for bootclasspath_fragment in future into a separate file. Bug: 177892522 Test: m nothing Change-Id: I827b85e33d16155fcc920d553100c9e99267dc4e
* Move monolithic stub flags generation to platform_bootclasspathPaul Duffin2021-04-221-0/+26
| | | | | | | | | | | | | | | | As part of that this change: * Moves code that will be common to platform_bootclasspath and bootclasspath_fragment from hiddenapi_singleton.go into hiddenapi_modular.go. * Fixes the tests in hiddenapi_singleton_test.go but intentionally does not rename them or move them into a more appropriate place so as to make it easier to see the differences. A TODO has been added and these will be cleaned up in a follow up change. Bug: 179354495 Test: verified that the monolithic out/soong/hiddenapi/... files are unchanged by this change Change-Id: I680e4dab2e6bdf4a655fa9f255c195175904667e
* platform_bootclasspath: aggregate hidden API flag files from fragmentsPaul Duffin2021-04-161-4/+13
| | | | | | | | | | | | | Aggregates hidden API flag files from the bootclasspath_fragments which will allow the hidden API flag files in frameworks/base/boot/hiddenapi to be modularized and moved to the appropriate repo. Bug: 177892522 Test: verified that the out/soong/hiddenapi/... files are unchanged by this change also verified that changes to the fragment provided files do affect the monolithic files. Change-Id: Ifce14c9ef24c58c7ab1085475d85b61cfbfefecd
* Merge "Generate classpaths.proto config for *CLASSPATH variables."satayev2021-04-151-10/+14
|\
| * Generate classpaths.proto config for *CLASSPATH variables.Artur Satayev2021-04-141-10/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of embedding "raw" values from PRODUCT_*_CLASSPATH variables into /etc/classpath, encode them into classpaths.proto binary format. Existing platform_bootclasspath{} module is used to generate the whole monolithic config to begin with. Later, the config will be split among individual bootclasspath_fragment and systemserverclasspath_fragment modules. Bug: 180105615 Test: m && launch_cvd Change-Id: Ia66f521f8976ff78a62ecf91131d26db21064de7
* | Rename hidden API types ..Augmentation.. to ..FlagFile..Paul Duffin2021-04-151-2/+2
| | | | | | | | | | | | | | | | Augmentation was too abstract this makes it clearer. Bug: 177892522 Test: m nothinge Change-Id: I60ad005e68d9e15b01bcb46bc6a9b7f84d8bfd43
* | Move hidden API metadata file rule to platform_bootclasspathPaul Duffin2021-04-141-0/+20
| | | | | | | | | | | | | | | | | | | | This change moves the monolithic hidden API index file creation rule from the hiddenAPISingleton into the platform_bootclasspath. Bug: 179354495 Test: verified that the out/soong/hiddenapi/... files are unchanged by this change Change-Id: Ib25be3618e30a83dc2929a18062eb58eefdabefb
* | Move hidden API index file rule to platform_bootclasspathPaul Duffin2021-04-141-0/+18
| | | | | | | | | | | | | | | | | | | | | | | | This change moves the monolithic hidden API index file creation rule from the hiddenAPIIndexSingleton into the platform_bootclasspath. It also moves the corresponding test from java/hiddenapi_singleton_test.go to java/platform_bootclasspath_test.go. Bug: 179354495 Test: verified that the out/soong/hiddenapi/... files are unchanged by this change Change-Id: Ia295d0f7ae9b51ea816f16921aa42339ed91704e
* | Ensure boot jar modules have been initialized properly for hidden APIPaul Duffin2021-04-141-5/+25
| | | | | | | | | | | | | | | | | | | | Checks to make sure that every module that is part of the platform bootclasspath has been initialized property for hidden API processing. Bug: 177892522 Test: verified that the out/soong/hiddenapi/... files are unchanged by this change Change-Id: Ic4368963f2011784b537b8aebf5ef97ea22b2db5
* | prebuilt_apex created ApexInfo must not include prebuilt_ prefixPaul Duffin2021-04-131-1/+24
|/ | | | | | | | | | | | | | | | | | | | | | | | | As part of the work to modularize the hiddenAPI processing the generation of the monolithic hidden API index file needs to be moved to the platform_bootclasspath module type. Doing that broke the TestBootDexJarsFromSourcesAndPrebuilts tests which checks the inputs to the rule that creates that file. Fixing that required added a platform_bootclasspath module to the test fixture for those tests which highlighted an issue with the prebuilt_apex module. Previously, when the prebuilt_apex created apex variants it would use its own name as the apex variant name, even when that name included the prebuilt_ prefix. That broke the platform_bootclasspath logic as it was looking for apex variants for "myapex" but the only ones available were "prebuilt_myapex". This change ensures that it always uses the unprefixed name and fixes the TestNoUpdatableJarsInBootImage to match. This also adds some improved error reporting in platform_bootclasspath which helped debug this problem. Bug: 177892522 Test: m nothing Change-Id: I3e88b5cec767f77dcc0e94b3ae38b499d07eadf0
* Support UNSAFE_DISABLE_HIDDENAPI_FLAGS in platform_bootclasspathPaul Duffin2021-04-131-3/+17
| | | | | | | | | | | | | | | | Previously attempting to use m UNSAFE_DISABLE_HIDDENAPI_FLAGS would cause a build failure. It is necessary when UNSAFE_DISABLE_HIDDENAPI_FLAGS=true to create empty files for the monolithic files so that those usages which are not protected by the build flag, e.g. in dists or CTS tests like CtsHiddenApiBlocklistTestApiTestCases do not cause ninja failures due to reliance on a file that does not exist and has no rule to create it. Bug: 177892522 Test: m nothing m UNSAFE_DISABLE_HIDDENAPI_FLAGS=true CtsHiddenApiBlocklistTestApiTestCases Change-Id: I05d0b3680dbc0b5b7c7c0d792550faf848829647
* Remove noop code from generateHiddenAPIBuildActionsPaul Duffin2021-04-131-10/+4
| | | | | | | | | Change https://r.android.com/1673266 introduced some code that does nothing. This change removes that. Bug: 177892522 Test: m nothing Change-Id: I349b17c7fe7e2f68a807dab43a4300da7fe0ad4d
* Export monolithic hidden API files from platform_bootclasspathPaul Duffin2021-04-131-0/+50
| | | | | | | | | | | | | | | | | | | | | Makes the monolithic hidden API files accessible from the platform_bootclasspath so they can be output to the dist build target and used by other modules, e.g. by doing something like this: java_resources: [ ":platform-bootclasspath{hiddenapi-flags.csv}", ], It makes the paths relative to the out/soong/hiddenapi directory rather than the out/soong directory to make them easier to use in the java_resources property without changing the structure of the APK. Without that attempting to use them in a java_resources property will result in them being copied to a hiddenapi/ within the APK instead of being used at the top level as existing APKs like CtsHiddenApiBlocklistTestApiTestCases expect. Bug: 177892522 Test: m nothing Change-Id: I829412fc7d25411e0c2e0713d0d219a18f4af2ee
* Move generation of global hidden API flags to platform_bootclasspathPaul Duffin2021-04-121-1/+25
| | | | | | | | | | | | | | | | | | | This change moves the generation of the global hidden API flags from the singleton to the platform_bootclasspath module. It involves: 1. Moving the ruleToGenerateHiddenApiFlags to hiddenapi_modular.go. 2. Adding HiddenAPIAugmentationProperties to be used by the platform_bootclasspath type. 3. Moving the file paths into the platform-bootclasspath module definition in frameworks/base/boot/Android.bp. The flagsRule is kept as a placeholder for now. The emptyFlagsRule is also kept so that builds continue to work even when the frameworks/base repository is not present. Bug: 177892522 Test: verified that the out/soong/hiddenapi/... files are unchanged by this change Change-Id: Idf4dd414a016831bfe04a01f93234c1c33819881
* Allow platform_bootclasspath to specify contributing fragmentsPaul Duffin2021-04-081-0/+50
| | | | | | | | | Adds the fragments property to the platform_bootclasspath to allow the fragments that contribute to it to be specified. Bug: 177892522 Test: m nothing Change-Id: I14f83d9336f6984442c7315cc86dfdd0a0fd2d20
* Add dependencies from platform_bootclasspath to contentsPaul Duffin2021-04-081-0/+93
| | | | | | | | | | | | | | | Adds a FinalDeps mutator to add dependencies from the platform_bootclasspath to the configured boot jars which can be from either the platform or any apex. It adds dependencies for every configured boot jar, whether in ArtApexJars, BootJars or UpdatableBootJars. At the moment the dependencies are only used for testing purposes but following changes will make more use of them. Bug: 177892522 Test: m nothing Change-Id: I981305bf45bc20539a3d36987252f490e2b885cc
* Add a new platform_bootclasspath module typePaul Duffin2021-03-311-0/+74
Initially, this is just a placeholder but functionality will be added in follow up changes. Bug: 177892522 Test: m nothing Change-Id: I890b0d5a117c51a19c9ac5df98c766761d3aa16c