xref: /llvm-project/lldb/packages/Python/lldbsuite/test/make/Android.rules (revision 18b9d49ce3370c012fdd04ec87d854d53293f6a6)
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