1233d2500723e5594f3e7c70896ffeeef32b9c950ywan##
2233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3233d2500723e5594f3e7c70896ffeeef32b9c950ywan##
4233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  Use of this source code is governed by a BSD-style license
5233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  that can be found in the LICENSE file in the root of the source
6233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  tree. An additional intellectual property rights grant can be found
7233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  in the file PATENTS.  All contributing project authors may
8233d2500723e5594f3e7c70896ffeeef32b9c950ywan##  be found in the AUTHORS file in the root of the source tree.
9233d2500723e5594f3e7c70896ffeeef32b9c950ywan##
10233d2500723e5594f3e7c70896ffeeef32b9c950ywan
11233d2500723e5594f3e7c70896ffeeef32b9c950ywan
12233d2500723e5594f3e7c70896ffeeef32b9c950ywan# ARM assembly files are written in RVCT-style. We use some make magic to
13233d2500723e5594f3e7c70896ffeeef32b9c950ywan# filter those files to allow GCC compilation
14233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(ARCH_ARM),yes)
15233d2500723e5594f3e7c70896ffeeef32b9c950ywan  ASM:=$(if $(filter yes,$(CONFIG_GCC)$(CONFIG_MSVS)),.asm.s,.asm)
16233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
17233d2500723e5594f3e7c70896ffeeef32b9c950ywan  ASM:=.asm
18233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
19233d2500723e5594f3e7c70896ffeeef32b9c950ywan
20233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
21233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Calculate platform- and compiler-specific offsets for hand coded assembly
22233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
23233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(filter icc gcc,$(TGT_CC)), $(TGT_CC))
24233d2500723e5594f3e7c70896ffeeef32b9c950ywanOFFSET_PATTERN:='^[a-zA-Z0-9_]* EQU'
25233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine asm_offsets_template
26233d2500723e5594f3e7c70896ffeeef32b9c950ywan$$(BUILD_PFX)$(1): $$(BUILD_PFX)$(2).S
27233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $$@"
28233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$$(qexec)LC_ALL=C grep $$(OFFSET_PATTERN) $$< | tr -d '$$$$\#' $$(ADS2GAS) > $$@
29233d2500723e5594f3e7c70896ffeeef32b9c950ywan$$(BUILD_PFX)$(2).S: $(2)
30233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += $$(BUILD_PFX)$(1) $(2).S
31233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
32233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
33233d2500723e5594f3e7c70896ffeeef32b9c950ywan  ifeq ($(filter rvct,$(TGT_CC)), $(TGT_CC))
34233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine asm_offsets_template
35233d2500723e5594f3e7c70896ffeeef32b9c950ywan$$(BUILD_PFX)$(1): obj_int_extract
36233d2500723e5594f3e7c70896ffeeef32b9c950ywan$$(BUILD_PFX)$(1): $$(BUILD_PFX)$(2).o
37233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $$@"
38233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$$(qexec)./obj_int_extract rvds $$< $$(ADS2GAS) > $$@
39233d2500723e5594f3e7c70896ffeeef32b9c950ywanOBJS-yes += $$(BUILD_PFX)$(2).o
40233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += $$(BUILD_PFX)$(1)
41233d2500723e5594f3e7c70896ffeeef32b9c950ywan$$(filter %$$(ASM).o,$$(OBJS-yes)): $$(BUILD_PFX)$(1)
42233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
43233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif # rvct
44233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif # !gcc
45233d2500723e5594f3e7c70896ffeeef32b9c950ywan
46233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
47233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Rule to generate runtime cpu detection files
48233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
49233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine rtcd_h_template
50233d2500723e5594f3e7c70896ffeeef32b9c950ywan$$(BUILD_PFX)$(1).h: $$(SRC_PATH_BARE)/$(2)
51233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $$@"
52233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$$(qexec)$$(SRC_PATH_BARE)/build/make/rtcd.pl --arch=$$(TGT_ISA) \
53233d2500723e5594f3e7c70896ffeeef32b9c950ywan          --sym=$(1) \
54233d2500723e5594f3e7c70896ffeeef32b9c950ywan          --config=$$(CONFIG_DIR)$$(target)$$(if $$(FAT_ARCHS),,-$$(TOOLCHAIN)).mk \
55233d2500723e5594f3e7c70896ffeeef32b9c950ywan          $$(RTCD_OPTIONS) $$^ > $$@
56233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += $$(BUILD_PFX)$(1).h
57233d2500723e5594f3e7c70896ffeeef32b9c950ywanRTCD += $$(BUILD_PFX)$(1).h
58233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
59233d2500723e5594f3e7c70896ffeeef32b9c950ywan
60233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-yes += CHANGELOG
61233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-yes += libs.mk
62233d2500723e5594f3e7c70896ffeeef32b9c950ywan
63233d2500723e5594f3e7c70896ffeeef32b9c950ywan# If this is a universal (fat) binary, then all the subarchitectures have
64233d2500723e5594f3e7c70896ffeeef32b9c950ywan# already been built and our job is to stitch them together. The
65233d2500723e5594f3e7c70896ffeeef32b9c950ywan# BUILD_LIBVPX variable indicates whether we should be building
66233d2500723e5594f3e7c70896ffeeef32b9c950ywan# (compiling, linking) the library. The LIPO_LIBVPX variable indicates
67233d2500723e5594f3e7c70896ffeeef32b9c950ywan# that we're stitching.
68233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_LIBVPX,BUILD_LIBVPX):=yes)
69233d2500723e5594f3e7c70896ffeeef32b9c950ywan
70233d2500723e5594f3e7c70896ffeeef32b9c950ywaninclude $(SRC_PATH_BARE)/vpx/vpx_codec.mk
71233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-yes += $(addprefix vpx/,$(call enabled,API_SRCS))
72233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_DOC_SRCS += $(addprefix vpx/,$(call enabled,API_DOC_SRCS))
73233d2500723e5594f3e7c70896ffeeef32b9c950ywan
74233d2500723e5594f3e7c70896ffeeef32b9c950ywaninclude $(SRC_PATH_BARE)/vpx_mem/vpx_mem.mk
75233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-yes += $(addprefix vpx_mem/,$(call enabled,MEM_SRCS))
76233d2500723e5594f3e7c70896ffeeef32b9c950ywan
77233d2500723e5594f3e7c70896ffeeef32b9c950ywaninclude $(SRC_PATH_BARE)/vpx_scale/vpx_scale.mk
78233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-yes += $(addprefix vpx_scale/,$(call enabled,SCALE_SRCS))
79233d2500723e5594f3e7c70896ffeeef32b9c950ywan
80233d2500723e5594f3e7c70896ffeeef32b9c950ywaninclude $(SRC_PATH_BARE)/vpx_ports/vpx_ports.mk
81233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-yes += $(addprefix vpx_ports/,$(call enabled,PORTS_SRCS))
82233d2500723e5594f3e7c70896ffeeef32b9c950ywan
83233d2500723e5594f3e7c70896ffeeef32b9c950ywanifneq ($(CONFIG_VP8_ENCODER)$(CONFIG_VP8_DECODER),)
84233d2500723e5594f3e7c70896ffeeef32b9c950ywan  VP8_PREFIX=vp8/
85233d2500723e5594f3e7c70896ffeeef32b9c950ywan  include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8_common.mk
86233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
87233d2500723e5594f3e7c70896ffeeef32b9c950ywan
88233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_VP8_ENCODER),yes)
89233d2500723e5594f3e7c70896ffeeef32b9c950ywan  include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8cx.mk
90233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_SRCS-yes += $(addprefix $(VP8_PREFIX),$(call enabled,VP8_CX_SRCS))
91233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_EXPORTS-yes += $(addprefix $(VP8_PREFIX),$(VP8_CX_EXPORTS))
92233d2500723e5594f3e7c70896ffeeef32b9c950ywan  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8cx.h
93233d2500723e5594f3e7c70896ffeeef32b9c950ywan  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
94233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_DOC_SECTIONS += vp8 vp8_encoder
95233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
96233d2500723e5594f3e7c70896ffeeef32b9c950ywan
97233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_VP8_DECODER),yes)
98233d2500723e5594f3e7c70896ffeeef32b9c950ywan  include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8dx.mk
99233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_SRCS-yes += $(addprefix $(VP8_PREFIX),$(call enabled,VP8_DX_SRCS))
100233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_EXPORTS-yes += $(addprefix $(VP8_PREFIX),$(VP8_DX_EXPORTS))
101233d2500723e5594f3e7c70896ffeeef32b9c950ywan  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8dx.h
102233d2500723e5594f3e7c70896ffeeef32b9c950ywan  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
103233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_DOC_SECTIONS += vp8 vp8_decoder
104233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
105233d2500723e5594f3e7c70896ffeeef32b9c950ywan
106233d2500723e5594f3e7c70896ffeeef32b9c950ywanifneq ($(CONFIG_VP9_ENCODER)$(CONFIG_VP9_DECODER),)
107233d2500723e5594f3e7c70896ffeeef32b9c950ywan  VP9_PREFIX=vp9/
108233d2500723e5594f3e7c70896ffeeef32b9c950ywan  include $(SRC_PATH_BARE)/$(VP9_PREFIX)vp9_common.mk
109233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
110233d2500723e5594f3e7c70896ffeeef32b9c950ywan
111233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_VP9_ENCODER),yes)
112233d2500723e5594f3e7c70896ffeeef32b9c950ywan  VP9_PREFIX=vp9/
113233d2500723e5594f3e7c70896ffeeef32b9c950ywan  include $(SRC_PATH_BARE)/$(VP9_PREFIX)vp9cx.mk
114233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_SRCS-yes += $(addprefix $(VP9_PREFIX),$(call enabled,VP9_CX_SRCS))
115233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_EXPORTS-yes += $(addprefix $(VP9_PREFIX),$(VP9_CX_EXPORTS))
116233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_SRCS-yes += $(VP9_PREFIX)vp9cx.mk vpx/vp8.h vpx/vp8cx.h
117233d2500723e5594f3e7c70896ffeeef32b9c950ywan  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8cx.h
118233d2500723e5594f3e7c70896ffeeef32b9c950ywan  INSTALL-LIBS-yes += include/vpx/svc_context.h
119233d2500723e5594f3e7c70896ffeeef32b9c950ywan  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP9_PREFIX)/%
120233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8cx.h
121233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_DOC_SECTIONS += vp9 vp9_encoder
122233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
123233d2500723e5594f3e7c70896ffeeef32b9c950ywan
124233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_VP9_DECODER),yes)
125233d2500723e5594f3e7c70896ffeeef32b9c950ywan  VP9_PREFIX=vp9/
126233d2500723e5594f3e7c70896ffeeef32b9c950ywan  include $(SRC_PATH_BARE)/$(VP9_PREFIX)vp9dx.mk
127233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_SRCS-yes += $(addprefix $(VP9_PREFIX),$(call enabled,VP9_DX_SRCS))
128233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_EXPORTS-yes += $(addprefix $(VP9_PREFIX),$(VP9_DX_EXPORTS))
129233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_SRCS-yes += $(VP9_PREFIX)vp9dx.mk vpx/vp8.h vpx/vp8dx.h
130233d2500723e5594f3e7c70896ffeeef32b9c950ywan  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8dx.h
131233d2500723e5594f3e7c70896ffeeef32b9c950ywan  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP9_PREFIX)/%
132233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8dx.h
133233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_DOC_SECTIONS += vp9 vp9_decoder
134233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
135233d2500723e5594f3e7c70896ffeeef32b9c950ywan
136233d2500723e5594f3e7c70896ffeeef32b9c950ywan
137233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_ENCODERS),yes)
138233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_DOC_SECTIONS += encoder
139233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
140233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_DECODERS),yes)
141233d2500723e5594f3e7c70896ffeeef32b9c950ywan  CODEC_DOC_SECTIONS += decoder
142233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
143233d2500723e5594f3e7c70896ffeeef32b9c950ywan
144233d2500723e5594f3e7c70896ffeeef32b9c950ywan
145233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_MSVS),yes)
146233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_LIB=$(if $(CONFIG_STATIC_MSVCRT),vpxmt,vpxmd)
147233d2500723e5594f3e7c70896ffeeef32b9c950ywanGTEST_LIB=$(if $(CONFIG_STATIC_MSVCRT),gtestmt,gtestmd)
148233d2500723e5594f3e7c70896ffeeef32b9c950ywan# This variable uses deferred expansion intentionally, since the results of
149233d2500723e5594f3e7c70896ffeeef32b9c950ywan# $(wildcard) may change during the course of the Make.
150233d2500723e5594f3e7c70896ffeeef32b9c950ywanVS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
151233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
152233d2500723e5594f3e7c70896ffeeef32b9c950ywan
153233d2500723e5594f3e7c70896ffeeef32b9c950ywan# The following pairs define a mapping of locations in the distribution
154233d2500723e5594f3e7c70896ffeeef32b9c950ywan# tree to locations in the source/build trees.
155233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/vpx/%
156233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/vpx_ports/%
157233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += $(LIBSUBDIR)/%     %
158233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += src/%     $(SRC_PATH_BARE)/%
159233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_MSVS),yes)
160233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/%  $(p)/Release/%)
161233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/%  $(p)/Debug/%)
162233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
163233d2500723e5594f3e7c70896ffeeef32b9c950ywan
164233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-$(BUILD_LIBVPX) += build/make/version.sh
165233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-$(BUILD_LIBVPX) += build/make/rtcd.pl
166233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/emmintrin_compat.h
167233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/mem_ops.h
168233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/mem_ops_aligned.h
169233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/vpx_once.h
170233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-$(BUILD_LIBVPX) += $(BUILD_PFX)vpx_config.c
171233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-SRCS-no += $(BUILD_PFX)vpx_config.c
172233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(ARCH_X86)$(ARCH_X86_64),yes)
173233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS-$(BUILD_LIBVPX) += third_party/x86inc/x86inc.asm
174233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
175233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_EXPORTS-$(BUILD_LIBVPX) += vpx/exports_com
176233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_enc
177233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_EXPORTS-$(CONFIG_DECODERS) += vpx/exports_dec
178233d2500723e5594f3e7c70896ffeeef32b9c950ywan
179233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-yes += include/vpx/vpx_codec.h
180233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-yes += include/vpx/vpx_frame_buffer.h
181233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-yes += include/vpx/vpx_image.h
182233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-yes += include/vpx/vpx_integer.h
183233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-$(CONFIG_DECODERS) += include/vpx/vpx_decoder.h
184233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-$(CONFIG_ENCODERS) += include/vpx/vpx_encoder.h
185233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_EXTERNAL_BUILD),yes)
186233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_MSVS),yes)
187233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-yes                  += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/$(CODEC_LIB).lib)
188233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/$(CODEC_LIB)d.lib)
189233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-$(CONFIG_SHARED) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/vpx.dll)
190233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-$(CONFIG_SHARED) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/vpx.exp)
191233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
192233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
193233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-$(CONFIG_STATIC) += $(LIBSUBDIR)/libvpx.a
194233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(LIBSUBDIR)/libvpx_g.a
195233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
196233d2500723e5594f3e7c70896ffeeef32b9c950ywan
197233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_SRCS=$(call enabled,CODEC_SRCS)
198233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(CODEC_SRCS)
199233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(call enabled,CODEC_EXPORTS)
200233d2500723e5594f3e7c70896ffeeef32b9c950ywan
201233d2500723e5594f3e7c70896ffeeef32b9c950ywan
202233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Generate a list of all enabled sources, in particular for exporting to gyp
203233d2500723e5594f3e7c70896ffeeef32b9c950ywan# based build systems.
204233d2500723e5594f3e7c70896ffeeef32b9c950ywanlibvpx_srcs.txt:
205233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
206233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo $(CODEC_SRCS) | xargs -n1 echo | sort -u > $@
207233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += libvpx_srcs.txt
208233d2500723e5594f3e7c70896ffeeef32b9c950ywan
209233d2500723e5594f3e7c70896ffeeef32b9c950ywan
210233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_EXTERNAL_BUILD),yes)
211233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_MSVS),yes)
212233d2500723e5594f3e7c70896ffeeef32b9c950ywan
213233d2500723e5594f3e7c70896ffeeef32b9c950ywanobj_int_extract.bat: $(SRC_PATH_BARE)/build/$(MSVS_ARCH_DIR)/obj_int_extract.bat
214233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@cp $^ $@
215233d2500723e5594f3e7c70896ffeeef32b9c950ywan
216233d2500723e5594f3e7c70896ffeeef32b9c950ywanobj_int_extract.$(VCPROJ_SFX): obj_int_extract.bat
217233d2500723e5594f3e7c70896ffeeef32b9c950ywanobj_int_extract.$(VCPROJ_SFX): $(SRC_PATH_BARE)/build/make/obj_int_extract.c
218233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
219233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(GEN_VCPROJ) \
220233d2500723e5594f3e7c70896ffeeef32b9c950ywan    --exe \
221233d2500723e5594f3e7c70896ffeeef32b9c950ywan    --target=$(TOOLCHAIN) \
222233d2500723e5594f3e7c70896ffeeef32b9c950ywan    --name=obj_int_extract \
223233d2500723e5594f3e7c70896ffeeef32b9c950ywan    --ver=$(CONFIG_VS_VERSION) \
224233d2500723e5594f3e7c70896ffeeef32b9c950ywan    --proj-guid=E1360C65-D375-4335-8057-7ED99CC3F9B2 \
225233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
226233d2500723e5594f3e7c70896ffeeef32b9c950ywan    --out=$@ $^ \
227233d2500723e5594f3e7c70896ffeeef32b9c950ywan    -I. \
228233d2500723e5594f3e7c70896ffeeef32b9c950ywan    -I"$(SRC_PATH_BARE)" \
229233d2500723e5594f3e7c70896ffeeef32b9c950ywan
230233d2500723e5594f3e7c70896ffeeef32b9c950ywanPROJECTS-$(BUILD_LIBVPX) += obj_int_extract.$(VCPROJ_SFX)
231233d2500723e5594f3e7c70896ffeeef32b9c950ywan
232233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx.def: $(call enabled,CODEC_EXPORTS)
233233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
234233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(SRC_PATH_BARE)/build/make/gen_msvs_def.sh\
235233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --name=vpx\
236233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --out=$@ $^
237233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += vpx.def
238233d2500723e5594f3e7c70896ffeeef32b9c950ywan
239233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Assembly files that are included, but don't define symbols themselves.
240233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Filtered out to avoid Visual Studio build warnings.
241233d2500723e5594f3e7c70896ffeeef32b9c950ywanASM_INCLUDES := \
242233d2500723e5594f3e7c70896ffeeef32b9c950ywan    third_party/x86inc/x86inc.asm \
243233d2500723e5594f3e7c70896ffeeef32b9c950ywan    vpx_config.asm \
244233d2500723e5594f3e7c70896ffeeef32b9c950ywan    vpx_ports/x86_abi_support.asm \
245233d2500723e5594f3e7c70896ffeeef32b9c950ywan
246233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx.$(VCPROJ_SFX): $(CODEC_SRCS) vpx.def obj_int_extract.$(VCPROJ_SFX)
247233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
248233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(GEN_VCPROJ) \
249233d2500723e5594f3e7c70896ffeeef32b9c950ywan            $(if $(CONFIG_SHARED),--dll,--lib) \
250233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --target=$(TOOLCHAIN) \
251233d2500723e5594f3e7c70896ffeeef32b9c950ywan            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
252233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --name=vpx \
253233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --proj-guid=DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74 \
254233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --module-def=vpx.def \
255233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --ver=$(CONFIG_VS_VERSION) \
256233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --out=$@ $(CFLAGS) \
257233d2500723e5594f3e7c70896ffeeef32b9c950ywan            $(filter-out $(addprefix %, $(ASM_INCLUDES)), $^) \
258233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --src-path-bare="$(SRC_PATH_BARE)" \
259233d2500723e5594f3e7c70896ffeeef32b9c950ywan
260233d2500723e5594f3e7c70896ffeeef32b9c950ywanPROJECTS-$(BUILD_LIBVPX) += vpx.$(VCPROJ_SFX)
261233d2500723e5594f3e7c70896ffeeef32b9c950ywan
262233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx.$(VCPROJ_SFX): vpx_config.asm
263233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx.$(VCPROJ_SFX): $(RTCD)
264233d2500723e5594f3e7c70896ffeeef32b9c950ywan
265233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
266233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
267233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_OBJS=$(call objs,$(CODEC_SRCS))
268233d2500723e5594f3e7c70896ffeeef32b9c950ywanOBJS-$(BUILD_LIBVPX) += $(LIBVPX_OBJS)
269233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBS-$(if $(BUILD_LIBVPX),$(CONFIG_STATIC)) += $(BUILD_PFX)libvpx.a $(BUILD_PFX)libvpx_g.a
270233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)libvpx_g.a: $(LIBVPX_OBJS)
271233d2500723e5594f3e7c70896ffeeef32b9c950ywan
272233d2500723e5594f3e7c70896ffeeef32b9c950ywan
273233d2500723e5594f3e7c70896ffeeef32b9c950ywanBUILD_LIBVPX_SO         := $(if $(BUILD_LIBVPX),$(CONFIG_SHARED))
274233d2500723e5594f3e7c70896ffeeef32b9c950ywan
275233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(filter darwin%,$(TGT_OS)),$(TGT_OS))
276233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_SO               := libvpx.$(VERSION_MAJOR).dylib
277233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXPORT_FILE             := libvpx.syms
278233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_SO_SYMLINKS      := $(addprefix $(LIBSUBDIR)/, \
279233d2500723e5594f3e7c70896ffeeef32b9c950ywan                             libvpx.dylib  )
280233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
281233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_SO               := libvpx.so.$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)
282233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXPORT_FILE             := libvpx.ver
283233d2500723e5594f3e7c70896ffeeef32b9c950ywanSYM_LINK                := libvpx.so
284233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_SO_SYMLINKS      := $(addprefix $(LIBSUBDIR)/, \
285233d2500723e5594f3e7c70896ffeeef32b9c950ywan                             libvpx.so libvpx.so.$(VERSION_MAJOR) \
286233d2500723e5594f3e7c70896ffeeef32b9c950ywan                             libvpx.so.$(VERSION_MAJOR).$(VERSION_MINOR))
287233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
288233d2500723e5594f3e7c70896ffeeef32b9c950ywan
289233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBS-$(BUILD_LIBVPX_SO) += $(BUILD_PFX)$(LIBVPX_SO)\
290233d2500723e5594f3e7c70896ffeeef32b9c950ywan                           $(notdir $(LIBVPX_SO_SYMLINKS))
291233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)$(LIBVPX_SO): $(LIBVPX_OBJS) $(EXPORT_FILE)
292233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)$(LIBVPX_SO): extralibs += -lm
293233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)$(LIBVPX_SO): SONAME = libvpx.so.$(VERSION_MAJOR)
294233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)$(LIBVPX_SO): EXPORTS_FILE = $(EXPORT_FILE)
295233d2500723e5594f3e7c70896ffeeef32b9c950ywan
296233d2500723e5594f3e7c70896ffeeef32b9c950ywanlibvpx.ver: $(call enabled,CODEC_EXPORTS)
297233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
298233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo "{ global:" > $@
299233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)for f in $?; do awk '{print $$2";"}' < $$f >>$@; done
300233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo "local: *; };" >> $@
301233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += libvpx.ver
302233d2500723e5594f3e7c70896ffeeef32b9c950ywan
303233d2500723e5594f3e7c70896ffeeef32b9c950ywanlibvpx.syms: $(call enabled,CODEC_EXPORTS)
304233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
305233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)awk '{print "_"$$2}' $^ >$@
306233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += libvpx.syms
307233d2500723e5594f3e7c70896ffeeef32b9c950ywan
308233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine libvpx_symlink_template
309233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1): $(2)
310233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [LN]     $(2) $$@"
311233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)mkdir -p $$(dir $$@)
312233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)ln -sf $(2) $$@
313233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
314233d2500723e5594f3e7c70896ffeeef32b9c950ywan
315233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(eval $(call libvpx_symlink_template,\
316233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(addprefix $(BUILD_PFX),$(notdir $(LIBVPX_SO_SYMLINKS))),\
317233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(BUILD_PFX)$(LIBVPX_SO)))
318233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(eval $(call libvpx_symlink_template,\
319233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(addprefix $(DIST_DIR)/,$(LIBVPX_SO_SYMLINKS)),\
320233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(LIBVPX_SO)))
321233d2500723e5594f3e7c70896ffeeef32b9c950ywan
322233d2500723e5594f3e7c70896ffeeef32b9c950ywan
323233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-$(BUILD_LIBVPX_SO) += $(LIBVPX_SO_SYMLINKS)
324233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-$(BUILD_LIBVPX_SO) += $(LIBSUBDIR)/$(LIBVPX_SO)
325233d2500723e5594f3e7c70896ffeeef32b9c950ywan
326233d2500723e5594f3e7c70896ffeeef32b9c950ywan
327233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBS-$(BUILD_LIBVPX) += vpx.pc
328233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx.pc: config.mk libs.mk
329233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
330233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo '# pkg-config file from libvpx $(VERSION_STRING)' > $@
331233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'prefix=$(PREFIX)' >> $@
332233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'exec_prefix=$${prefix}' >> $@
333233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'libdir=$${prefix}/$(LIBSUBDIR)' >> $@
334233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'includedir=$${prefix}/include' >> $@
335233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo '' >> $@
336233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'Name: vpx' >> $@
337233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'Description: WebM Project VPx codec implementation' >> $@
338233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'Version: $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)' >> $@
339233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'Requires:' >> $@
340233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'Conflicts:' >> $@
341233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'Libs: -L$${libdir} -lvpx -lm' >> $@
342233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(HAVE_PTHREAD_H),yes)
343233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'Libs.private: -lm -lpthread' >> $@
344233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
345233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'Libs.private: -lm' >> $@
346233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
347233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)echo 'Cflags: -I$${includedir}' >> $@
348233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-LIBS-yes += $(LIBSUBDIR)/pkgconfig/vpx.pc
349233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += $(LIBSUBDIR)/pkgconfig/%.pc %.pc
350233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += vpx.pc
351233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
352233d2500723e5594f3e7c70896ffeeef32b9c950ywan
353233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBS-$(LIPO_LIBVPX) += libvpx.a
354233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(eval $(if $(LIPO_LIBVPX),$(call lipo_lib_template,libvpx.a)))
355233d2500723e5594f3e7c70896ffeeef32b9c950ywan
356233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
357233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Rule to make assembler configuration file from C configuration file
358233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
359233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(ARCH_X86)$(ARCH_X86_64),yes)
360233d2500723e5594f3e7c70896ffeeef32b9c950ywan# YASM
361233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)vpx_config.asm: $(BUILD_PFX)vpx_config.h
362233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
363233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@egrep "#define [A-Z0-9_]+ [01]" $< \
364233d2500723e5594f3e7c70896ffeeef32b9c950ywan	    | awk '{print $$2 " equ " $$3}' > $@
365233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
366233d2500723e5594f3e7c70896ffeeef32b9c950ywanADS2GAS=$(if $(filter yes,$(CONFIG_GCC)),| $(ASM_CONVERSION))
367233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)vpx_config.asm: $(BUILD_PFX)vpx_config.h
368233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
369233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@egrep "#define [A-Z0-9_]+ [01]" $< \
370233d2500723e5594f3e7c70896ffeeef32b9c950ywan	    | awk '{print $$2 " EQU " $$3}' $(ADS2GAS) > $@
371233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "        END" $(ADS2GAS) >> $@
372233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += $(BUILD_PFX)vpx_config.asm
373233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
374233d2500723e5594f3e7c70896ffeeef32b9c950ywan
375233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
376233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Add assembler dependencies for configuration and offsets
377233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
378233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(filter %.s.o,$(OBJS-yes)):     $(BUILD_PFX)vpx_config.asm
379233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
380233d2500723e5594f3e7c70896ffeeef32b9c950ywan
381233d2500723e5594f3e7c70896ffeeef32b9c950ywan
382233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(shell $(SRC_PATH_BARE)/build/make/version.sh "$(SRC_PATH_BARE)" $(BUILD_PFX)vpx_version.h)
383233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += $(BUILD_PFX)vpx_version.h
384233d2500723e5594f3e7c70896ffeeef32b9c950ywan
385233d2500723e5594f3e7c70896ffeeef32b9c950ywan
386233d2500723e5594f3e7c70896ffeeef32b9c950ywan##
387233d2500723e5594f3e7c70896ffeeef32b9c950ywan## libvpx test directives
388233d2500723e5594f3e7c70896ffeeef32b9c950ywan##
389233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_UNIT_TESTS),yes)
390233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_TEST_DATA_PATH ?= .
391233d2500723e5594f3e7c70896ffeeef32b9c950ywan
392233d2500723e5594f3e7c70896ffeeef32b9c950ywaninclude $(SRC_PATH_BARE)/test/test.mk
393233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_TEST_SRCS=$(addprefix test/,$(call enabled,LIBVPX_TEST_SRCS))
394233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_TEST_BINS=./test_libvpx$(EXE_SFX)
395233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_TEST_DATA=$(addprefix $(LIBVPX_TEST_DATA_PATH)/,\
396233d2500723e5594f3e7c70896ffeeef32b9c950ywan                     $(call enabled,LIBVPX_TEST_DATA))
397233d2500723e5594f3e7c70896ffeeef32b9c950ywanlibvpx_test_data_url=http://downloads.webmproject.org/test_data/libvpx/$(1)
398233d2500723e5594f3e7c70896ffeeef32b9c950ywan
399233d2500723e5594f3e7c70896ffeeef32b9c950ywanlibvpx_test_srcs.txt:
400233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
401233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo $(LIBVPX_TEST_SRCS) | xargs -n1 echo | sort -u > $@
402233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += libvpx_test_srcs.txt
403233d2500723e5594f3e7c70896ffeeef32b9c950ywan
404233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(LIBVPX_TEST_DATA): $(SRC_PATH_BARE)/test/test-data.sha1
405233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [DOWNLOAD] $@"
406233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)trap 'rm -f $@' INT TERM &&\
407233d2500723e5594f3e7c70896ffeeef32b9c950ywan            curl -L -o $@ $(call libvpx_test_data_url,$(@F))
408233d2500723e5594f3e7c70896ffeeef32b9c950ywan
409233d2500723e5594f3e7c70896ffeeef32b9c950ywantestdata:: $(LIBVPX_TEST_DATA)
410233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)if [ -x "$$(which sha1sum)" ]; then\
411233d2500723e5594f3e7c70896ffeeef32b9c950ywan            echo "Checking test data:";\
412233d2500723e5594f3e7c70896ffeeef32b9c950ywan            if [ -n "$(LIBVPX_TEST_DATA)" ]; then\
413233d2500723e5594f3e7c70896ffeeef32b9c950ywan                for f in $(call enabled,LIBVPX_TEST_DATA); do\
414233d2500723e5594f3e7c70896ffeeef32b9c950ywan                    grep $$f $(SRC_PATH_BARE)/test/test-data.sha1 |\
415233d2500723e5594f3e7c70896ffeeef32b9c950ywan                        (cd $(LIBVPX_TEST_DATA_PATH); sha1sum -c);\
416233d2500723e5594f3e7c70896ffeeef32b9c950ywan                done; \
417233d2500723e5594f3e7c70896ffeeef32b9c950ywan            fi; \
418233d2500723e5594f3e7c70896ffeeef32b9c950ywan        else\
419233d2500723e5594f3e7c70896ffeeef32b9c950ywan            echo "Skipping test data integrity check, sha1sum not found.";\
420233d2500723e5594f3e7c70896ffeeef32b9c950ywan        fi
421233d2500723e5594f3e7c70896ffeeef32b9c950ywan
422233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_EXTERNAL_BUILD),yes)
423233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_MSVS),yes)
424233d2500723e5594f3e7c70896ffeeef32b9c950ywan
425233d2500723e5594f3e7c70896ffeeef32b9c950ywangtest.$(VCPROJ_SFX): $(SRC_PATH_BARE)/third_party/googletest/src/src/gtest-all.cc
426233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
427233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(GEN_VCPROJ) \
428233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --lib \
429233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --target=$(TOOLCHAIN) \
430233d2500723e5594f3e7c70896ffeeef32b9c950ywan            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
431233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --name=gtest \
432233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --proj-guid=EC00E1EC-AF68-4D92-A255-181690D1C9B1 \
433233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --ver=$(CONFIG_VS_VERSION) \
434233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --src-path-bare="$(SRC_PATH_BARE)" \
435233d2500723e5594f3e7c70896ffeeef32b9c950ywan            -D_VARIADIC_MAX=10 \
436233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --out=gtest.$(VCPROJ_SFX) $(SRC_PATH_BARE)/third_party/googletest/src/src/gtest-all.cc \
437233d2500723e5594f3e7c70896ffeeef32b9c950ywan            -I. -I"$(SRC_PATH_BARE)/third_party/googletest/src/include" -I"$(SRC_PATH_BARE)/third_party/googletest/src"
438233d2500723e5594f3e7c70896ffeeef32b9c950ywan
439233d2500723e5594f3e7c70896ffeeef32b9c950ywanPROJECTS-$(CONFIG_MSVS) += gtest.$(VCPROJ_SFX)
440233d2500723e5594f3e7c70896ffeeef32b9c950ywan
441233d2500723e5594f3e7c70896ffeeef32b9c950ywantest_libvpx.$(VCPROJ_SFX): $(LIBVPX_TEST_SRCS) vpx.$(VCPROJ_SFX) gtest.$(VCPROJ_SFX)
442233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
443233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$(qexec)$(GEN_VCPROJ) \
444233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --exe \
445233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --target=$(TOOLCHAIN) \
446233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --name=test_libvpx \
447233d2500723e5594f3e7c70896ffeeef32b9c950ywan            -D_VARIADIC_MAX=10 \
448233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --proj-guid=CD837F5F-52D8-4314-A370-895D614166A7 \
449233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --ver=$(CONFIG_VS_VERSION) \
450233d2500723e5594f3e7c70896ffeeef32b9c950ywan            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
451233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --out=$@ $(INTERNAL_CFLAGS) $(CFLAGS) \
452233d2500723e5594f3e7c70896ffeeef32b9c950ywan            -I. -I"$(SRC_PATH_BARE)/third_party/googletest/src/include" \
453233d2500723e5594f3e7c70896ffeeef32b9c950ywan            -L. -l$(CODEC_LIB) -l$(GTEST_LIB) $^
454233d2500723e5594f3e7c70896ffeeef32b9c950ywan
455233d2500723e5594f3e7c70896ffeeef32b9c950ywanPROJECTS-$(CONFIG_MSVS) += test_libvpx.$(VCPROJ_SFX)
456233d2500723e5594f3e7c70896ffeeef32b9c950ywan
457233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_TEST_BINS := $(addprefix $(TGT_OS:win64=x64)/Release/,$(notdir $(LIBVPX_TEST_BINS)))
458233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
459233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
460233d2500723e5594f3e7c70896ffeeef32b9c950ywan
461233d2500723e5594f3e7c70896ffeeef32b9c950ywaninclude $(SRC_PATH_BARE)/third_party/googletest/gtest.mk
462233d2500723e5594f3e7c70896ffeeef32b9c950ywanGTEST_SRCS := $(addprefix third_party/googletest/src/,$(call enabled,GTEST_SRCS))
463233d2500723e5594f3e7c70896ffeeef32b9c950ywanGTEST_OBJS=$(call objs,$(GTEST_SRCS))
464233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(filter win%,$(TGT_OS)),$(TGT_OS))
465233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Disabling pthreads globally will cause issues on darwin and possibly elsewhere
466233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(GTEST_OBJS) $(GTEST_OBJS:.o=.d): CXXFLAGS += -DGTEST_HAS_PTHREAD=0
467233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
468233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(GTEST_OBJS) $(GTEST_OBJS:.o=.d): CXXFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src
469233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(GTEST_OBJS) $(GTEST_OBJS:.o=.d): CXXFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src/include
470233d2500723e5594f3e7c70896ffeeef32b9c950ywanOBJS-$(BUILD_LIBVPX) += $(GTEST_OBJS)
471233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBS-$(BUILD_LIBVPX) += $(BUILD_PFX)libgtest.a $(BUILD_PFX)libgtest_g.a
472233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(BUILD_PFX)libgtest_g.a: $(GTEST_OBJS)
473233d2500723e5594f3e7c70896ffeeef32b9c950ywan
474233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBVPX_TEST_OBJS=$(sort $(call objs,$(LIBVPX_TEST_SRCS)))
475233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(LIBVPX_TEST_OBJS) $(LIBVPX_TEST_OBJS:.o=.d): CXXFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src
476233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(LIBVPX_TEST_OBJS) $(LIBVPX_TEST_OBJS:.o=.d): CXXFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src/include
477233d2500723e5594f3e7c70896ffeeef32b9c950ywanOBJS-$(BUILD_LIBVPX) += $(LIBVPX_TEST_OBJS)
478233d2500723e5594f3e7c70896ffeeef32b9c950ywanBINS-$(BUILD_LIBVPX) += $(LIBVPX_TEST_BINS)
479233d2500723e5594f3e7c70896ffeeef32b9c950ywan
480233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_LIB=$(if $(CONFIG_DEBUG_LIBS),vpx_g,vpx)
481233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_LIB_SUF=$(if $(CONFIG_SHARED),.so,.a)
482233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(foreach bin,$(LIBVPX_TEST_BINS),\
483233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(if $(BUILD_LIBVPX),$(eval $(bin): \
484233d2500723e5594f3e7c70896ffeeef32b9c950ywan        lib$(CODEC_LIB)$(CODEC_LIB_SUF) libgtest.a ))\
485233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(if $(BUILD_LIBVPX),$(eval $(call linkerxx_template,$(bin),\
486233d2500723e5594f3e7c70896ffeeef32b9c950ywan        $(LIBVPX_TEST_OBJS) \
487233d2500723e5594f3e7c70896ffeeef32b9c950ywan        -L. -lvpx -lgtest $(extralibs) -lm)\
488233d2500723e5594f3e7c70896ffeeef32b9c950ywan        )))\
489233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(if $(LIPO_LIBS),$(eval $(call lipo_bin_template,$(bin))))\
490233d2500723e5594f3e7c70896ffeeef32b9c950ywan
491233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
492233d2500723e5594f3e7c70896ffeeef32b9c950ywan
493233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Install test sources only if codec source is included
494233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(patsubst $(SRC_PATH_BARE)/%,%,\
495233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(shell find $(SRC_PATH_BARE)/third_party/googletest -type f))
496233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(LIBVPX_TEST_SRCS)
497233d2500723e5594f3e7c70896ffeeef32b9c950ywan
498233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine test_shard_template
499233d2500723e5594f3e7c70896ffeeef32b9c950ywantest:: test_shard.$(1)
500233d2500723e5594f3e7c70896ffeeef32b9c950ywantest_shard.$(1): $(LIBVPX_TEST_BINS) testdata
501233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@set -e; \
502233d2500723e5594f3e7c70896ffeeef32b9c950ywan	 for t in $(LIBVPX_TEST_BINS); do \
503233d2500723e5594f3e7c70896ffeeef32b9c950ywan	   export GTEST_SHARD_INDEX=$(1); \
504233d2500723e5594f3e7c70896ffeeef32b9c950ywan	   export GTEST_TOTAL_SHARDS=$(2); \
505233d2500723e5594f3e7c70896ffeeef32b9c950ywan	   $$$$t; \
506233d2500723e5594f3e7c70896ffeeef32b9c950ywan	 done
507233d2500723e5594f3e7c70896ffeeef32b9c950ywan.PHONY: test_shard.$(1)
508233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
509233d2500723e5594f3e7c70896ffeeef32b9c950ywan
510233d2500723e5594f3e7c70896ffeeef32b9c950ywanNUM_SHARDS := 10
511233d2500723e5594f3e7c70896ffeeef32b9c950ywanSHARDS := 0 1 2 3 4 5 6 7 8 9
512233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(foreach s,$(SHARDS),$(eval $(call test_shard_template,$(s),$(NUM_SHARDS))))
513233d2500723e5594f3e7c70896ffeeef32b9c950ywan
514233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
515233d2500723e5594f3e7c70896ffeeef32b9c950ywan
516233d2500723e5594f3e7c70896ffeeef32b9c950ywan##
517233d2500723e5594f3e7c70896ffeeef32b9c950ywan## documentation directives
518233d2500723e5594f3e7c70896ffeeef32b9c950ywan##
519233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += libs.doxy
520233d2500723e5594f3e7c70896ffeeef32b9c950ywanDOCS-yes += libs.doxy
521233d2500723e5594f3e7c70896ffeeef32b9c950ywanlibs.doxy: $(CODEC_DOC_SRCS)
522233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [CREATE] $@"
523233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@rm -f $@
524233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "INPUT += $^" >> $@
525233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "PREDEFINED = VPX_CODEC_DISABLE_COMPAT" >> $@
526233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "INCLUDE_PATH += ." >> $@;
527233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "ENABLED_SECTIONS += $(sort $(CODEC_DOC_SECTIONS))" >> $@
528233d2500723e5594f3e7c70896ffeeef32b9c950ywan
529233d2500723e5594f3e7c70896ffeeef32b9c950ywan## Generate rtcd.h for all objects
530233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(OBJS-yes:.o=.d): $(RTCD)
531233d2500723e5594f3e7c70896ffeeef32b9c950ywan
532233d2500723e5594f3e7c70896ffeeef32b9c950ywan## Update the global src list
533233d2500723e5594f3e7c70896ffeeef32b9c950ywanSRCS += $(CODEC_SRCS) $(LIBVPX_TEST_SRCS) $(GTEST_SRCS)
534