Merge "Export ril related flag to soong" into main
diff --git a/core/Makefile b/core/Makefile
index 2cdb24f..db038c3 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -7950,9 +7950,14 @@
# Desktop pack recovery image hook.
ifneq (,$(strip $(PACK_DESKTOP_RECOVERY_IMAGE)))
PACK_RECOVERY_IMAGE_TARGET := $(PRODUCT_OUT)/android-desktop_recovery_image.bin
+PACK_RECOVERY_IMAGE_ARGS := --noarchive --recovery
+
+ifneq (,$(strip $(PACK_RECOVERY_IMAGE_EXPERIMENTAL)))
+PACK_RECOVERY_IMAGE_ARGS += --experimental
+endif # PACK_RECOVERY_IMAGE_EXPERIMENTAL
$(PACK_RECOVERY_IMAGE_TARGET): $(IMAGES) $(PACK_IMAGE_SCRIPT)
- $(PACK_IMAGE_SCRIPT) --out_dir $(PRODUCT_OUT) --noarchive --recovery
+ $(PACK_IMAGE_SCRIPT) --out_dir $(PRODUCT_OUT) $(PACK_RECOVERY_IMAGE_ARGS)
PACKED_RECOVERY_IMAGE_ARCHIVE_TARGET := $(PACK_RECOVERY_IMAGE_TARGET).gz
diff --git a/core/binary.mk b/core/binary.mk
index 1e98bc0..3481144 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -330,18 +330,20 @@
ifneq ($(LOCAL_IN_VENDOR),)
# Vendor modules have LOCAL_IN_VENDOR
my_cflags += -D__ANDROID_VENDOR__
-
- ifeq ($(BOARD_API_LEVEL),)
- # TODO(b/314036847): This is a fallback for UDC targets.
- # This must be a build failure when UDC is no longer built from this source tree.
- my_cflags += -D__ANDROID_VENDOR_API__=$(PLATFORM_SDK_VERSION)
- else
- my_cflags += -D__ANDROID_VENDOR_API__=$(BOARD_API_LEVEL)
- endif
else ifneq ($(LOCAL_IN_PRODUCT),)
# Product modules have LOCAL_IN_PRODUCT
my_cflags += -D__ANDROID_PRODUCT__
endif
+
+ # Define __ANDROID_VENDOR_API__ for both product and vendor variants because
+ # they both use the same LLNDK libraries.
+ ifeq ($(BOARD_API_LEVEL),)
+ # TODO(b/314036847): This is a fallback for UDC targets.
+ # This must be a build failure when UDC is no longer built from this source tree.
+ my_cflags += -D__ANDROID_VENDOR_API__=$(PLATFORM_SDK_VERSION)
+ else
+ my_cflags += -D__ANDROID_VENDOR_API__=$(BOARD_API_LEVEL)
+ endif
endif
ifndef LOCAL_IS_HOST_MODULE
diff --git a/core/soong_config.mk b/core/soong_config.mk
index 97b707f..0421e19 100644
--- a/core/soong_config.mk
+++ b/core/soong_config.mk
@@ -364,6 +364,62 @@
$(call add_json_list, BoardAvbSystemAddHashtreeFooterArgs, $(BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS))
$(call add_json_bool, BoardAvbEnable, $(filter true,$(BOARD_AVB_ENABLE)))
+$(call add_json_map, PartitionVarsForSoongMigrationOnlyDoNotUse)
+ $(call add_json_str, ProductDirectory, $(dir $(INTERNAL_PRODUCT)))
+
+ $(call add_json_map,PartitionQualifiedVariables)
+ $(foreach image_type,SYSTEM VENDOR CACHE USERDATA PRODUCT SYSTEM_EXT OEM ODM VENDOR_DLKM ODM_DLKM SYSTEM_DLKM, \
+ $(call add_json_map,$(call to-lower,$(image_type))) \
+ $(call add_json_bool, BuildingImage, $(filter true,$(BUILDING_$(image_type)_IMAGE))) \
+ $(call add_json_str, BoardErofsCompressor, $(BOARD_$(image_type)IMAGE_EROFS_COMPRESSOR)) \
+ $(call add_json_str, BoardErofsCompressHints, $(BOARD_$(image_type)IMAGE_EROFS_COMPRESS_HINTS)) \
+ $(call add_json_str, BoardErofsPclusterSize, $(BOARD_$(image_type)IMAGE_EROFS_PCLUSTER_SIZE)) \
+ $(call add_json_str, BoardExtfsInodeCount, $(BOARD_$(image_type)IMAGE_EXTFS_INODE_COUNT)) \
+ $(call add_json_str, BoardExtfsRsvPct, $(BOARD_$(image_type)IMAGE_EXTFS_RSV_PCT)) \
+ $(call add_json_str, BoardF2fsSloadCompressFlags, $(BOARD_$(image_type)IMAGE_F2FS_SLOAD_COMPRESS_FLAGS)) \
+ $(call add_json_str, BoardFileSystemCompress, $(BOARD_$(image_type)IMAGE_FILE_SYSTEM_COMPRESS)) \
+ $(call add_json_str, BoardFileSystemType, $(BOARD_$(image_type)IMAGE_FILE_SYSTEM_TYPE)) \
+ $(call add_json_str, BoardJournalSize, $(BOARD_$(image_type)IMAGE_JOURNAL_SIZE)) \
+ $(call add_json_str, BoardPartitionReservedSize, $(BOARD_$(image_type)IMAGE_PARTITION_RESERVED_SIZE)) \
+ $(call add_json_str, BoardPartitionSize, $(BOARD_$(image_type)IMAGE_PARTITION_SIZE)) \
+ $(call add_json_str, BoardSquashfsBlockSize, $(BOARD_$(image_type)IMAGE_SQUASHFS_BLOCK_SIZE)) \
+ $(call add_json_str, BoardSquashfsCompressor, $(BOARD_$(image_type)IMAGE_SQUASHFS_COMPRESSOR)) \
+ $(call add_json_str, BoardSquashfsCompressorOpt, $(BOARD_$(image_type)IMAGE_SQUASHFS_COMPRESSOR_OPT)) \
+ $(call add_json_str, BoardSquashfsDisable4kAlign, $(BOARD_$(image_type)IMAGE_SQUASHFS_DISABLE_4K_ALIGN)) \
+ $(call add_json_str, ProductBaseFsPath, $(PRODUCT_$(image_type)_BASE_FS_PATH)) \
+ $(call add_json_str, ProductHeadroom, $(PRODUCT_$(image_type)_HEADROOM)) \
+ $(call add_json_str, ProductVerityPartition, $(PRODUCT_$(image_type)_VERITY_PARTITION)) \
+ $(call end_json_map) \
+ )
+ $(call end_json_map)
+
+ $(call add_json_bool, TargetUserimagesUseExt2, $(filter true,$(TARGET_USERIMAGES_USE_EXT2)))
+ $(call add_json_bool, TargetUserimagesUseExt3, $(filter true,$(TARGET_USERIMAGES_USE_EXT3)))
+ $(call add_json_bool, TargetUserimagesUseExt4, $(filter true,$(TARGET_USERIMAGES_USE_EXT4)))
+
+ $(call add_json_bool, TargetUserimagesSparseExtDisabled, $(filter true,$(TARGET_USERIMAGES_SPARSE_EXT_DISABLED)))
+ $(call add_json_bool, TargetUserimagesSparseErofsDisabled, $(filter true,$(TARGET_USERIMAGES_SPARSE_EROFS_DISABLED)))
+ $(call add_json_bool, TargetUserimagesSparseSquashfsDisabled, $(filter true,$(TARGET_USERIMAGES_SPARSE_SQUASHFS_DISABLED)))
+ $(call add_json_bool, TargetUserimagesSparseF2fsDisabled, $(filter true,$(TARGET_USERIMAGES_SPARSE_F2FS_DISABLED)))
+
+ $(call add_json_str, BoardErofsCompressor, $(BOARD_EROFS_COMPRESSOR))
+ $(call add_json_str, BoardErofsCompressorHints, $(BOARD_EROFS_COMPRESS_HINTS))
+ $(call add_json_str, BoardErofsPclusterSize, $(BOARD_EROFS_PCLUSTER_SIZE))
+ $(call add_json_str, BoardErofsShareDupBlocks, $(BOARD_EROFS_SHARE_DUP_BLOCKS))
+ $(call add_json_str, BoardErofsUseLegacyCompression, $(BOARD_EROFS_USE_LEGACY_COMPRESSION))
+ $(call add_json_str, BoardExt4ShareDupBlocks, $(BOARD_EXT4_SHARE_DUP_BLOCKS))
+ $(call add_json_str, BoardFlashLogicalBlockSize, $(BOARD_FLASH_LOGICAL_BLOCK_SIZE))
+ $(call add_json_str, BoardFlashEraseBlockSize, $(BOARD_FLASH_ERASE_BLOCK_SIZE))
+
+ $(call add_json_bool, BoardUsesRecoveryAsBoot, $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)))
+ $(call add_json_bool, ProductUseDynamicPartitionSize, $(filter true,$(PRODUCT_USE_DYNAMIC_PARTITION_SIZE)))
+ $(call add_json_bool, CopyImagesForTargetFilesZip, $(filter true,$(COPY_IMAGES_FOR_TARGET_FILES_ZIP)))
+
+ $(call add_json_list, ProductPackages, $(PRODUCT_PACKAGES))
+ $(call add_json_list, ProductPackagesDebug, $(PRODUCT_PACKAGES_DEBUG))
+
+$(call end_json_map)
+
$(call json_end)
$(file >$(SOONG_VARIABLES).tmp,$(json_contents))
diff --git a/target/product/go_defaults_common.mk b/target/product/go_defaults_common.mk
index fd4047a..0fcf16b 100644
--- a/target/product/go_defaults_common.mk
+++ b/target/product/go_defaults_common.mk
@@ -24,11 +24,6 @@
# Speed profile services and wifi-service to reduce RAM and storage.
PRODUCT_SYSTEM_SERVER_COMPILER_FILTER := speed-profile
-# Use a profile based boot image for this device. Note that this is currently a
-# generic profile and not Android Go optimized.
-PRODUCT_USE_PROFILE_FOR_BOOT_IMAGE := true
-PRODUCT_DEX_PREOPT_BOOT_IMAGE_PROFILE_LOCATION := frameworks/base/config/boot-image-profile.txt
-
# Do not generate libartd.
PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD := false
diff --git a/tools/aconfig/aconfig_device_paths/src/lib.rs b/tools/aconfig/aconfig_device_paths/src/lib.rs
index 9ab9cea..8871b4f 100644
--- a/tools/aconfig/aconfig_device_paths/src/lib.rs
+++ b/tools/aconfig/aconfig_device_paths/src/lib.rs
@@ -62,13 +62,12 @@
#[test]
fn test_read_partition_paths() {
- assert_eq!(read_partition_paths().len(), 4);
+ assert_eq!(read_partition_paths().len(), 3);
assert_eq!(
read_partition_paths(),
vec![
PathBuf::from("/system/etc/aconfig_flags.pb"),
- PathBuf::from("/system_ext/etc/aconfig_flags.pb"),
PathBuf::from("/product/etc/aconfig_flags.pb"),
PathBuf::from("/vendor/etc/aconfig_flags.pb")
]
diff --git a/tools/edit_monitor/daemon_manager.py b/tools/edit_monitor/daemon_manager.py
index 79831a7..1876451 100644
--- a/tools/edit_monitor/daemon_manager.py
+++ b/tools/edit_monitor/daemon_manager.py
@@ -20,6 +20,7 @@
import pathlib
import signal
import subprocess
+import sys
import tempfile
import time
@@ -27,7 +28,8 @@
DEFAULT_PROCESS_TERMINATION_TIMEOUT_SECONDS = 1
DEFAULT_MONITOR_INTERVAL_SECONDS = 5
DEFAULT_MEMORY_USAGE_THRESHOLD = 2000
-DEFAULT_CPU_USAGE_THRESHOLD = 10
+DEFAULT_CPU_USAGE_THRESHOLD = 200
+DEFAULT_REBOOT_TIMEOUT_SECONDS = 60 * 60 * 24
def default_daemon_target():
@@ -72,6 +74,7 @@
interval: int = DEFAULT_MONITOR_INTERVAL_SECONDS,
memory_threshold: float = DEFAULT_MEMORY_USAGE_THRESHOLD,
cpu_threshold: float = DEFAULT_CPU_USAGE_THRESHOLD,
+ reboot_timeout: int = DEFAULT_REBOOT_TIMEOUT_SECONDS,
):
"""Monits the daemon process status.
@@ -80,8 +83,10 @@
given thresholds.
"""
logging.info("start monitoring daemon process %d.", self.daemon_process.pid)
-
+ reboot_time = time.time() + reboot_timeout
while self.daemon_process.is_alive():
+ if time.time() > reboot_time:
+ self.reboot()
try:
memory_usage = self._get_process_memory_percent(self.daemon_process.pid)
self.max_memory_usage = max(self.max_memory_usage, memory_usage)
@@ -119,9 +124,32 @@
if self.daemon_process and self.daemon_process.is_alive():
self._terminate_process(self.daemon_process.pid)
self._remove_pidfile()
+ logging.debug("Successfully stopped daemon manager.")
except Exception as e:
logging.exception("Failed to stop daemon manager with error %s", e)
+ def reboot(self):
+ """Reboots the current process.
+
+ Stops the current daemon manager and reboots the entire process based on
+ the binary file. Exits directly If the binary file no longer exists.
+ """
+ logging.debug("Rebooting process based on binary %s.", self.binary_path)
+
+ # Stop the current daemon manager first.
+ self.stop()
+
+ # If the binary no longer exists, exit directly.
+ if not os.path.exists(self.binary_path):
+ logging.info("binary %s no longer exists, exiting.", self.binary_path)
+ sys.exit(0)
+
+ try:
+ os.execv(self.binary_path, sys.argv)
+ except OSError as e:
+ logging.exception("Failed to reboot process with error: %s.", e)
+ sys.exit(1) # Indicate an error occurred
+
def _stop_any_existing_instance(self):
if not self.pid_file_path.exists():
logging.debug("No existing instances.")
diff --git a/tools/edit_monitor/daemon_manager_test.py b/tools/edit_monitor/daemon_manager_test.py
index 0c9e04b..bcfa850 100644
--- a/tools/edit_monitor/daemon_manager_test.py
+++ b/tools/edit_monitor/daemon_manager_test.py
@@ -197,6 +197,19 @@
mock_output.side_effect = OSError('Unknown OSError')
self.assert_run_simple_daemon_success()
+ @mock.patch('os.execv')
+ def test_monitor_daemon_reboot_triggered(self, mock_execv):
+ binary_file = tempfile.NamedTemporaryFile(
+ dir=self.working_dir.name, delete=False
+ )
+
+ dm = daemon_manager.DaemonManager(
+ binary_file.name, daemon_target=long_running_daemon
+ )
+ dm.start()
+ dm.monitor_daemon(reboot_timeout=0.5)
+ mock_execv.assert_called_once()
+
def test_stop_success(self):
dm = daemon_manager.DaemonManager(
TEST_BINARY_FILE, daemon_target=long_running_daemon
@@ -232,6 +245,52 @@
self.assert_no_subprocess_running()
self.assertTrue(dm.pid_file_path.exists())
+ @mock.patch('os.execv')
+ def test_reboot_success(self, mock_execv):
+ binary_file = tempfile.NamedTemporaryFile(
+ dir=self.working_dir.name, delete=False
+ )
+
+ dm = daemon_manager.DaemonManager(
+ binary_file.name, daemon_target=long_running_daemon
+ )
+ dm.start()
+ dm.reboot()
+
+ # Verifies the old process is stopped
+ self.assert_no_subprocess_running()
+ self.assertFalse(dm.pid_file_path.exists())
+
+ mock_execv.assert_called_once()
+
+ @mock.patch('os.execv')
+ def test_reboot_binary_no_longer_exists(self, mock_execv):
+ dm = daemon_manager.DaemonManager(
+ TEST_BINARY_FILE, daemon_target=long_running_daemon
+ )
+ dm.start()
+
+ with self.assertRaises(SystemExit) as cm:
+ dm.reboot()
+ mock_execv.assert_not_called()
+ self.assertEqual(cm.exception.code, 0)
+
+ @mock.patch('os.execv')
+ def test_reboot_failed(self, mock_execv):
+ mock_execv.side_effect = OSError('Unknown OSError')
+ binary_file = tempfile.NamedTemporaryFile(
+ dir=self.working_dir.name, delete=False
+ )
+
+ dm = daemon_manager.DaemonManager(
+ binary_file.name, daemon_target=long_running_daemon
+ )
+ dm.start()
+
+ with self.assertRaises(SystemExit) as cm:
+ dm.reboot()
+ self.assertEqual(cm.exception.code, 1)
+
def assert_run_simple_daemon_success(self):
damone_output_file = tempfile.NamedTemporaryFile(
dir=self.working_dir.name, delete=False