1*fb1b10abSAndroid Build Coastguard Worker## 2*fb1b10abSAndroid Build Coastguard Worker## Copyright (c) 2012 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker## 4*fb1b10abSAndroid Build Coastguard Worker## Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker## that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker## tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker## in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker## be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker## 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker# Ignore this file during non-NDK builds. 12*fb1b10abSAndroid Build Coastguard Workerifdef NDK_ROOT 13*fb1b10abSAndroid Build Coastguard Worker# 14*fb1b10abSAndroid Build Coastguard Worker# This file is to be used for compiling libvpx for Android using the NDK. 15*fb1b10abSAndroid Build Coastguard Worker# In an Android project place a libvpx checkout in the jni directory. 16*fb1b10abSAndroid Build Coastguard Worker# Run the configure script from the jni directory. Base libvpx 17*fb1b10abSAndroid Build Coastguard Worker# encoder/decoder configuration will look similar to: 18*fb1b10abSAndroid Build Coastguard Worker# ./libvpx/configure --target=arm64-android-gcc --disable-examples \ 19*fb1b10abSAndroid Build Coastguard Worker# --enable-external-build 20*fb1b10abSAndroid Build Coastguard Worker# 21*fb1b10abSAndroid Build Coastguard Worker# This will create .mk files that contain variables that contain the 22*fb1b10abSAndroid Build Coastguard Worker# source files to compile. 23*fb1b10abSAndroid Build Coastguard Worker# 24*fb1b10abSAndroid Build Coastguard Worker# Place an Android.mk file in the jni directory that references the 25*fb1b10abSAndroid Build Coastguard Worker# Android.mk file in the libvpx directory: 26*fb1b10abSAndroid Build Coastguard Worker# LOCAL_PATH := $(call my-dir) 27*fb1b10abSAndroid Build Coastguard Worker# include $(CLEAR_VARS) 28*fb1b10abSAndroid Build Coastguard Worker# include jni/libvpx/build/make/Android.mk 29*fb1b10abSAndroid Build Coastguard Worker# 30*fb1b10abSAndroid Build Coastguard Worker# By default libvpx will use the 'cpufeatures' module from the NDK. This allows 31*fb1b10abSAndroid Build Coastguard Worker# the library to be built with all available optimizations (SSE2->AVX512 for 32*fb1b10abSAndroid Build Coastguard Worker# x86, NEON for arm, DSPr2 for mips). This can be disabled with 33*fb1b10abSAndroid Build Coastguard Worker# --disable-runtime-cpu-detect 34*fb1b10abSAndroid Build Coastguard Worker# but the resulting library *must* be run on devices supporting all of the 35*fb1b10abSAndroid Build Coastguard Worker# enabled extensions. They can be disabled individually with 36*fb1b10abSAndroid Build Coastguard Worker# --disable-{sse2, sse3, ssse3, sse4_1, avx, avx2, avx512} 37*fb1b10abSAndroid Build Coastguard Worker# --disable-neon{, -asm, -neon-dotprod, -neon-i8mm} 38*fb1b10abSAndroid Build Coastguard Worker# --disable-sve 39*fb1b10abSAndroid Build Coastguard Worker# --disable-{dspr2, msa} 40*fb1b10abSAndroid Build Coastguard Worker 41*fb1b10abSAndroid Build Coastguard Worker# 42*fb1b10abSAndroid Build Coastguard Worker# Running ndk-build will build libvpx and include it in your project. Set 43*fb1b10abSAndroid Build Coastguard Worker# APP_ABI to match the --target passed to configure: 44*fb1b10abSAndroid Build Coastguard Worker# https://developer.android.com/ndk/guides/application_mk#app_abi. 45*fb1b10abSAndroid Build Coastguard Worker# 46*fb1b10abSAndroid Build Coastguard Worker 47*fb1b10abSAndroid Build Coastguard WorkerCONFIG_DIR := $(LOCAL_PATH)/ 48*fb1b10abSAndroid Build Coastguard WorkerLIBVPX_PATH := $(LOCAL_PATH)/libvpx 49*fb1b10abSAndroid Build Coastguard WorkerASM_CNV_PATH_LOCAL := $(TARGET_ARCH_ABI)/ads2gas 50*fb1b10abSAndroid Build Coastguard WorkerASM_CNV_PATH := $(LOCAL_PATH)/$(ASM_CNV_PATH_LOCAL) 51*fb1b10abSAndroid Build Coastguard Workerifneq ($(V),1) 52*fb1b10abSAndroid Build Coastguard Worker qexec := @ 53*fb1b10abSAndroid Build Coastguard Workerendif 54*fb1b10abSAndroid Build Coastguard Worker 55*fb1b10abSAndroid Build Coastguard Worker# Use the makefiles generated by upstream configure to determine which files to 56*fb1b10abSAndroid Build Coastguard Worker# build. Also set any architecture-specific flags. 57*fb1b10abSAndroid Build Coastguard Workerifeq ($(TARGET_ARCH_ABI),armeabi-v7a) 58*fb1b10abSAndroid Build Coastguard Worker include $(CONFIG_DIR)libs-armv7-android-gcc.mk 59*fb1b10abSAndroid Build Coastguard Worker LOCAL_ARM_MODE := arm 60*fb1b10abSAndroid Build Coastguard Workerelse ifeq ($(TARGET_ARCH_ABI),arm64-v8a) 61*fb1b10abSAndroid Build Coastguard Worker include $(CONFIG_DIR)libs-arm64-android-gcc.mk 62*fb1b10abSAndroid Build Coastguard Worker LOCAL_ARM_MODE := arm 63*fb1b10abSAndroid Build Coastguard Workerelse ifeq ($(TARGET_ARCH_ABI),x86) 64*fb1b10abSAndroid Build Coastguard Worker include $(CONFIG_DIR)libs-x86-android-gcc.mk 65*fb1b10abSAndroid Build Coastguard Workerelse ifeq ($(TARGET_ARCH_ABI),x86_64) 66*fb1b10abSAndroid Build Coastguard Worker include $(CONFIG_DIR)libs-x86_64-android-gcc.mk 67*fb1b10abSAndroid Build Coastguard Workerelse ifeq ($(TARGET_ARCH_ABI),mips) 68*fb1b10abSAndroid Build Coastguard Worker include $(CONFIG_DIR)libs-mips-android-gcc.mk 69*fb1b10abSAndroid Build Coastguard Workerelse 70*fb1b10abSAndroid Build Coastguard Worker $(error Not a supported TARGET_ARCH_ABI: $(TARGET_ARCH_ABI)) 71*fb1b10abSAndroid Build Coastguard Workerendif 72*fb1b10abSAndroid Build Coastguard Worker 73*fb1b10abSAndroid Build Coastguard Worker# Rule that is normally in Makefile created by libvpx 74*fb1b10abSAndroid Build Coastguard Worker# configure. Used to filter out source files based on configuration. 75*fb1b10abSAndroid Build Coastguard Workerenabled=$(filter-out $($(1)-no),$($(1)-yes)) 76*fb1b10abSAndroid Build Coastguard Worker 77*fb1b10abSAndroid Build Coastguard Worker# Override the relative path that is defined by the libvpx 78*fb1b10abSAndroid Build Coastguard Worker# configure process 79*fb1b10abSAndroid Build Coastguard WorkerSRC_PATH_BARE := $(LIBVPX_PATH) 80*fb1b10abSAndroid Build Coastguard Worker 81*fb1b10abSAndroid Build Coastguard Worker# Include the list of files to be built 82*fb1b10abSAndroid Build Coastguard Workerinclude $(LIBVPX_PATH)/libs.mk 83*fb1b10abSAndroid Build Coastguard Worker 84*fb1b10abSAndroid Build Coastguard Worker# Optimise the code. May want to revisit this setting in the future. 85*fb1b10abSAndroid Build Coastguard WorkerLOCAL_CFLAGS := -O3 86*fb1b10abSAndroid Build Coastguard Worker 87*fb1b10abSAndroid Build Coastguard Worker# For x86, include the source code in the search path so it will find files 88*fb1b10abSAndroid Build Coastguard Worker# like x86inc.asm and x86_abi_support.asm 89*fb1b10abSAndroid Build Coastguard WorkerLOCAL_ASMFLAGS := -I$(LIBVPX_PATH) 90*fb1b10abSAndroid Build Coastguard Worker 91*fb1b10abSAndroid Build Coastguard Worker.PRECIOUS: %.asm.S 92*fb1b10abSAndroid Build Coastguard Worker$(ASM_CNV_PATH)/libvpx/%.asm.S: $(LIBVPX_PATH)/%.asm 93*fb1b10abSAndroid Build Coastguard Worker $(qexec)mkdir -p $(dir $@) 94*fb1b10abSAndroid Build Coastguard Worker $(qexec)$(CONFIG_DIR)$(ASM_CONVERSION) <$< > $@ 95*fb1b10abSAndroid Build Coastguard Worker 96*fb1b10abSAndroid Build Coastguard Worker# For building *_rtcd.h, which have rules in libs.mk 97*fb1b10abSAndroid Build Coastguard WorkerTGT_ISA:=$(word 1, $(subst -, ,$(TOOLCHAIN))) 98*fb1b10abSAndroid Build Coastguard Workertarget := libs 99*fb1b10abSAndroid Build Coastguard Worker 100*fb1b10abSAndroid Build Coastguard WorkerLOCAL_SRC_FILES += vpx_config.c 101*fb1b10abSAndroid Build Coastguard Worker 102*fb1b10abSAndroid Build Coastguard Worker# Remove duplicate entries 103*fb1b10abSAndroid Build Coastguard WorkerCODEC_SRCS_UNIQUE = $(sort $(CODEC_SRCS)) 104*fb1b10abSAndroid Build Coastguard Worker 105*fb1b10abSAndroid Build Coastguard Worker# Pull out C files. vpx_config.c is in the immediate directory and 106*fb1b10abSAndroid Build Coastguard Worker# so it does not need libvpx/ prefixed like the rest of the source files. 107*fb1b10abSAndroid Build Coastguard Worker# The neon files with intrinsics need to have .neon appended so the proper 108*fb1b10abSAndroid Build Coastguard Worker# flags are applied. 109*fb1b10abSAndroid Build Coastguard WorkerCODEC_SRCS_C = $(filter %.c, $(CODEC_SRCS_UNIQUE)) 110*fb1b10abSAndroid Build Coastguard WorkerLOCAL_NEON_SRCS_C = $(filter %_neon.c, $(CODEC_SRCS_C)) 111*fb1b10abSAndroid Build Coastguard WorkerLOCAL_CODEC_SRCS_C = $(filter-out vpx_config.c %_neon.c, $(CODEC_SRCS_C)) 112*fb1b10abSAndroid Build Coastguard Worker 113*fb1b10abSAndroid Build Coastguard WorkerLOCAL_SRC_FILES += $(foreach file, $(LOCAL_CODEC_SRCS_C), libvpx/$(file)) 114*fb1b10abSAndroid Build Coastguard Workerifeq ($(TARGET_ARCH_ABI),armeabi-v7a) 115*fb1b10abSAndroid Build Coastguard Worker LOCAL_SRC_FILES += $(foreach file, $(LOCAL_NEON_SRCS_C), libvpx/$(file).neon) 116*fb1b10abSAndroid Build Coastguard Workerelse # If there are neon sources then we are building for arm64 and do not need to specify .neon 117*fb1b10abSAndroid Build Coastguard Worker LOCAL_SRC_FILES += $(foreach file, $(LOCAL_NEON_SRCS_C), libvpx/$(file)) 118*fb1b10abSAndroid Build Coastguard Workerendif 119*fb1b10abSAndroid Build Coastguard Worker 120*fb1b10abSAndroid Build Coastguard Worker# Pull out assembly files, splitting NEON from the rest. This is 121*fb1b10abSAndroid Build Coastguard Worker# done to specify that the NEON assembly files use NEON assembler flags. 122*fb1b10abSAndroid Build Coastguard Worker# x86 assembly matches %.asm, arm matches %.asm.S 123*fb1b10abSAndroid Build Coastguard Worker 124*fb1b10abSAndroid Build Coastguard Worker# x86: 125*fb1b10abSAndroid Build Coastguard Worker 126*fb1b10abSAndroid Build Coastguard WorkerCODEC_SRCS_ASM_X86 = $(filter %.asm, $(CODEC_SRCS_UNIQUE)) 127*fb1b10abSAndroid Build Coastguard WorkerLOCAL_SRC_FILES += $(foreach file, $(CODEC_SRCS_ASM_X86), libvpx/$(file)) 128*fb1b10abSAndroid Build Coastguard Worker 129*fb1b10abSAndroid Build Coastguard Worker# arm: 130*fb1b10abSAndroid Build Coastguard WorkerCODEC_SRCS_ASM_ARM_ALL = $(filter %.asm.S, $(CODEC_SRCS_UNIQUE)) 131*fb1b10abSAndroid Build Coastguard WorkerCODEC_SRCS_ASM_ARM = $(foreach v, \ 132*fb1b10abSAndroid Build Coastguard Worker $(CODEC_SRCS_ASM_ARM_ALL), \ 133*fb1b10abSAndroid Build Coastguard Worker $(if $(findstring neon,$(v)),,$(v))) 134*fb1b10abSAndroid Build Coastguard WorkerCODEC_SRCS_ASM_ADS2GAS = $(patsubst %.S, \ 135*fb1b10abSAndroid Build Coastguard Worker $(ASM_CNV_PATH_LOCAL)/libvpx/%.S, \ 136*fb1b10abSAndroid Build Coastguard Worker $(CODEC_SRCS_ASM_ARM)) 137*fb1b10abSAndroid Build Coastguard WorkerLOCAL_SRC_FILES += $(CODEC_SRCS_ASM_ADS2GAS) 138*fb1b10abSAndroid Build Coastguard Worker 139*fb1b10abSAndroid Build Coastguard Workerifeq ($(TARGET_ARCH_ABI),armeabi-v7a) 140*fb1b10abSAndroid Build Coastguard Worker ASM_INCLUDES := vpx_dsp/arm/idct_neon.asm.S 141*fb1b10abSAndroid Build Coastguard Worker CODEC_SRCS_ASM_NEON = $(foreach v, \ 142*fb1b10abSAndroid Build Coastguard Worker $(CODEC_SRCS_ASM_ARM_ALL),\ 143*fb1b10abSAndroid Build Coastguard Worker $(if $(findstring neon,$(v)),$(v),)) 144*fb1b10abSAndroid Build Coastguard Worker CODEC_SRCS_ASM_NEON := $(filter-out $(addprefix %, $(ASM_INCLUDES)), \ 145*fb1b10abSAndroid Build Coastguard Worker $(CODEC_SRCS_ASM_NEON)) 146*fb1b10abSAndroid Build Coastguard Worker CODEC_SRCS_ASM_NEON_ADS2GAS = $(patsubst %.S, \ 147*fb1b10abSAndroid Build Coastguard Worker $(ASM_CNV_PATH_LOCAL)/libvpx/%.S, \ 148*fb1b10abSAndroid Build Coastguard Worker $(CODEC_SRCS_ASM_NEON)) 149*fb1b10abSAndroid Build Coastguard Worker LOCAL_SRC_FILES += $(patsubst %.S, \ 150*fb1b10abSAndroid Build Coastguard Worker %.S.neon, \ 151*fb1b10abSAndroid Build Coastguard Worker $(CODEC_SRCS_ASM_NEON_ADS2GAS)) 152*fb1b10abSAndroid Build Coastguard Worker 153*fb1b10abSAndroid Build Coastguard Worker NEON_ASM_TARGETS = $(patsubst %.S, \ 154*fb1b10abSAndroid Build Coastguard Worker $(ASM_CNV_PATH)/libvpx/%.S, \ 155*fb1b10abSAndroid Build Coastguard Worker $(CODEC_SRCS_ASM_NEON)) 156*fb1b10abSAndroid Build Coastguard Worker# add a dependency to the full path to the ads2gas output to ensure the 157*fb1b10abSAndroid Build Coastguard Worker# includes are converted first. 158*fb1b10abSAndroid Build Coastguard Workerifneq ($(strip $(NEON_ASM_TARGETS)),) 159*fb1b10abSAndroid Build Coastguard Worker$(NEON_ASM_TARGETS): $(addprefix $(ASM_CNV_PATH)/libvpx/, $(ASM_INCLUDES)) 160*fb1b10abSAndroid Build Coastguard Workerendif 161*fb1b10abSAndroid Build Coastguard Workerendif 162*fb1b10abSAndroid Build Coastguard Worker 163*fb1b10abSAndroid Build Coastguard WorkerLOCAL_CFLAGS += \ 164*fb1b10abSAndroid Build Coastguard Worker -DHAVE_CONFIG_H=vpx_config.h \ 165*fb1b10abSAndroid Build Coastguard Worker -I$(LIBVPX_PATH) \ 166*fb1b10abSAndroid Build Coastguard Worker -I$(ASM_CNV_PATH) \ 167*fb1b10abSAndroid Build Coastguard Worker -I$(ASM_CNV_PATH)/libvpx 168*fb1b10abSAndroid Build Coastguard Worker 169*fb1b10abSAndroid Build Coastguard WorkerLOCAL_MODULE := libvpx 170*fb1b10abSAndroid Build Coastguard WorkerLOCAL_LICENSE_KINDS := SPDX-license-identifier-BSD 171*fb1b10abSAndroid Build Coastguard WorkerLOCAL_LICENSE_CONDITIONS := notice 172*fb1b10abSAndroid Build Coastguard WorkerLOCAL_NOTICE_FILE := $(LOCAL_PATH)/../../LICENSE $(LOCAL_PATH)/../../PATENTS 173*fb1b10abSAndroid Build Coastguard Worker 174*fb1b10abSAndroid Build Coastguard Workerifeq ($(CONFIG_RUNTIME_CPU_DETECT),yes) 175*fb1b10abSAndroid Build Coastguard Worker LOCAL_STATIC_LIBRARIES := cpufeatures 176*fb1b10abSAndroid Build Coastguard Workerendif 177*fb1b10abSAndroid Build Coastguard Worker 178*fb1b10abSAndroid Build Coastguard Worker# Add a dependency to force generation of the RTCD files. 179*fb1b10abSAndroid Build Coastguard Workerdefine rtcd_dep_template 180*fb1b10abSAndroid Build Coastguard Workerrtcd_dep_template_SRCS := $(addprefix $(LOCAL_PATH)/, $(LOCAL_SRC_FILES)) 181*fb1b10abSAndroid Build Coastguard Workerrtcd_dep_template_SRCS := $$(rtcd_dep_template_SRCS:.neon=) 182*fb1b10abSAndroid Build Coastguard Workerifeq ($(CONFIG_VP8), yes) 183*fb1b10abSAndroid Build Coastguard Worker$$(rtcd_dep_template_SRCS): vp8_rtcd.h 184*fb1b10abSAndroid Build Coastguard Workerendif 185*fb1b10abSAndroid Build Coastguard Workerifeq ($(CONFIG_VP9), yes) 186*fb1b10abSAndroid Build Coastguard Worker$$(rtcd_dep_template_SRCS): vp9_rtcd.h 187*fb1b10abSAndroid Build Coastguard Workerendif 188*fb1b10abSAndroid Build Coastguard Worker$$(rtcd_dep_template_SRCS): vpx_scale_rtcd.h 189*fb1b10abSAndroid Build Coastguard Worker$$(rtcd_dep_template_SRCS): vpx_dsp_rtcd.h 190*fb1b10abSAndroid Build Coastguard Worker 191*fb1b10abSAndroid Build Coastguard Workerrtcd_dep_template_CONFIG_ASM_ABIS := x86 x86_64 armeabi-v7a 192*fb1b10abSAndroid Build Coastguard Workerifneq ($$(findstring $(TARGET_ARCH_ABI),$$(rtcd_dep_template_CONFIG_ASM_ABIS)),) 193*fb1b10abSAndroid Build Coastguard Worker$$(rtcd_dep_template_SRCS): vpx_config.asm 194*fb1b10abSAndroid Build Coastguard Workerendif 195*fb1b10abSAndroid Build Coastguard Workerendef 196*fb1b10abSAndroid Build Coastguard Worker 197*fb1b10abSAndroid Build Coastguard Worker$(eval $(call rtcd_dep_template)) 198*fb1b10abSAndroid Build Coastguard Worker 199*fb1b10abSAndroid Build Coastguard Worker.PHONY: clean 200*fb1b10abSAndroid Build Coastguard Workerclean: 201*fb1b10abSAndroid Build Coastguard Worker @echo "Clean: ads2gas files [$(TARGET_ARCH_ABI)]" 202*fb1b10abSAndroid Build Coastguard Worker $(qexec)$(RM) $(CODEC_SRCS_ASM_ADS2GAS) $(CODEC_SRCS_ASM_NEON_ADS2GAS) 203*fb1b10abSAndroid Build Coastguard Worker $(qexec)$(RM) -r $(ASM_CNV_PATH) 204*fb1b10abSAndroid Build Coastguard Worker $(qexec)$(RM) $(CLEAN-OBJS) 205*fb1b10abSAndroid Build Coastguard Worker 206*fb1b10abSAndroid Build Coastguard Workerifeq ($(ENABLE_SHARED),1) 207*fb1b10abSAndroid Build Coastguard Worker LOCAL_CFLAGS += -fPIC 208*fb1b10abSAndroid Build Coastguard Worker include $(BUILD_SHARED_LIBRARY) 209*fb1b10abSAndroid Build Coastguard Workerelse 210*fb1b10abSAndroid Build Coastguard Worker include $(BUILD_STATIC_LIBRARY) 211*fb1b10abSAndroid Build Coastguard Workerendif 212*fb1b10abSAndroid Build Coastguard Worker 213*fb1b10abSAndroid Build Coastguard Workerifeq ($(CONFIG_RUNTIME_CPU_DETECT),yes) 214*fb1b10abSAndroid Build Coastguard Worker$(call import-module,android/cpufeatures) 215*fb1b10abSAndroid Build Coastguard Workerendif 216*fb1b10abSAndroid Build Coastguard Workerendif # NDK_ROOT 217