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
11233d2500723e5594f3e7c70896ffeeef32b9c950ywanLIBYUV_SRCS +=  third_party/libyuv/include/libyuv/basic_types.h  \
12233d2500723e5594f3e7c70896ffeeef32b9c950ywan                third_party/libyuv/include/libyuv/cpu_id.h  \
13233d2500723e5594f3e7c70896ffeeef32b9c950ywan                third_party/libyuv/include/libyuv/scale.h  \
14233d2500723e5594f3e7c70896ffeeef32b9c950ywan                third_party/libyuv/source/row.h \
15233d2500723e5594f3e7c70896ffeeef32b9c950ywan                third_party/libyuv/source/scale.c  \
16233d2500723e5594f3e7c70896ffeeef32b9c950ywan                third_party/libyuv/source/cpu_id.c
17233d2500723e5594f3e7c70896ffeeef32b9c950ywan
18233d2500723e5594f3e7c70896ffeeef32b9c950ywan# List of examples to build. UTILS are tools meant for distribution
19233d2500723e5594f3e7c70896ffeeef32b9c950ywan# while EXAMPLES demonstrate specific portions of the API.
20233d2500723e5594f3e7c70896ffeeef32b9c950ywanUTILS-$(CONFIG_DECODERS)    += vpxdec.c
21233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.SRCS                 += md5_utils.c md5_utils.h
22233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.SRCS                 += vpx_ports/mem_ops.h
23233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.SRCS                 += vpx_ports/mem_ops_aligned.h
24233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.SRCS                 += vpx_ports/vpx_timer.h
25233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.SRCS                 += vpx/vpx_integer.h
26233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.SRCS                 += args.c args.h
27233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.SRCS                 += ivfdec.c ivfdec.h
28233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.SRCS                 += tools_common.c tools_common.h
29233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.SRCS                 += y4menc.c y4menc.h
30233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.SRCS                 += $(LIBYUV_SRCS)
31233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_WEBM_IO),yes)
32233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxdec.SRCS                 += third_party/nestegg/halloc/halloc.h
33233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxdec.SRCS                 += third_party/nestegg/halloc/src/align.h
34233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxdec.SRCS                 += third_party/nestegg/halloc/src/halloc.c
35233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxdec.SRCS                 += third_party/nestegg/halloc/src/hlist.h
36233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxdec.SRCS                 += third_party/nestegg/halloc/src/macros.h
37233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxdec.SRCS                 += third_party/nestegg/include/nestegg/nestegg.h
38233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxdec.SRCS                 += third_party/nestegg/src/nestegg.c
39233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxdec.SRCS                 += webmdec.c webmdec.h
40233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
41233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.GUID                  = BA5FE66F-38DD-E034-F542-B1578C5FB950
42233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxdec.DESCRIPTION           = Full featured decoder
43233d2500723e5594f3e7c70896ffeeef32b9c950ywanUTILS-$(CONFIG_ENCODERS)    += vpxenc.c
44233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += args.c args.h y4minput.c y4minput.h vpxenc.h
45233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += ivfdec.c ivfdec.h
46233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += ivfenc.c ivfenc.h
47233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += rate_hist.c rate_hist.h
48233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += tools_common.c tools_common.h
49233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += warnings.c warnings.h
50233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += vpx_ports/mem_ops.h
51233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += vpx_ports/mem_ops_aligned.h
52233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += vpx_ports/vpx_timer.h
53233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += vpxstats.c vpxstats.h
54233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.SRCS                 += $(LIBYUV_SRCS)
55233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_WEBM_IO),yes)
56233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxenc.SRCS                 += third_party/libmkv/EbmlIDs.h
57233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxenc.SRCS                 += third_party/libmkv/EbmlWriter.c
58233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxenc.SRCS                 += third_party/libmkv/EbmlWriter.h
59233d2500723e5594f3e7c70896ffeeef32b9c950ywan  vpxenc.SRCS                 += webmenc.c webmenc.h
60233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
61233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.GUID                  = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
62233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpxenc.DESCRIPTION           = Full featured encoder
63233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_VP9_ENCODER)    += vp9_spatial_scalable_encoder.c
64233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp9_spatial_scalable_encoder.SRCS += args.c args.h
65233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp9_spatial_scalable_encoder.SRCS += ivfenc.c ivfenc.h
66233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp9_spatial_scalable_encoder.SRCS += tools_common.c tools_common.h
67233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp9_spatial_scalable_encoder.SRCS += video_common.h
68233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp9_spatial_scalable_encoder.SRCS += video_writer.h video_writer.c
69233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp9_spatial_scalable_encoder.SRCS += vpxstats.c vpxstats.h
70233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp9_spatial_scalable_encoder.GUID   = 4A38598D-627D-4505-9C7B-D4020C84100D
71233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp9_spatial_scalable_encoder.DESCRIPTION = Spatial Scalable Encoder
72233d2500723e5594f3e7c70896ffeeef32b9c950ywan
73233d2500723e5594f3e7c70896ffeeef32b9c950ywanifneq ($(CONFIG_SHARED),yes)
74233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_VP9_ENCODER)    += resize_util.c
75233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
76233d2500723e5594f3e7c70896ffeeef32b9c950ywan
77233d2500723e5594f3e7c70896ffeeef32b9c950ywan# XMA example disabled for now, not used in VP8
78233d2500723e5594f3e7c70896ffeeef32b9c950ywan#UTILS-$(CONFIG_DECODERS)    += example_xma.c
79233d2500723e5594f3e7c70896ffeeef32b9c950ywan#example_xma.GUID             = A955FC4A-73F1-44F7-135E-30D84D32F022
80233d2500723e5594f3e7c70896ffeeef32b9c950ywan#example_xma.DESCRIPTION      = External Memory Allocation mode usage
81233d2500723e5594f3e7c70896ffeeef32b9c950ywan
82233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_ENCODERS)         += vpx_temporal_scalable_patterns.c
83233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx_temporal_scalable_patterns.SRCS += ivfenc.c ivfenc.h
84233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx_temporal_scalable_patterns.SRCS += tools_common.c tools_common.h
85233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx_temporal_scalable_patterns.SRCS += video_common.h
86233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx_temporal_scalable_patterns.SRCS += video_writer.h video_writer.c
87233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx_temporal_scalable_patterns.GUID  = B18C08F2-A439-4502-A78E-849BE3D60947
88233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx_temporal_scalable_patterns.DESCRIPTION = Temporal Scalability Encoder
89233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_VP8_DECODER)     += simple_decoder.c
90233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_decoder.GUID                 = D3BBF1E9-2427-450D-BBFF-B2843C1D44CC
91233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_decoder.SRCS                += ivfdec.h ivfdec.c
92233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_decoder.SRCS                += tools_common.h tools_common.c
93233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_decoder.SRCS                += video_common.h
94233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_decoder.SRCS                += video_reader.h video_reader.c
95233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_decoder.SRCS                += vpx_ports/mem_ops.h
96233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_decoder.SRCS                += vpx_ports/mem_ops_aligned.h
97233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_decoder.DESCRIPTION          = Simplified decoder loop
98233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_VP8_DECODER)     += postproc.c
99233d2500723e5594f3e7c70896ffeeef32b9c950ywanpostproc.SRCS                      += ivfdec.h ivfdec.c
100233d2500723e5594f3e7c70896ffeeef32b9c950ywanpostproc.SRCS                      += tools_common.h tools_common.c
101233d2500723e5594f3e7c70896ffeeef32b9c950ywanpostproc.SRCS                      += video_common.h
102233d2500723e5594f3e7c70896ffeeef32b9c950ywanpostproc.SRCS                      += video_reader.h video_reader.c
103233d2500723e5594f3e7c70896ffeeef32b9c950ywanpostproc.SRCS                      += vpx_ports/mem_ops.h
104233d2500723e5594f3e7c70896ffeeef32b9c950ywanpostproc.SRCS                      += vpx_ports/mem_ops_aligned.h
105233d2500723e5594f3e7c70896ffeeef32b9c950ywanpostproc.GUID                       = 65E33355-F35E-4088-884D-3FD4905881D7
106233d2500723e5594f3e7c70896ffeeef32b9c950ywanpostproc.DESCRIPTION                = Decoder postprocessor control
107233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_VP8_DECODER)     += decode_to_md5.c
108233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_to_md5.SRCS                 += md5_utils.h md5_utils.c
109233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_to_md5.SRCS                 += ivfdec.h ivfdec.c
110233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_to_md5.SRCS                 += tools_common.h tools_common.c
111233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_to_md5.SRCS                 += video_common.h
112233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_to_md5.SRCS                 += video_reader.h video_reader.c
113233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_to_md5.SRCS                 += vpx_ports/mem_ops.h
114233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_to_md5.SRCS                 += vpx_ports/mem_ops_aligned.h
115233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_to_md5.GUID                  = 59120B9B-2735-4BFE-B022-146CA340FE42
116233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_to_md5.DESCRIPTION           = Frame by frame MD5 checksum
117233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_VP8_ENCODER)  += simple_encoder.c
118233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_encoder.SRCS             += ivfenc.h ivfenc.c
119233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_encoder.SRCS             += tools_common.h tools_common.c
120233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_encoder.SRCS             += video_common.h
121233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_encoder.SRCS             += video_writer.h video_writer.c
122233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_encoder.GUID              = 4607D299-8A71-4D2C-9B1D-071899B6FBFD
123233d2500723e5594f3e7c70896ffeeef32b9c950ywansimple_encoder.DESCRIPTION       = Simplified encoder loop
124233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_VP8_ENCODER)  += twopass_encoder.c
125233d2500723e5594f3e7c70896ffeeef32b9c950ywantwopass_encoder.SRCS            += ivfenc.h ivfenc.c
126233d2500723e5594f3e7c70896ffeeef32b9c950ywantwopass_encoder.SRCS            += tools_common.h tools_common.c
127233d2500723e5594f3e7c70896ffeeef32b9c950ywantwopass_encoder.SRCS            += video_common.h
128233d2500723e5594f3e7c70896ffeeef32b9c950ywantwopass_encoder.SRCS            += video_writer.h video_writer.c
129233d2500723e5594f3e7c70896ffeeef32b9c950ywantwopass_encoder.GUID             = 73494FA6-4AF9-4763-8FBB-265C92402FD8
130233d2500723e5594f3e7c70896ffeeef32b9c950ywantwopass_encoder.DESCRIPTION      = Two-pass encoder loop
131233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_DECODERS),yes)
132233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_VP8_ENCODER)  += decode_with_drops.c
133233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_with_drops.SRCS          += ivfdec.h ivfdec.c
134233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_with_drops.SRCS          += tools_common.h tools_common.c
135233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_with_drops.SRCS          += video_common.h
136233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_with_drops.SRCS          += video_reader.h video_reader.c
137233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_with_drops.SRCS          += vpx_ports/mem_ops.h
138233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_with_drops.SRCS          += vpx_ports/mem_ops_aligned.h
139233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
140233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_with_drops.GUID           = CE5C53C4-8DDA-438A-86ED-0DDD3CDB8D26
141233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_with_drops.DESCRIPTION    = Drops frames while decoding
142233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_VP8_DECODER),yes)
143233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_ERROR_CONCEALMENT)    += decode_with_partial_drops.c
144233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
145233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_with_partial_drops.GUID           = 61C2D026-5754-46AC-916F-1343ECC5537E
146233d2500723e5594f3e7c70896ffeeef32b9c950ywandecode_with_partial_drops.DESCRIPTION    = Drops parts of frames while decoding
147233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_ENCODERS)        += set_maps.c
148233d2500723e5594f3e7c70896ffeeef32b9c950ywanset_maps.SRCS                      += ivfenc.h ivfenc.c
149233d2500723e5594f3e7c70896ffeeef32b9c950ywanset_maps.SRCS                      += tools_common.h tools_common.c
150233d2500723e5594f3e7c70896ffeeef32b9c950ywanset_maps.SRCS                      += video_common.h
151233d2500723e5594f3e7c70896ffeeef32b9c950ywanset_maps.SRCS                      += video_writer.h video_writer.c
152233d2500723e5594f3e7c70896ffeeef32b9c950ywanset_maps.GUID                       = ECB2D24D-98B8-4015-A465-A4AF3DCC145F
153233d2500723e5594f3e7c70896ffeeef32b9c950ywanset_maps.DESCRIPTION                = Set active and ROI maps
154233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_VP8_ENCODER)     += vp8cx_set_ref.c
155233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8cx_set_ref.SRCS                 += ivfenc.h ivfenc.c
156233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8cx_set_ref.SRCS                 += tools_common.h tools_common.c
157233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8cx_set_ref.SRCS                 += video_common.h
158233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8cx_set_ref.SRCS                 += video_writer.h video_writer.c
159233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8cx_set_ref.GUID                  = C5E31F7F-96F6-48BD-BD3E-10EBF6E8057A
160233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8cx_set_ref.DESCRIPTION           = VP8 set encoder reference frame
161233d2500723e5594f3e7c70896ffeeef32b9c950ywan
162233d2500723e5594f3e7c70896ffeeef32b9c950ywan
163233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_MULTI_RES_ENCODING),yes)
164233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES-$(CONFIG_VP8_DECODER)          += vp8_multi_resolution_encoder.c
165233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8_multi_resolution_encoder.SRCS       += $(LIBYUV_SRCS)
166233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8_multi_resolution_encoder.GUID        = 04f8738e-63c8-423b-90fa-7c2703a374de
167233d2500723e5594f3e7c70896ffeeef32b9c950ywanvp8_multi_resolution_encoder.DESCRIPTION = VP8 Multiple-resolution Encoding
168233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
169233d2500723e5594f3e7c70896ffeeef32b9c950ywan
170233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Handle extra library flags depending on codec configuration
171233d2500723e5594f3e7c70896ffeeef32b9c950ywan
172233d2500723e5594f3e7c70896ffeeef32b9c950ywan# We should not link to math library (libm) on RVCT
173233d2500723e5594f3e7c70896ffeeef32b9c950ywan# when building for bare-metal targets
174233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_OS_SUPPORT), yes)
175233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
176233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_EXTRA_LIBS-$(CONFIG_VP9)         += m
177233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
178233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ifeq ($(CONFIG_GCC), yes)
179233d2500723e5594f3e7c70896ffeeef32b9c950ywan    CODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
180233d2500723e5594f3e7c70896ffeeef32b9c950ywan    CODEC_EXTRA_LIBS-$(CONFIG_VP9)         += m
181233d2500723e5594f3e7c70896ffeeef32b9c950ywan    endif
182233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
183233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
184233d2500723e5594f3e7c70896ffeeef32b9c950ywan# End of specified files. The rest of the build rules should happen
185233d2500723e5594f3e7c70896ffeeef32b9c950ywan# automagically from here.
186233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
187233d2500723e5594f3e7c70896ffeeef32b9c950ywan
188233d2500723e5594f3e7c70896ffeeef32b9c950ywan
189233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Examples need different flags based on whether we're building
190233d2500723e5594f3e7c70896ffeeef32b9c950ywan# from an installed tree or a version controlled tree. Determine
191233d2500723e5594f3e7c70896ffeeef32b9c950ywan# the proper paths.
192233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(HAVE_ALT_TREE_LAYOUT),yes)
193233d2500723e5594f3e7c70896ffeeef32b9c950ywan    LIB_PATH := $(SRC_PATH_BARE)/../lib
194233d2500723e5594f3e7c70896ffeeef32b9c950ywan    INC_PATH := $(SRC_PATH_BARE)/../include
195233d2500723e5594f3e7c70896ffeeef32b9c950ywanelse
196233d2500723e5594f3e7c70896ffeeef32b9c950ywan    LIB_PATH-yes                     += $(if $(BUILD_PFX),$(BUILD_PFX),.)
197233d2500723e5594f3e7c70896ffeeef32b9c950ywan    INC_PATH-$(CONFIG_VP8_DECODER)   += $(SRC_PATH_BARE)/vp8
198233d2500723e5594f3e7c70896ffeeef32b9c950ywan    INC_PATH-$(CONFIG_VP8_ENCODER)   += $(SRC_PATH_BARE)/vp8
199233d2500723e5594f3e7c70896ffeeef32b9c950ywan    INC_PATH-$(CONFIG_VP9_DECODER)   += $(SRC_PATH_BARE)/vp9
200233d2500723e5594f3e7c70896ffeeef32b9c950ywan    INC_PATH-$(CONFIG_VP9_ENCODER)   += $(SRC_PATH_BARE)/vp9
201233d2500723e5594f3e7c70896ffeeef32b9c950ywan    LIB_PATH := $(call enabled,LIB_PATH)
202233d2500723e5594f3e7c70896ffeeef32b9c950ywan    INC_PATH := $(call enabled,INC_PATH)
203233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
204233d2500723e5594f3e7c70896ffeeef32b9c950ywanINTERNAL_CFLAGS = $(addprefix -I,$(INC_PATH))
205233d2500723e5594f3e7c70896ffeeef32b9c950ywanINTERNAL_LDFLAGS += $(addprefix -L,$(LIB_PATH))
206233d2500723e5594f3e7c70896ffeeef32b9c950ywan
207233d2500723e5594f3e7c70896ffeeef32b9c950ywan
208233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Expand list of selected examples to build (as specified above)
209233d2500723e5594f3e7c70896ffeeef32b9c950ywanUTILS           = $(call enabled,UTILS)
210233d2500723e5594f3e7c70896ffeeef32b9c950ywanEXAMPLES        = $(addprefix examples/,$(call enabled,EXAMPLES))
211233d2500723e5594f3e7c70896ffeeef32b9c950ywanALL_EXAMPLES    = $(UTILS) $(EXAMPLES)
212233d2500723e5594f3e7c70896ffeeef32b9c950ywanUTIL_SRCS       = $(foreach ex,$(UTILS),$($(ex:.c=).SRCS))
213233d2500723e5594f3e7c70896ffeeef32b9c950ywanALL_SRCS        = $(foreach ex,$(ALL_EXAMPLES),$($(notdir $(ex:.c=)).SRCS))
214233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_EXTRA_LIBS=$(sort $(call enabled,CODEC_EXTRA_LIBS))
215233d2500723e5594f3e7c70896ffeeef32b9c950ywan
216233d2500723e5594f3e7c70896ffeeef32b9c950ywan
217233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Expand all example sources into a variable containing all sources
218233d2500723e5594f3e7c70896ffeeef32b9c950ywan# for that example (not just them main one specified in UTILS/EXAMPLES)
219233d2500723e5594f3e7c70896ffeeef32b9c950ywan# and add this file to the list (for MSVS workspace generation)
220233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(foreach ex,$(ALL_EXAMPLES),$(eval $(notdir $(ex:.c=)).SRCS += $(ex) examples.mk))
221233d2500723e5594f3e7c70896ffeeef32b9c950ywan
222233d2500723e5594f3e7c70896ffeeef32b9c950ywan
223233d2500723e5594f3e7c70896ffeeef32b9c950ywan# If this is a universal (fat) binary, then all the subarchitectures have
224233d2500723e5594f3e7c70896ffeeef32b9c950ywan# already been built and our job is to stitch them together. The
225233d2500723e5594f3e7c70896ffeeef32b9c950ywan# BUILD_OBJS variable indicates whether we should be building
226233d2500723e5594f3e7c70896ffeeef32b9c950ywan# (compiling, linking) the library. The LIPO_OBJS variable indicates
227233d2500723e5594f3e7c70896ffeeef32b9c950ywan# that we're stitching.
228233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_OBJS,BUILD_OBJS):=yes)
229233d2500723e5594f3e7c70896ffeeef32b9c950ywan
230233d2500723e5594f3e7c70896ffeeef32b9c950ywan
231233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Create build/install dependencies for all examples. The common case
232233d2500723e5594f3e7c70896ffeeef32b9c950ywan# is handled here. The MSVS case is handled below.
233233d2500723e5594f3e7c70896ffeeef32b9c950ywanNOT_MSVS = $(if $(CONFIG_MSVS),,yes)
234233d2500723e5594f3e7c70896ffeeef32b9c950ywanDIST-BINS-$(NOT_MSVS)      += $(addprefix bin/,$(ALL_EXAMPLES:.c=$(EXE_SFX)))
235233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-BINS-$(NOT_MSVS)   += $(addprefix bin/,$(UTILS:.c=$(EXE_SFX)))
236233d2500723e5594f3e7c70896ffeeef32b9c950ywanDIST-SRCS-yes              += $(ALL_SRCS)
237233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-SRCS-yes           += $(UTIL_SRCS)
238233d2500723e5594f3e7c70896ffeeef32b9c950ywanOBJS-$(NOT_MSVS)           += $(if $(BUILD_OBJS),$(call objs,$(ALL_SRCS)))
239233d2500723e5594f3e7c70896ffeeef32b9c950ywanBINS-$(NOT_MSVS)           += $(addprefix $(BUILD_PFX),$(ALL_EXAMPLES:.c=$(EXE_SFX)))
240233d2500723e5594f3e7c70896ffeeef32b9c950ywan
241233d2500723e5594f3e7c70896ffeeef32b9c950ywan
242233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Instantiate linker template for all examples.
243233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_LIB=$(if $(CONFIG_DEBUG_LIBS),vpx_g,vpx)
244233d2500723e5594f3e7c70896ffeeef32b9c950ywanSHARED_LIB_SUF=$(if $(filter darwin%,$(TGT_OS)),.dylib,.so)
245233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_LIB_SUF=$(if $(CONFIG_SHARED),$(SHARED_LIB_SUF),.a)
246233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(foreach bin,$(BINS-yes),\
247233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(if $(BUILD_OBJS),$(eval $(bin):\
248233d2500723e5594f3e7c70896ffeeef32b9c950ywan        $(LIB_PATH)/lib$(CODEC_LIB)$(CODEC_LIB_SUF)))\
249233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(if $(BUILD_OBJS),$(eval $(call linker_template,$(bin),\
250233d2500723e5594f3e7c70896ffeeef32b9c950ywan        $(call objs,$($(notdir $(bin:$(EXE_SFX)=)).SRCS)) \
251233d2500723e5594f3e7c70896ffeeef32b9c950ywan        -l$(CODEC_LIB) $(addprefix -l,$(CODEC_EXTRA_LIBS))\
252233d2500723e5594f3e7c70896ffeeef32b9c950ywan        )))\
253233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(if $(LIPO_OBJS),$(eval $(call lipo_bin_template,$(bin))))\
254233d2500723e5594f3e7c70896ffeeef32b9c950ywan    )
255233d2500723e5594f3e7c70896ffeeef32b9c950ywan
256233d2500723e5594f3e7c70896ffeeef32b9c950ywan
257233d2500723e5594f3e7c70896ffeeef32b9c950ywan# The following pairs define a mapping of locations in the distribution
258233d2500723e5594f3e7c70896ffeeef32b9c950ywan# tree to locations in the source/build trees.
259233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += src/%.c   %.c
260233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += src/%     $(SRC_PATH_BARE)/%
261233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += bin/%     %
262233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += %         %
263233d2500723e5594f3e7c70896ffeeef32b9c950ywan
264233d2500723e5594f3e7c70896ffeeef32b9c950ywan
265233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Set up additional MSVS environment
266233d2500723e5594f3e7c70896ffeeef32b9c950ywanifeq ($(CONFIG_MSVS),yes)
267233d2500723e5594f3e7c70896ffeeef32b9c950ywanCODEC_LIB=$(if $(CONFIG_SHARED),vpx,$(if $(CONFIG_STATIC_MSVCRT),vpxmt,vpxmd))
268233d2500723e5594f3e7c70896ffeeef32b9c950ywan# This variable uses deferred expansion intentionally, since the results of
269233d2500723e5594f3e7c70896ffeeef32b9c950ywan# $(wildcard) may change during the course of the Make.
270233d2500723e5594f3e7c70896ffeeef32b9c950ywanVS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
271233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),bin/$(p)/%  $(p)/Release/%)
272233d2500723e5594f3e7c70896ffeeef32b9c950ywanendif
273233d2500723e5594f3e7c70896ffeeef32b9c950ywan
274233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Build Visual Studio Projects. We use a template here to instantiate
275233d2500723e5594f3e7c70896ffeeef32b9c950ywan# explicit rules rather than using an implicit rule because we want to
276233d2500723e5594f3e7c70896ffeeef32b9c950ywan# leverage make's VPATH searching rather than specifying the paths on
277233d2500723e5594f3e7c70896ffeeef32b9c950ywan# each file in ALL_EXAMPLES. This has the unfortunate side effect that
278233d2500723e5594f3e7c70896ffeeef32b9c950ywan# touching the source files trigger a rebuild of the project files
279233d2500723e5594f3e7c70896ffeeef32b9c950ywan# even though there is no real dependency there (the dependency is on
280233d2500723e5594f3e7c70896ffeeef32b9c950ywan# the makefiles). We may want to revisit this.
281233d2500723e5594f3e7c70896ffeeef32b9c950ywandefine vcproj_template
282233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(1): $($(1:.$(VCPROJ_SFX)=).SRCS) vpx.$(VCPROJ_SFX)
283233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [vcproj] $$@"
284233d2500723e5594f3e7c70896ffeeef32b9c950ywan	$$(GEN_VCPROJ)\
285233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --exe\
286233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --target=$$(TOOLCHAIN)\
287233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --name=$$(@:.$(VCPROJ_SFX)=)\
288233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --ver=$$(CONFIG_VS_VERSION)\
289233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --proj-guid=$$($$(@:.$(VCPROJ_SFX)=).GUID)\
290233d2500723e5594f3e7c70896ffeeef32b9c950ywan            $$(if $$(CONFIG_STATIC_MSVCRT),--static-crt) \
291233d2500723e5594f3e7c70896ffeeef32b9c950ywan            --out=$$@ $$(INTERNAL_CFLAGS) $$(CFLAGS) \
292233d2500723e5594f3e7c70896ffeeef32b9c950ywan            $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -l$$(CODEC_LIB) $$^
293233d2500723e5594f3e7c70896ffeeef32b9c950ywanendef
294233d2500723e5594f3e7c70896ffeeef32b9c950ywanALL_EXAMPLES_BASENAME := $(notdir $(ALL_EXAMPLES))
295233d2500723e5594f3e7c70896ffeeef32b9c950ywanPROJECTS-$(CONFIG_MSVS) += $(ALL_EXAMPLES_BASENAME:.c=.$(VCPROJ_SFX))
296233d2500723e5594f3e7c70896ffeeef32b9c950ywanINSTALL-BINS-$(CONFIG_MSVS) += $(foreach p,$(VS_PLATFORMS),\
297233d2500723e5594f3e7c70896ffeeef32b9c950ywan                               $(addprefix bin/$(p)/,$(ALL_EXAMPLES_BASENAME:.c=.exe)))
298233d2500723e5594f3e7c70896ffeeef32b9c950ywan$(foreach proj,$(call enabled,PROJECTS),\
299233d2500723e5594f3e7c70896ffeeef32b9c950ywan    $(eval $(call vcproj_template,$(proj))))
300233d2500723e5594f3e7c70896ffeeef32b9c950ywan
301233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
302233d2500723e5594f3e7c70896ffeeef32b9c950ywan# Documentation Rules
303233d2500723e5594f3e7c70896ffeeef32b9c950ywan#
304233d2500723e5594f3e7c70896ffeeef32b9c950ywan%.dox: %.c
305233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [DOXY] $@"
306233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "/*!\page example_$(@F:.dox=) $(@F:.dox=)" > $@
307233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "   \includelineno $(<F)" >> $@
308233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "*/" >> $@
309233d2500723e5594f3e7c70896ffeeef32b9c950ywan
310233d2500723e5594f3e7c70896ffeeef32b9c950ywansamples.dox: examples.mk
311233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    [DOXY] $@"
312233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "/*!\page samples Sample Code" > $@
313233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    This SDK includes a number of sample applications."\
314233d2500723e5594f3e7c70896ffeeef32b9c950ywan	      "Each sample documents a feature of the SDK in both prose"\
315233d2500723e5594f3e7c70896ffeeef32b9c950ywan	      "and the associated C code."\
316233d2500723e5594f3e7c70896ffeeef32b9c950ywan	      "The following samples are included: ">>$@
317233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@$(foreach ex,$(sort $(notdir $(EXAMPLES:.c=))),\
318233d2500723e5594f3e7c70896ffeeef32b9c950ywan	   echo "     - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
319233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo >> $@
320233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "    In addition, the SDK contains a number of utilities."\
321233d2500723e5594f3e7c70896ffeeef32b9c950ywan              "Since these utilities are built upon the concepts described"\
322233d2500723e5594f3e7c70896ffeeef32b9c950ywan              "in the sample code listed above, they are not documented in"\
323233d2500723e5594f3e7c70896ffeeef32b9c950ywan              "pieces like the samples are. Their source is included here"\
324233d2500723e5594f3e7c70896ffeeef32b9c950ywan              "for reference. The following utilities are included:" >> $@
325233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@$(foreach ex,$(sort $(UTILS:.c=)),\
326233d2500723e5594f3e7c70896ffeeef32b9c950ywan	   echo "     - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
327233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "*/" >> $@
328233d2500723e5594f3e7c70896ffeeef32b9c950ywan
329233d2500723e5594f3e7c70896ffeeef32b9c950ywanCLEAN-OBJS += examples.doxy samples.dox $(ALL_EXAMPLES:.c=.dox)
330233d2500723e5594f3e7c70896ffeeef32b9c950ywanDOCS-yes += examples.doxy samples.dox
331233d2500723e5594f3e7c70896ffeeef32b9c950ywanexamples.doxy: samples.dox $(ALL_EXAMPLES:.c=.dox)
332233d2500723e5594f3e7c70896ffeeef32b9c950ywan	@echo "INPUT += $^" > $@
333