aboutsummaryrefslogtreecommitdiffstats
path: root/python/servo/build_commands.py
diff options
context:
space:
mode:
authorAlan Jeffrey <ajeffrey@mozilla.com>2018-06-01 17:24:25 -0500
committerJosh Matthews <josh@joshmatthews.net>2018-08-20 18:22:29 -0400
commit74c1e00d8163f255bb4141ff3549bbdedd7ea766 (patch)
treed3960a6cff086d3ca2240fcc6eaa863dba4910c2 /python/servo/build_commands.py
parentd34403047e806fa6c8c2468946f64429622ec434 (diff)
downloadservo-74c1e00d8163f255bb4141ff3549bbdedd7ea766.tar.gz
servo-74c1e00d8163f255bb4141ff3549bbdedd7ea766.zip
Upgraded to SM 60
Diffstat (limited to 'python/servo/build_commands.py')
-rw-r--r--python/servo/build_commands.py79
1 files changed, 62 insertions, 17 deletions
diff --git a/python/servo/build_commands.py b/python/servo/build_commands.py
index fb2a61681ac..d788b092c05 100644
--- a/python/servo/build_commands.py
+++ b/python/servo/build_commands.py
@@ -25,6 +25,7 @@ from mach.decorators import (
)
from mach.registrar import Registrar
+from mach_bootstrap import _get_exec_path
from servo.command_base import CommandBase, cd, call, check_call, BIN_SUFFIX
from servo.util import host_triple
@@ -271,8 +272,10 @@ class MachCommands(CommandBase):
sys.exit(1)
android_platform = self.config["android"]["platform"]
- android_toolchain = self.config["android"]["toolchain_name"]
- android_arch = "arch-" + self.config["android"]["arch"]
+ android_toolchain_name = self.config["android"]["toolchain_name"]
+ android_toolchain_prefix = self.config["android"]["toolchain_prefix"]
+ android_lib = self.config["android"]["lib"]
+ android_arch = self.config["android"]["arch"]
# Build OpenSSL for android
env["OPENSSL_VERSION"] = "1.0.2k"
@@ -298,7 +301,7 @@ class MachCommands(CommandBase):
sys.exit(1)
env["RUST_TARGET"] = target
- env["ANDROID_TOOLCHAIN_NAME"] = self.config["android"]["toolchain_prefix"]
+ env["ANDROID_TOOLCHAIN_NAME"] = android_toolchain_name
with cd(openssl_dir):
status = call(
make_cmd + ["-f", "openssl.makefile"],
@@ -324,30 +327,67 @@ class MachCommands(CommandBase):
host_suffix = "x86_64"
host = os_type + "-" + host_suffix
- env['PATH'] = path.join(
- env['ANDROID_NDK'], "toolchains", android_toolchain, "prebuilt", host, "bin"
- ) + ':' + env['PATH']
- env['ANDROID_SYSROOT'] = path.join(env['ANDROID_NDK'], "platforms", android_platform, android_arch)
+ host_cc = env.get('HOST_CC') or _get_exec_path(["clang"]) or _get_exec_path(["gcc"])
+ host_cxx = env.get('HOST_CXX') or _get_exec_path(["clang++"]) or _get_exec_path(["g++"])
+
+ llvm_toolchain = path.join(env['ANDROID_NDK'], "toolchains", "llvm", "prebuilt", host)
+ gcc_toolchain = path.join(env['ANDROID_NDK'], "toolchains",
+ android_toolchain_prefix + "-4.9", "prebuilt", host)
+ gcc_libs = path.join(gcc_toolchain, "lib", "gcc", android_toolchain_name, "4.9.x")
+
+ env['PATH'] = (path.join(llvm_toolchain, "bin") + ':'
+ + path.join(gcc_toolchain, "bin") + ':'
+ + env['PATH'])
+ env['ANDROID_SYSROOT'] = path.join(env['ANDROID_NDK'], "platforms",
+ android_platform, "arch-" + android_arch)
support_include = path.join(env['ANDROID_NDK'], "sources", "android", "support", "include")
- cxx_include = path.join(
- env['ANDROID_NDK'], "sources", "cxx-stl", "llvm-libc++", "libcxx", "include")
- cxxabi_include = path.join(
- env['ANDROID_NDK'], "sources", "cxx-stl", "llvm-libc++abi", "libcxxabi", "include")
- sysroot_include = path.join(
- env['ANDROID_SYSROOT'], "usr", "include")
+ cxx_include = path.join(env['ANDROID_NDK'], "sources", "cxx-stl",
+ "llvm-libc++", "libcxx", "include")
+ sysroot_include = path.join(env['ANDROID_SYSROOT'], "usr", "include")
+ env['HOST_CC'] = host_cc
+ env['HOST_CXX'] = host_cxx
env['HOST_CFLAGS'] = ''
+ env['HOST_CXXFLAGS'] = ''
+ env['CC'] = path.join(llvm_toolchain, "bin", "clang")
+ env['CPP'] = path.join(llvm_toolchain, "bin", "clang") + " -E"
+ env['CXX'] = path.join(llvm_toolchain, "bin", "clang++")
+ env['ANDROID_TOOLCHAIN'] = gcc_toolchain
+ env['GCC_TOOLCHAIN'] = gcc_toolchain
+ gcc_toolchain_bin = path.join(gcc_toolchain, android_toolchain_name, "bin")
+ env['AR'] = path.join(gcc_toolchain_bin, "ar")
+ env['RANLIB'] = path.join(gcc_toolchain_bin, "ranlib")
+ env['OBJCOPY'] = path.join(gcc_toolchain_bin, "objcopy")
+ env['YASM'] = path.join(env['ANDROID_NDK'], 'prebuilt', host, 'bin', 'yasm')
+ # A cheat-sheet for some of the build errors caused by getting the search path wrong...
+ #
+ # fatal error: 'limits' file not found
+ # -- add -I cxx_include
+ # unknown type name '__locale_t' (when running bindgen in mozjs_sys)
+ # -- add -isystem sysroot_include
+ # error: use of undeclared identifier 'UINTMAX_C'
+ # -- add -D__STDC_CONSTANT_MACROS
+ #
+ # Also worth remembering: autoconf uses C for its configuration,
+ # even for C++ builds, so the C flags need to line up with the C++ flags.
env['CFLAGS'] = ' '.join([
+ "--target=" + target,
"--sysroot=" + env['ANDROID_SYSROOT'],
- "-I" + support_include])
+ "--gcc-toolchain=" + gcc_toolchain,
+ "-isystem", sysroot_include,
+ "-L" + gcc_libs])
env['CXXFLAGS'] = ' '.join([
+ "--target=" + target,
"--sysroot=" + env['ANDROID_SYSROOT'],
+ "--gcc-toolchain=" + gcc_toolchain,
"-I" + support_include,
"-I" + cxx_include,
- "-I" + cxxabi_include,
- "-I" + sysroot_include])
+ "-isystem", sysroot_include,
+ "-L" + gcc_libs,
+ "-D__STDC_CONSTANT_MACROS",
+ "-D__NDK_FPABI__="])
env["NDK_ANDROID_VERSION"] = android_platform.replace("android-", "")
env['CPPFLAGS'] = ' '.join(["--sysroot", env['ANDROID_SYSROOT']])
- env["CMAKE_ANDROID_ARCH_ABI"] = self.config["android"]["lib"]
+ env["CMAKE_ANDROID_ARCH_ABI"] = android_lib
env["CMAKE_TOOLCHAIN_FILE"] = path.join(self.android_support_dir(), "toolchain.cmake")
# Set output dir for gradle aar files
aar_out_dir = self.android_aar_dir()
@@ -355,6 +395,11 @@ class MachCommands(CommandBase):
os.makedirs(aar_out_dir)
env["AAR_OUT_DIR"] = aar_out_dir
+ if very_verbose:
+ print (["Calling", "cargo", "build"] + opts)
+ for key in env:
+ print((key, env[key]))
+
status = self.call_rustup_run(["cargo", "build"] + opts, env=env, verbose=verbose)
elapsed = time() - build_start