summaryrefslogtreecommitdiff
path: root/android/sdk.go
AgeCommit message (Collapse)Author
2021-04-24Allow exporting of sdk members to be done per tag Paul Duffin
Previously, every module added to an sdk directly through one of the SdkMemberType specific properties, e.g. java_libs, was exported and every module added automatically via a transitive dependencies was not exported. This change allows that behavior to be customized per tag. Bug: 186290299 Test: m art-module-sdk - verify that this change does not affect its contents. Change-Id: I563b5bcd823e61c23cdb706cfcbb13337963d550
2021-02-05Export implementation class jars for java_boot_libs Paul Duffin
Hiddenapi processing currently requires access to the class implementation jars for libraries on the bootclasspath which means that they need to be provided as part of the prebuilts. This change modifies the java_boot_libs property on the sdk to make those files available. Modularization of the hiddenapi processing will hopefully remove the need for these to be exported so this should be temporary. Bug: 178361284 Test: m art-module-sdk check generated snapshot zip contains implementation jars Change-Id: I9e94662dddb0ddb85a477ae6d27e533085147e88
2021-01-15Add java_boot_libs to sdk Paul Duffin
The build has some implicit dependencies (via the boot jars configuration) on a number of modules, e.g. core-oj, apache-xml, that are part of the java boot class path and which are provided by mainline modules (e.g. art, conscrypt, runtime-i18n) but which are not otherwise used outside those mainline modules. As they are not needed outside the mainline modules adding them to the sdk/module-exports as either java_libs, or java_header_libs would end up exporting more information than was strictly necessary. This change adds the java_boot_libs property to allow those modules to be exported as part of the sdk/module_exports without exposing any unnecessary information. Some points to note: * The java_import has to have a valid file for the src property otherwise it will be disabled. * The src property is supposed to reference a jar file but the java_boot_libs property will make it reference an empty file (not an empty jar) so that any attempt to use that file as a jar, e.g. compiling against it, will cause a build failure. * The name of the file passed to the src property should make it clear that the file is not intended to be used. * The test makes sure that only the jar file is copied to the snapshot. Test: m nothing Bug: 171061220 Change-Id: I175331e4c8e3874ab70a67cdc2f76ed1576e41eb
2020-09-25Handle property structs and BpPropertySets as values to AddProperty. Martin Stjernholm
Both will create a nested property set, that may be merged with an existing one. Test: m nothing Bug: 151303681 Change-Id: I30696ba3eb8960ca6fa54c9ee2cf6229ab9f5da9
2020-08-03Disable all host OS variants except those explicitly included. Martin Stjernholm
Necessary to avoid problems with implicitly enabled host OS'es, e.g. linux_glibc getting enabled when we only supply a linux_bionic linker in runtime-module-host-exports. That will then cause a non-functional prebuilt to take precedence over source if the prebuilt is preferred. We don't do this for device since we so far only support a single device OS (android). This introduces the notion that SDK member types can be host OS dependent or not. That way java members with host prebuilts don't get restricted to a specific host OS. Test: m nothing Test: build/soong/scripts/build-aml-prebuilts.sh runtime-module-host-exports Check that the generated Android.bp correctly disables the bionic linker prebuilt for linux_glibc. Test: art/build/apex/runtests.sh on master-art with an updated runtime SDK snapshot Test: art/tools/buildbot-build.sh {--host,--target} on master-art with an updated runtime SDK snapshot Bug: 160349757 Change-Id: Idad7ef138cdbcbd209d390bf6c10ca8365d4619f
2020-07-22Improve IDE navigation to SdkBase methods Paul Duffin
Previously, it was not possible to navigate directly from the interface methods in SdkAware to the implementations in SdkBase as the former embeds android.Module but the latter did not implement those methods and so did not implement SdkAware. Finding the implementation of those methods required explicitly searching for them. This change extracts sdkAwareWithoutModule interface to allow use of the IDE capability to navigate directly to implementations of an interface method. Test: m nothing Change-Id: I0cd25180ea0081a54681b58e3202ff9491563131
2020-07-17Add compile_multilib properties to all native prebuilts (reland). Martin Stjernholm
There was a special case in cc_prebuilt_binary only, which resulted in prebuilt libraries getting both 32 and 64 bit variants even when their sources only had one of them, and the other variant would be defunct since it wouldn't get any prebuilt artefact. This moves the handling of compile_multilib completely to the common update code, so that SDK members don't need to deal with it. It doesn't take SDK member defaults into account, which means a bit more boilerplate in the snapshots, but it's simpler and less error prone (different SDK member types have different defaults). This relands https://r.android.com/1359962 after disabling the SDK tests on mac once and for all. Bug: 151303681 Test: `go test -v ./sdk` in build/soong on mac and linux Change-Id: I05f6603b2ac9b8676b25c3e297165ca23284e9cc
2020-07-15Revert "Add compile_multilib properties to all native prebuilts." Charles Chen
This reverts commit 1e9c2677fdb3f1d615863d87c64ad9ea2fc9007b. Reason for revert: Break build Bug: 161315642 Change-Id: Ibf3d5e88412327e8f08d08272b75cd3df34a71e5
2020-07-11Add compile_multilib properties to all native prebuilts. Martin Stjernholm
There was a special case in cc_prebuilt_binary only, which resulted in prebuilt libraries getting both 32 and 64 bit variants even when their sources only had one of them, and the other variant would be defunct since it wouldn't get any prebuilt artefact. This moves the handling of compile_multilib completely to the common update code, so that SDK members don't need to deal with it. It doesn't take SDK member defaults into account, which means a bit more boilerplate in the snapshots, but it's simpler and less error prone (different SDK member types have different defaults). Bug: 151303681 Test: m nothing Test: build/soong/scripts/build-aml-prebuilts.sh art-module-host-exports Check that the generated Android.bp passes Soong. Change-Id: Ib73444c6788ee1c78480bdb103aa2b8ae8f2c63c
2020-07-09Ensure that sdk/module_exports depends on source members Paul Duffin
Previously, preferring a prebuilt of an sdk/module_exports's member would cause the sdk/module_exports to depend on the prebuilt instead of the source and cause problems with the build. This chance prevents the dependency from an sdk/module_exports to its members from being replaced with prebuilts. Bug: 160785918 Test: m nothing Change-Id: Iee4bcd438c11929e30fb5766701b05a0e89956d9
2020-05-08Retry: Adds support for 'ignored-on-host' Paul Duffin
Adds a filter mechanism that can exclude property values from being included in the common value extraction. That is needed to prevent the snapshot mechanism from generating invalid output for properties that are ignored on host (and have their values cleared) and which are not tagged with `android:"arch_variant"`. Changes: * Updates the documentation of SdkMemberType to explain what effect the 'ignored-on-host' tag has. * Adds some tests for this new mechanism. Bug: 155628860 Test: m nothing Change-Id: Ibafdb6e921ba5abe505bd8a91ca5a1d9c9b5d0cb
2020-05-08Retry: Detect invalid arch specific properties in snapshot Paul Duffin
Previously, the snapshot code did not know whether a specific property could be arch specific or not and assumed that they all were which meant that it could generate snapshots containing arch specific values for properties that are not arch specific and so would fail when unpacked. This change requires arch specific fields in SdkMemberProperties to be tagged as such using `android:"arch_variant"` (just as in module input property structures). Any property without that must have properties that are common across all variants. Bug: 155628860 Test: m nothing Change-Id: I3df60f0b53ba02ec2c55a80c7da058eac5909d26
2020-05-08Revert "Detect invalid arch specific properties in snapshot" Greg Kaiser
Revert submission 1302576 Bug: 156054601 Reason for revert: Presumed root cause of build break. Reverted Changes: Ifc8116e11:Detect invalid arch specific properties in snapsho... I7ebd33307:Adds support for 'ignored-on-host' I167b47a13:Fix snapshot of a host/device cc_library with stub... Change-Id: Id7eba0bdde5c579e10e9b42d94a7cfab5f34995f
2020-05-08Revert "Adds support for 'ignored-on-host'" Greg Kaiser
Revert submission 1302576 Bug: 156054601 Reason for revert: Presumed root cause of build break. Reverted Changes: Ifc8116e11:Detect invalid arch specific properties in snapsho... I7ebd33307:Adds support for 'ignored-on-host' I167b47a13:Fix snapshot of a host/device cc_library with stub... Change-Id: I2a7ac0ef0232177eefc26542c11dc675d6f4cab2
2020-05-07Adds support for 'ignored-on-host' Paul Duffin
Adds a filter mechanism that can exclude property values from being included in the common value extraction. That is needed to prevent the snapshot mechanism from generating invalid output for properties that are ignored on host (and have their values cleared) and which are not tagged with `android:"arch_variant"`. Changes: * Updates the documentation of SdkMemberType to explain what effect the 'ignored-on-host' tag has. * Adds some tests for this new mechanism. Bug: 155628860 Test: m nothing Change-Id: I7ebd333079619dba546bc8c4911d567e0287b676
2020-05-07Detect invalid arch specific properties in snapshot Paul Duffin
Previously, the snapshot code did not know whether a specific property could be arch specific or not and assumed that they all were which meant that it could generate snapshots containing arch specific values for properties that are not arch specific and so would fail when unpacked. This change requires arch specific fields in SdkMemberProperties to be tagged as such using `android:"arch_variant"` (just as in module input property structures). Any property without that must have properties that are common across all variants. Bug: 155628860 Test: m nothing Change-Id: Ifc8116e11d987cfe7aec2eeaa964f3bbf36b5dc2
2020-05-06Remove reference to obsolete BuildSnapshot() Paul Duffin
Bug: 155628860 Test: m nothing Change-Id: If673d482e8318b5fbb86780236123b0bd59eb5d3
2020-04-07Extract DepIsInSameApex and RequiredSdks interfaces Paul Duffin
The DepIsInSameApex() and RequiredSdks() methods were defined in a few places to avoid having to depend on the whole ApexModule/SdkAware interfaces directly. However, that has a couple of issues: 1) It duplicates functionality making it difficult to change, changes to the definitions outside the main interfaces do not cause compile time failures, instead they result in a runtime change in behavior which can be difficult to debug. 2) IDE navigation (specifically in Intellij) does not detect that the duplicate definitions can resolve to the definitions in the main interface. This change extracts the methods into their own interfaces and reuses those interfaces instead of duplicating the methods to fix both of these issues. Bug: 152878661 Test: m nothing Change-Id: I0cfdf342a14eb0bfb82b1bd17e0633d81c7facfb
2020-03-23Remove old SdkMemberType API for creating snapshot modules Paul Duffin
Migrates system modules and droid stubs over to use the new API for creating the snapshot modules and removes the old API. Test: m nothing Change-Id: Ia825767f1f7ee77f68cfe00f53e09e6f6bfa027f
2020-03-23Improve consistency of handling java snapshot properties Paul Duffin
Previously, java snapshot properties (java_library and java_test) relied on the properties not being optimized when there was a single os type and instead being added directly to the common os type properties. However, that means that the behavior is inconsistent for other member types depending on whether there was one os type or not. This change updates the java sdk member handling to support optimization. This involved: 1) Adding AidlIncludeDirs field to librarySdkMemberProperties to specify the aidl include dirs instead of extracting that from the library field. 2) Renaming jarToExport to JarToExport (in both library/testSdkMemberProperties)to allow it to be optimized. 3) Adding MemberType() and Name() methods to SdkMemberPropertiesContext to avoid having to store the former in the properties struct and retrieve the latter from the library/test fields. 4) Removing the now unused library/test fields from the properties structures. 5) Separating the processing of the jar/test config in AddToPropertySet(...) as they may be optimized separately. 6) Ditto for the jar/aidl include dirs. 7) While doing this work I noticed that although the contents of the aidl include dirs are copied into the snapshot the java_import does not make use of them. Raised bug 151933053 and added TODO to track that work. Bug: 142935992 Test: m nothing Change-Id: Iba9799e111ca5672b2133568163d8c49837ba9cd
2020-03-23Make new module creation API more flexible Paul Duffin
Previously passing additional information to the implementations of AddPrebuiltModule() or the SdkMemberProperties interface would have required making changes to the API. This change added an SdkMemberContext object into which additional information can easily be added without requiring changes to existing implementations. The BuildSnapshot() method was not modified because it is deprecated and will be removed in a follow up change. It also switches the API from passing variants as android.SdkAware to android.Module. That is for a couple of reasons: 1) SdkAware is designed for managing the relationship between the module and the SDK, not for generating the output snapshot. As such there is nothing in SdkAware that is needed for generating the output snapshot. 2) Accepting android.Module instead makes it easier to use the underlying code for generating the snapshot module as well as the individual member modules. This is in preparation for a number of improvements and bug fixes in both the snapshot creation code and implementations to address found while trying to built the platform against ART prebuilts. Bug: 151937654 Test: m nothing Change-Id: Iac10f1200c0f283aa35402167eec8f9aeb65a38e
2020-03-20Add SDK member support for cc_object. Martin Stjernholm
Test: m nothing Test: Add sdk { name: "runtime-module-sdk", native_shared_libs: [ "libc", "libdl", "libm", "ld-android", ], native_objects: [ "crtbegin_dynamic", "crtbegin_static", "crtend_android", ], } to bionic/apex/Android.bp. Then: build/soong/scripts/build-aml-prebuilts.sh runtime-module-sdk Take the generated runtime-module-sdk-current.zip and unzip into a master-art tree without bionic/, edit the generated Android.bp to extend cc_prebuilt_* modules with: nocrt: true, stl: "none", system_shared_libs: [], apex_available: ["//apex_available:anyapex"], recovery_available: true, vendor_available: true, ramdisk_available: true, Then "m com.android.art.debug". This passes Soong but fails in the build step because more members are required. Bug: 148934017 Change-Id: I2ab8f6aadb1440b325697cae4a8ed761c62d15d2
2020-03-13Remove SdkMemberType.FinalizeModule Paul Duffin
This was only being used to set the "stl" property for cc library sdk member type and so that functionality was moved to AddPrebuiltModule() and FinalizeModule was removed. Required a few test changes to move the property to the correct position in the generated module. Bug: 142918168 Test: m nothing Change-Id: If6400189833d4ff3285e7a7adf63a9b509e2a03b
2020-03-13Copy shared_libs and system_shared_libs to module snapshot Paul Duffin
This change ensures that the runtime dependencies between a binary/shared library are correctly specified in the snapshot so that the build can ensure that shared libraries are built before the targets that use them. It adds support for differentiating between references that are required to refer to another sdk member (required) and those that may refer to either an sdk member or a non-sdk member (optional). The latter is used for shared library references as the libraries used by an sdk member may be provided from outside the sdk. e.g. liblog is not part of the ART module but is used by some members of the ART sdk. Bug: 142935992 Test: m nothing Change-Id: Ia8509ffe79b208c23beba1880fe9c8a92b732685
2020-03-13Support extracting common values from embedded structures Paul Duffin
This change also added support for excluding properties from common value extraction by using a struct tag of `sdk:"keep"` That was needed to prevent the fields in SdkMemberPropertiesBase from having their values cleared. The purpose of this change is to make it easier to share functionality across sdk member types. Bug: 142935992 Test: m nothing Change-Id: Ie5160a8f854056920e411801ca20721eab7c8578
2020-03-09Add support for multiple os types Paul Duffin
Updates the member snapshot creation code to support multiple os types. It basically sorts the variants by os type, then applies the code to optimize the arch properties and then it optimizes the properties that are common across architectures and extracts any properties that are common across os types. The java and cc member types needed to be modified to make the location of the generated files within the snapshot os type dependent when there is more than one os type. That was done by adding an OsPrefix() method to the SdkMemberPropertiesBase which returns the os prefix to use when there is > 1 os type and otherwise returns an empty string. Added three tests, one for cc shared libraries, one for cc binary and one for java header libraries. Bug: 150451422 Test: m nothing Change-Id: I08f5fbdd7852b06c9a9a2f1cfdc364338a3d5bac
2020-03-05Refactor snapshot module creation Paul Duffin
Generalize the processing of arch specific properties to reduce duplication in snapshot module creation and simplify addition of support for handling multiple os types. Supporting multiple os types with the current method for building snapshot modules would require every affected module type to add support for it. Rather than duplicate multiple os type handling code across those module types this work generalizes the process cc modules use for handling arch types as it can be used as a basis for handling multiple os types. Migrating module types over to this new process will insulate them from having to handle multiple os types. OB SdkMemberType changes: * BuildSnapshot is deprecated in favour of the new AddPrebuiltModule() method. * Additional methods, CreateVariantPropertiesStruct() and FinalizeModule() are added. * A new interface SdkMemberProperties, is defined that handles extracting information from the variant (prior to common value optimization) and adding properties to a property set. The sdk module type uses these new methods and types to delegate the member type specific processing to the relevant member types while handling the behavior that is common across all members types, e.g. extracting common values across multiple architectures. A future change will leverage this processing to add support for multiple os types. This change also refactors the cc module processing to use the new process. Bug: 150451422 Test: m nothing Change-Id: If6ab2498407b17f50391d062cd9afc01b5e01af4
2020-02-07Add java_system_modules to sdk/module_exports Paul Duffin
Adds an SdkMemberType implementation for java_system_modules. It specifies that java_system_modules can be used with sdk as well as module_exports, and also that the libs property should be included as transitive members in the sdk. It also adds support for treating appropriate tagged properties in the snapshot prebuilts module as references to sdk members so that they are correctly transformed when creating the versioned modules. Bug: 142940300 Test: m nothing Change-Id: Ic10b5a6d5b92b6018334fe876f06feaf79cc55e9
2020-02-07Add support for transitive sdk members Paul Duffin
Allow an sdk member type to treat some of its dependencies as being members of the sdk. Needed for the java_system_modules type whose libs property are an implementation detail of the system module and so should not be explicitly listed in the sdk module but still have to be included in the sdk snapshot. Bug: 142940300 Test: m nothing Change-Id: I90f37dae269ef64a6fe9debd0bbaf29a64dd74d8
2020-01-30Make sdkMemberDependencyTag usable outside sdk package Paul Duffin
Moves the struct to android/sdk.go and abstracts it behind a factory method and interface. That allows it to be used outside the sdk package. This change is in preparation for adding support for module types that have transitive sdk members. Bug: 142940300 Test: m nothing Change-Id: I71e5e0adf839b28a3a0952f82637637887f02688
2020-01-30Allow an arbitrary tag to be associated with a bp property Paul Duffin
This is preparation for enhancing the versioning tranformer to support applying per property transformations. Specifically, to allow properties to reference other libraries within the sdk. Bug: 142940300 Test: m nothing Change-Id: I99cdff4b407763ed395ff358d8110a63c6cf5589
2019-12-31Restrict SdkMemberTypes that can be used with sdk/sdk_snapshot Paul Duffin
By default SdkMemberTypes are only supported on module_exports module type. Support for sdk module type has to be explicitly specified. The java_header_libs, native_shared_libs and stubs_sources are supported on sdk. The latter is required to provide the stubs source for an API specified in java_header_libs as they should be kept in sync. Bug: 146341462 Test: m nothing Change-Id: I19b9e60792780a797458d4a9e489506602b13144
2019-12-13Decouple addition of new sdk member types from sdk code Paul Duffin
Previously, adding a new SdkMemberType would require adding a new sdkMemberListProperty instance to the sdkMemberListProperties as well as adding a new property into the sdkProperties struct. They are potential sources of conflict and couple the sdk code with all the packages that add members to it. This change switched to a registration model that allows each package to register its sdk member types decoupling them from the sdk code. Adds an SdkPropertyName() method to SdkMemberType that specifies the name of the property to use in the sdk/sdk_snapshot. Also provides an SdkMemberTypeBase struct to be used by providers of SdkMemberType implementations. SdkMemberType instances are registered using the RegisterSdkMemberType() func which sorts the registered instances by their SdkPropertyName() to ensure the behavior is consistent and not affected by order of registration. When creating a new sdk module a dynamicSdkMemberTypes instance is created that contains the following: * A properties struct is created dynamically that contains a field for each registered SdkMemberType, corresponding to that type's SdkPropertyName(). * A list of sdkMemberListProperty instances is also created, one for each registered SdkMemberType. The dynamicSdkMemberTypes instance is cached using a key that uniquely identifies the set of registered types just in case new types are registered after one has been created, e.g. by tests. Bug: 142918168 Test: m checkbuild Change-Id: I4bf2bf56a2a49025aa41454048bc1e8ccc6baca2
2019-12-09Pass SdkMember to AddPrebuiltModule instead of the name Paul Duffin
This is needed for a follow up change that makes sure that the prebuilt modules have the same visibility as the source modules. Bug: 143678475 Test: m conscrypt-module-sdk Change-Id: I9461c8c094ab19ee9ececb5e5fd50565789f2fa2
2019-12-06Parameterize the sdk member processing Paul Duffin
Extracts the type specific functionality into the SdkMemberType interface which has to be implemented by each module type that can be added as a member of the sdk. It provides functionality to add the required dependencies for the module type, check to see if a resolved module is the correct instance and build the snapshot. The latter was previously part of SdkAware but was moved because it has to be able to process multiple SdkAware variants so delegating it to a single instance did not make sense. The custom code for handling each member type specific property, e.g. java_libs, has been replaced with common code that processes a list of sdkMemberListProperty struct which associates the property (name and getter) with the SdkMemberType and a special DependencyTag which is passed to the SdkMemberType when it has to add dependencies. The DependencyTag contains a reference to the appropriate sdkMemberListProperty which allows the resolved dependencies to be grouped by type. Previously, the dependency collection methods would ignore a module if it was an unsupported type because they did not have a way of determining which property it was initially listed in. That meant it was possible to add say a droidstubs module to the java_libs property (and because they had the same variants) it would work as if it was added to the stubs_sources property. Or alternatively, a module of an unsupported type could be added to any property and it would just be ignored. However, the DependencyTag provides information about which property a resolved module was referenced in and so it can detect when the resolved module is of the wrong type and report an error. That check identified a bug in one of the tests where the sdk referenced a java_import module (which is not allowed in an sdk) instead of a java_library module (which is allowed). That test was fixed as part of this. A list of sdkMemberListProperty structs defines the member properties supported by the sdk and are processed in order to ensure consistent behaviour. The resolved dependencies are grouped by type and each group is then processed in defined order. Within each type dependencies are grouped by name and encapsulated behind an SdkMember interface which includes the name and the list of variants. The Droidstubs and java.Library types can only support one variant and will fail if given more. The processing for the native_shared_libs property has been moved into the cc/library.go file so the sdk package code should now have no type specific information in it apart from what is if the list of sdkMemberListProperty structs. Bug: 143678475 Test: m conscrypt-module-sdk Change-Id: I10203594d33dbf53441f655aff124f9ab3538d87
2019-12-02Add model to represent generated snapshot .bp file Paul Duffin
Having each module type generate the contents of the snapshot's .bp file results in lots of duplicated code. This adds an intermediate model for use by the module types and then generates the .bp file contents from that. This not only removes the duplicated formatting code but it also allows consistent handling of shared properties such as name further reducing duplication. It also makes it possible to duplicate the versioned and unversioned prebuilt modules from the same model. Extracts generatedContents from generatedFile to allow the contents to be populated without creating an output file, for testing. Cleans up unused code. Bug: 143678475 Test: m nothing Change-Id: If21b84db0ef3fdfb5dc11ea0973ce6cb73603ea3
2019-11-22Adds droidstubs support to sdk module Paul Duffin
Adds stubs_sources property to sdk and unzips the droidstubs srcjar into the snapshot directory. Adds an UnzipToSnapshot method to the SnapshotBuilder which creates a rule that uses zip2zip to repackage the supplied zip content into a temporary zip file that matches what the required snapshot structure. e.g. if the supplied zip contains foo/Foo.java and that needs to be in the snapshot directory java/foo/stubs then it will create a zip that contains java/foo/stubs/foo/Foo.java. The temporary zip that is the output of that rule is added to the zipsToMerge field for merging later. If the zipsToMerge is empty then the snapshot zip is created as before. Otherwise, a temporary zip file is created. That is then merged with the other zip files in zipsToMerge to create the final snapshot zip. Adds prebuilt_stubs_sources for use by the generated .bp module. Bug: 143678475 Test: added conscrypt sdk module and attempted to build it Change-Id: Ie274263af3a08e36a73c61c0dbf0c341fd6967e2
2019-11-14Refactor sdk update mechanism Paul Duffin
Creates a SnapshotBuilder and GeneratedSnapshotFile interfaces to allow the java library snapshot work to be moved into the java package. Test: m -j60 checkbuild Change-Id: I857167616026149d5e85885621b53876b419ba9b
2019-10-17Prohibit dependencies outside of uses_sdks Jiyong Park
When an APEX is built with uses_sdks, any depedndency from the APEX to the outside of the APEX should be from the SDKs that the APEX is built against. Bug: 138182343 Test: m Change-Id: I1c2ffe8d28ccf648d928ea59652c2d0070bf10eb
2019-10-15Create scripts to update and freeze a module SDK Jiyong Park
`m <sdk_name>` generates two scripts each of which is use to update the current snapshot of the SDK and to freeze ToT as a new version, respectively. Executing the scripts will copy necessary files (stub libraries, AIDL files, etc.) along with Android.bp into the ./<apiver> directory under the directory where the sdk is defined. This change also introduces a new module type 'sdk_snapshot' that represents a snapshot of an SDK. It will be auto-generated by the above scripts, so developers are not expected to write this manually. The module type 'sdk' is now used to simply specify the list of modules that an SDK has. Finally, this change changes the version separator from '#' to '@' because '#' confuses Make. Bug: 138182343 Test: m Change-Id: Ifcbc3a39a2f6ad5b4f4b200ba55a1ce3281498cf
2019-09-22Introduce module type 'sdk' Jiyong Park
This change introduces a new module type named 'sdk'. It is a logical group of prebuilt modules that together provide a context (e.g. APIs) in which Mainline modules (such as APEXes) are built. A prebuilt module (e.g. java_import) can join an sdk by adding it to the sdk module as shown below: sdk { name: "mysdk#20", java_libs: ["myjavalib_mysdk_20"], } java_import { name: "myjavalib_mysdk_20", srcs: ["myjavalib-v20.jar"], sdk_member_name: "myjavalib", } sdk { name: "mysdk#21", java_libs: ["myjavalib_mysdk_21"], } java_import { name: "myjavalib_mysdk_21", srcs: ["myjavalib-v21.jar"], sdk_member_name: "myjavalib", } java_library { name: "myjavalib", srcs: ["**/*/*.java"], } An APEX can specify the SDK(s) that it wants to build with via the new 'uses_sdks' property. apex { name: "myapex", java_libs: ["libX", "libY"], uses_sdks: ["mysdk#20"], } With this, libX, libY, and their transitive dependencies are all built with the version 20 of myjavalib (the first java_import module) instead of the other one (which is for version 21) and java_library having the same name (which is for ToT). Bug: 138182343 Test: m (sdk_test.go added) Change-Id: I7e14c524a7d6a0d9f575fb20822080f39818c01e