Merge "AndroidBoot: Change to detect build system flag for system as root."
diff --git a/AndroidBoot.mk b/AndroidBoot.mk
index fe3608f..eab4f85 100644
--- a/AndroidBoot.mk
+++ b/AndroidBoot.mk
@@ -51,6 +51,12 @@
   VERIFIED_BOOT_2 := VERIFIED_BOOT_2=0
 endif
 
+ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
+ TARGET_USE_SYSTEM_AS_ROOT_IMAGE := TARGET_USE_SYSTEM_AS_ROOT_IMAGE=1
+else
+ TARGET_USE_SYSTEM_AS_ROOT_IMAGE := TARGET_USE_SYSTEM_AS_ROOT_IMAGE=0
+endif
+
 ifeq ($(EARLY_MOUNT_SUPPORT),true)
   ENABLE_BOOTDEVICE_MOUNT := ENABLE_BOOTDEVICE_MOUNT=1
 else
@@ -113,7 +119,7 @@
 # ELF binary for ABOOT
 TARGET_ABOOT_ELF := $(PRODUCT_OUT)/aboot.elf
 $(TARGET_ABOOT_ELF): ABOOT_CLEAN | $(ABOOT_OUT)
-	$(MAKE) -C $(LK_PATH) TOOLCHAIN_PREFIX=$(CROSS_COMPILE) BOOTLOADER_OUT=$(CROOT_DIR)/$(ABOOT_OUT) $(BOOTLOADER_PLATFORM) $(EMMC_BOOT) $(SIGNED_KERNEL) $(VERIFIED_BOOT) $(VERIFIED_BOOT_2) $(ENABLE_DISPLAY) $(ENABLE_KASLRSEED) $(ENABLE_BOOTDEVICE_MOUNT) $(DEVICE_STATUS) $(BUILD_VARIANT) $(BOARD_NAME) $(ENABLE_VB_ATTEST) $(OSVERSION_IN_BOOTIMAGE) $(QSEECOM_SECAPP_REGION_2MB)
+	$(MAKE) -C $(LK_PATH) TOOLCHAIN_PREFIX=$(CROSS_COMPILE) BOOTLOADER_OUT=$(CROOT_DIR)/$(ABOOT_OUT) $(BOOTLOADER_PLATFORM) $(EMMC_BOOT) $(SIGNED_KERNEL) $(VERIFIED_BOOT) $(VERIFIED_BOOT_2) $(ENABLE_DISPLAY) $(ENABLE_KASLRSEED) $(ENABLE_BOOTDEVICE_MOUNT) $(DEVICE_STATUS) $(BUILD_VARIANT) $(BOARD_NAME) $(ENABLE_VB_ATTEST) $(OSVERSION_IN_BOOTIMAGE) $(QSEECOM_SECAPP_REGION_2MB) $(TARGET_USE_SYSTEM_AS_ROOT_IMAGE)
 
 # NAND variant output
 TARGET_NAND_BOOTLOADER := $(PRODUCT_OUT)/appsboot.mbn
@@ -142,7 +148,7 @@
 
 # Top level for eMMC variant targets
 $(TARGET_EMMC_BOOTLOADER): emmc_appsbootldr_clean | $(EMMC_BOOTLOADER_OUT) $(INSTALLED_KEYSTOREIMAGE_TARGET)
-	$(MAKE) -C $(LK_PATH) TOOLCHAIN_PREFIX=$(CROSS_COMPILE) BOOTLOADER_OUT=$(CROOT_DIR)/$(EMMC_BOOTLOADER_OUT) $(BOOTLOADER_PLATFORM) EMMC_BOOT=1 $(SIGNED_KERNEL) $(VERIFIED_BOOT) $(VERIFIED_BOOT_2) $(ENABLE_DISPLAY) $(ENABLE_KASLRSEED) $(ENABLE_BOOTDEVICE_MOUNT) $(DEVICE_STATUS) $(BUILD_VARIANT) $(BOARD_NAME) $(ENABLE_VB_ATTEST) $(OSVERSION_IN_BOOTIMAGE) $(ENABLE_BG_SUPPORT) $(QSEECOM_SECAPP_REGION_2MB)
+	$(MAKE) -C $(LK_PATH) TOOLCHAIN_PREFIX=$(CROSS_COMPILE) BOOTLOADER_OUT=$(CROOT_DIR)/$(EMMC_BOOTLOADER_OUT) $(BOOTLOADER_PLATFORM) EMMC_BOOT=1 $(SIGNED_KERNEL) $(VERIFIED_BOOT) $(VERIFIED_BOOT_2) $(ENABLE_DISPLAY) $(ENABLE_KASLRSEED) $(ENABLE_BOOTDEVICE_MOUNT) $(DEVICE_STATUS) $(BUILD_VARIANT) $(BOARD_NAME) $(ENABLE_VB_ATTEST) $(OSVERSION_IN_BOOTIMAGE) $(ENABLE_BG_SUPPORT) $(QSEECOM_SECAPP_REGION_2MB) $(TARGET_USE_SYSTEM_AS_ROOT_IMAGE)
 
 # Keep build NAND & eMMC as default for targets still using TARGET_BOOTLOADER
 TARGET_BOOTLOADER := $(PRODUCT_OUT)/EMMCBOOT.MBN
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index 27fb60d..cae7181 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -204,7 +204,7 @@
 static const char *verity_system_part = " dm=\"system";
 static const char *verity_params = " none ro,0 1 android-verity /dev/mmcblk0p";
 #else
-static const char *sys_path = "  root=/dev/mmcblk0p";
+static const char *sys_path = " root=/dev/mmcblk0p";
 #endif
 
 #if VERIFIED_BOOT
@@ -561,7 +561,8 @@
 		cmdline_len += strlen(warmboot_cmdline);
 	}
 
-	if (partition_multislot_is_supported())
+	if (target_uses_system_as_root() ||
+		partition_multislot_is_supported())
 	{
 		current_active_slot = partition_find_active_slot();
 		cmdline_len += (strlen(androidboot_slot_suffix)+
@@ -600,10 +601,15 @@
 					partition_get_index_in_lun("system", lun));
 		}
 
-		cmdline_len += strlen(sys_path_cmdline);
 #ifndef VERIFIED_BOOT_2
 		cmdline_len += strlen(syspath_buf);
 #endif
+	}
+
+	if (target_uses_system_as_root() ||
+		partition_multislot_is_supported())
+	{
+		cmdline_len += strlen(sys_path_cmdline);
 		if (!boot_into_recovery)
 			cmdline_len += strlen(skip_ramfs);
 	}
@@ -842,22 +848,34 @@
 				--dst;
 				src = SUFFIX_SLOT(current_active_slot);
 				while ((*dst++ = *src++));
+		}
 
-				if (!boot_into_recovery)
-				{
-					src = skip_ramfs;
-					--dst;
-					while ((*dst++ = *src++));
-				}
 
-				src = sys_path_cmdline;
+		/*
+		 * System-As-Root behaviour, system.img should contain both
+		 * system content and ramdisk content, and should be mounted at
+		 * root(a/b).
+		 * Apending skip_ramfs for non a/b builds which use, system as root.
+		 */
+		if ((target_uses_system_as_root() ||
+			partition_multislot_is_supported()) &&
+			have_cmdline)
+		{
+			if (!boot_into_recovery)
+			{
+				src = skip_ramfs;
 				--dst;
 				while ((*dst++ = *src++));
+			}
+
+			src = sys_path_cmdline;
+			--dst;
+			while ((*dst++ = *src++));
 
 #ifndef VERIFIED_BOOT_2
-				src = syspath_buf;
-				--dst;
-				while ((*dst++ = *src++));
+			src = syspath_buf;
+			--dst;
+			while ((*dst++ = *src++));
 #endif
 		}
 
diff --git a/makefile b/makefile
index 7810c1e..fb5f8ad 100644
--- a/makefile
+++ b/makefile
@@ -162,6 +162,12 @@
   DEFINES += ENABLE_KASLRSEED_SUPPORT=0
 endif
 
+ifeq ($(TARGET_USE_SYSTEM_AS_ROOT_IMAGE),1)
+  DEFINES += TARGET_USE_SYSTEM_AS_ROOT_IMAGE=1
+else
+  DEFINES += TARGET_USE_SYSTEM_AS_ROOT_IMAGE=0
+endif
+
 # these need to be filled out by the project/target/platform rules.mk files
 TARGET :=
 PLATFORM :=