Get rid of dependencies on /system/bin ART binary compat symlinks.
Make the tools/art script try the /apex/com.android.art location first,
for use on device. Also add a symlink for dex2oat to the preferred
bitness in the APEX, just like dalvikvm already has, so the script
works with neither --32 nor --64.
Test: m installclean
art/tools/buildbot-build.sh --target && \
art/tools/buildbot-teardown-device.sh && \
art/tools/buildbot-cleanup-device.sh && \
art/tools/buildbot-setup-device.sh && \
art/tools/buildbot-sync.sh
art/tools/run-libcore-tests.sh --mode=device --variant=X32 libcore.sun.net
art/tools/run-libcore-tests.sh --mode=device --variant=X64 libcore.sun.net
with the script temporarily changed to error out on missing dex2oat
Test: rm -r out/host
art/tools/buildbot-build.sh --host
art/tools/run-libcore-tests.sh --mode=host --variant=X32 libcore.sun.net
art/tools/run-libcore-tests.sh --mode=host --variant=X64 libcore.sun.net
with the script temporarily changed to error out on missing dex2oat
Test: lunch aosp_cf_x86_64_phone
art/build/apex/runtests.sh --bitness=multilib
Test: lunch aosp_arm
art/build/apex/runtests.sh
Bug: 155478143
Change-Id: Ie6a6c057c5948d353258882f5a9e0ae921d7bedc
diff --git a/build/apex/art_apex_test.py b/build/apex/art_apex_test.py
index 904fd16..17eb18e 100755
--- a/build/apex/art_apex_test.py
+++ b/build/apex/art_apex_test.py
@@ -343,14 +343,6 @@
"""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
@@ -376,12 +368,6 @@
self.check_executable('%s32' % filename)
self.check_executable_symlink(filename)
- def check_multilib_executable(self, 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
# the precision of this test?
@@ -405,12 +391,6 @@
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?
@@ -436,13 +416,6 @@
self.check_executable('%s64' % filename)
self.check_executable_symlink(filename)
- def check_multilib_executable(self, filename):
- self.check_executable('%s64' % 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
# the precision of this test?
@@ -478,7 +451,6 @@
self._checker.check_file('apex_manifest.pb')
# Check binaries for ART.
- self._checker.check_first_executable('dex2oat')
self._checker.check_executable('dexdump')
self._checker.check_executable('dexlist')
self._checker.check_executable('dexoptanalyzer')
@@ -573,9 +545,9 @@
# Check binaries for ART.
self._checker.check_executable('artd')
- self._checker.check_multilib_executable('dex2oat')
self._checker.check_executable('oatdump')
self._checker.check_executable("odrefresh")
+ self._checker.check_symlinked_multilib_executable('dex2oat')
# Check internal libraries for ART.
self._checker.check_native_library('libperfetto_hprof')
@@ -663,9 +635,8 @@
def run(self):
# Check ART debug binaries.
- self._checker.check_multilib_executable('dex2oatd')
- self._checker.check_multilib_executable('dex2oat')
self._checker.check_executable('oatdumpd')
+ self._checker.check_symlinked_multilib_executable('dex2oatd')
# Check ART internal libraries.
self._checker.check_native_library('libperfetto_hprofd')
diff --git a/dex2oat/Android.bp b/dex2oat/Android.bp
index 531c0f5..5bc986b 100644
--- a/dex2oat/Android.bp
+++ b/dex2oat/Android.bp
@@ -272,6 +272,7 @@
suffix: "64",
},
},
+ symlink_preferred_arch: true,
pgo: {
// Additional cflags just for dex2oat during PGO instrumentation
@@ -281,6 +282,7 @@
"-DART_PGO_INSTRUMENTATION",
],
},
+
target: {
android: {
shared_libs: [
@@ -311,9 +313,9 @@
// it'd get overridden by the load hook even when it uses
// PrependProperties.
compile_multilib: "64",
- symlink_preferred_arch: true,
},
},
+
apex_available: [
"com.android.art",
"com.android.art.debug",
@@ -329,6 +331,17 @@
// Modules that do dexpreopting, e.g. android_app, depend implicitly on
// either dex2oat or dex2oatd in ART source builds.
visibility: ["//visibility:public"],
+
+ multilib: {
+ lib32: {
+ suffix: "32",
+ },
+ lib64: {
+ suffix: "64",
+ },
+ },
+ symlink_preferred_arch: true,
+
target: {
android: {
shared_libs: [
@@ -356,21 +369,12 @@
// it'd get overridden by the load hook even when it uses
// PrependProperties.
compile_multilib: "64",
- symlink_preferred_arch: true,
},
},
+
apex_available: [
"com.android.art.debug",
],
-
- multilib: {
- lib32: {
- suffix: "32",
- },
- lib64: {
- suffix: "64",
- },
- },
}
cc_defaults {
diff --git a/tools/art b/tools/art
index e524b17..54cb7ac 100755
--- a/tools/art
+++ b/tools/art
@@ -494,20 +494,30 @@
fi
fi
-ART_BINARY_PATH=$ANDROID_ROOT/bin/$ART_BINARY
+ART_BINARY_TARGET_PATH=$ANDROID_ART_ROOT/bin/$ART_BINARY
+ART_BINARY_HOST_PATH=$ANDROID_ROOT/bin/$ART_BINARY
-if [ ! -x "$ART_BINARY_PATH" ]; then
+if [ -x "$ART_BINARY_TARGET_PATH" ]; then
+ ART_BINARY_PATH="$ART_BINARY_TARGET_PATH"
+elif [ -x "$ART_BINARY_HOST_PATH" ]; then
+ ART_BINARY_PATH="$ART_BINARY_HOST_PATH"
+else
cat 1>&2 <<EOF
-Android Runtime not found: $ART_BINARY_PATH
+Android Runtime not found as either $ART_BINARY_TARGET_PATH or $ART_BINARY_HOST_PATH
This script should be in the same directory as the Android Runtime ($ART_BINARY).
EOF
exit 1
fi
-DEX2OAT_BINARY_PATH=$ANDROID_ROOT/bin/$DEX2OAT_BINARY$DEX2OAT_SUFFIX
+DEX2OAT_BINARY_TARGET_PATH=$ANDROID_ART_ROOT/bin/$DEX2OAT_BINARY$DEX2OAT_SUFFIX
+DEX2OAT_BINARY_HOST_PATH=$ANDROID_ROOT/bin/$DEX2OAT_BINARY$DEX2OAT_SUFFIX
-if [ ! -x "$DEX2OAT_BINARY_PATH" ]; then
- echo "Warning: Android Compiler not found: $DEX2OAT_BINARY_PATH"
+if [ -x "$DEX2OAT_BINARY_TARGET_PATH" ]; then
+ DEX2OAT_BINARY_PATH="$DEX2OAT_BINARY_TARGET_PATH"
+elif [ -x "$DEX2OAT_BINARY_HOST_PATH" ]; then
+ DEX2OAT_BINARY_PATH="$DEX2OAT_BINARY_HOST_PATH"
+else
+ echo "Warning: Android Compiler not found as either $DEX2OAT_BINARY_TARGET_PATH or $DEX2OAT_BINARY_HOST_PATH"
fi
######################################