xref: /aosp_15_r20/external/libvpx/build/make/Android.mk (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
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