Put dex2oat32 and dex2oat64 in the ART apex.

Required to move to dex2oat64 on some devices.

Test: m && art_apex_test
Test: art/build/apex/runtests.sh
Bug: 153380900
(cherry picked from commit d68580ee6508bd9d5aa6bbdef33f79b8c2cbcf85)
Change-Id: Ibb0f181f32474eaedef7a8aa4b441cec8899b8c3
Merged-In: Ie4a75d72a8be3c1252c6b49b29d680dc641b6b61
diff --git a/build/apex/Android.bp b/build/apex/Android.bp
index 738a870..22510ef 100644
--- a/build/apex/Android.bp
+++ b/build/apex/Android.bp
@@ -8,9 +8,12 @@
 art_runtime_base_binaries_both = [
     "dalvikvm",
 ]
-// - Base requirements (binaries for which a 32-bit version is preferred).
-art_runtime_base_binaries_prefer32 = [
+art_runtime_base_binaries_both_on_device_first_on_host = [
     "dex2oat",
+]
+// - Base requirements (binaries for which a 32-bit version is preferred on device, but for which
+//   only the "first" (likely 64-bit) version is required on host).
+art_runtime_base_binaries_prefer32_on_device_first_on_host = [
     "dexoptanalyzer",
     "profman",
 ]
@@ -61,16 +64,13 @@
     "linker",
 ]
 
-// - Debug variants (binaries for which a 32-bit version is preferred).
-art_runtime_debug_binaries_prefer32 = [
+// - Debug variants (binaries for which a 32-bit version is preferred on device, but for which
+//   only the "first" (likely 64-bit) version is required on host).
+art_runtime_debug_binaries_prefer32_on_device_first_on_host = [
     "dexoptanalyzerd",
     "profmand",
 ]
-art_runtime_debug_binaries_prefer32_device = [
-    "dex2oatd",
-]
-
-art_runtime_debug_binaries_both_host = [
+art_runtime_debug_binaries_both_on_device_first_on_host = [
     "dex2oatd",
 ]
 
@@ -218,10 +218,11 @@
         libcore_native_shared_libs,
     multilib: {
         both: {
-            binaries: art_runtime_base_binaries_both,
+            binaries: art_runtime_base_binaries_both +
+                art_runtime_base_binaries_both_on_device_first_on_host,
         },
         prefer32: {
-            binaries: art_runtime_base_binaries_prefer32,
+            binaries: art_runtime_base_binaries_prefer32_on_device_first_on_host,
         },
         first: {
             binaries: art_tools_common_binaries +
@@ -246,11 +247,11 @@
         libcore_debug_native_shared_libs,
     multilib: {
         both: {
-            binaries: art_tools_debug_binaries_both,
+            binaries: art_tools_debug_binaries_both +
+                art_runtime_debug_binaries_both_on_device_first_on_host,
         },
         prefer32: {
-            binaries: art_runtime_debug_binaries_prefer32 +
-                art_runtime_debug_binaries_prefer32_device,
+            binaries: art_runtime_debug_binaries_prefer32_on_device_first_on_host,
         },
         first: {
             binaries: art_tools_debug_binaries +
@@ -336,15 +337,16 @@
     multilib: {
         both: {
             binaries: art_runtime_base_binaries_both +
-                art_runtime_debug_binaries_both_host +
                 art_tools_debug_binaries_both,
         },
         first: {
-            binaries: art_tools_common_binaries + // Host APEX is always debug.
-                art_tools_debug_binaries +
-                art_tools_host_only_binaries +
-                art_runtime_base_binaries_prefer32 +
-                art_runtime_debug_binaries_prefer32,
+            binaries: art_runtime_base_binaries_prefer32_on_device_first_on_host +
+                art_runtime_base_binaries_both_on_device_first_on_host +
+                art_runtime_debug_binaries_prefer32_on_device_first_on_host +
+                art_runtime_debug_binaries_both_on_device_first_on_host +
+                art_tools_common_binaries +
+                art_tools_debug_binaries + // Host APEX is always debug.
+                art_tools_host_only_binaries,
         },
     },
     key: "com.android.art.key",
diff --git a/build/apex/art_apex_test.py b/build/apex/art_apex_test.py
index bf0f543..6bccdf5 100755
--- a/build/apex/art_apex_test.py
+++ b/build/apex/art_apex_test.py
@@ -389,10 +389,18 @@
     """Check bin/filename32, and/or bin/filename64, with symlink bin/filename."""
     raise NotImplementedError
 
+  def check_symlinked_first_executable(self, filename):
+    """Check bin/filename32, and/or bin/filename64, with symlink bin/filename."""
+    raise NotImplementedError
+
   def check_multilib_executable(self, filename):
     """Check bin/filename for 32 bit, and/or bin/filename64."""
     raise NotImplementedError
 
+  def check_first_executable(self, filename):
+    """Check bin/filename for 32 bit, and/or bin/filename64."""
+    raise NotImplementedError
+
   def check_native_library(self, basename):
     """Check lib/basename.so, and/or lib64/basename.so."""
     raise NotImplementedError
@@ -411,8 +419,15 @@
     self.check_executable('%s32' % filename)
     self.check_executable_symlink(filename)
 
+  def check_symlinked_first_executable(self, filename):
+    self.check_executable('%s32' % filename)
+    self.check_executable_symlink(filename)
+
   def check_multilib_executable(self, filename):
-    self.check_executable(filename)
+    self.check_executable('%s32' % filename)
+
+  def check_first_executable(self, filename):
+    self.check_executable('%s32' % filename)
 
   def check_native_library(self, basename):
     # TODO: Use $TARGET_ARCH (e.g. check whether it is "arm" or "arm64") to improve
@@ -431,9 +446,16 @@
     self.check_executable('%s64' % filename)
     self.check_executable_symlink(filename)
 
+  def check_symlinked_first_executable(self, filename):
+    self.check_executable('%s64' % filename)
+    self.check_executable_symlink(filename)
+
   def check_multilib_executable(self, filename):
     self.check_executable('%s64' % filename)
 
+  def check_first_executable(self, filename):
+    self.check_executable('%s64' % filename)
+
   def check_native_library(self, basename):
     # TODO: Use $TARGET_ARCH (e.g. check whether it is "arm" or "arm64") to improve
     # the precision of this test?
@@ -452,9 +474,16 @@
     self.check_executable('%s64' % filename)
     self.check_executable_symlink(filename)
 
+  def check_symlinked_first_executable(self, filename):
+    self.check_executable('%s64' % filename)
+    self.check_executable_symlink(filename)
+
   def check_multilib_executable(self, filename):
     self.check_executable('%s64' % filename)
-    self.check_executable(filename)
+    self.check_executable('%s32' % filename)
+
+  def check_first_executable(self, filename):
+    self.check_executable('%s64' % filename)
 
   def check_native_library(self, basename):
     # TODO: Use $TARGET_ARCH (e.g. check whether it is "arm" or "arm64") to improve
@@ -482,7 +511,7 @@
     self._checker.check_file('apex_manifest.pb')
 
     # Check binaries for ART.
-    self._checker.check_executable('dex2oat')
+    self._checker.check_first_executable('dex2oat')
     self._checker.check_executable('dexdump')
     self._checker.check_executable('dexlist')
     self._checker.check_executable('dexoptanalyzer')
@@ -579,6 +608,7 @@
 
     # Check binaries for ART.
     self._checker.check_executable('oatdump')
+    self._checker.check_multilib_executable('dex2oat')
 
     # Check internal libraries for ART.
     self._checker.check_prefer64_library('libart-disassembler')
@@ -614,7 +644,8 @@
   def run(self):
     # Check binaries for ART.
     self._checker.check_executable('hprof-conv')
-    self._checker.check_symlinked_multilib_executable('dex2oatd')
+    self._checker.check_symlinked_first_executable('dex2oatd')
+    self._checker.check_symlinked_first_executable('dex2oat')
 
     # Check exported native libraries for Managed Core Library.
     self._checker.check_native_library('libandroidicu-host')
@@ -674,7 +705,8 @@
 
   def run(self):
     # Check ART debug binaries.
-    self._checker.check_executable('dex2oatd')
+    self._checker.check_multilib_executable('dex2oatd')
+    self._checker.check_multilib_executable('dex2oat')
     self._checker.check_executable('oatdumpd')
 
     # Check ART internal libraries.
diff --git a/dex2oat/Android.bp b/dex2oat/Android.bp
index 60d12c8..fb76dd9 100644
--- a/dex2oat/Android.bp
+++ b/dex2oat/Android.bp
@@ -187,8 +187,7 @@
 
     target: {
         android: {
-            // Use the 32-bit version of dex2oat on devices.
-            compile_multilib: "prefer32",
+            compile_multilib: "both",
         },
     },
     header_libs: [
@@ -256,6 +255,15 @@
         "libart-dex2oat",
     ],
 
+    multilib: {
+        lib32: {
+            suffix: "32",
+        },
+        lib64: {
+            suffix: "64",
+        },
+    },
+
     pgo: {
         // Additional cflags just for dex2oat during PGO instrumentation
         cflags: [
@@ -284,18 +292,9 @@
             // account. Note that this override cannot be in cc_default because
             // it'd get overridden by the load hook even when it uses
             // PrependProperties.
-            compile_multilib: "both",
+            compile_multilib: "64",
             symlink_preferred_arch: true,
         },
-        linux_glibc_x86: {
-            suffix: "32",
-        },
-        linux_glibc_x86_64: {
-            suffix: "64",
-        },
-        linux_bionic_x86_64: {
-            suffix: "64",
-        },
     },
     apex_available: [
         "com.android.art.release",
@@ -332,7 +331,6 @@
             static_libs: [
                 "libz",
             ],
-            compile_multilib: "prefer32",
         },
         host: {
             shared_libs: [
@@ -345,22 +343,22 @@
             // account. Note that this override cannot be in cc_default because
             // it'd get overridden by the load hook even when it uses
             // PrependProperties.
-            compile_multilib: "both",
+            compile_multilib: "64",
             symlink_preferred_arch: true,
         },
-        linux_glibc_x86: {
-            suffix: "32",
-        },
-        linux_glibc_x86_64: {
-            suffix: "64",
-        },
-        linux_bionic_x86_64: {
-            suffix: "64",
-        },
     },
     apex_available: [
         "com.android.art.debug",
     ],
+
+    multilib: {
+        lib32: {
+            suffix: "32",
+        },
+        lib64: {
+            suffix: "64",
+        },
+    },
 }
 
 cc_defaults {