media/libvpx/Makefile.in
author Gregory Szorc <gps@mozilla.com>
Wed, 28 Jan 2015 13:37:00 -0800
branchMOBILE180_2012123109_RELBRANCH
changeset 120289 8033c2e38381d2832d66906e3d03126189c703d5
parent 110043 c2e464e9524b528129e67204c6cb11af52dc2422
permissions -rw-r--r--
Close old release branch MOBILE180_2012123109_RELBRANCH

# 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/.


DEPTH = @DEPTH@
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@

include $(DEPTH)/config/autoconf.mk

ifdef GNU_CC
OS_CFLAGS := $(filter-out -pedantic,$(OS_CFLAGS))
endif

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/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)

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 \
  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 \
  vp8_dx_iface.c \
  alloccommon.c \
  blockd.c \
  debugmodes.c \
  dequantize.c \
  entropy.c \
  entropymode.c \
  entropymv.c \
  extend.c \
  filter.c \
  findnearmv.c \
  idct_blk.c \
  idctllm.c \
  loopfilter.c \
  loopfilter_filters.c \
  mbpitch.c \
  modecont.c \
  modecontext.c \
  postproc.c \
  quant_common.c \
  reconinter.c \
  reconintra.c \
  reconintra4x4.c \
  sad_c.c \
  setupintrarecon.c \
  swapyv12buffer.c \
  treecoder.c \
  variance_c.c \
  systemdependent.c \
  dboolhuff.c \
  decodemv.c \
  decodframe.c \
  detokenize.c \
  reconintra_mt.c \
  onyxd_if.c \
  threading.c \
  dsystemdependent.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 \
  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
# For cpu-features.c
VPATH += $(ANDROID_NDK)/sources/android/cpufeatures

CSRCS += cpu-features.c

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_CSRCS = obj_int_extract.c
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'

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.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