Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support i686-linux-android target for android-x86 emulator #20472

Merged
merged 1 commit into from May 23, 2018
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

@@ -10,6 +10,10 @@ ar = "arm-linux-androideabi-ar"
linker = "./ports/servo/fake-ld-arm64.sh"
ar = "aarch64-linux-android-ar"

[target.i686-linux-android]
linker = "./ports/servo/fake-ld-x86.sh"
ar = "i686-linux-android-ar"

[target.arm-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
ar = "arm-linux-gnueabihf-ar"

Some generated files are not rendered by default. Learn more.

@@ -48,7 +48,7 @@ fn android_main() {
"arch-arm"
} else if target.contains("aarch64") {
"arch-arm64"
} else if target.contains("x86") {
} else if target.contains("x86") || target.contains("i686") {
"arch-x86"
} else if target.contains("mips") {
"arch-mips"
@@ -62,10 +62,13 @@ fn android_main() {
"android-18"
};

let toolchain = if target.contains("armv7") {
"arm-linux-androideabi".into()
let (toolchain, prefix) = if target.contains("armv7") {
let toolchain = "arm-linux-androideabi";
(toolchain.into(), toolchain.into())
} else if target.contains("i686") {
("x86".into(), target)
} else {
target
(target.clone(), target)
};

let toolchain_path = ndk_path.join("toolchains").join(format!("{}-4.9", toolchain)).join("prebuilt").
@@ -77,7 +80,7 @@ fn android_main() {
let directory = Path::new(&out_dir);

// compiling android_native_app_glue.c
if Command::new(toolchain_path.join("bin").join(format!("{}-gcc", toolchain)))
if Command::new(toolchain_path.join("bin").join(format!("{}-gcc", prefix)))
.arg(ndk_path.join("sources").join("android").join("native_app_glue").join("android_native_app_glue.c"))
.arg("-c")
.arg("-o").arg(directory.join("android_native_app_glue.o"))
@@ -91,7 +94,7 @@ fn android_main() {
}

// compiling libandroid_native_app_glue.a
if Command::new(toolchain_path.join("bin").join(format!("{}-ar", toolchain)))
if Command::new(toolchain_path.join("bin").join(format!("{}-ar", prefix)))
.arg("rcs")
.arg(directory.join("libandroid_native_app_glue.a"))
.arg(directory.join("android_native_app_glue.o"))
@@ -11,4 +11,5 @@ set -o pipefail
source ./ports/servo/fake-ld.sh

export _GCC_PARAMS="${@}"
call_gcc "arch-arm" "arm-linux-androideabi" "android-18" "armeabi"
call_gcc "arch-arm" "arm-linux-androideabi" "android-18" "armeabi" \
"arm-linux-androideabi"
@@ -11,4 +11,5 @@ set -o pipefail
source ./ports/servo/fake-ld.sh

export _GCC_PARAMS="${@}"
call_gcc "arch-arm" "arm-linux-androideabi" "android-18" "armeabi-v7a"
call_gcc "arch-arm" "arm-linux-androideabi" "android-18" "armeabi-v7a" \
"arm-linux-androideabi"
@@ -0,0 +1,14 @@
#!/usr/bin/env bash

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

set -o errexit
set -o nounset
set -o pipefail

source ./ports/servo/fake-ld.sh

export _GCC_PARAMS="${@}"
call_gcc "arch-x86" "x86" "android-18" "x86" "i686-linux-android"
@@ -32,7 +32,7 @@ call_gcc()
echo "sysroot: ${ANDROID_SYSROOT}"
echo "targetdir: ${ANDROID_CXX_LIBS}"

"${ANDROID_TOOLCHAIN}/${_ANDROID_EABI}-gcc" \
"${ANDROID_TOOLCHAIN}/$5-gcc" \
--sysroot="${ANDROID_SYSROOT}" -L "${ANDROID_CXX_LIBS}" ${_GCC_PARAMS} -lc++ \
-o "${TARGET_DIR}/libservo.so" -shared && touch "${TARGET_DIR}/servo"
}
@@ -387,12 +387,12 @@ impl Window {
}
}

#[cfg(not(any(target_arch = "arm", target_arch = "aarch64")))]
#[cfg(not(any(target_arch = "arm", target_arch = "aarch64", target_os = "android")))]
fn gl_version() -> GlRequest {
return GlRequest::Specific(Api::OpenGl, (3, 2));
}

#[cfg(any(target_arch = "arm", target_arch = "aarch64"))]
#[cfg(any(target_arch = "arm", target_arch = "aarch64", target_os = "android"))]
fn gl_version() -> GlRequest {
GlRequest::Specific(Api::OpenGlEs, (3, 0))
}
@@ -295,6 +295,7 @@ def build(self, target=None, release=False, dev=False, jobs=None,
sys.exit(1)

env["RUST_TARGET"] = target
env["ANDROID_TOOLCHAIN_NAME"] = self.config["android"]["toolchain_prefix"]
with cd(openssl_dir):
status = call(
make_cmd + ["-f", "openssl.makefile"],
@@ -607,24 +607,35 @@ def handle_android_target(self, target):
if target == "arm-linux-androideabi":
self.config["android"]["platform"] = "android-18"
self.config["android"]["target"] = target
self.config["android"]["toolchain_prefix"] = target
self.config["android"]["arch"] = "arm"
self.config["android"]["lib"] = "armeabi"
self.config["android"]["toolchain_name"] = target + "-4.9"
return True
elif target == "armv7-linux-androideabi":
self.config["android"]["platform"] = "android-18"
self.config["android"]["target"] = target
self.config["android"]["toolchain_prefix"] = "arm-linux-androideabi"
self.config["android"]["arch"] = "arm"
self.config["android"]["lib"] = "armeabi-v7a"
self.config["android"]["toolchain_name"] = "arm-linux-androideabi-4.9"
return True
elif target == "aarch64-linux-android":
self.config["android"]["platform"] = "android-21"
self.config["android"]["target"] = target
self.config["android"]["toolchain_prefix"] = target
self.config["android"]["arch"] = "arm64"
self.config["android"]["lib"] = "arm64-v8a"
self.config["android"]["toolchain_name"] = target + "-4.9"
return True
elif target == "i686-linux-android":
self.config["android"]["platform"] = "android-18"
self.config["android"]["target"] = target
self.config["android"]["toolchain_prefix"] = "x86"
self.config["android"]["arch"] = "x86"
self.config["android"]["lib"] = "x86"
self.config["android"]["toolchain_name"] = "x86-4.9"
return True
return False

def ensure_bootstrapped(self, target=None):
@@ -200,6 +200,8 @@ def package(self, release=False, dev=False, android=None, debug=False, debugger=
build_type = "Arm64"
elif "armv7" in android_target:
build_type = "Armv7"
elif "i686" in android_target:
build_type = "x86"
else:
build_type = "Arm"

@@ -240,7 +240,7 @@ String getRustTarget(String arch) {
case 'arm' : return 'arm-linux-androideabi'
case 'armv7' : return 'armv7-linux-androideabi'
case 'arm64' : return 'aarch64-linux-android'
case 'x86' : return 'x86'
case 'x86' : return 'i686-linux-android'
default: throw new GradleException("Invalid target architecture " + arch)
}
}
@@ -50,7 +50,7 @@ case $RUST_TARGET in
_OPENSSL_ARCH="arm64"
_OPENSSL_CONFIG="linux-generic64 -DB_ENDIAN"
;;
x86*)
x86* | i686*)
_ANDROID_TARGET=$RUST_TARGET
_ANDROID_ARCH=arch-x86
_OPENSSL_MACHINE="x86"
@@ -62,7 +62,7 @@ case $RUST_TARGET in
;;
esac

_ANDROID_EABI="$_ANDROID_TARGET-4.9"
_ANDROID_EABI="$ANDROID_TOOLCHAIN_NAME-4.9"


# Set _ANDROID_API to the API you want to use. You should set it
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.