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