# ***** BEGIN LICENSE BLOCK ***** # Version: MPL 1.1/GPL 2.0/LGPL 2.1 # # The contents of this file are subject to the Mozilla Public License Version # 1.1 (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" basis, # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License # for the specific language governing rights and limitations under the # License. # # The Original Code is Mozilla code. # # The Initial Developer of the Original Code is the Mozilla Foundation. # Portions created by the Initial Developer are Copyright (C) 2010 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Chris Pearce # # Alternatively, the contents of this file may be used under the terms of # either the GNU General Public License Version 2 or later (the "GPL"), or # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), # in which case the provisions of the GPL or the LGPL are applicable instead # of those above. If you wish to allow use of your version of this file only # under the terms of either the GPL or the LGPL, and not to allow others to # use your version of this file under the terms of the MPL, indicate your # decision by deleting the provisions above and replace them with the notice # and other provisions required by the GPL or the LGPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** DEPTH = ../.. topsrcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ include $(DEPTH)/config/autoconf.mk DEFINES += -DHAVE_CONFIG_H=vpx_config.h MODULE = vpx LIBRARY_NAME = vpx FORCE_STATIC_LIB= 1 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/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) EXPORTS_NAMESPACES = vpx EXPORTS_vpx = \ vp8.h \ vp8cx.h \ vp8dx.h \ vp8e.h \ vpx_codec.h \ vpx_codec_impl_bottom.h \ vpx_codec_impl_top.h \ vpx_decoder.h \ vpx_decoder_compat.h \ vpx_encoder.h\ vpx_image.h \ vpx_mem_intrnl.h \ vpx_mem.h \ config.h \ mem.h \ vpx_integer.h \ vpx_timer.h \ arm.h \ x86.h \ scale_mode.h \ vpxscale.h \ yv12config.h \ yv12extend.h \ $(NULL) CSRCS += \ vpx_config_c.c \ systemdependent.c \ alloccommon.c \ blockd.c \ debugmodes.c \ defaultcoefcounts.c \ dsystemdependent.c \ entropy.c \ entropymode.c \ entropymv.c \ extend.c \ filter.c \ findnearmv.c \ idctllm.c \ invtrans.c \ loopfilter.c \ loopfilter_filters.c \ mbpitch.c \ modecont.c \ modecontext.c \ postproc.c \ quant_common.c \ recon.c \ reconinter.c \ reconintra.c \ reconintra4x4.c \ setupintrarecon.c \ swapyv12buffer.c \ textblit.c \ treecoder.c \ dboolhuff.c \ decodemv.c \ decodframe.c \ dequantize.c \ detokenize.c \ reconintra_mt.c \ idct_blk.c \ onyxd_if.c \ threading.c \ vp8_dx_iface.c \ vpx_codec.c \ vpx_decoder.c \ vpx_decoder_compat.c \ vpx_encoder.c \ vpx_image.c \ vpx_mem.c \ gen_scalers.c \ vpxscale.c \ scalesystemdependent.c \ yv12config.c \ yv12extend.c \ $(NULL) 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 \ boolhuff.c \ dct.c \ encodeframe.c \ encodeintra.c \ encodemb.c \ encodemv.c \ ethreading.c \ firstpass.c \ lookahead.c \ mcomp.c \ modecosts.c \ onyx_if.c \ picklpf.c \ pickinter.c \ psnr.c \ quantize.c \ ratectrl.c \ rdopt.c \ sad_c.c \ segmentation.c \ temporal_filter.c \ tokenize.c \ treewriter.c \ variance_c.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 += \ idct_blk_mmx.c \ idct_blk_sse2.c \ loopfilter_x86.c \ recon_wrapper_sse2.c \ vp8_asm_stubs.c \ x86_systemdependent.c \ x86_dsystemdependent.c \ $(NULL) ASFILES += \ 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 \ subpixel_mmx.asm \ subpixel_sse2.asm \ subpixel_ssse3.asm \ dequantize_mmx.asm \ emms.asm \ $(NULL) ifdef MOZ_VP8_ENCODER CSRCS += \ variance_mmx.c \ variance_sse2.c \ variance_ssse3.c \ x86_csystemdependent.c \ $(NULL) ASFILES += \ dct_mmx.asm \ dct_sse2.asm \ encodeopt.asm \ fwalsh_sse2.asm \ quantize_mmx.asm \ quantize_sse2.asm \ quantize_ssse3.asm \ quantize_sse4.asm \ sad_mmx.asm \ sad_sse2.asm \ sad_sse3.asm \ sad_ssse3.asm \ sad_sse4.asm \ subtract_mmx.asm \ subtract_sse2.asm \ temporal_filter_apply_sse2.asm \ variance_impl_mmx.asm \ variance_impl_sse2.asm \ variance_impl_ssse3.asm \ $(NULL) # Files which depend on asm_enc_offsets.asm VPX_ASM_ENC_OFFSETS_SRCS = \ quantize_sse2.asm \ quantize_ssse3.asm \ quantize_sse4.asm \ $(NULL) endif endif ifdef VPX_ARM_ASM # Building on an ARM platform with a supported assembler, include # the optimized assembly in the build. # The Android NDK doesn't pre-define anything to indicate the OS it's on, so # do it for them. ifeq ($(OS_TARGET),Android) DEFINES += -D__linux__ endif CSRCS += \ arm_cpudetect.c \ arm_systemdependent.c \ bilinearfilter_arm.c \ filter_arm.c \ loopfilter_arm.c \ reconintra_arm.c \ arm_dsystemdependent.c \ dequantize_arm.c \ idct_blk_v6.c \ idct_blk_neon.c \ recon_neon.c \ $(NULL) VPX_ASFILES = \ bilinearfilter_v6.asm \ copymem8x4_v6.asm \ copymem8x8_v6.asm \ copymem16x16_v6.asm \ dc_only_idct_add_v6.asm \ iwalsh_v6.asm \ filter_v6.asm \ idct_v6.asm \ loopfilter_v6.asm \ recon_v6.asm \ simpleloopfilter_v6.asm \ sixtappredict8x4_v6.asm \ bilinearpredict4x4_neon.asm \ bilinearpredict8x4_neon.asm \ bilinearpredict8x8_neon.asm \ bilinearpredict16x16_neon.asm \ copymem8x4_neon.asm \ copymem8x8_neon.asm \ copymem16x16_neon.asm \ dc_only_idct_add_neon.asm \ iwalsh_neon.asm \ loopfilter_neon.asm \ loopfiltersimplehorizontaledge_neon.asm \ loopfiltersimpleverticaledge_neon.asm \ mbloopfilter_neon.asm \ recon2b_neon.asm \ recon4b_neon.asm \ reconb_neon.asm \ shortidct4x4llm_1_neon.asm \ shortidct4x4llm_neon.asm \ sixtappredict4x4_neon.asm \ sixtappredict8x4_neon.asm \ sixtappredict8x8_neon.asm \ sixtappredict16x16_neon.asm \ recon16x16mb_neon.asm \ buildintrapredictorsmby_neon.asm \ save_neon_reg.asm \ dequant_dc_idct_v6.asm \ dequant_idct_v6.asm \ dequantize_v6.asm \ idct_dequant_dc_full_2x_neon.asm \ idct_dequant_dc_0_2x_neon.asm \ dequant_idct_neon.asm \ idct_dequant_full_2x_neon.asm \ idct_dequant_0_2x_neon.asm \ dequantizeb_neon.asm \ $(NULL) ifdef MOZ_VP8_ENCODER CSRCS += \ arm_csystemdependent.c \ dct_arm.c \ picklpf_arm.c \ variance_arm.c \ $(NULL) VPX_ASFILES += \ vp8_packtokens_armv5.asm \ vp8_packtokens_mbrow_armv5.asm \ vp8_packtokens_partitions_armv5.asm \ vp8_fast_fdct4x4_armv6.asm \ vp8_fast_quantize_b_armv6.asm \ vp8_mse16x16_armv6.asm \ vp8_sad16x16_armv6.asm \ vp8_subtract_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 \ walsh_v6.asm \ fastfdct4x4_neon.asm \ fastfdct8x4_neon.asm \ fastquantizeb_neon.asm \ sad16_neon.asm \ sad8_neon.asm \ shortfdct_neon.asm \ subtract_neon.asm \ variance_neon.asm \ vp8_memcpy_neon.asm \ vp8_mse16x16_neon.asm \ vp8_shortwalsh4x4_neon.asm \ vp8_subpixelvariance8x8_neon.asm \ vp8_subpixelvariance16x16_neon.asm \ vp8_subpixelvariance16x16s_neon.asm \ vp8_vpxyv12_copyframeyonly_neon.asm \ $(NULL) # Files which depend on asm_com_offsets.asm VPX_ASM_COM_OFFSETS_SRCS = \ vp8_vpxyv12_copyframeyonly_neon.asm \ $(NULL) # Files which depend on asm_enc_offsets.asm VPX_ASM_ENC_OFFSETS_SRCS = \ 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) 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 endif ifdef MOZ_VP8_ENCODER 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_CSRCS = obj_int_extract.c HOST_PROGRAM = host_obj_int_extract$(HOST_BIN_SUFFIX) GARBAGE += \ asm_com_offsets.$(OBJ_SUFFIX) asm_com_offsets.asm \ asm_enc_offsets.$(OBJ_SUFFIX) asm_enc_offsets.asm \ $(NULL) 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 asm_enc_offsets.s: CFLAGS += -DINLINE_ASM asm_com_offsets.asm: asm_com_offsets.s grep \\\ $< | sed -e 's/[$$\#]//g' \ $(if $(VPX_AS_CONVERSION),| $(VPX_AS_CONVERSION)) > $@ asm_enc_offsets.asm: asm_enc_offsets.s grep \\\ $< | sed -e 's/[$$\#]//g' \ $(if $(VPX_AS_CONVERSION),| $(VPX_AS_CONVERSION)) > $@ GARBAGE += \ asm_com_offsets.s asm_com_offsets.asm \ asm_enc_offsets.s asm_enc_offsets.asm \ $(NULL) endif endif include $(topsrcdir)/config/rules.mk # This must be after rules.mk in order to use $(OBJ_SUFFIX) outside a # recursively-expanded variable. ifdef MOZ_VP8_ENCODER ifdef VPX_NEED_OBJ_INT_EXTRACT asm_com_offsets.asm: asm_com_offsets.$(OBJ_SUFFIX) $(HOST_PROGRAM) ./$(HOST_PROGRAM) $(VPX_OIE_FORMAT) $< \ $(if $(VPX_AS_CONVERSION),| $(VPX_AS_CONVERSION)) > $@ asm_enc_offsets.asm: asm_enc_offsets.$(OBJ_SUFFIX) $(HOST_PROGRAM) ./$(HOST_PROGRAM) $(VPX_OIE_FORMAT) $< \ $(if $(VPX_AS_CONVERSION),| $(VPX_AS_CONVERSION)) > $@ 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 $(addsuffix .$(OBJ_SUFFIX), $(VPX_ASM_ENC_OFFSETS_SRCS)): asm_enc_offsets.asm else $(patsubst %.$(ASM_SUFFIX),%.$(OBJ_SUFFIX), $(VPX_ASM_COM_OFFSETS_SRCS)): asm_com_offsets.asm $(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