Merge "Warn/Panic with x86_64 emulation without CPU acceleration."
diff --git a/android/main.c b/android/main.c
index 9cba680..8ce827b 100644
--- a/android/main.c
+++ b/android/main.c
@@ -1282,9 +1282,11 @@
bool accel_ok = android_hasCpuAcceleration(&accel_status);
#ifdef __linux__
+ static const char kAccelerator[] = "KVM";
static const char kEnableAccelerator[] = "-enable-kvm";
static const char kDisableAccelerator[] = "-disable-kvm";
#else
+ static const char kAccelerator[] = "Intel HAXM";
static const char kEnableAccelerator[] = "-enable-hax";
static const char kDisableAccelerator[] = "-disable-hax";
#endif
@@ -1303,6 +1305,28 @@
dprint("CPU Acceleration status: %s", accel_status);
}
+ // Special case: x86_64 emulation currently requires hardware
+ // acceleration, so refuse to start in 'auto' mode if it is not
+ // available.
+ {
+ char* abi = avdInfo_getTargetAbi(avd);
+ if (!strcmp(abi, "x86_64")) {
+ if (!accel_ok && accel_mode != ACCEL_OFF) {
+ derror("x86_64 emulation currently requires hardware acceleration!\n"
+ "Please ensure %s is properly installed and usable.\n"
+ "CPU acceleration status: %s",
+ kAccelerator, accel_status);
+ exit(1);
+ }
+ else if (accel_mode == ACCEL_OFF) {
+ // '-no-accel' of '-accel off' was used explicitly. Warn about
+ // the issue but do not exit.
+ dwarning("x86_64 emulation may not work without hardware acceleration!");
+ }
+ }
+ AFREE(abi);
+ }
+
// CPU acceleration only works for x86 and x86_64 system images.
if (accel_mode == ACCEL_OFF && accel_ok) {
args[n++] = ASTRDUP(kDisableAccelerator);