1NDK_ROOT := $(shell dirname $(CC))/../../../../.. 2 3ifeq "$(HOST_OS)" "Linux" 4 HOST_TAG := linux-x86_64 5else ifeq "$(HOST_OS)" "Darwin" 6 HOST_TAG := darwin-x86_64 7else 8 HOST_TAG := windows-x86_64 9endif 10 11TOOLCHAIN_ROOT := $(NDK_ROOT)/toolchains/llvm/prebuilt/$(HOST_TAG) 12TOOLCHAIN_SYSROOT := $(TOOLCHAIN_ROOT)/sysroot 13 14OBJCOPY ?= $(TOOLCHAIN_ROOT)/bin/llvm-objcopy 15ARCHIVER ?= $(TOOLCHAIN_ROOT)/bin/llvm-ar 16 17ifeq "$(wildcard $(TOOLCHAIN_SYSROOT)/.)" "" 18# Compiling test inferiors for Android requires an NDK with the unified 19# toolchain introduced in version r19. 20$(error "No unified toolchain sysroot found in $(NDK_ROOT). NDK must be r19 or later.") 21endif 22 23ifeq "$(ARCH)" "arm" 24 TRIPLE := armv7-none-linux-androideabi 25 ARCH_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm 26else ifeq "$(ARCH)" "aarch64" 27 TRIPLE := aarch64-none-linux-android 28else ifeq "$(ARCH)" "i386" 29 TRIPLE := i686-none-linux-android 30else 31 TRIPLE := $(ARCH)-none-linux-android 32endif 33 34# lowest 64-bit API level 35API_LEVEL := 21 36 37ifeq "$(ARCH)" "arm" 38 ARCH_DIR := arm-linux-androideabi 39else 40 ARCH_DIR := $(subst -none,,$(TRIPLE)) 41endif 42 43ARCH_CFLAGS += \ 44 --target=$(TRIPLE) \ 45 --sysroot=$(TOOLCHAIN_SYSROOT) \ 46 -D__ANDROID_API__=$(API_LEVEL) 47 48ARCH_CXXFLAGS += \ 49 -isystem $(TOOLCHAIN_SYSROOT)/usr/include/c++/v1 50 51ARCH_LDFLAGS += \ 52 --target=$(TRIPLE) \ 53 --sysroot=$(TOOLCHAIN_SYSROOT) \ 54 --prefix=$(TOOLCHAIN_SYSROOT)/usr/lib/$(ARCH_DIR)/$(API_LEVEL) \ 55 -L$(TOOLCHAIN_SYSROOT)/usr/lib/$(ARCH_DIR)/$(API_LEVEL) \ 56 $(TOOLCHAIN_SYSROOT)/usr/lib/$(ARCH_DIR)/libc++_static.a \ 57 -lm \ 58 -lc++abi \ 59 -nostdlib++ 60