aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-02-03 19:31:40 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-02-03 19:31:40 +0000
commit037b68158f08d74d17f72df918e2cbcd29644f17 (patch)
tree043c4b27dd78451433d132879ae7df98386f030f
parentf3d41b235a9e95f4cc3d6f5e3f71fa5093fd075b (diff)
parent87a846a4a0a172a01d2853ffd052411b0ffec8bf (diff)
downloadcommon-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.txt134
-rwxr-xr-xbuild/mainline_modules_sdks.py192
-rwxr-xr-xbuild/mainline_modules_sdks.sh2
-rw-r--r--build/mainline_modules_sdks_test.py61
-rw-r--r--sdk/ModuleDefaults.bp23
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 +