From fbdb2093dda5f7d2b6bfa0c48405484dc69ab4b4 Mon Sep 17 00:00:00 2001 From: John Lin Date: Tue, 8 Aug 2017 13:23:11 +0800 Subject: [PATCH] Fix Android build errors on macOS. - Add sysroot path to environment variable 'CPPFLAGS': When checking C preprocessor, the 'configure' script of libbacktrace uses 'CPPFLAGS' rather than 'CFLAGS' and doesn't get the correct search path. (#15758) This check passes on Linux because the '/lib/cpp' fallback is available there. - Introduce CMake toolchain file for Android cross compiling: CMake needs several variables [1] to cross compile for Android. It works (accidentally) on Linux because cmake-rs sets compilers correctly and binutils for Linux & Android are pretty much the same. [1] https://cmake.org/cmake/help/v3.7/manual/cmake-toolchains.7.html#cross-compiling-for-android-with-the-ndk --- python/servo/build_commands.py | 3 +++ support/android/toolchain.cmake | 4 ++++ 2 files changed, 7 insertions(+) create mode 100644 support/android/toolchain.cmake diff --git a/python/servo/build_commands.py b/python/servo/build_commands.py index 9aae8e31320..63b7ebd19fd 100644 --- a/python/servo/build_commands.py +++ b/python/servo/build_commands.py @@ -306,6 +306,9 @@ class MachCommands(CommandBase): "-I" + cxx_include, "-I" + cxxabi_include]) 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_TOOLCHAIN_FILE"] = path.join(self.android_support_dir(), "toolchain.cmake") cargo_binary = "cargo" + BIN_SUFFIX diff --git a/support/android/toolchain.cmake b/support/android/toolchain.cmake new file mode 100644 index 00000000000..e961756d930 --- /dev/null +++ b/support/android/toolchain.cmake @@ -0,0 +1,4 @@ +set(CMAKE_SYSTEM_NAME Android) +set(CMAKE_ANDROID_NDK $ENV{ANDROID_NDK}) +set(CMAKE_ANDROID_API $ENV{NDK_ANDROID_VERSION}) +set(CMAKE_ANDROID_ARCH_ABI $ENV{CMAKE_ANDROID_ARCH_ABI})