diff options
author | Alan Jeffrey <ajeffrey@mozilla.com> | 2018-06-01 17:24:25 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2018-08-20 18:22:29 -0400 |
commit | 74c1e00d8163f255bb4141ff3549bbdedd7ea766 (patch) | |
tree | d3960a6cff086d3ca2240fcc6eaa863dba4910c2 /python/servo/build_commands.py | |
parent | d34403047e806fa6c8c2468946f64429622ec434 (diff) | |
download | servo-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.py | 79 |
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 |