aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitrii Merkurev <dimorinny@google.com>2024-03-12 00:15:39 +0000
committerDmitrii Merkurev <dimorinny@google.com>2024-03-12 00:21:04 +0000
commitc969b313358090e08bc87115083ae28a8752247e (patch)
tree0c70d76812b40c3da66b401de6db4550111e89d1
parentf4a7c128c939de8963ffc739f84396bb93114399 (diff)
downloadacloud-c969b313358090e08bc87115083ae28a8752247e.tar.gz
Add flags to start acloud with efi android loader
Example usage: --android-efi-loader-build-id 11544241 --android-efi-loader-artifact gbl_x86_32.efi Test: acloud-dev create --android-efi-loader-build-id 11544241 --android-efi-loader-artifact gbl_x86_32.efi Test: ./run_tests.sh Bug: 322983262 Change-Id: I1f98b5be707ac81536f6f40e25be30c0b961b3cd Signed-off-by: Dmitrii Merkurev <dimorinny@google.com>
-rw-r--r--create/avd_spec.py9
-rw-r--r--create/create_args.py12
-rw-r--r--create/remote_image_local_instance.py1
-rw-r--r--internal/lib/android_build_client.py28
-rw-r--r--internal/lib/android_build_client_test.py32
-rw-r--r--internal/lib/cvd_compute_client_multi_stage.py7
-rw-r--r--internal/lib/cvd_utils.py4
-rw-r--r--internal/lib/cvd_utils_test.py15
-rw-r--r--public/actions/remote_host_cf_device_factory.py3
-rw-r--r--public/actions/remote_host_cf_device_factory_test.py1
-rw-r--r--public/actions/remote_instance_cf_device_factory.py1
11 files changed, 92 insertions, 21 deletions
diff --git a/create/avd_spec.py b/create/avd_spec.py
index f5da7fed..8b2f984a 100644
--- a/create/avd_spec.py
+++ b/create/avd_spec.py
@@ -139,6 +139,7 @@ class AVDSpec():
self._ota_build_info = {}
self._host_package_build_info = {}
self._bootloader_build_info = {}
+ self._android_efi_loader_build_info = {}
self._hw_property = None
self._hw_customize = False
self._remote_host = None
@@ -672,6 +673,9 @@ class AVDSpec():
constants.BUILD_ID: args.bootloader_build_id,
constants.BUILD_BRANCH: args.bootloader_branch,
constants.BUILD_TARGET: args.bootloader_build_target}
+ self._android_efi_loader_build_info = {
+ constants.BUILD_ID: args.android_efi_loader_build_id,
+ constants.BUILD_ARTIFACT: args.android_efi_loader_artifact}
self._host_package_build_info = {
constants.BUILD_ID: args.host_package_build_id,
constants.BUILD_BRANCH: args.host_package_branch,
@@ -963,6 +967,11 @@ class AVDSpec():
return self._bootloader_build_info
@property
+ def android_efi_loader_build_info(self):
+ """Return android efi loader build info."""
+ return self._android_efi_loader_build_info
+
+ @property
def flavor(self):
"""Return flavor."""
return self._flavor
diff --git a/create/create_args.py b/create/create_args.py
index cba574d5..fadf528d 100644
--- a/create/create_args.py
+++ b/create/create_args.py
@@ -173,6 +173,18 @@ def AddCommonCreateArgs(parser):
help="'cuttlefish only' Bootloader build target.",
required=False)
parser.add_argument(
+ "--android-efi-loader-build-id",
+ type=str,
+ dest="android_efi_loader_build_id",
+ help="'cuttlefish only' Android EFI loader build id, e.g. P2804227",
+ required=False)
+ parser.add_argument(
+ "--android-efi-loader-artifact",
+ type=str,
+ dest="android_efi_loader_artifact",
+ help="'cuttlefish only' Android EFI loader artifact name, e.g. gbl_aarch64.efi",
+ required=False)
+ parser.add_argument(
"--kernel-build-id",
type=str,
dest="kernel_build_id",
diff --git a/create/remote_image_local_instance.py b/create/remote_image_local_instance.py
index a49b63df..e8feaf39 100644
--- a/create/remote_image_local_instance.py
+++ b/create/remote_image_local_instance.py
@@ -122,6 +122,7 @@ def DownloadAndProcessImageFiles(avd_spec):
avd_spec.kernel_build_info,
avd_spec.boot_build_info,
avd_spec.bootloader_build_info,
+ avd_spec.android_efi_loader_build_info,
avd_spec.ota_build_info,
avd_spec.host_package_build_info)
diff --git a/internal/lib/android_build_client.py b/internal/lib/android_build_client.py
index b4ad23fd..4960bd0d 100644
--- a/internal/lib/android_build_client.py
+++ b/internal/lib/android_build_client.py
@@ -165,11 +165,12 @@ class AndroidBuildClient(base_cloud_client.BaseCloudApiClient):
os.chmod(local_dest, fetch_cvd_stat.st_mode | stat.S_IEXEC)
@staticmethod
- def ProcessBuild(build_info):
+ def ProcessBuild(build_info, ignore_artifact=False):
"""Create a Cuttlefish fetch_cvd build string.
Args:
build_info: The dictionary that contains build information.
+ ignore_artifact: Avoid adding artifact part to fetch_cvd build string
Returns:
A string, used in the fetch_cvd cmd or None if all args are None.
@@ -177,17 +178,22 @@ class AndroidBuildClient(base_cloud_client.BaseCloudApiClient):
build_id = build_info.get(constants.BUILD_ID)
build_target = build_info.get(constants.BUILD_TARGET)
branch = build_info.get(constants.BUILD_BRANCH)
- if not build_target:
- return build_id or branch
+ artifact = build_info.get(constants.BUILD_ARTIFACT)
- if build_target and not branch:
- branch = _DEFAULT_BRANCH
- return (build_id or branch) + "/" + build_target
+ result = build_id or branch
+ if build_target is not None:
+ result = result or _DEFAULT_BRANCH
+ result += "/" + build_target
+
+ if not ignore_artifact and artifact:
+ result += "{" + artifact + "}"
+
+ return result
def GetFetchBuildArgs(self, default_build_info, system_build_info,
kernel_build_info, boot_build_info,
- bootloader_build_info, ota_build_info,
- host_package_build_info):
+ bootloader_build_info, android_efi_loader_build_info,
+ ota_build_info, host_package_build_info):
"""Get args from build information for fetch_cvd.
Each build_info is a dictionary that contains 3 items, for example,
@@ -206,6 +212,7 @@ class AndroidBuildClient(base_cloud_client.BaseCloudApiClient):
constants.BUILD_ARTIFACT which is mapped to the
boot image name.
bootloader_build_info: The build that provides the bootloader.
+ android_efi_loader_build_info: The build that provides the Android EFI loader.
ota_build_info: The build that provides the OTA tools.
host_package_build_info: The build that provides the host package.
@@ -223,10 +230,13 @@ class AndroidBuildClient(base_cloud_client.BaseCloudApiClient):
bootloader_build = self.ProcessBuild(bootloader_build_info)
if bootloader_build:
fetch_cvd_args.append(f"-bootloader_build={bootloader_build}")
+ android_efi_loader_build = self.ProcessBuild(android_efi_loader_build_info)
+ if android_efi_loader_build:
+ fetch_cvd_args.append(f"-android_efi_loader_build {android_efi_loader_build}")
kernel_build = self.GetKernelBuild(kernel_build_info)
if kernel_build:
fetch_cvd_args.append(f"-kernel_build={kernel_build}")
- boot_build = self.ProcessBuild(boot_build_info)
+ boot_build = self.ProcessBuild(boot_build_info, ignore_artifact=True)
if boot_build:
fetch_cvd_args.append(f"-boot_build={boot_build}")
boot_artifact = boot_build_info.get(constants.BUILD_ARTIFACT)
diff --git a/internal/lib/android_build_client_test.py b/internal/lib/android_build_client_test.py
index 30e1df4a..247a2f7c 100644
--- a/internal/lib/android_build_client_test.py
+++ b/internal/lib/android_build_client_test.py
@@ -179,6 +179,10 @@ class AndroidBuildClientTest(driver_test_lib.BaseDriverTest):
ota_build = {constants.BUILD_ID: "4567",
constants.BUILD_BRANCH: "ota_branch",
constants.BUILD_TARGET: "ota_target"}
+ bootloader_build = {constants.BUILD_ID: "10111213",
+ constants.BUILD_TARGET: "boot_crosvm_x86_64"}
+ android_efi_loader_build = {constants.BUILD_ID: "6789",
+ constants.BUILD_ARTIFACT: "gbl_x86_32.efi"}
boot_build = {constants.BUILD_ID: "5678",
constants.BUILD_BRANCH: "boot_branch",
constants.BUILD_TARGET: "boot_target",
@@ -192,7 +196,7 @@ class AndroidBuildClientTest(driver_test_lib.BaseDriverTest):
self.assertEqual(
expected_args,
self.client.GetFetchBuildArgs(
- default_build, {}, {}, {}, {}, {}, {}))
+ default_build, {}, {}, {}, {}, {}, {}, {}))
# Test base image with system image.
expected_args = ["-default_build=1234/base_target",
@@ -200,7 +204,7 @@ class AndroidBuildClientTest(driver_test_lib.BaseDriverTest):
self.assertEqual(
expected_args,
self.client.GetFetchBuildArgs(
- default_build, system_build, {}, {}, {}, {}, {}))
+ default_build, system_build, {}, {}, {}, {}, {}, {}))
# Test base image with kernel image.
expected_args = ["-default_build=1234/base_target",
@@ -208,7 +212,7 @@ class AndroidBuildClientTest(driver_test_lib.BaseDriverTest):
self.assertEqual(
expected_args,
self.client.GetFetchBuildArgs(
- default_build, {}, kernel_build, {}, {}, {}, {}))
+ default_build, {}, kernel_build, {}, {}, {}, {}, {}))
# Test base image with boot image.
expected_args = ["-default_build=1234/base_target",
@@ -217,7 +221,23 @@ class AndroidBuildClientTest(driver_test_lib.BaseDriverTest):
self.assertEqual(
expected_args,
self.client.GetFetchBuildArgs(
- default_build, {}, {}, boot_build, {}, {}, {}))
+ default_build, {}, {}, boot_build, {}, {}, {}, {}))
+
+ # Test base image with bootloader.
+ expected_args = ["-default_build=1234/base_target",
+ "-bootloader_build=10111213/boot_crosvm_x86_64"]
+ self.assertEqual(
+ expected_args,
+ self.client.GetFetchBuildArgs(
+ default_build, {}, {}, {}, bootloader_build, {}, {}, {}))
+
+ # Test base image with android efi.
+ expected_args = ["-default_build=1234/base_target",
+ "-android_efi_loader_build 6789{gbl_x86_32.efi}"]
+ self.assertEqual(
+ expected_args,
+ self.client.GetFetchBuildArgs(
+ default_build, {}, {}, {}, {}, android_efi_loader_build, {}, {}))
# Test base image with otatools.
expected_args = ["-default_build=1234/base_target",
@@ -225,7 +245,7 @@ class AndroidBuildClientTest(driver_test_lib.BaseDriverTest):
self.assertEqual(
expected_args,
self.client.GetFetchBuildArgs(
- default_build, {}, {}, {}, {}, ota_build, {}))
+ default_build, {}, {}, {}, {}, {}, ota_build, {}))
# Test base image with host_package.
expected_args = ["-default_build=1234/base_target",
@@ -233,7 +253,7 @@ class AndroidBuildClientTest(driver_test_lib.BaseDriverTest):
self.assertEqual(
expected_args,
self.client.GetFetchBuildArgs(
- default_build, {}, {}, {}, {}, {}, host_package_build))
+ default_build, {}, {}, {}, {}, {}, {}, host_package_build))
def testGetFetchCertArg(self):
"""Test GetFetchCertArg."""
diff --git a/internal/lib/cvd_compute_client_multi_stage.py b/internal/lib/cvd_compute_client_multi_stage.py
index 6e72667a..c6ba1b9a 100644
--- a/internal/lib/cvd_compute_client_multi_stage.py
+++ b/internal/lib/cvd_compute_client_multi_stage.py
@@ -325,7 +325,7 @@ class CvdComputeClient(android_compute_client.AndroidComputeClient):
@utils.TimeExecute(function_description="Downloading build on instance")
def FetchBuild(self, default_build_info, system_build_info,
kernel_build_info, boot_build_info, bootloader_build_info,
- ota_build_info, host_package_build_info):
+ android_efi_loader_build_info, ota_build_info, host_package_build_info):
"""Execute fetch_cvd on the remote instance to get Cuttlefish runtime files.
Args:
@@ -334,6 +334,7 @@ class CvdComputeClient(android_compute_client.AndroidComputeClient):
kernel_build_info: The build that provides the kernel.
boot_build_info: The build that provides the boot image.
bootloader_build_info: The build that provides the bootloader.
+ android_efi_loader_build_info: The build that provides the Android EFI app.
ota_build_info: The build that provides the OTA tools.
host_package_build_info: The build that provides the host package.
@@ -344,8 +345,8 @@ class CvdComputeClient(android_compute_client.AndroidComputeClient):
fetch_cvd_args = ["-credential_source=gce"]
fetch_cvd_build_args = self._build_api.GetFetchBuildArgs(
default_build_info, system_build_info, kernel_build_info,
- boot_build_info, bootloader_build_info, ota_build_info,
- host_package_build_info)
+ boot_build_info, bootloader_build_info, android_efi_loader_build_info,
+ ota_build_info, host_package_build_info)
fetch_cvd_args.extend(fetch_cvd_build_args)
self._ssh.Run("./fetch_cvd " + " ".join(fetch_cvd_args),
diff --git a/internal/lib/cvd_utils.py b/internal/lib/cvd_utils.py
index 14f51178..ac05a078 100644
--- a/internal/lib/cvd_utils.py
+++ b/internal/lib/cvd_utils.py
@@ -993,6 +993,10 @@ def GetRemoteBuildInfoDict(avd_spec):
{"bootloader_" + key: val
for key, val in avd_spec.bootloader_build_info.items() if val}
)
+ build_info_dict.update(
+ {"android_efi_loader_" + key: val
+ for key, val in avd_spec.android_efi_loader_build_info.items() if val}
+ )
return build_info_dict
diff --git a/internal/lib/cvd_utils_test.py b/internal/lib/cvd_utils_test.py
index edb0ea04..8580473c 100644
--- a/internal/lib/cvd_utils_test.py
+++ b/internal/lib/cvd_utils_test.py
@@ -617,7 +617,8 @@ class CvdUtilsTest(driver_test_lib.BaseDriverTest):
remote_image=remote_image,
kernel_build_info={"build_target": "kernel"},
system_build_info={},
- bootloader_build_info={})
+ bootloader_build_info={},
+ android_efi_loader_build_info = {})
self.assertEqual(remote_image,
cvd_utils.GetRemoteBuildInfoDict(mock_avd_spec))
@@ -633,6 +634,10 @@ class CvdUtilsTest(driver_test_lib.BaseDriverTest):
"branch": "aosp_u-boot-mainline",
"build_id": "400000",
"build_target": "u-boot_crosvm_x86_64"}
+ android_efi_loader_build_info = {
+ "build_id": "500000",
+ "artifact": "gbl_aarch64.efi"
+ }
all_build_info = {
"kernel_branch": "aosp_kernel-common-android12-5.10",
"kernel_build_id": "200000",
@@ -642,14 +647,18 @@ class CvdUtilsTest(driver_test_lib.BaseDriverTest):
"system_build_target": "aosp_x86_64-userdebug",
"bootloader_branch": "aosp_u-boot-mainline",
"bootloader_build_id": "400000",
- "bootloader_build_target": "u-boot_crosvm_x86_64"}
+ "bootloader_build_target": "u-boot_crosvm_x86_64",
+ "android_efi_loader_build_id": "500000",
+ "android_efi_loader_artifact": "gbl_aarch64.efi"
+ }
all_build_info.update(remote_image)
mock_avd_spec = mock.Mock(
spec=[],
remote_image=remote_image,
kernel_build_info=kernel_build_info,
system_build_info=system_build_info,
- bootloader_build_info=bootloader_build_info)
+ bootloader_build_info=bootloader_build_info,
+ android_efi_loader_build_info=android_efi_loader_build_info)
self.assertEqual(all_build_info,
cvd_utils.GetRemoteBuildInfoDict(mock_avd_spec))
diff --git a/public/actions/remote_host_cf_device_factory.py b/public/actions/remote_host_cf_device_factory.py
index bfb43c84..4980fb18 100644
--- a/public/actions/remote_host_cf_device_factory.py
+++ b/public/actions/remote_host_cf_device_factory.py
@@ -313,6 +313,7 @@ class RemoteHostDeviceFactory(base_device_factory.BaseDeviceFactory):
self._avd_spec.kernel_build_info,
self._avd_spec.boot_build_info,
self._avd_spec.bootloader_build_info,
+ self._avd_spec.android_efi_loader_build_info,
self._avd_spec.ota_build_info,
self._avd_spec.host_package_build_info)
@@ -339,6 +340,7 @@ class RemoteHostDeviceFactory(base_device_factory.BaseDeviceFactory):
self._avd_spec.kernel_build_info,
self._avd_spec.boot_build_info,
self._avd_spec.bootloader_build_info,
+ self._avd_spec.android_efi_loader_build_info,
self._avd_spec.ota_build_info,
self._avd_spec.host_package_build_info)
@@ -398,6 +400,7 @@ class RemoteHostDeviceFactory(base_device_factory.BaseDeviceFactory):
self._avd_spec.kernel_build_info,
self._avd_spec.boot_build_info,
self._avd_spec.bootloader_build_info,
+ self._avd_spec.android_efi_loader_build_info,
self._avd_spec.ota_build_info,
self._avd_spec.host_package_build_info)
creds_cache_file = os.path.join(_HOME_FOLDER, cfg.creds_cache_file)
diff --git a/public/actions/remote_host_cf_device_factory_test.py b/public/actions/remote_host_cf_device_factory_test.py
index 9ee010de..79c159a3 100644
--- a/public/actions/remote_host_cf_device_factory_test.py
+++ b/public/actions/remote_host_cf_device_factory_test.py
@@ -56,6 +56,7 @@ class RemoteHostDeviceFactoryTest(driver_test_lib.BaseDriverTest):
kernel_build_info={},
boot_build_info={},
bootloader_build_info={},
+ android_efi_loader_build_info={},
ota_build_info={},
host_package_build_info={},
remote_host="192.0.2.100",
diff --git a/public/actions/remote_instance_cf_device_factory.py b/public/actions/remote_instance_cf_device_factory.py
index b6259997..e5a2f849 100644
--- a/public/actions/remote_instance_cf_device_factory.py
+++ b/public/actions/remote_instance_cf_device_factory.py
@@ -111,6 +111,7 @@ class RemoteInstanceDeviceFactory(gce_device_factory.GCEDeviceFactory):
avd_spec.kernel_build_info,
avd_spec.boot_build_info,
avd_spec.bootloader_build_info,
+ avd_spec.android_efi_loader_build_info,
avd_spec.ota_build_info,
avd_spec.host_package_build_info)