Skip to content

Commit

Permalink
Auto merge of #20472 - jdm:android-x86-2, r=mbrubeck
Browse files Browse the repository at this point in the history
Support i686-linux-android target for android-x86 emulator

The first commit allows `./mach build --target=i686-linux-android` to build successfully. The second commit is temporary as I attempt to find the cause of the mysterious crash that takes down the browser.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/20472)
<!-- Reviewable:end -->
  • Loading branch information
bors-servo committed Mar 29, 2018
2 parents d232705 + 9f061fe commit 5e74271
Show file tree
Hide file tree
Showing 13 changed files with 40 additions and 18 deletions.
4 changes: 4 additions & 0 deletions .cargo/config
Expand Up @@ -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"
Expand Down
8 changes: 4 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Expand Up @@ -28,3 +28,4 @@ opt-level = 3
#
# [patch."https://github.com/servo/<repository>"]
# <crate> = { path = "/path/to/local/checkout" }
blurdroid = { git = "https://github.com/jdm/blurdroid", branch = "x86" }
15 changes: 9 additions & 6 deletions ports/servo/build.rs
Expand Up @@ -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"
Expand All @@ -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").
Expand All @@ -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"))
Expand All @@ -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"))
Expand Down
2 changes: 1 addition & 1 deletion ports/servo/fake-ld-arm.sh
Expand Up @@ -11,4 +11,4 @@ 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"
2 changes: 1 addition & 1 deletion ports/servo/fake-ld-armv7.sh
Expand Up @@ -11,4 +11,4 @@ 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"
2 changes: 1 addition & 1 deletion ports/servo/fake-ld.sh
Expand Up @@ -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"
}
4 changes: 2 additions & 2 deletions ports/servo/glutin_app/window.rs
Expand Up @@ -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))
}
Expand Down
1 change: 1 addition & 0 deletions python/servo/build_commands.py
Expand Up @@ -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']
with cd(openssl_dir):
status = call(
make_cmd + ["-f", "openssl.makefile"],
Expand Down
11 changes: 11 additions & 0 deletions python/servo/command_base.py
Expand Up @@ -630,24 +630,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"] = 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"] = "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"] = 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"] = "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):
Expand Down
2 changes: 2 additions & 0 deletions python/servo/package_commands.py
Expand Up @@ -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"

Expand Down
2 changes: 1 addition & 1 deletion support/android/apk/app/build.gradle
Expand Up @@ -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)
}
}
Expand Down
4 changes: 2 additions & 2 deletions support/android/openssl.sh
Expand Up @@ -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"
Expand All @@ -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
Expand Down

0 comments on commit 5e74271

Please sign in to comment.