Support i686-linux-android target.

This commit is contained in:
Josh Matthews 2018-03-29 03:49:53 -04:00
parent 319556cf6a
commit d6b8aaf576
13 changed files with 54 additions and 17 deletions

View file

@ -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"

6
Cargo.lock generated
View file

@ -201,7 +201,7 @@ dependencies = [
[[package]]
name = "blurdroid"
version = "0.1.4"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -677,7 +677,7 @@ name = "device"
version = "0.0.1"
source = "git+https://github.com/servo/devices#eeb6eaddb79c019bb5c85558b3410b836da57a57"
dependencies = [
"blurdroid 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"blurdroid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"blurmac 0.1.0 (git+https://github.com/servo/devices)",
"blurmock 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"blurz 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -3769,7 +3769,7 @@ dependencies = [
"checksum bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f5cde24d1b2e2216a726368b2363a273739c91f4e3eb4e0dd12d672d396ad989"
"checksum bitreader 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "80b13e2ab064ff3aa0bdbf1eff533f9822dc37899821f5f98c67f263eab51707"
"checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
"checksum blurdroid 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d7daba519d29beebfc7d302795af88a16b43f431b9b268586926ac61cc655a68"
"checksum blurdroid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "19b23557dd27704797128f9db2816416bef20dad62d4a9768714eeb65f07d296"
"checksum blurmac 0.1.0 (git+https://github.com/servo/devices)" = "<none>"
"checksum blurmock 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "68dd72da3a3bb40f3d3bdd366c4cf8e2b1d208c366304f382c80cef8126ca8da"
"checksum blurz 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e73bda0f4c71c63a047351070097f3f507e6718e86b9ee525173371ef7b94b73"

View file

@ -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"))

View file

@ -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"

View file

@ -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"

14
ports/servo/fake-ld-x86.sh Executable file
View file

@ -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"

View file

@ -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"
}

View file

@ -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))
}

View file

@ -295,6 +295,7 @@ class MachCommands(CommandBase):
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"],

View file

@ -607,6 +607,7 @@ class CommandBase(object):
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"
@ -614,6 +615,7 @@ class CommandBase(object):
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"
@ -621,10 +623,19 @@ class CommandBase(object):
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):

View file

@ -200,6 +200,8 @@ class PackageCommands(CommandBase):
build_type = "Arm64"
elif "armv7" in android_target:
build_type = "Armv7"
elif "i686" in android_target:
build_type = "x86"
else:
build_type = "Arm"

View file

@ -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)
}
}

View file

@ -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