summaryrefslogtreecommitdiff
path: root/sdk/update.go
AgeCommit message (Collapse)Author
2025-01-17Convert licensesPropertyFlattener to use ModuleProxy. Yu Liu
Bug: 377723687 Test: Unit tests and compare the ninja and mk files generated. Change-Id: Iff8fd64e3938cde8950d8144f03a5fbde8bdfe6e
2024-11-26Ignore missing deps of module sdk during soong analysis Spandan Das
The module sdk dep might not exist in the branch. This CL moves the error out of soong analysis phase and into the ninja execution phase. Test: will use go/abtd Bug: 380331248 Change-Id: I63d0db2d63a969b4cd43064eb4f5169f07cfd600
2024-09-12Merge "Add HasMutatorFinished" into main Cole Faust
2024-09-11Merge "Remove apex_available allowlist" into main Treehugger Robot
2024-09-11Add HasMutatorFinished Cole Faust
To enforce that selects are only evaluated after a certain point in a followup cl. Bug: 323382414 Test: m nothing --no-skip-soong-tests Change-Id: Ib215fedb904aa2e5f4d65cfd26a23f527eb4983e
2024-09-10Merge "Improve docs about //visibility:public" into main Treehugger Robot
2024-09-10Improve docs about //visibility:public Spandan Das
https://r.android.com/3252814 modified the visibility to //visibility:public to account for visibility skew between development and release branches. Drop the comment about stub libraries being safe to use by any _rdep_. There might be cases where this is not true. Test: N/A Bug: 239189932 Change-Id: I74ca661a40384d480148f5e18f76495e837c58e3
2024-09-05Merge "Change visibility of module sdk prebuilts to //visibility:public" ↵ Spandan Das
into main
2024-09-04Change visibility of module sdk prebuilts to //visibility:public Spandan Das
To reduce pains introduced by visiblity skew between source and prebuilts, mark them with //visibility:public Bug: 239189932 Test: go test ./sdk Change-Id: I47dd63bd03337bc9ec6fa364bbdcdfdfcd70b0d9
2024-09-03Move checkbuild targets of Soong modules into Soong Colin Cross
Pass the name of Soong's checkbuild target for each module to Make so that it can depend on it from the main checkbuild rule. This will give better control over which files get built, allowing checkbuild to skip the jar combining step when transitive classpath jars are enabled. The per-module checkbuild targets are passed to make instead of added directly as a dependency of checkbuild in order to maintain the existing behavior of only building modules exposed to make in checkbuild. Also tweak the existing calls to CheckbuildFile and add InstallFileWithoutCheckbuild to match the files that are in the Make-based checkbuild. Bug: 308016794 Test: m checkbuild Change-Id: Ic5140819381d58f4d00f23a7a12447950c4cf268
2024-08-29Remove apex_available allowlist Jooyung Han
Bug: 147364041 Test: m nothing --no-skip-soong-tests Change-Id: I65ac605fe77a9e013a2c0b64adc36db414c77465
2024-08-19Make the WholeStatic/Static/Shared libs properties configurable Cole Faust
So that you can use selects with them. Bug: 342006386 Bug: 358377461 Test: m nothing --no-skip-soong-tests Change-Id: I5a8350f670d51b7da411ad5c3cdbf5f2d6cdd63b
2024-07-08Merge "Add "strip: {none: true}" for cc_prebuilt_library_shared in sdk ↵ Alyssa Ketpreechasawat
snapshot." into main
2024-07-05Add "strip: {none: true}" for cc_prebuilt_library_shared in sdk snapshot. Alyssa Ketpreechasawat
Prebuilt cannot be stripped in older platform. Therefore, we set stripper to none to skip the call to strip.sh. Bug: 350050115 Test: SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE=Tiramisu m art-module-sdk Test: Create module sdk from this and drop into tm-dev Change-Id: I911ce24ca18435f95395c43fc5e73110a50b3067
2024-06-10Remove exportable modules when generating snapshots targeting older platform Jihoon Kang
This change modifies the contents of the generated Android.bp files so that when generating a snapshot on a older platform, the "exportable" modules are removed from the bp files, as the "exportable" modules are first introduced in V and do not exist in older platforms. Bug: 345162614 Test: ABTD Change-Id: I2dba51b98deec7805bd796647a66981f237c55a9
2024-04-03Drop host variant of lidbexfile in >=V snapshots Spandan Das
The host variant of libdexfile and its deps were added to module sdk to support the use case of building platform tests without art's source code. This use case is not very relevant today, so we can drop the host variant of these modules from the module sdk. We still need to keep them in <= U snapshots, so this CL uses a hack to drop these libraries only if `SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE` is greater than UDC Test: SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE=UpsideDownCake m out/soong/mainline-sdks/art-module-host-exports-current.zip # verified that libartbase is in the generated Android.bp Test: m out/soong/mainline-sdks/art-module-host-exports-current.zip # verified that libartbase is not in the generated Android.bp Test: In `main`, deleted the host variants from prebuilts/module_sdk locally; enabled art prebuilts; Test: atest --host --no-bazel-mode libunwindstack_unit_test Bug: 329830257 Change-Id: Iab23853ef5e96661a5f5c2989add1be32fb07fbc
2024-03-20Add an apex_contributions_defaults module to module sdk Spandan Das
This metadata module will contain a flattened list of all the soong modules contributed by this module to the rest of the build. This is supported in V and above. Bug: 326246905 Test: m art-module-host-exports Test: unzip -p out/soong/mainline-sdks/art-module-host-exports-current.zip Android.bp | grep -A 15 apex_contributions_defaults apex_contributions_defaults { name: "art-module-host-exports.contributions", contents: [ "prebuilt_art.module.api.annotations", "prebuilt_dex2oat", "prebuilt_dex2oatd", "prebuilt_dexdump", "prebuilt_hiddenapi", "prebuilt_oatdump", "prebuilt_profman", "prebuilt_veridex", "prebuilt_libartpalette", "prebuilt_libartbase", ], } Change-Id: Iba43a9da5430adfc0a5fd9b5dc27b5d89c5eacb8
2024-03-08Remove unused code in update.go Cole Faust
Test: m nothing Change-Id: Idae97a203bfcf451456766c0b6eb5430959c0ade
2024-03-07Replace generatedFile with android.WriteFileRule Cole Faust
Fewer lines of code and more performant. Test: Presubmits Change-Id: If09dae6aba67c19106d4cbf058a60bbbc27f78d2
2023-12-14Convert OtherModuleProvider to generic providers API Colin Cross
Convert all of the callers of OtherModuleProvider/OtherModuleHasProvider to use the type-safe android.OtherModuleProvider API. Bug: 316410648 Test: builds Change-Id: Id77f514d68761a262d9ea830a601dbed804bbbe5
2023-06-30don't export systemserverclasspath_fragment if contents are empty Sam Delmerico
If a systemserverclasspath_fragment only contains libraries that have a higher min_sdk_version than the target build release version, then we should not export the systemserverclasspath_fragment. Before this change, the fragment was exported with an empty `contents` property which caused errors after being dropped as a prebuilt. Bug: 289183551 Test: go test ./sdk Change-Id: Ifefc6880228e4dd37f5e42b2bda31a83df785375
2023-05-02Use api_levels_released_versions from starlark Cole Faust
Instead of exporting it to soong_injection. Bug: 279095899 Test: m nothing Change-Id: I7b93af233b7450848a475512b5f5682ece773c09 Merged-In: I7b93af233b7450848a475512b5f5682ece773c09
2023-03-21Always include host variants in the sdk snapshot Spandan Das
This relands aosp/2478277. The original CL was submitted as part of a stack that broke tm and udc since those branches contains soong modules that have min_sdk_version of type (kind+level). Test: go test ./sdk Bug: 208456999 Change-Id: Ie5d7f2597092a51c6e74e7b3cab2f81c02906d5e
2023-02-28Replace SortedStringKeys with SortedKeys Cole Faust
Now that we have generics. Bug: 193460475 Test: presubmits Change-Id: I1594fd8feb505175d5c09c03ef397e5ffd5b09cb
2022-12-12Replace usages of SdkAware in sdk module with Module Paul Duffin
Previously, the sdk snapshot code used SdkAware instead of Module to ensure that all its members had implemented SdkAware. However, it never used any of the methods provided by SdkAware, or if it did it no longer does. So, this change replaces usages of SdkAware with Module in preparation for deleting it completely. Bug: 260237150 Test: m nothing Change-Id: Ia89e02394f27b2da776f0cf0f0bc86835a03433a
2022-11-22Merge "Remove support for unused env vars from sdk snapshot generation" Paul Duffin
2022-11-21Revert "Improve error reporting when depending on prebuilt implementation jar" Paul Duffin
This reverts commit c61783b20d70789d657dcb82050369480cc443c7. Bug: 257969510 Reason for revert: b/255275437 - breaks checkbuild target Change-Id: I01f88053cc24dbc1a4eb5c009f15473bdff3d565
2022-11-14Remove support for unused env vars from sdk snapshot generation Paul Duffin
The following environment variables are no longer used when generating sdk snapshots: * SOONG_SDK_SNAPSHOT_PREFER - we can control the modules that are preferred at build time now. * SOONG_SDK_SNAPSHOT_USE_SOURCE_CONFIG_VAR - this is done as a post-processing step by the mainline_module_sdks.sh script to avoid having to regenerate the ninja files for every module. * SOONG_SDK_SNAPSHOT_VERSION - support for this was removed a long time ago but was still referenced from dumpvars.go. Bug: 259095197 Test: m nothing # Searched for uses of these variables but could not find any # outside the build. Change-Id: Id2b32b29ff6f09faffea43292f549ba13acd956d
2022-11-14Improve error reporting when depending on prebuilt implementation jar Paul Duffin
The sdk snapshot must not be including implementation code for boot libraries, the implementation is provided by dex jars within the corresponding APEX. However, the snapshot does need a module for each boot library so that the build can seamlessly access the dex files from the APEX. A java_library boot library (like core-oj) is represented in the snapshot by a java_import module which requires a jar file to be provided, otherwise it is disabled. However, that is provided purely to keep Soong happy and should never be used. Previously, the snapshot would contain an empty file for the jar. As an empty file is an invalid jar any tool (like compiler) that tried to consume it would fail which was the correct behavior. Unfortunately, the error message that was produced was not very helpful, it was just some variant on `invalid file` which lead to a lot of bugs being raised. This change replaces that empty file with a reference to the output from a genrule which runs a script which produces a more useful error message, with information on how to fix the issue, and fails the build. It also adds a Name() method to the SdkMemberProperties type as that is needed in AddInternalModule() to construct the name of the additional module. Tested as follows: In AOSP/master make the following changes: 1. Temporarily set visibility on core-oj and core-libart to //visibility:public. 2. Run packages/modules/common/build/mainline_modules_sdks.py to create the snapshots. For each of the S, T and latest snapshots I did the following in the s-aml-prebuilt-test, t-aml-prebuilt-test and aosp/master branches: 1. Created an Android.bp file containing the following: java_library { name: "broken", static_libs: [ "prebuilt_core-libart", "prebuilt_core-oj", ], } 2. Fix the visibility issues and run `m broken` where it fails with an invalid file. 3. Delete the contents of the prebuilts/module_sdk/art/current/sdk directory. 4. Unpack the relevant version of the art-module-sdk snapshot into the directory. 5. Run `m broken` where it fails with the helpful message. 6. Test the instructions on how to use the ninja -t path tool to identify the cause of the problem and fix it. Bug: 257969510 Test: See above. Change-Id: I125bde2d7202afff84c97daebcef37e21c548a3a
2022-09-26Add sdk:"keep" tag support Paul Duffin
Fields tagged with `sdk:"keep"` will keep the value even if it would normally be cleared because it was common across a number of structs. This will allow a module type to specify the same value across all structs populated directly from variants and have it be copied into all common property structs without clearing it from the variant specific structs. Bug: 248258460 Test: m nothing Change-Id: I147d946b11fd8766a7d875d9206e8f5034f585d6
2022-09-26Rename sdk field tag "keep" to "ignore" Paul Duffin
"ignore" is a better description of the effect that this tag has on the optimization that is done as part of the sdk snapshot generation. "keep" implies that something special is done with the field during the optimization process but actually the optimization process completely ignores the property, just as it does with unexported fields. Bug: 248258460 Test: m nothing Change-Id: Idfdfd87f927d641d4d301cbbde72b463c89155bf
2022-09-14Exclude unsupported libraries from sdk snapshot Paul Duffin
When an sdk snapshot is targeted at release X then it cannot include bootclasspath fragment libraries which are not present in that build as otherwise it causes build failures. It should also not include any unsupported libraries, i.e. libraries that cannot work on that release. This change causes sdk snapshot to exclude libraries that have a min_sdk_version > target build release It also ensures that hidden API flags do not include any information from excluded libraries. Bug: 240406019 Test: BUILD_NUMBER=fixed packages/modules/common/build/mainline_modules_sdks.sh # Ran the previous command with and without this change to make # sure that this change excludes framework-connectivity-t library from the # tethering sdk snapshot for S, including from the hidden API flag files. Change-Id: I57969b85a12e9e5a3fc76c055b260cec5d5f7d7f
2022-08-19Add current build release Paul Duffin
Previously, the build releases only included named releases so did not have a way to represent the latest build release. This adds the current build release (named after the current API level) to represent that. Bug: 240406019 Test: m nothing Change-Id: Ib8336da716b447448b23bc9684ce3be1ab78648a
2022-07-18Sort files in sdk snapshot zip to ensure consistent behavior Paul Duffin
The order of the files in the sdk snapshot was stable but depended on how the sdk was built. If the snapshot was created directly then the files have one order, if it was created by merging in files from other zips then it has a different order. This change ensures files are in alphabetical order no matter how the snapshot zip is constructed. Bug: 232401814 Test: m media-module-sdk # Check the contents of the following zips to ensure that they are sorted # after this change. # out/soong/.intermediates/packages/modules/Media/apex/media-module-sdk/common_os/media-module-sdk-current.unmerged.zip # out/soong/mainline-sdks/media-module-sdk-current.zip Change-Id: Ie97e0119c07a1f34a2b1d3ea6895f0e76cd195a8
2022-07-15Use implementation jar for updatable-media in snapshot for S Paul Duffin
While enabling prebuilts in T we hit b/229932396 which was caused by some parts of the build depending on the prebuilt updatable-media jar which used to be a full implementation jar but which is now an invalid jar as the snapshot must not be including implementation details. We fixed the issue in T but we are hitting the same problem in S with the M-2022-07. That is the first train in which the prebuilt updatable-media module provides an invalid jar, prior to that it was always providing an implementation jar. This change tweaks the sdk snapshot generation code to use an implementation jar for updatable-media in the S snapshot to avoid partners having to cherry pick changes similar to those needed to fix b/229932396 in T. Bug: 239121291 Test: packages/modules/common/build/mainline_modules_sdks.sh # Check that S media snapshot includes implementation jar. # Check that S art snapshot includes invalid jar. # Check that T media snapshot includes invalid jar. Change-Id: Ib49484d00a60b4ed7f8268e04f9c10a3498edb56
2022-07-06Add apexes property to sdk Paul Duffin
Specifying an apex in the apexes propety will cause all the *classpath_fragments that are contents of the APEX to be automatically added as members of the sdk and appear in the snapshot. The purpose of this change is to dedup the APEX and sdk definitions and try and avoid some of the issues that we have been finding while attempting to build against the prebuilts. Two tests, one each for bootclasspath_fragment and systemserverclasspath_fragment, have been refactored to compare the output when adding the *fragment to the sdk directly of via the APEX. That ensures switching to use the APEX will not change the sdk snapshot unless it was previously missing a *fragment. There was also a slight difference in where the hidden API flags were copied from. That should have no impact on the output as the flags are identical. The sdk snapshot generation needed some tweaks to avoid generating a prebuilt for the APEX. Bug: 232401814 Test: m nothing Change-Id: I7aaf16a3a0ab4bebf97765d1484215cc008dc4b8
2022-07-05Stop exporting systemserverclasspath_fragment when targeting S Paul Duffin
Previously, when targeting the S release the generated sdk snapshot would contain prebuilt_systemserverclasspath_fragment modules even though they were only added in T. This allows SdkMemberTypes to specify the set of target build releases they support and ignores them when targeting an unsupported target build release. Test: m nothing packages/modules/common/build/mainline_modules_sdks.sh # Check that the for-S-build snapshots do not include SSCPFs. Bug: 237718221 Change-Id: I2df08c2fcebf9b866695d691572a9d3783758b17
2022-05-24Remove support for generating versioned snapshots Paul Duffin
Previously, the code for selecting specific versions of sdk snapshots was removed (along with the uses_sdks property). That makes versioned snapshots useless so this change removes all the code and tests that generated those versioned snapshots. Bug: 232546567 Test: m nothing packages/modules/common/build/mainline_modules_sdks.sh Change-Id: Ib6d1b72bc8399fbb39075494ae37da92f4b28d03
2022-05-24Merge "Handle multiple linkages in sdk snapshots" Liz Kammer
2022-05-23Handle multiple linkages in sdk snapshots Liz Kammer
Currently, if the same library is specified for multiple of native_libs, native_shared_libs, and native_static_libs for different arch/oses, there can be a few errors: 1. specifying a .so file as `srcs` within a cc_prebuilt_library rather than being specified only for shared 2. the final type of prebuilt library is dependent on the arch/os This change introduces: * an ability for a member type to override the type for specified properties * checks for a library being used with incompatible member types * basing linkage nesting on the member type in addition to variants This will ensure that the correct library type is used, regardless of the order of iteration over oses/arches, and support nesting linkages where necessary but only one linkage variant exists. Test: soong tests Test: CI Change-Id: I81dee013b09b99c34ca6c18f9cfcc12ee56d33d1
2022-05-16Add custom java_sdk_library info to the SDK info file Paul Duffin
Previously the SDK info file only contained basic common information about each member. This change adds support for each member to provide custom information to add to the info file. It uses that mechanism to add the following: * "dist_stem" * "scopes" object containing: * for each scope a: "<scope>" object containing: * "current_api" - the path within the snapshot for the API's .txt file. * "removed_api" - the path within the snapshot for the removed API's .txt file. * "latest_api" - the path within the build to the latest finalized API .txt file. * "latest_removed_api" - the path within the build to the latest finalized removed API .txt file. In order to access the latest API files it was necessary to add and resolve dependencies on the module that makes them available. In order to do that safely the code for creating the names of the modules was refactored to avoid duplicating the name creation logic. Bug: 204763318 Test: m nothing Change-Id: Ica68abbd2b2c7c2b2b7877b502f96cc89f06fd68
2022-05-06For each sdk built generate a JSON file describing its contents Paul Duffin
Some build scripts need to know information about the contents of an sdk, such as what APIs it provides (via java_sdk_library). Rather than duplicate that information in the scripts or attempt to access that information (where available) by looking at the contents of the snapshot this change generates a JSON file that sits alongside the snapshot itself. The info file can be generated without generating the snapshot zip file but whenever a snapshot zip file is generated the info is generated too. The info file sits alongside the zip file in out/mainline-sdks. Bug: 204763318 Test: m art-module-sdk m dist Change-Id: I289530bb21693dc6443826c24c17c9b5d85d2d8b
2022-04-06Copy the out/soong/build_number.txt file into sdk snapshots Paul Duffin
This change adds the build_number.txt file into the sdk snapshot to make it easier to debug issues arising in partner builds caused by the snapshots. The file is added to the root of the snapshot and is called: snapshot-creation-build-number.txt Bug: 201295663 Test: m nothing packages/modules/common/build/mainline_modules_sdks.sh # Check the contents of various snapshots. Change-Id: Ib3ac0cea5c9315cad0b9a3c25d88759097e37163
2021-10-04Retry: Support generating sdk snapshot for specific build release Paul Duffin
This was reverted unnecessarily along with the change that actually broke the build. Previously, the sdk snapshot was assumed to be generated for the current build system. This change adds support for the SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE environment variable which can be used to select the target build release in which the generated snapshot will be used. At the moment this will only affect the properties that are output but if/when it becomes necessary it can also be used to control more aspects of the snapshots such as supported member types or even members. This change does not modify any properties that are build release specific. That will come in following changes. However, it does add a test that targets build release S which defines a baseline for properties that will be affected in following changes. That baseline makes it easier to see the effect of those follow up changes. Bug: 197842263 Test: m nothing Change-Id: If4b452237f105382550d2842c8010249afbc7432
2021-10-04Revert "Support generating sdk snapshot for specific build release" Salmax Chang
This reverts commit ef2df587be53a1a58fc35f195a4226170df17dbb. Reason for revert: suspect to cause build break in b/201948713 Change-Id: If46219746913bec87ca2030ba51a6094246a0211
2021-10-01Support generating sdk snapshot for specific build release Paul Duffin
Previously, the sdk snapshot was assumed to be generated for the current build system. This change adds support for the SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE environment variable which can be used to select the target build release in which the generated snapshot will be used. At the moment this will only affect the properties that are output but if/when it becomes necessary it can also be used to control more aspects of the snapshots such as supported member types or even members. This change does not modify any properties that are build release specific. That will come in following changes. However, it does add a test that targets build release S which defines a baseline for properties that will be affected in following changes. That baseline makes it easier to see the effect of those follow up changes. Bug: 197842263 Test: m nothing Change-Id: I5cfde5e9e86af522b0d5030d301e116b0233fd62
2021-09-24Insert imageVariantSpecificInfo between arch and link info Paul Duffin
Previously, the archTypeSpecificInfo included an array of *linkTypeSpecificInfo. This change replaces that array with an array of *imageVariantSpecificInfo which themselves contain an array of *linkTypeSpecificInfo. That allows the sdk snapshot to handle image variants correctly, i.e. collate their properties, optimize their properties and then detect if there are any image variant specific properties for any image variant other than the CoreImageVariant ("") and report it as an error. The latter case is treated as an error because while Soong needs to handle image specific variants there is currently no requirement to handle generating a prebuilt with image specific properties. A follow up change will test the error handling. Image specific variants are needed because the "jni_headers" cc_library_headers module provides a number of image variants (e.g. recovery) that are used outside the ART module. Therefore, the sdk snapshot needs to do the same. At the moment image variants like the recovery variant are supported by copying the property that creates the variant (e.g. recovery_available) through to the prebuilt but that is not safe for a couple of reasons: 1. It ignores any differences between the recovery variant and the other variants which could cause compatibility issues in modules that build against the prebuilts. 2. It marks modules in the snapshot with recovery_available even when they do not need it. This change will allow follow up changes to address both those issues. Bug: 195754365 Test: m nothing Change-Id: I1c187d814f44b2cb7607cd43a6b215134be0faad
2021-09-23Allow sdk snapshot code to identify native bridge variants Paul Duffin
Previously, the snapshot code ignored native bridge related arch specific variants and only used the non native bridge variants. This change enabled it to track native bridge variants too. There is currently no support for creating native bridge specific prebuilts so this ensures that any attempt to create one will fail during generation of the snapshot with a clear message. At the moment that error message cannot be tested by creating an sdk as there is no way to add a dependency from the sdk onto a native bridge variant. A follow up change will add the capability to test this functionality through an sdk. Bug: 195754365 Test: m nothing Change-Id: I0494fdba9cc2ff013ea990d12d6a03a0a444bd5c
2021-09-23Add support to sdk/module_exports to specify required traits Paul Duffin
Currently, every sdk member of a specific module type has to be treated in the same way as every other sdk member of that type. e.g. it is not possible for an sdk member to use different variants to other members of the same type. Adding a new member type for each different way to treat the members is not scalable as if there were N different ways treat a member then it would require 2^N types for all the possible combinations. This adds a new traits mechanism that allows the behavior of member types to be customized per sdk member. Each member type can specify a list of supported traits and customize its behavior based on which traits are required for each member. A trait can be supported by multiple different member types. Bug: 195754365 Test: m nothing Change-Id: I165ac80d208c0402d2a9ffa8085bba29562c19b7
2021-09-16Improve the documentation in the android/sdk.go file Paul Duffin
Makes it adhere to the go standard practice of prefixing documentation comments with the name of the type/func/method. Bug: 195754365 Test: m nothing Change-Id: Idf3fe827edc9b6d67d12a99a4b27539ac938ea95