# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. DEFINES += -DHAVE_CONFIG_H=vpx_config.h ifeq (WINNT,$(OS_TARGET)) VISIBILITY_FLAGS = endif LOCAL_INCLUDES += \ -I. \ -I$(topsrcdir)/media/libvpx \ -I$(topsrcdir)/media/libvpx/vp8/ \ -I$(topsrcdir)/media/libvpx/vp8/common/ \ -I$(topsrcdir)/media/libvpx/vp8/common/arm \ -I$(topsrcdir)/media/libvpx/vp8/common/x86 \ -I$(topsrcdir)/media/libvpx/vp8/decoder \ -I$(topsrcdir)/media/libvpx/vp8/decoder/arm \ -I$(topsrcdir)/media/libvpx/vp8/decoder/x86 \ -I$(topsrcdir)/media/libvpx/vpx_codec \ -I$(topsrcdir)/media/libvpx/vpx_mem/ \ -I$(topsrcdir)/media/libvpx/vpx_mem/include \ -I$(topsrcdir)/media/libvpx/vpx_ports/ \ -I$(topsrcdir)/media/libvpx/vpx_scale/ \ $(NULL) VPATH += \ $(srcdir)/build/make \ $(srcdir)/vpx \ $(srcdir)/vpx/src \ $(srcdir)/vpx_mem \ $(srcdir)/vpx_mem/include \ $(srcdir)/vpx_ports \ $(srcdir)/vpx_scale \ $(srcdir)/vpx_scale/arm \ $(srcdir)/vpx_scale/arm/neon \ $(srcdir)/vpx_scale/generic \ $(srcdir)/vp8 \ $(srcdir)/vp8/common \ $(srcdir)/vp8/common/arm \ $(srcdir)/vp8/common/arm/armv6 \ $(srcdir)/vp8/common/arm/neon \ $(srcdir)/vp8/common/generic \ $(srcdir)/vp8/common/x86 \ $(srcdir)/vp8/decoder \ $(srcdir)/vp8/decoder/arm \ $(srcdir)/vp8/decoder/arm/armv6 \ $(srcdir)/vp8/decoder/arm/neon \ $(srcdir)/vp8/decoder/generic \ $(srcdir)/vp8/decoder/x86 \ $(NULL) #Setup the libvpx assembler config. AS=$(VPX_AS) ASFLAGS=$(VPX_ASFLAGS) -I. -I$(topsrcdir)/media/libvpx/ -I$(topsrcdir)/media/libvpx/vpx_ports/ AS_DASH_C_FLAG=$(VPX_DASH_C_FLAG) ASM_SUFFIX=$(VPX_ASM_SUFFIX) ifdef MOZ_VP8_ERROR_CONCEALMENT CSRCS += \ error_concealment.c \ $(NULL) endif ifdef MOZ_VP8_ENCODER VPATH += \ $(srcdir)/vp8/encoder \ $(srcdir)/vp8/encoder/arm \ $(srcdir)/vp8/encoder/arm/armv5te \ $(srcdir)/vp8/encoder/arm/armv6 \ $(srcdir)/vp8/encoder/arm/neon \ $(srcdir)/vp8/encoder/generic \ $(srcdir)/vp8/encoder/x86 \ $(srcdir)/vpx_scale/arm \ $(srcdir)/vpx_scale/arm/neon \ $(NULL) CSRCS += \ vp8_cx_iface.c \ bitstream.c \ dct.c \ encodeframe.c \ encodeintra.c \ encodemb.c \ encodemv.c \ ethreading.c \ firstpass.c \ lookahead.c \ mcomp.c \ modecosts.c \ mr_dissim.c \ onyx_if.c \ pickinter.c \ picklpf.c \ psnr.c \ quantize.c \ ratectrl.c \ rdopt.c \ segmentation.c \ temporal_filter.c \ tokenize.c \ treewriter.c \ csystemdependent.c \ $(NULL) endif ifdef VPX_X86_ASM # Building on an x86 platform with a supported assembler, include # the optimized assembly in the build. CSRCS += \ filter_x86.c \ idct_blk_mmx.c \ idct_blk_sse2.c \ loopfilter_x86.c \ postproc_x86.c \ recon_wrapper_sse2.c \ variance_mmx.c \ variance_sse2.c \ variance_ssse3.c \ vp8_asm_stubs.c \ x86_systemdependent.c \ x86_dsystemdependent.c \ $(NULL) ASFILES += \ dequantize_mmx.asm \ idctllm_mmx.asm \ idctllm_sse2.asm \ iwalsh_mmx.asm \ iwalsh_sse2.asm \ loopfilter_mmx.asm \ loopfilter_sse2.asm \ postproc_mmx.asm \ postproc_sse2.asm \ recon_mmx.asm \ recon_sse2.asm \ sad_mmx.asm \ sad_sse2.asm \ sad_sse3.asm \ sad_sse4.asm \ sad_ssse3.asm \ subpixel_mmx.asm \ subpixel_sse2.asm \ subpixel_ssse3.asm \ variance_impl_mmx.asm \ variance_impl_sse2.asm \ variance_impl_ssse3.asm \ emms.asm \ $(NULL) ifeq (64,$(findstring 64,$(OS_TEST))) ASFILES += loopfilter_block_sse2.asm endif ifdef MOZ_VP8_ENCODER CSRCS += \ x86_csystemdependent.c \ $(NULL) # Files which depend on asm_enc_offsets.asm VPX_ASM_ENC_OFFSETS_SRCS = \ quantize_sse2.asm \ quantize_sse4.asm \ quantize_ssse3.asm \ $(NULL) ASFILES += \ dct_mmx.asm \ dct_sse2.asm \ encodeopt.asm \ fwalsh_sse2.asm \ quantize_mmx.asm \ subtract_mmx.asm \ subtract_sse2.asm \ temporal_filter_apply_sse2.asm \ $(VPX_ASM_ENC_OFFSETS_SRCS) \ $(NULL) endif endif ifdef VPX_ARM_ASM # Building on an ARM platform with a supported assembler, include # the optimized assembly in the build. ifeq ($(OS_TARGET),Android) # Older versions of the Android NDK don't pre-define anything to indicate the # OS they're on, so do it for them. DEFINES += -D__linux__ # For cpu-features.h LOCAL_INCLUDES += -I$(ANDROID_NDK)/sources/android/cpufeatures ifndef MOZ_WEBRTC # For cpu-features.c VPATH += $(ANDROID_NDK)/sources/android/cpufeatures CSRCS += cpu-features.c endif endif CSRCS += \ arm_cpudetect.c \ arm_systemdependent.c \ bilinearfilter_arm.c \ dequantize_arm.c \ filter_arm.c \ loopfilter_arm.c \ reconintra_arm.c \ variance_arm.c \ idct_blk_v6.c \ idct_blk_neon.c \ arm_dsystemdependent.c \ arm_scalesystemdependent.c \ yv12extend_arm.c \ $(NULL) # Files which depend on asm_com_offsets.asm VPX_ASM_COM_OFFSETS_SRCS = \ vp8_vpxyv12_copy_y_neon.asm \ vp8_vpxyv12_copyframe_func_neon.asm \ vp8_vpxyv12_extendframeborders_neon.asm \ $(NULL) VPX_ASFILES = \ bilinearfilter_v6.asm \ copymem16x16_v6.asm \ copymem8x4_v6.asm \ copymem8x8_v6.asm \ dc_only_idct_add_v6.asm \ dequant_idct_v6.asm \ dequantize_v6.asm \ filter_v6.asm \ idct_v6.asm \ intra4x4_predict_v6.asm \ iwalsh_v6.asm \ loopfilter_v6.asm \ simpleloopfilter_v6.asm \ sixtappredict8x4_v6.asm \ bilinearpredict16x16_neon.asm \ bilinearpredict4x4_neon.asm \ bilinearpredict8x4_neon.asm \ bilinearpredict8x8_neon.asm \ buildintrapredictorsmby_neon.asm \ copymem16x16_neon.asm \ copymem8x4_neon.asm \ copymem8x8_neon.asm \ dc_only_idct_add_neon.asm \ dequant_idct_neon.asm \ dequantizeb_neon.asm \ idct_dequant_0_2x_neon.asm \ idct_dequant_full_2x_neon.asm \ iwalsh_neon.asm \ loopfilter_neon.asm \ loopfiltersimplehorizontaledge_neon.asm \ loopfiltersimpleverticaledge_neon.asm \ mbloopfilter_neon.asm \ save_neon_reg.asm \ vp8_mse16x16_armv6.asm \ vp8_sad16x16_armv6.asm \ vp8_variance16x16_armv6.asm \ vp8_variance8x8_armv6.asm \ vp8_variance_halfpixvar16x16_h_armv6.asm \ vp8_variance_halfpixvar16x16_hv_armv6.asm \ vp8_variance_halfpixvar16x16_v_armv6.asm \ shortidct4x4llm_neon.asm \ sad16_neon.asm \ sad8_neon.asm \ sixtappredict16x16_neon.asm \ sixtappredict4x4_neon.asm \ sixtappredict8x4_neon.asm \ sixtappredict8x8_neon.asm \ variance_neon.asm \ vp8_mse16x16_neon.asm \ vp8_subpixelvariance8x8_neon.asm \ vp8_subpixelvariance16x16_neon.asm \ vp8_subpixelvariance16x16s_neon.asm \ $(VPX_ASM_COM_OFFSETS_SRCS) \ $(NULL) ifdef MOZ_VP8_ENCODER CSRCS += \ arm_csystemdependent.c \ boolhuff_arm.c \ dct_arm.c \ picklpf_arm.c \ $(NULL) # Files which depend on asm_enc_offsets.asm VPX_ASM_ENC_OFFSETS_SRCS = \ boolhuff_armv5te.asm \ vp8_packtokens_armv5.asm \ vp8_packtokens_mbrow_armv5.asm \ vp8_packtokens_partitions_armv5.asm \ vp8_fast_quantize_b_armv6.asm \ vp8_subtract_armv6.asm \ fastquantizeb_neon.asm \ subtract_neon.asm \ $(NULL) VPX_ASFILES += \ vp8_short_fdct4x4_armv6.asm \ walsh_v6.asm \ shortfdct_neon.asm \ vp8_memcpy_neon.asm \ vp8_shortwalsh4x4_neon.asm \ $(VPX_ASM_ENC_OFFSETS_SRCS) \ $(NULL) endif ifdef VPX_AS_CONVERSION # The ARM asm is written in ARM RVCT syntax, but we actually build it with # gas using GNU syntax. Add some rules to perform the conversion. VPX_CONVERTED_ASFILES = $(addsuffix .$(ASM_SUFFIX), $(VPX_ASFILES)) ASFILES += $(VPX_CONVERTED_ASFILES) GARBAGE += $(VPX_CONVERTED_ASFILES) %.asm.$(ASM_SUFFIX): %.asm $(VPX_AS_CONVERSION) < $< > $@ else ASFILES += $(VPX_ASFILES) endif else ifdef MOZ_VP8_ENCODER # boolhuff_armv5te.asm defines the same functions as boolhuff.c instead of # using RTCD, so we have to make sure we only add one of the two. CSRCS += boolhuff.c endif endif ifdef VPX_NEED_OBJ_INT_EXTRACT # We don't have a compiler that supports a compatible inline asm syntax, so we # have to resort to extracting asm offsets from a compiled object. This only # works if we have the appropriate system headers obj_int_extract needs to # parse that format, and so only has limited support for cross-compilation. ifdef VPX_ARM_ASM VPX_OIE_FORMAT := rvds else VPX_OIE_FORMAT := gas endif HOST_PROGRAM = host_obj_int_extract$(HOST_BIN_SUFFIX) CSRCS += asm_com_offsets.c GARBAGE += asm_com_offsets.$(OBJ_SUFFIX) asm_com_offsets.asm ifdef MOZ_VP8_ENCODER CSRCS += asm_enc_offsets.c GARBAGE += asm_enc_offsets.$(OBJ_SUFFIX) asm_enc_offsets.asm endif else # We can extract the asm offsets directly from generated assembly using inline # asm. This is the preferred method. asm_com_offsets.s: CFLAGS += -DINLINE_ASM OFFSET_PATTERN := '^[a-zA-Z0-9_]* EQU' # This rule, as well as the rule for asm_enc_offsets.s further below are here # because the generic rule in rules.mk was made to not be implicit, and we # can't put the C files in CSRCS. asm_com_offsets.s: asm_com_offsets.c $(REPORT_BUILD) $(CC) -S $(COMPILE_CFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS) asm_com_offsets.asm: asm_com_offsets.s grep $(OFFSET_PATTERN) $< | sed -e 's/[$$\#]//g' \ $(if $(VPX_AS_CONVERSION),| $(VPX_AS_CONVERSION)) > $@ GARBAGE += asm_com_offsets.s asm_com_offsets.asm ifdef MOZ_VP8_ENCODER asm_enc_offsets.s: CFLAGS += -DINLINE_ASM asm_enc_offsets.s: asm_enc_offsets.c $(REPORT_BUILD) $(CC) -S $(COMPILE_CFLAGS) $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS) asm_enc_offsets.asm: asm_enc_offsets.s grep $(OFFSET_PATTERN) $< | sed -e 's/[$$\#]//g' \ $(if $(VPX_AS_CONVERSION),| $(VPX_AS_CONVERSION)) > $@ GARBAGE += asm_enc_offsets.s asm_enc_offsets.asm endif endif EXTRA_MDDEPEND_FILES = asm_enc_offsets.s.pp asm_enc_offsets.$(OBJ_SUFFIX).pp asm_com_offsets.s.pp asm_com_offsets.$(OBJ_SUFFIX).pp include $(topsrcdir)/config/rules.mk # This must be after rules.mk in order to use $(OBJ_SUFFIX) outside a # recursively-expanded variable. ifdef VPX_NEED_OBJ_INT_EXTRACT # only for MSVC ifdef _MSC_VER asm_com_offsets.$(OBJ_SUFFIX): CFLAGS += -GL- endif asm_com_offsets.asm: asm_com_offsets.$(OBJ_SUFFIX) $(HOST_PROGRAM) ./$(HOST_PROGRAM) $(VPX_OIE_FORMAT) $< \ $(if $(VPX_AS_CONVERSION),| $(VPX_AS_CONVERSION)) > $@ # Filter out this object, because we don't want to link against it. # It was generated solely so it could be parsed by obj_int_extract. OBJS := $(filter-out asm_com_offsets.$(OBJ_SUFFIX),$(OBJS)) ifdef MOZ_VP8_ENCODER ifdef _MSC_VER asm_enc_offsets.$(OBJ_SUFFIX): CFLAGS += -GL- endif asm_enc_offsets.asm: asm_enc_offsets.$(OBJ_SUFFIX) $(HOST_PROGRAM) ./$(HOST_PROGRAM) $(VPX_OIE_FORMAT) $< \ $(if $(VPX_AS_CONVERSION),| $(VPX_AS_CONVERSION)) > $@ # Filter out this object, because we don't want to link against it. # It was generated solely so it could be parsed by obj_int_extract. OBJS := $(filter-out asm_enc_offsets.$(OBJ_SUFFIX),$(OBJS)) endif endif # These dependencies are not generated automatically, so do it manually. ifdef VPX_AS_CONVERSION $(addsuffix .$(OBJ_SUFFIX), $(VPX_ASM_COM_OFFSETS_SRCS)): asm_com_offsets.asm ifdef MOZ_VP8_ENCODER $(addsuffix .$(OBJ_SUFFIX), $(VPX_ASM_ENC_OFFSETS_SRCS)): asm_enc_offsets.asm endif else $(patsubst %.$(ASM_SUFFIX),%.$(OBJ_SUFFIX), $(VPX_ASM_COM_OFFSETS_SRCS)): asm_com_offsets.asm ifdef MOZ_VP8_ENCODER $(patsubst %.$(ASM_SUFFIX),%.$(OBJ_SUFFIX), $(VPX_ASM_ENC_OFFSETS_SRCS)): asm_enc_offsets.asm endif endif # Workaround a bug of Sun Studio (CR 6963410) ifdef SOLARIS_SUNPRO_CC ifeq (86,$(findstring 86,$(OS_TEST))) filter.o: filter.c Makefile.in $(REPORT_BUILD) @$(MAKE_DEPS_AUTO_CC) $(CC) -o $@ -c $(patsubst -xO[45],-xO3,$(COMPILE_CFLAGS)) $< endif endif