• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1ARCH = arm
2include $(SRC_PATH)build/arch.mk
3SHAREDLIBSUFFIX = so
4# Android APK/JARs expect libraries to be unversioned
5SHAREDLIBSUFFIXFULLVER=$(SHAREDLIBSUFFIX)
6SHAREDLIBSUFFIXMAJORVER=$(SHAREDLIBSUFFIX)
7SHLDFLAGS =
8
9NDK_TOOLCHAIN_VERSION = clang
10
11ifeq ($(ARCH), arm)
12  ifneq ($(APP_ABI), armeabi)
13    CFLAGS += -march=armv7-a -mfloat-abi=softfp
14    CFLAGS += -mfpu=vfpv3-d16
15    LDFLAGS += -march=armv7-a -Wl,--fix-cortex-a8
16    APP_ABI = armeabi-v7a
17  endif
18else ifeq ($(ARCH), arm64)
19  APP_ABI = arm64-v8a
20else ifeq ($(ARCH), x86)
21  APP_ABI = x86
22  ifeq (Yes, $(USE_ASM))
23    ASMFLAGS += -f elf
24  endif
25else ifeq ($(ARCH), x86_64)
26  APP_ABI = x86_64
27  ifeq (Yes, $(USE_ASM))
28    ASMFLAGS += -f elf64
29  endif
30else
31  APP_ABI = $(ARCH)
32endif
33
34ifndef NDKROOT
35$(error NDKROOT is not set)
36endif
37
38ifndef TARGET
39$(error TARGET is not set)
40endif
41
42ifeq ($(NDKLEVEL),)
43NDKLEVEL = $(TARGET:android-%=%)
44endif
45
46CFLAGS += -DANDROID_NDK -fpic -MMD -MP -fstack-protector-all
47CXXFLAGS += -fno-rtti -fno-exceptions
48SHLDFLAGS = -Wl,--no-undefined -Wl,-z,relro -Wl,-z,now -Wl,-soname,lib$(PROJECT_NAME).so
49UTSHLDFLAGS = -Wl,-soname,libut.so
50
51ifeq ($(NDK_TOOLCHAIN_VERSION), clang)
52  LLVM_INSTALL_DIR = $(wildcard $(NDKROOT)/toolchains/llvm/prebuilt/*/bin)
53
54  ifeq ($(ARCH), arm)
55    TARGET_NAME = armv7a-linux-androideabi
56  else ifeq ($(ARCH), arm64)
57    TARGET_NAME = aarch64-linux-android
58  else ifeq ($(ARCH), x86)
59    TARGET_NAME = i686-linux-android
60  else ifeq ($(ARCH), x86_64)
61    TARGET_NAME = x86_64-linux-android
62  else
63    $(error "does not support this arch now!")
64  endif
65
66  CC = $(LLVM_INSTALL_DIR)/$(TARGET_NAME)$(NDKLEVEL)-clang
67  CXX = $(LLVM_INSTALL_DIR)/$(TARGET_NAME)$(NDKLEVEL)-clang++
68  AR = $(LLVM_INSTALL_DIR)/llvm-ar
69  SYSROOT = $(LLVM_INSTALL_DIR)/../sysroot
70else
71  TOOLCHAINPREFIX = $(shell NDK_PROJECT_PATH=$(SRC_PATH)/codec/build/android/dec make --no-print-dir -f $(NDKROOT)/build/core/build-local.mk DUMP_TOOLCHAIN_PREFIX APP_ABI=$(APP_ABI))
72  TOOLCHAIN_NAME = $(shell NDK_TOOLCHAIN_VERSION= NDK_PROJECT_PATH=$(SRC_PATH)/codec/build/android/dec make --no-print-dir -f $(NDKROOT)/build/core/build-local.mk DUMP_TOOLCHAIN_NAME APP_ABI=$(APP_ABI))
73  GCC_TOOLCHAIN_PATH = $(shell dirname $(TOOLCHAINPREFIX) | xargs dirname )
74  SYSROOT = $(NDKROOT)/platforms/android-$(NDKLEVEL)/arch-$(ARCH)
75
76  CXX = $(TOOLCHAINPREFIX)g++
77  CC = $(TOOLCHAINPREFIX)gcc
78  AR = $(TOOLCHAINPREFIX)ar
79  CFLAGS += -isystem $(NDKROOT)/sysroot/usr/include -isystem $(NDKROOT)/sysroot/usr/include/$(TOOLCHAIN_NAME) -D__ANDROID_API__=$(NDKLEVEL) --sysroot=$(SYSROOT)
80endif
81
82# background reading: https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md#unwinding
83LDFLAGS += -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libunwind.a
84
85ifneq ($(findstring /,$(CXX)),$(findstring \,$(CXX)))
86ifneq ($(CXX),$(wildcard $(CXX)))
87ifneq ($(CXX).exe,$(wildcard $(CXX).exe))
88$(error Compiler not found, bad NDKROOT or ARCH? $(CXX))
89endif
90endif
91endif
92
93GTEST_INCLUDES = $(STL_INCLUDES)
94CODEC_UNITTEST_INCLUDES = $(STL_INCLUDES)
95CODEC_UNITTEST_LDFLAGS_SUFFIX = $(STL_LIB)
96MODULE_INCLUDES = $(STL_INCLUDES)
97MODULE_LDFLAGS = $(STL_LIB)
98
99ifeq (./,$(SRC_PATH))
100binaries: decdemo encdemo
101
102NDK_BUILD = $(NDKROOT)/ndk-build APP_ABI=$(APP_ABI) APP_PLATFORM=$(TARGET) NDK_TOOLCHAIN_VERSION=$(NDK_TOOLCHAIN_VERSION) V=$(V:Yes=1)
103
104decdemo: libraries
105	$(NDK_BUILD) -C codec/build/android/dec -B
106	./gradlew test-dec:assembleDebug
107
108encdemo: libraries
109	$(NDK_BUILD) -C codec/build/android/enc -B
110	./gradlew test-enc:assembleDebug
111
112clean_Android: clean_Android_dec clean_Android_enc
113
114clean_Android_dec:
115	-$(NDK_BUILD) -C codec/build/android/dec clean
116	-./gradlew test-dec:clean
117
118clean_Android_enc:
119	-$(NDK_BUILD) -C codec/build/android/enc clean
120	-./gradlew test-enc:clean
121
122else
123clean_Android:
124	@:
125endif
126
127COMMON_INCLUDES += -I$(NDKROOT)/sources/android/cpufeatures
128COMMON_OBJS += $(COMMON_SRCDIR)/src/cpu-features.$(OBJ)
129
130COMMON_CFLAGS += \
131	-Dandroid_getCpuIdArm=wels_getCpuIdArm -Dandroid_setCpuArm=wels_setCpuArm \
132	-Dandroid_getCpuCount=wels_getCpuCount -Dandroid_getCpuFamily=wels_getCpuFamily \
133	-Dandroid_getCpuFeatures=wels_getCpuFeatures -Dandroid_setCpu=wels_setCpu \
134
135codec/common/src/cpu-features.$(OBJ): $(NDKROOT)/sources/android/cpufeatures/cpu-features.c
136	$(QUIET_CC)$(CC) $(CFLAGS) $(INCLUDES) $(COMMON_CFLAGS) $(COMMON_INCLUDES) -c $(CXX_O) $<
137