diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-02-03 19:31:40 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-02-03 19:31:40 +0000 |
commit | 037b68158f08d74d17f72df918e2cbcd29644f17 (patch) | |
tree | 043c4b27dd78451433d132879ae7df98386f030f | |
parent | f3d41b235a9e95f4cc3d6f5e3f71fa5093fd075b (diff) | |
parent | 87a846a4a0a172a01d2853ffd052411b0ffec8bf (diff) | |
download | common-android12-mainline-permission-release.tar.gz |
Snap for 8146118 from 87a846a4a0a172a01d2853ffd052411b0ffec8bf to mainline-permission-releaseandroid-mainline-12.0.0_r93android12-mainline-permission-release
Change-Id: I2ae5c2047c2a220be185671662a340034fd58e3a
-rw-r--r-- | build/allowed_deps.txt | 134 | ||||
-rwxr-xr-x | build/mainline_modules_sdks.py | 192 | ||||
-rwxr-xr-x | build/mainline_modules_sdks.sh | 2 | ||||
-rw-r--r-- | build/mainline_modules_sdks_test.py | 61 | ||||
-rw-r--r-- | sdk/ModuleDefaults.bp | 23 |
5 files changed, 230 insertions, 182 deletions
diff --git a/build/allowed_deps.txt b/build/allowed_deps.txt index 7747c6bc..bde37ced 100644 --- a/build/allowed_deps.txt +++ b/build/allowed_deps.txt @@ -43,6 +43,7 @@ android.hardware.neuralnetworks-V1-ndk(minSdkVersion:30) android.hardware.neuralnetworks-V1-ndk_platform(minSdkVersion:30) android.hardware.neuralnetworks-V2-ndk(minSdkVersion:30) android.hardware.neuralnetworks-V3-ndk(minSdkVersion:30) +android.hardware.neuralnetworks-V4-ndk(minSdkVersion:30) android.hardware.neuralnetworks@1.0(minSdkVersion:30) android.hardware.neuralnetworks@1.1(minSdkVersion:30) android.hardware.neuralnetworks@1.2(minSdkVersion:30) @@ -57,6 +58,7 @@ android.hardware.wifi-V1.2-java(minSdkVersion:30) android.hardware.wifi-V1.3-java(minSdkVersion:30) android.hardware.wifi-V1.4-java(minSdkVersion:30) android.hardware.wifi-V1.5-java(minSdkVersion:30) +android.hardware.wifi-V1.6-java(minSdkVersion:30) android.hardware.wifi.hostapd-V1-java(minSdkVersion:30) android.hardware.wifi.hostapd-V1.0-java(minSdkVersion:30) android.hardware.wifi.hostapd-V1.1-java(minSdkVersion:30) @@ -265,11 +267,11 @@ libadbd_core(minSdkVersion:30) libadbd_services(minSdkVersion:(no version)) libadbd_services(minSdkVersion:30) libaidlcommonsupport(minSdkVersion:29) -liballoc.rust_sysroot(minSdkVersion:(no version)) +liballoc.rust_sysroot(minSdkVersion:29) libamrextractor(minSdkVersion:29) -libandroid_log_sys(minSdkVersion:(no version)) -libandroid_logger(minSdkVersion:(no version)) -libanyhow(minSdkVersion:(no version)) +libandroid_log_sys(minSdkVersion:29) +libandroid_logger(minSdkVersion:29) +libanyhow(minSdkVersion:29) libapp_processes_protos_lite(minSdkVersion:(no version)) libapp_processes_protos_lite(minSdkVersion:30) libarect(minSdkVersion:29) @@ -288,20 +290,24 @@ libavcenc(minSdkVersion:29) libavservices_minijail(minSdkVersion:29) libbacktrace(minSdkVersion:apex_inherit) libbacktrace_headers(minSdkVersion:apex_inherit) -libbacktrace_rs.rust_sysroot(minSdkVersion:(no version)) -libbacktrace_sys.rust_sysroot(minSdkVersion:(no version)) +libbacktrace_rs.rust_sysroot(minSdkVersion:29) +libbacktrace_sys.rust_sysroot(minSdkVersion:29) libbase(minSdkVersion:29) -libbase64_rust(minSdkVersion:(no version)) +libbase64_rust(minSdkVersion:29) libbase_headers(minSdkVersion:29) libbase_ndk(minSdkVersion:29) libbinder_headers(minSdkVersion:29) libbinder_headers_platform_shared(minSdkVersion:29) +libbinder_ndk_bindgen(minSdkVersion:Tiramisu) +libbinder_ndk_sys(minSdkVersion:Tiramisu) +libbinder_rs(minSdkVersion:Tiramisu) +libbinder_tokio_rs(minSdkVersion:Tiramisu) libbinderthreadstateutils(minSdkVersion:29) libbluetooth-types-header(minSdkVersion:29) libbrotli(minSdkVersion:(no version)) libbuildversion(minSdkVersion:(no version)) libbuildversion(minSdkVersion:26) -libbytes(minSdkVersion:(no version)) +libbytes(minSdkVersion:29) libc++(minSdkVersion:apex_inherit) libc++_static(minSdkVersion:apex_inherit) libc++abi(minSdkVersion:apex_inherit) @@ -312,8 +318,8 @@ libc_headers_arch(minSdkVersion:apex_inherit) libc_llndk_headers(minSdkVersion:apex_inherit) libc_scudo(minSdkVersion:apex_inherit) libcap(minSdkVersion:29) -libcfg_if(minSdkVersion:(no version)) -libcfg_if.rust_sysroot(minSdkVersion:(no version)) +libcfg_if(minSdkVersion:29) +libcfg_if.rust_sysroot(minSdkVersion:29) libcodec2(minSdkVersion:29) libcodec2_headers(minSdkVersion:29) libcodec2_hidl@1.0(minSdkVersion:29) @@ -353,8 +359,8 @@ libcodec2_soft_vp9dec(minSdkVersion:29) libcodec2_soft_vp9enc(minSdkVersion:29) libcodec2_vndk(minSdkVersion:29) libcom_android_networkstack_tethering_util_jni(minSdkVersion:30) -libcompiler_builtins.rust_sysroot(minSdkVersion:(no version)) -libcore.rust_sysroot(minSdkVersion:(no version)) +libcompiler_builtins.rust_sysroot(minSdkVersion:29) +libcore.rust_sysroot(minSdkVersion:29) libcrypto(minSdkVersion:29) libcrypto_static(minSdkVersion:(no version)) libcrypto_utils(minSdkVersion:(no version)) @@ -368,9 +374,9 @@ libdiagnose_usb(minSdkVersion:(no version)) libdiagnose_usb(minSdkVersion:apex_inherit) libdmabufheap(minSdkVersion:29) libdmabufinfo(minSdkVersion:S) -libdoh_ffi(minSdkVersion:(no version)) +libdoh_ffi(minSdkVersion:29) libeigen(minSdkVersion:(no version)) -libenv_logger(minSdkVersion:(no version)) +libenv_logger(minSdkVersion:29) libexpat(minSdkVersion:apex_inherit) libextservices(minSdkVersion:30) libextservices_jni(minSdkVersion:30) @@ -382,21 +388,21 @@ libFLAC-headers(minSdkVersion:29) libflacextractor(minSdkVersion:29) libfmq(minSdkVersion:29) libfmq-base(minSdkVersion:29) -libform_urlencoded(minSdkVersion:(no version)) +libform_urlencoded(minSdkVersion:29) libFraunhoferAAC(minSdkVersion:29) libfuse(minSdkVersion:30) libfuse_jni(minSdkVersion:30) -libfutures(minSdkVersion:(no version)) -libfutures_channel(minSdkVersion:(no version)) -libfutures_core(minSdkVersion:(no version)) -libfutures_executor(minSdkVersion:(no version)) -libfutures_io(minSdkVersion:(no version)) -libfutures_sink(minSdkVersion:(no version)) -libfutures_task(minSdkVersion:(no version)) -libfutures_util(minSdkVersion:(no version)) +libfutures(minSdkVersion:29) +libfutures_channel(minSdkVersion:29) +libfutures_core(minSdkVersion:29) +libfutures_executor(minSdkVersion:29) +libfutures_io(minSdkVersion:29) +libfutures_sink(minSdkVersion:29) +libfutures_task(minSdkVersion:29) +libfutures_util(minSdkVersion:29) libgav1(minSdkVersion:29) libgcc_stripped(minSdkVersion:(no version)) -libgetopts(minSdkVersion:(no version)) +libgetopts(minSdkVersion:29) libgralloctypes(minSdkVersion:29) libgrallocusage(minSdkVersion:29) libgsm(minSdkVersion:apex_inherit) @@ -406,32 +412,32 @@ libgui_bufferqueue_static(minSdkVersion:29) libgui_headers(minSdkVersion:29) libhardware(minSdkVersion:29) libhardware_headers(minSdkVersion:29) -libhashbrown.rust_sysroot(minSdkVersion:(no version)) +libhashbrown.rust_sysroot(minSdkVersion:29) libhevcdec(minSdkVersion:29) libhevcenc(minSdkVersion:29) libhidlbase(minSdkVersion:29) libhidlmemory(minSdkVersion:29) libhwbinder-impl-internal(minSdkVersion:29) libhwbinder_headers(minSdkVersion:29) -libidna(minSdkVersion:(no version)) +libidna(minSdkVersion:29) libion(minSdkVersion:29) libip_checksum(minSdkVersion:30) libjsoncpp(minSdkVersion:29) libkll(minSdkVersion:30) libkll-encoder(minSdkVersion:30) libkll-protos(minSdkVersion:30) -liblazy_static(minSdkVersion:(no version)) -liblibc(minSdkVersion:(no version)) -liblibc.rust_sysroot(minSdkVersion:(no version)) +liblazy_static(minSdkVersion:29) +liblibc(minSdkVersion:29) +liblibc.rust_sysroot(minSdkVersion:29) libLibGuiProperties(minSdkVersion:29) -liblibm(minSdkVersion:(no version)) +liblibm(minSdkVersion:29) liblog_headers(minSdkVersion:29) -liblog_rust(minSdkVersion:(no version)) +liblog_rust(minSdkVersion:29) liblua(minSdkVersion:(no version)) liblua(minSdkVersion:30) liblz4(minSdkVersion:(no version)) liblzma(minSdkVersion:apex_inherit) -libmatches(minSdkVersion:(no version)) +libmatches(minSdkVersion:29) libmath(minSdkVersion:29) libmath_headers(minSdkVersion:apex_inherit) libmdnssd(minSdkVersion:(no version)) @@ -441,7 +447,7 @@ libmedia_headers(minSdkVersion:29) libmedia_helper_headers(minSdkVersion:29) libmedia_midiiowrapper(minSdkVersion:29) libmediaformatshaper(minSdkVersion:29) -libmemchr(minSdkVersion:(no version)) +libmemchr(minSdkVersion:29) libmeminfo(minSdkVersion:S) libminijail(minSdkVersion:29) libminijail_gen_constants(minSdkVersion:(no version)) @@ -449,7 +455,7 @@ libminijail_gen_constants_obj(minSdkVersion:29) libminijail_gen_syscall(minSdkVersion:(no version)) libminijail_gen_syscall_obj(minSdkVersion:29) libminijail_generated(minSdkVersion:29) -libmio(minSdkVersion:(no version)) +libmio(minSdkVersion:29) libmkvextractor(minSdkVersion:29) libmp3extractor(minSdkVersion:29) libmp4extractor(minSdkVersion:29) @@ -470,18 +476,18 @@ libnetworkstackutilsjni(minSdkVersion:29) libneuralnetworks_common(minSdkVersion:(no version)) libneuralnetworks_headers(minSdkVersion:(no version)) libneuralnetworks_shim_static(minSdkVersion:30) -libnum_cpus(minSdkVersion:(no version)) +libnum_cpus(minSdkVersion:29) liboggextractor(minSdkVersion:29) -libonce_cell(minSdkVersion:(no version)) +libonce_cell(minSdkVersion:29) libopenjdkjvmti_headers(minSdkVersion:31) libopus(minSdkVersion:29) -libpanic_abort.rust_sysroot(minSdkVersion:(no version)) -libpercent_encoding(minSdkVersion:(no version)) +libpanic_abort.rust_sysroot(minSdkVersion:29) +libpercent_encoding(minSdkVersion:29) libperfetto_client_experimental(minSdkVersion:S) -libpin_project_lite(minSdkVersion:(no version)) -libpin_utils(minSdkVersion:(no version)) +libpin_project_lite(minSdkVersion:29) +libpin_utils(minSdkVersion:29) libPlatformProperties(minSdkVersion:S) -libproc_macro_nested(minSdkVersion:(no version)) +libproc_macro_nested(minSdkVersion:29) libprocessgroup(minSdkVersion:29) libprocessgroup_headers(minSdkVersion:29) libprocinfo(minSdkVersion:apex_inherit) @@ -491,25 +497,25 @@ libprofile-clang-extras_cfi_support(minSdkVersion:(no version)) libprofile-clang-extras_ndk(minSdkVersion:(no version)) libprofile-extras(minSdkVersion:(no version)) libprofile-extras_ndk(minSdkVersion:(no version)) -libprofiler_builtins.rust_sysroot(minSdkVersion:(no version)) +libprofiler_builtins.rust_sysroot(minSdkVersion:29) libprotobuf-cpp-lite(minSdkVersion:29) libprotobuf-java-lite(minSdkVersion:current) libprotobuf-java-nano(minSdkVersion:9) libprotoutil(minSdkVersion:(no version)) libqemu_pipe(minSdkVersion:(no version)) -libquiche(minSdkVersion:(no version)) -libring(minSdkVersion:(no version)) +libquiche(minSdkVersion:29) +libring(minSdkVersion:29) libring-core(minSdkVersion:29) libring-test(minSdkVersion:29) librustc_demangle(minSdkVersion:(no version)) -librustc_demangle.rust_sysroot(minSdkVersion:(no version)) +librustc_demangle.rust_sysroot(minSdkVersion:29) librustc_demangle_static(minSdkVersion:(no version)) libruy_static(minSdkVersion:30) libsfplugin_ccodec_utils(minSdkVersion:29) -libslab(minSdkVersion:(no version)) +libslab(minSdkVersion:29) libsonivoxwithoutjet(minSdkVersion:29) libspeexresampler(minSdkVersion:29) -libspin(minSdkVersion:(no version)) +libspin(minSdkVersion:29) libssl(minSdkVersion:29) libstagefright_amrnb_common(minSdkVersion:29) libstagefright_amrnbdec(minSdkVersion:29) @@ -536,13 +542,14 @@ libstagefright_mp3dec_headers(minSdkVersion:29) libstagefright_mpeg2extractor(minSdkVersion:29) libstagefright_mpeg2support(minSdkVersion:29) libstatssocket_headers(minSdkVersion:29) -libstd(minSdkVersion:(no version)) -libstd_detect.rust_sysroot(minSdkVersion:(no version)) +libstd(minSdkVersion:29) +libstd_detect.rust_sysroot(minSdkVersion:29) libsync(minSdkVersion:(no version)) libsystem_headers(minSdkVersion:apex_inherit) libsysutils(minSdkVersion:apex_inherit) -libterm(minSdkVersion:(no version)) -libtest(minSdkVersion:(no version)) +libtcutils(minSdkVersion:30) +libterm(minSdkVersion:29) +libtest(minSdkVersion:29) libtextclassifier(minSdkVersion:(no version)) libtextclassifier(minSdkVersion:30) libtextclassifier-java(minSdkVersion:28) @@ -554,22 +561,22 @@ libtextclassifier_hash_static(minSdkVersion:(no version)) libtflite_kernel_utils(minSdkVersion:(no version)) libtflite_static(minSdkVersion:(no version)) libtflite_static(minSdkVersion:30) -libthiserror(minSdkVersion:(no version)) -libtinyvec(minSdkVersion:(no version)) -libtinyvec_macros(minSdkVersion:(no version)) +libthiserror(minSdkVersion:29) +libtinyvec(minSdkVersion:29) +libtinyvec_macros(minSdkVersion:29) libtinyxml2(minSdkVersion:S) -libtokio(minSdkVersion:(no version)) +libtokio(minSdkVersion:29) libui(minSdkVersion:29) libui-types(minSdkVersion:apex_inherit) libui_headers(minSdkVersion:29) -libunicode_bidi(minSdkVersion:(no version)) -libunicode_normalization(minSdkVersion:(no version)) -libunicode_width.rust_sysroot(minSdkVersion:(no version)) -libuntrusted(minSdkVersion:(no version)) -libunwind.rust_sysroot(minSdkVersion:(no version)) +libunicode_bidi(minSdkVersion:29) +libunicode_normalization(minSdkVersion:29) +libunicode_width.rust_sysroot(minSdkVersion:29) +libuntrusted(minSdkVersion:29) +libunwind.rust_sysroot(minSdkVersion:29) libunwind_llvm(minSdkVersion:apex_inherit) libunwindstack(minSdkVersion:29) -liburl(minSdkVersion:(no version)) +liburl(minSdkVersion:29) libutf(minSdkVersion:(no version)) libutils(minSdkVersion:apex_inherit) libutils_headers(minSdkVersion:apex_inherit) @@ -583,6 +590,8 @@ libyuv_static(minSdkVersion:29) libziparchive(minSdkVersion:apex_inherit) libzstd(minSdkVersion:(no version)) marisa-trie(minSdkVersion:30) +mdns_aidl_interface-lateststable-java(minSdkVersion:29) +mdns_aidl_interface-V1-java(minSdkVersion:29) media_ndk_headers(minSdkVersion:29) media_plugin_headers(minSdkVersion:29) MediaProvider(minSdkVersion:30) @@ -617,10 +626,13 @@ net-utils-services-common(minSdkVersion:30) netd-client(minSdkVersion:29) netd_aidl_interface-java(minSdkVersion:29) netd_aidl_interface-lateststable-java(minSdkVersion:29) +netd_aidl_interface-lateststable-ndk(minSdkVersion:29) netd_aidl_interface-V3-java(minSdkVersion:29) netd_aidl_interface-V5-java(minSdkVersion:29) netd_aidl_interface-V6-java(minSdkVersion:29) netd_aidl_interface-V7-java(minSdkVersion:29) +netd_aidl_interface-V8-java(minSdkVersion:29) +netd_aidl_interface-V8-ndk(minSdkVersion:29) netd_event_listener_interface-java(minSdkVersion:29) netd_event_listener_interface-lateststable-java(minSdkVersion:29) netd_event_listener_interface-ndk_platform(minSdkVersion:29) diff --git a/build/mainline_modules_sdks.py b/build/mainline_modules_sdks.py index ed0f14ad..d124b4cc 100755 --- a/build/mainline_modules_sdks.py +++ b/build/mainline_modules_sdks.py @@ -13,7 +13,6 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - """Builds SDK snapshots. If the environment variable TARGET_BUILD_APPS is nonempty then only the SDKs for @@ -175,6 +174,88 @@ soong_config_module_type_import {{ file.write("\n".join(header_lines + content_lines) + "\n") +@dataclasses.dataclass() +class SubprocessRunner: + """Runs subprocesses""" + + # Destination for stdout from subprocesses. + # + # This (and the following stderr) are needed to allow the tests to be run + # in Intellij. This ensures that the tests are run with stdout/stderr + # objects that work when passed to subprocess.run(stdout/stderr). Without it + # the tests are run with a FlushingStringIO object that has no fileno + # attribute - https://youtrack.jetbrains.com/issue/PY-27883. + stdout: io.TextIOBase = sys.stdout + + # Destination for stderr from subprocesses. + stderr: io.TextIOBase = sys.stderr + + def run(self, *args, **kwargs): + return subprocess.run( + *args, check=True, stdout=self.stdout, stderr=self.stderr, **kwargs) + + +@dataclasses.dataclass() +class SnapshotBuilder: + """Builds sdk snapshots""" + + # Used to run subprocesses for building snapshots. + subprocess_runner: SubprocessRunner + + # The OUT_DIR environment variable. + out_dir: str + + def get_mainline_sdks_path(self): + """Get the path to the Soong mainline-sdks directory""" + return os.path.join(self.out_dir, "soong/mainline-sdks") + + def get_sdk_path(self, sdk_name, sdk_version): + """Get the path to the sdk snapshot zip file produced by soong""" + return os.path.join(self.get_mainline_sdks_path(), + f"{sdk_name}-{sdk_version}.zip") + + def build_snapshots(self, sdk_versions, modules): + # Build the SDKs once for each version. + for sdk_version in sdk_versions: + # Compute the paths to all the Soong generated sdk snapshot files + # required by this script. + paths = [ + self.get_sdk_path(sdk, sdk_version) + for module in modules + for sdk in module.sdks + ] + + # TODO(ngeoffray): remove SOONG_ALLOW_MISSING_DEPENDENCIES, but we + # currently break without it. + # + # Set SOONG_SDK_SNAPSHOT_USE_SRCJAR to generate .srcjars inside sdk + # zip files as expected by prebuilt drop. + extraEnv = { + "SOONG_ALLOW_MISSING_DEPENDENCIES": "true", + "SOONG_SDK_SNAPSHOT_USE_SRCJAR": "true", + "SOONG_SDK_SNAPSHOT_VERSION": sdk_version, + } + # Unless explicitly specified in the calling environment set + # TARGET_BUILD_VARIANT=user. + # This MUST be identical to the TARGET_BUILD_VARIANT used to build + # the corresponding APEXes otherwise it could result in different + # hidden API flags, see http://b/202398851#comment29 for more info. + targetBuildVariant = os.environ.get("TARGET_BUILD_VARIANT", "user") + cmd = [ + "build/soong/soong_ui.bash", + "--make-mode", + "--soong-only", + f"TARGET_BUILD_VARIANT={targetBuildVariant}", + "TARGET_PRODUCT=mainline_sdk", + "MODULE_BUILD_FROM_SOURCE=true", + "out/soong/apex/depsinfo/new-allowed-deps.txt.check", + ] + paths + print_command(extraEnv, cmd) + env = os.environ.copy() + env.update(extraEnv) + self.subprocess_runner.run(cmd, env=env) + + @dataclasses.dataclass(frozen=True) class MainlineModule: """Represents a mainline module""" @@ -250,6 +331,10 @@ MAINLINE_MODULES = [ sdks=["permission-module-sdk"], ), MainlineModule( + apex="com.android.scheduling", + sdks=["scheduling-sdk"], + ), + MainlineModule( apex="com.android.sdkext", sdks=["sdkextensions-sdk"], ), @@ -267,9 +352,6 @@ MAINLINE_MODULES = [ ), ] -# Only used by the test. -MAINLINE_MODULES_BY_APEX = dict((m.apex, m) for m in MAINLINE_MODULES) - # A list of the sdk versions to build. Usually just current but can include a # numeric version too. SDK_VERSIONS = [ @@ -290,20 +372,11 @@ class SdkDistProducer: directory. """ - # Destination for stdout from subprocesses. - # - # This (and the following stderr) are needed to allow the tests to be run - # in Intellij. This ensures that the tests are run with stdout/stderr - # objects that work when passed to subprocess.run(stdout/stderr). Without it - # the tests are run with a FlushingStringIO object that has no fileno - # attribute - https://youtrack.jetbrains.com/issue/PY-27883. - stdout: io.TextIOBase = sys.stdout - - # Destination for stderr from subprocesses. - stderr: io.TextIOBase = sys.stderr + # Used to run subprocesses for this. + subprocess_runner: SubprocessRunner - # The OUT_DIR environment variable. - out_dir: str = "uninitialized-out" + # Builds sdk snapshots + snapshot_builder: SnapshotBuilder # The DIST_DIR environment variable. dist_dir: str = "uninitialized-dist" @@ -312,65 +385,18 @@ class SdkDistProducer: # transformed to document where the changes came from. script: str = sys.argv[0] - def get_sdk_path(self, sdk_name, sdk_version): - """Get the path to the sdk snapshot zip file produced by soong""" - return os.path.join(self.out_dir, "soong/mainline-sdks", - f"{sdk_name}-{sdk_version}.zip") - def produce_dist(self, modules): sdk_versions = SDK_VERSIONS self.build_sdks(sdk_versions, modules) self.populate_dist(sdk_versions, modules) + self.populate_stubs(modules) def build_sdks(self, sdk_versions, modules): - # Build the SDKs once for each version. - for sdk_version in sdk_versions: - # Compute the paths to all the Soong generated sdk snapshot files - # required by this script. - paths = [ - self.get_sdk_path(sdk, sdk_version) - for module in modules - for sdk in module.sdks - ] - - # TODO(ngeoffray): remove SOONG_ALLOW_MISSING_DEPENDENCIES, but we - # currently break without it. - # - # Set SOONG_SDK_SNAPSHOT_USE_SRCJAR to generate .srcjars inside sdk - # zip files as expected by prebuilt drop. - extraEnv = { - "SOONG_ALLOW_MISSING_DEPENDENCIES": "true", - "SOONG_SDK_SNAPSHOT_USE_SRCJAR": "true", - "SOONG_SDK_SNAPSHOT_VERSION": sdk_version, - } - # Unless explicitly specified in the calling environment set - # TARGET_BUILD_VARIANT=user. - # This MUST be identical to the TARGET_BUILD_VARIANT used to build - # the corresponding APEXes otherwise it could result in different - # hidden API flags, see http://b/202398851#comment29 for more info. - targetBuildVariant = os.environ.get("TARGET_BUILD_VARIANT", "user") - cmd = [ - "build/soong/soong_ui.bash", - "--make-mode", - "--soong-only", - f"TARGET_BUILD_VARIANT={targetBuildVariant}", - "TARGET_PRODUCT=mainline_sdk", - "MODULE_BUILD_FROM_SOURCE=true", - "out/soong/apex/depsinfo/new-allowed-deps.txt.check", - ] + paths - print_command(extraEnv, cmd) - env = os.environ.copy() - env.update(extraEnv) - subprocess.run( - cmd, - env=env, - check=True, - stdout=self.stdout, - stderr=self.stderr) + self.snapshot_builder.build_snapshots(sdk_versions, modules) def unzip_current_stubs(self, sdk_name, apex_name): """Unzips stubs for "current" into {producer.dist_dir}/stubs/{apex}.""" - sdk_path = self.get_sdk_path(sdk_name, "current") + sdk_path = self.snapshot_builder.get_sdk_path(sdk_name, "current") dest_dir = os.path.join(self.dist_dir, "stubs", apex_name) print( f"Extracting java_sdk_library files from {sdk_path} to {dest_dir}") @@ -378,7 +404,7 @@ class SdkDistProducer: extract_matching_files_from_zip( sdk_path, dest_dir, r"sdk_library/[^/]+/[^/]+\.(txt|jar|srcjar)") - def populate_dist(self, sdk_versions, modules): + def populate_stubs(self, modules): # TODO(b/199759953): Remove stubs once it is no longer used by gantry. # Clear and populate the stubs directory. stubs_dir = os.path.join(self.dist_dir, "stubs") @@ -392,6 +418,7 @@ class SdkDistProducer: if sdk.endswith("-sdk"): self.unzip_current_stubs(sdk, apex) + def populate_dist(self, sdk_versions, modules): # Clear and populate the mainline-sdks dist directory. sdks_dist_dir = os.path.join(self.dist_dir, "mainline-sdks") shutil.rmtree(sdks_dist_dir, ignore_errors=True) @@ -410,7 +437,8 @@ class SdkDistProducer: sdk_dist_dir = os.path.join(sdks_dist_dir, sdk_version, apex, subdir) - sdk_path = self.get_sdk_path(sdk, sdk_version) + sdk_path = self.snapshot_builder.get_sdk_path( + sdk, sdk_version) self.dist_sdk_snapshot_zip(sdk_path, sdk_dist_dir, module.transformations()) @@ -480,13 +508,10 @@ def copy_zip_and_replace(producer, src_zip_path, dest_zip_path, src_dir, paths): # not affected by a change of directory. abs_src_zip_path = os.path.abspath(src_zip_path) abs_dest_zip_path = os.path.abspath(dest_zip_path) - subprocess.run( + producer.subprocess_runner.run( ["zip", "-q", abs_src_zip_path, "--out", abs_dest_zip_path] + paths, # Change into the source directory before running zip. - cwd=src_dir, - stdout=producer.stdout, - stderr=producer.stderr, - check=True) + cwd=src_dir) def apply_transformations(producer, tmp_dir, transformations): @@ -505,13 +530,23 @@ def apply_transformations(producer, tmp_dir, transformations): def create_producer(): + # Variables initialized from environment variables that are set by the + # calling mainline_modules_sdks.sh. + out_dir = os.environ["OUT_DIR"] + dist_dir = os.environ["DIST_DIR"] + + subprocess_runner = SubprocessRunner() + snapshot_builder = SnapshotBuilder( + subprocess_runner=subprocess_runner, + out_dir=out_dir, + ) return SdkDistProducer( - # Variables initialized from environment variables that are set by the - # calling mainline_modules_sdks.sh. - out_dir=os.environ["OUT_DIR"], - dist_dir=os.environ["DIST_DIR"], + subprocess_runner=subprocess_runner, + snapshot_builder=snapshot_builder, + dist_dir=dist_dir, ) + def filter_modules(modules): target_build_apps = os.environ.get("TARGET_BUILD_APPS") if target_build_apps: @@ -520,6 +555,7 @@ def filter_modules(modules): else: return modules + def main(): """Program entry point.""" if not os.path.exists("build/make/core/Makefile"): diff --git a/build/mainline_modules_sdks.sh b/build/mainline_modules_sdks.sh index 4e251612..fb5cfd36 100755 --- a/build/mainline_modules_sdks.sh +++ b/build/mainline_modules_sdks.sh @@ -56,7 +56,7 @@ function main() { # provided by the build to ensure consistency across build environments. export DIST_DIR OUT_DIR - prebuilts/build-tools/linux-x86/bin/py3-cmd "${py3script}" + prebuilts/build-tools/linux-x86/bin/py3-cmd -u "${py3script}" } init "$@" diff --git a/build/mainline_modules_sdks_test.py b/build/mainline_modules_sdks_test.py index 57601361..cf6b28cd 100644 --- a/build/mainline_modules_sdks_test.py +++ b/build/mainline_modules_sdks_test.py @@ -14,7 +14,6 @@ # See the License for the specific language governing permissions and # limitations under the License. """Unit tests for mainline_modules_sdks.py.""" - from pathlib import Path import os import tempfile @@ -23,13 +22,18 @@ import zipfile import mainline_modules_sdks as mm +MAINLINE_MODULES_BY_APEX = dict((m.apex, m) for m in mm.MAINLINE_MODULES) -class TestPopulateDist(unittest.TestCase): - def create_snapshot_file(self, out_dir, name, version): - sdks_out_dir = Path(out_dir, "soong/mainline-sdks") - sdks_out_dir.mkdir(parents=True, exist_ok=True) - zip_file = Path(sdks_out_dir, f"{name}-{version}.zip") +class FakeSnapshotBuilder(mm.SnapshotBuilder): + """A fake snapshot builder that does not run the build. + + This skips the whole build process and just creates some fake sdk + modules. + """ + + def create_snapshot_file(self, name, version): + zip_file = Path(self.get_sdk_path(name, version)) with zipfile.ZipFile(zip_file, "w") as z: z.writestr("Android.bp", "") if name.endswith("-sdk"): @@ -38,6 +42,19 @@ class TestPopulateDist(unittest.TestCase): z.writestr("sdk_library/public/lib.jar", "") z.writestr("sdk_library/public/api.txt", "") + def build_snapshots(self, sdk_versions, modules): + # Create input file structure. + sdks_out_dir = Path(self.get_mainline_sdks_path()) + sdks_out_dir.mkdir(parents=True, exist_ok=True) + # Create a fake sdk zip file for each module. + for module in modules: + for sdk in module.sdks: + for sdk_version in sdk_versions: + self.create_snapshot_file(sdk, sdk_version) + + +class TestProduceDist(unittest.TestCase): + def test(self): """Verify the dist/mainline-sdks directory is populated correctly""" with tempfile.TemporaryDirectory() as tmp_dir: @@ -47,22 +64,24 @@ class TestPopulateDist(unittest.TestCase): os.mkdir(tmp_dist_dir) modules = [ - mm.MAINLINE_MODULES_BY_APEX["com.android.art"], - mm.MAINLINE_MODULES_BY_APEX["com.android.ipsec"], + MAINLINE_MODULES_BY_APEX["com.android.art"], + MAINLINE_MODULES_BY_APEX["com.android.ipsec"], ] - # Create input file structure. - for module in modules: - for sdk in module.sdks: - self.create_snapshot_file(tmp_out_dir, sdk, "current") + subprocess_runner = mm.SubprocessRunner() - producer = mm.SdkDistProducer( + snapshot_builder = FakeSnapshotBuilder( + subprocess_runner=subprocess_runner, out_dir=tmp_out_dir, + ) + + producer = mm.SdkDistProducer( + subprocess_runner=subprocess_runner, + snapshot_builder=snapshot_builder, dist_dir=tmp_dist_dir, ) - sdk_versions = ["current"] - producer.populate_dist(sdk_versions, modules) + producer.produce_dist(modules) files = [] for abs_dir, _, filenames in os.walk(tmp_dist_dir): @@ -114,7 +133,11 @@ def readTestData(relative_path): class TestSoongConfigBoilerplateInserter(unittest.TestCase): def apply_transformations(self, src, transformations, expected): - producer = mm.SdkDistProducer(script=self._testMethodName) + producer = mm.SdkDistProducer( + subprocess_runner=None, + snapshot_builder=None, + script=self._testMethodName, + ) with tempfile.TemporaryDirectory() as tmp_dir: path = os.path.join(tmp_dir, "Android.bp") @@ -140,7 +163,7 @@ class TestSoongConfigBoilerplateInserter(unittest.TestCase): expected = readTestData("ipsec_Android.bp.expected") - module = mm.MAINLINE_MODULES_BY_APEX["com.android.ipsec"] + module = MAINLINE_MODULES_BY_APEX["com.android.ipsec"] transformations = module.transformations() self.apply_transformations(src, transformations, expected) @@ -156,7 +179,7 @@ class TestSoongConfigBoilerplateInserter(unittest.TestCase): expected = readTestData("art_Android.bp.expected") - module = mm.MAINLINE_MODULES_BY_APEX["com.android.art"] + module = MAINLINE_MODULES_BY_APEX["com.android.art"] transformations = module.transformations() self.apply_transformations(src, transformations, expected) @@ -171,7 +194,7 @@ class TestFilterModules(unittest.TestCase): def test_with_filter(self): os.environ["TARGET_BUILD_APPS"] = "com.android.art" modules = mm.filter_modules(mm.MAINLINE_MODULES) - expected = mm.MAINLINE_MODULES_BY_APEX["com.android.art"] + expected = MAINLINE_MODULES_BY_APEX["com.android.art"] self.assertEqual(modules, [expected]) diff --git a/sdk/ModuleDefaults.bp b/sdk/ModuleDefaults.bp index 4f9cec99..9f399895 100644 --- a/sdk/ModuleDefaults.bp +++ b/sdk/ModuleDefaults.bp @@ -19,34 +19,11 @@ package { mainline_stubs_args = "--error UnhiddenSystemApi " + - "--hide BroadcastBehavior " + "--hide CallbackInterface " + - "--hide DeprecationMismatch " + - "--hide HiddenSuperclass " + "--hide HiddenTypedefConstant " + - "--hide HiddenTypeParameter " + - "--hide MissingPermission " + "--hide RequiresPermission " + - "--hide SdkConstant " + - "--hide Todo " + - "--hide Typo " + - "--hide UnavailableSymbol " + "--enhance-documentation " -// TODO: modularize this so not every module has the same list -framework_packages_to_document = [ - "android", - "dalvik", - "java", - "javax", - "junit", - "org.apache.http", - "org.json", - "org.w3c.dom", - "org.xml.sax", - "org.xmlpull", -] - // TODO: remove the hiding when server classes are cleaned up. mainline_framework_stubs_args = mainline_stubs_args + |