NDK_ROOT := $(shell dirname $(CC))/../../../../.. ifeq "$(HOST_OS)" "Linux" HOST_TAG := linux-x86_64 else ifeq "$(HOST_OS)" "Darwin" HOST_TAG := darwin-x86_64 else HOST_TAG := windows-x86_64 endif TOOLCHAIN_ROOT := $(NDK_ROOT)/toolchains/llvm/prebuilt/$(HOST_TAG) TOOLCHAIN_SYSROOT := $(TOOLCHAIN_ROOT)/sysroot OBJCOPY ?= $(TOOLCHAIN_ROOT)/bin/llvm-objcopy ARCHIVER ?= $(TOOLCHAIN_ROOT)/bin/llvm-ar ifeq "$(wildcard $(TOOLCHAIN_SYSROOT)/.)" "" # Compiling test inferiors for Android requires an NDK with the unified # toolchain introduced in version r19. $(error "No unified toolchain sysroot found in $(NDK_ROOT). NDK must be r19 or later.") endif ifeq "$(ARCH)" "arm" TRIPLE := armv7-none-linux-androideabi ARCH_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm else ifeq "$(ARCH)" "aarch64" TRIPLE := aarch64-none-linux-android else ifeq "$(ARCH)" "i386" TRIPLE := i686-none-linux-android else TRIPLE := $(ARCH)-none-linux-android endif # lowest 64-bit API level API_LEVEL := 21 ifeq "$(ARCH)" "arm" ARCH_DIR := arm-linux-androideabi else ARCH_DIR := $(subst -none,,$(TRIPLE)) endif ARCH_CFLAGS += \ --target=$(TRIPLE) \ --sysroot=$(TOOLCHAIN_SYSROOT) \ -D__ANDROID_API__=$(API_LEVEL) ARCH_CXXFLAGS += \ -isystem $(TOOLCHAIN_SYSROOT)/usr/include/c++/v1 ARCH_LDFLAGS += \ --target=$(TRIPLE) \ --sysroot=$(TOOLCHAIN_SYSROOT) \ --prefix=$(TOOLCHAIN_SYSROOT)/usr/lib/$(ARCH_DIR)/$(API_LEVEL) \ -L$(TOOLCHAIN_SYSROOT)/usr/lib/$(ARCH_DIR)/$(API_LEVEL) \ $(TOOLCHAIN_SYSROOT)/usr/lib/$(ARCH_DIR)/libc++_static.a \ -lm \ -lc++abi \ -nostdlib++