]> granicus.if.org Git - libvpx/blob - examples.mk
vp9_mvref_common.c: fix compile warning
[libvpx] / examples.mk
1 ##
2 ##  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 ##
4 ##  Use of this source code is governed by a BSD-style license
5 ##  that can be found in the LICENSE file in the root of the source
6 ##  tree. An additional intellectual property rights grant can be found
7 ##  in the file PATENTS.  All contributing project authors may
8 ##  be found in the AUTHORS file in the root of the source tree.
9 ##
10
11 LIBYUV_SRCS +=  third_party/libyuv/include/libyuv/basic_types.h  \
12                 third_party/libyuv/include/libyuv/convert.h \
13                 third_party/libyuv/include/libyuv/convert_argb.h \
14                 third_party/libyuv/include/libyuv/convert_from.h \
15                 third_party/libyuv/include/libyuv/cpu_id.h  \
16                 third_party/libyuv/include/libyuv/planar_functions.h  \
17                 third_party/libyuv/include/libyuv/rotate.h  \
18                 third_party/libyuv/include/libyuv/row.h  \
19                 third_party/libyuv/include/libyuv/scale.h  \
20                 third_party/libyuv/include/libyuv/scale_row.h  \
21                 third_party/libyuv/source/cpu_id.cc \
22                 third_party/libyuv/source/planar_functions.cc \
23                 third_party/libyuv/source/row_any.cc \
24                 third_party/libyuv/source/row_common.cc \
25                 third_party/libyuv/source/row_mips.cc \
26                 third_party/libyuv/source/row_neon.cc \
27                 third_party/libyuv/source/row_neon64.cc \
28                 third_party/libyuv/source/row_posix.cc \
29                 third_party/libyuv/source/row_win.cc \
30                 third_party/libyuv/source/scale.cc \
31                 third_party/libyuv/source/scale_common.cc \
32                 third_party/libyuv/source/scale_mips.cc \
33                 third_party/libyuv/source/scale_neon.cc \
34                 third_party/libyuv/source/scale_neon64.cc \
35                 third_party/libyuv/source/scale_posix.cc \
36                 third_party/libyuv/source/scale_win.cc \
37
38 LIBWEBM_MUXER_SRCS += third_party/libwebm/mkvmuxer.cpp \
39                       third_party/libwebm/mkvmuxerutil.cpp \
40                       third_party/libwebm/mkvwriter.cpp \
41                       third_party/libwebm/mkvmuxer.hpp \
42                       third_party/libwebm/mkvmuxertypes.hpp \
43                       third_party/libwebm/mkvmuxerutil.hpp \
44                       third_party/libwebm/mkvparser.hpp \
45                       third_party/libwebm/mkvwriter.hpp \
46                       third_party/libwebm/webmids.hpp
47
48 LIBWEBM_PARSER_SRCS = third_party/libwebm/mkvparser.cpp \
49                       third_party/libwebm/mkvreader.cpp \
50                       third_party/libwebm/mkvparser.hpp \
51                       third_party/libwebm/mkvreader.hpp
52
53 # List of examples to build. UTILS are tools meant for distribution
54 # while EXAMPLES demonstrate specific portions of the API.
55 UTILS-$(CONFIG_DECODERS)    += vpxdec.c
56 vpxdec.SRCS                 += md5_utils.c md5_utils.h
57 vpxdec.SRCS                 += vpx_ports/mem_ops.h
58 vpxdec.SRCS                 += vpx_ports/mem_ops_aligned.h
59 vpxdec.SRCS                 += vpx_ports/vpx_timer.h
60 vpxdec.SRCS                 += vpx/vpx_integer.h
61 vpxdec.SRCS                 += args.c args.h
62 vpxdec.SRCS                 += ivfdec.c ivfdec.h
63 vpxdec.SRCS                 += tools_common.c tools_common.h
64 vpxdec.SRCS                 += y4menc.c y4menc.h
65 ifeq ($(CONFIG_LIBYUV),yes)
66   vpxdec.SRCS                 += $(LIBYUV_SRCS)
67 endif
68 ifeq ($(CONFIG_WEBM_IO),yes)
69   vpxdec.SRCS                 += $(LIBWEBM_PARSER_SRCS)
70   vpxdec.SRCS                 += webmdec.cc webmdec.h
71 endif
72 vpxdec.GUID                  = BA5FE66F-38DD-E034-F542-B1578C5FB950
73 vpxdec.DESCRIPTION           = Full featured decoder
74 UTILS-$(CONFIG_ENCODERS)    += vpxenc.c
75 vpxenc.SRCS                 += args.c args.h y4minput.c y4minput.h vpxenc.h
76 vpxenc.SRCS                 += ivfdec.c ivfdec.h
77 vpxenc.SRCS                 += ivfenc.c ivfenc.h
78 vpxenc.SRCS                 += rate_hist.c rate_hist.h
79 vpxenc.SRCS                 += tools_common.c tools_common.h
80 vpxenc.SRCS                 += warnings.c warnings.h
81 vpxenc.SRCS                 += vpx_ports/mem_ops.h
82 vpxenc.SRCS                 += vpx_ports/mem_ops_aligned.h
83 vpxenc.SRCS                 += vpx_ports/vpx_timer.h
84 vpxenc.SRCS                 += vpxstats.c vpxstats.h
85 ifeq ($(CONFIG_LIBYUV),yes)
86   vpxenc.SRCS                 += $(LIBYUV_SRCS)
87 endif
88 ifeq ($(CONFIG_WEBM_IO),yes)
89   vpxenc.SRCS                 += $(LIBWEBM_MUXER_SRCS)
90   vpxenc.SRCS                 += webmenc.cc webmenc.h
91 endif
92 vpxenc.GUID                  = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
93 vpxenc.DESCRIPTION           = Full featured encoder
94 ifeq ($(CONFIG_SPATIAL_SVC),yes)
95   EXAMPLES-$(CONFIG_VP9_ENCODER)      += vp9_spatial_svc_encoder.c
96   vp9_spatial_svc_encoder.SRCS        += args.c args.h
97   vp9_spatial_svc_encoder.SRCS        += ivfenc.c ivfenc.h
98   vp9_spatial_svc_encoder.SRCS        += tools_common.c tools_common.h
99   vp9_spatial_svc_encoder.SRCS        += video_common.h
100   vp9_spatial_svc_encoder.SRCS        += video_writer.h video_writer.c
101   vp9_spatial_svc_encoder.SRCS        += vpxstats.c vpxstats.h
102   vp9_spatial_svc_encoder.GUID        = 4A38598D-627D-4505-9C7B-D4020C84100D
103   vp9_spatial_svc_encoder.DESCRIPTION = VP9 Spatial SVC Encoder
104 endif
105
106 ifneq ($(CONFIG_SHARED),yes)
107 EXAMPLES-$(CONFIG_VP9_ENCODER)    += resize_util.c
108 endif
109
110 EXAMPLES-$(CONFIG_ENCODERS)          += vpx_temporal_svc_encoder.c
111 vpx_temporal_svc_encoder.SRCS        += ivfenc.c ivfenc.h
112 vpx_temporal_svc_encoder.SRCS        += tools_common.c tools_common.h
113 vpx_temporal_svc_encoder.SRCS        += video_common.h
114 vpx_temporal_svc_encoder.SRCS        += video_writer.h video_writer.c
115 vpx_temporal_svc_encoder.GUID        = B18C08F2-A439-4502-A78E-849BE3D60947
116 vpx_temporal_svc_encoder.DESCRIPTION = Temporal SVC Encoder
117 EXAMPLES-$(CONFIG_DECODERS)        += simple_decoder.c
118 simple_decoder.GUID                 = D3BBF1E9-2427-450D-BBFF-B2843C1D44CC
119 simple_decoder.SRCS                += ivfdec.h ivfdec.c
120 simple_decoder.SRCS                += tools_common.h tools_common.c
121 simple_decoder.SRCS                += video_common.h
122 simple_decoder.SRCS                += video_reader.h video_reader.c
123 simple_decoder.SRCS                += vpx_ports/mem_ops.h
124 simple_decoder.SRCS                += vpx_ports/mem_ops_aligned.h
125 simple_decoder.DESCRIPTION          = Simplified decoder loop
126 EXAMPLES-$(CONFIG_DECODERS)        += postproc.c
127 postproc.SRCS                      += ivfdec.h ivfdec.c
128 postproc.SRCS                      += tools_common.h tools_common.c
129 postproc.SRCS                      += video_common.h
130 postproc.SRCS                      += video_reader.h video_reader.c
131 postproc.SRCS                      += vpx_ports/mem_ops.h
132 postproc.SRCS                      += vpx_ports/mem_ops_aligned.h
133 postproc.GUID                       = 65E33355-F35E-4088-884D-3FD4905881D7
134 postproc.DESCRIPTION                = Decoder postprocessor control
135 EXAMPLES-$(CONFIG_DECODERS)        += decode_to_md5.c
136 decode_to_md5.SRCS                 += md5_utils.h md5_utils.c
137 decode_to_md5.SRCS                 += ivfdec.h ivfdec.c
138 decode_to_md5.SRCS                 += tools_common.h tools_common.c
139 decode_to_md5.SRCS                 += video_common.h
140 decode_to_md5.SRCS                 += video_reader.h video_reader.c
141 decode_to_md5.SRCS                 += vpx_ports/mem_ops.h
142 decode_to_md5.SRCS                 += vpx_ports/mem_ops_aligned.h
143 decode_to_md5.GUID                  = 59120B9B-2735-4BFE-B022-146CA340FE42
144 decode_to_md5.DESCRIPTION           = Frame by frame MD5 checksum
145 EXAMPLES-$(CONFIG_ENCODERS)     += simple_encoder.c
146 simple_encoder.SRCS             += ivfenc.h ivfenc.c
147 simple_encoder.SRCS             += tools_common.h tools_common.c
148 simple_encoder.SRCS             += video_common.h
149 simple_encoder.SRCS             += video_writer.h video_writer.c
150 simple_encoder.GUID              = 4607D299-8A71-4D2C-9B1D-071899B6FBFD
151 simple_encoder.DESCRIPTION       = Simplified encoder loop
152 EXAMPLES-$(CONFIG_VP9_ENCODER)  += vp9_lossless_encoder.c
153 vp9_lossless_encoder.SRCS       += ivfenc.h ivfenc.c
154 vp9_lossless_encoder.SRCS       += tools_common.h tools_common.c
155 vp9_lossless_encoder.SRCS       += video_common.h
156 vp9_lossless_encoder.SRCS       += video_writer.h video_writer.c
157 vp9_lossless_encoder.GUID        = B63C7C88-5348-46DC-A5A6-CC151EF93366
158 vp9_lossless_encoder.DESCRIPTION = Simplified lossless VP9 encoder
159 EXAMPLES-$(CONFIG_ENCODERS)     += twopass_encoder.c
160 twopass_encoder.SRCS            += ivfenc.h ivfenc.c
161 twopass_encoder.SRCS            += tools_common.h tools_common.c
162 twopass_encoder.SRCS            += video_common.h
163 twopass_encoder.SRCS            += video_writer.h video_writer.c
164 twopass_encoder.GUID             = 73494FA6-4AF9-4763-8FBB-265C92402FD8
165 twopass_encoder.DESCRIPTION      = Two-pass encoder loop
166 EXAMPLES-$(CONFIG_DECODERS)     += decode_with_drops.c
167 decode_with_drops.SRCS          += ivfdec.h ivfdec.c
168 decode_with_drops.SRCS          += tools_common.h tools_common.c
169 decode_with_drops.SRCS          += video_common.h
170 decode_with_drops.SRCS          += video_reader.h video_reader.c
171 decode_with_drops.SRCS          += vpx_ports/mem_ops.h
172 decode_with_drops.SRCS          += vpx_ports/mem_ops_aligned.h
173 decode_with_drops.GUID           = CE5C53C4-8DDA-438A-86ED-0DDD3CDB8D26
174 decode_with_drops.DESCRIPTION    = Drops frames while decoding
175 EXAMPLES-$(CONFIG_ENCODERS)        += set_maps.c
176 set_maps.SRCS                      += ivfenc.h ivfenc.c
177 set_maps.SRCS                      += tools_common.h tools_common.c
178 set_maps.SRCS                      += video_common.h
179 set_maps.SRCS                      += video_writer.h video_writer.c
180 set_maps.GUID                       = ECB2D24D-98B8-4015-A465-A4AF3DCC145F
181 set_maps.DESCRIPTION                = Set active and ROI maps
182 EXAMPLES-$(CONFIG_VP8_ENCODER)     += vp8cx_set_ref.c
183 vp8cx_set_ref.SRCS                 += ivfenc.h ivfenc.c
184 vp8cx_set_ref.SRCS                 += tools_common.h tools_common.c
185 vp8cx_set_ref.SRCS                 += video_common.h
186 vp8cx_set_ref.SRCS                 += video_writer.h video_writer.c
187 vp8cx_set_ref.GUID                  = C5E31F7F-96F6-48BD-BD3E-10EBF6E8057A
188 vp8cx_set_ref.DESCRIPTION           = VP8 set encoder reference frame
189
190
191 ifeq ($(CONFIG_MULTI_RES_ENCODING),yes)
192 ifeq ($(CONFIG_LIBYUV),yes)
193 EXAMPLES-$(CONFIG_VP8_ENCODER)          += vp8_multi_resolution_encoder.c
194 vp8_multi_resolution_encoder.SRCS       += ivfenc.h ivfenc.c
195 vp8_multi_resolution_encoder.SRCS       += tools_common.h tools_common.c
196 vp8_multi_resolution_encoder.SRCS       += video_writer.h video_writer.c
197 vp8_multi_resolution_encoder.SRCS       += $(LIBYUV_SRCS)
198 vp8_multi_resolution_encoder.GUID        = 04f8738e-63c8-423b-90fa-7c2703a374de
199 vp8_multi_resolution_encoder.DESCRIPTION = VP8 Multiple-resolution Encoding
200 endif
201 endif
202
203 # Handle extra library flags depending on codec configuration
204
205 # We should not link to math library (libm) on RVCT
206 # when building for bare-metal targets
207 ifeq ($(CONFIG_OS_SUPPORT), yes)
208 CODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
209 CODEC_EXTRA_LIBS-$(CONFIG_VP9)         += m
210 else
211     ifeq ($(CONFIG_GCC), yes)
212     CODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
213     CODEC_EXTRA_LIBS-$(CONFIG_VP9)         += m
214     endif
215 endif
216 #
217 # End of specified files. The rest of the build rules should happen
218 # automagically from here.
219 #
220
221
222 # Examples need different flags based on whether we're building
223 # from an installed tree or a version controlled tree. Determine
224 # the proper paths.
225 ifeq ($(HAVE_ALT_TREE_LAYOUT),yes)
226     LIB_PATH-yes := $(SRC_PATH_BARE)/../lib
227     INC_PATH-yes := $(SRC_PATH_BARE)/../include
228 else
229     LIB_PATH-yes                     += $(if $(BUILD_PFX),$(BUILD_PFX),.)
230     INC_PATH-$(CONFIG_VP8_DECODER)   += $(SRC_PATH_BARE)/vp8
231     INC_PATH-$(CONFIG_VP8_ENCODER)   += $(SRC_PATH_BARE)/vp8
232     INC_PATH-$(CONFIG_VP9_DECODER)   += $(SRC_PATH_BARE)/vp9
233     INC_PATH-$(CONFIG_VP9_ENCODER)   += $(SRC_PATH_BARE)/vp9
234 endif
235 INC_PATH-$(CONFIG_LIBYUV) += $(SRC_PATH_BARE)/third_party/libyuv/include
236 LIB_PATH := $(call enabled,LIB_PATH)
237 INC_PATH := $(call enabled,INC_PATH)
238 INTERNAL_CFLAGS = $(addprefix -I,$(INC_PATH))
239 INTERNAL_LDFLAGS += $(addprefix -L,$(LIB_PATH))
240
241
242 # Expand list of selected examples to build (as specified above)
243 UTILS           = $(call enabled,UTILS)
244 EXAMPLES        = $(addprefix examples/,$(call enabled,EXAMPLES))
245 ALL_EXAMPLES    = $(UTILS) $(EXAMPLES)
246 UTIL_SRCS       = $(foreach ex,$(UTILS),$($(ex:.c=).SRCS))
247 ALL_SRCS        = $(foreach ex,$(ALL_EXAMPLES),$($(notdir $(ex:.c=)).SRCS))
248 CODEC_EXTRA_LIBS=$(sort $(call enabled,CODEC_EXTRA_LIBS))
249
250
251 # Expand all example sources into a variable containing all sources
252 # for that example (not just them main one specified in UTILS/EXAMPLES)
253 # and add this file to the list (for MSVS workspace generation)
254 $(foreach ex,$(ALL_EXAMPLES),$(eval $(notdir $(ex:.c=)).SRCS += $(ex) examples.mk))
255
256
257 # Create build/install dependencies for all examples. The common case
258 # is handled here. The MSVS case is handled below.
259 NOT_MSVS = $(if $(CONFIG_MSVS),,yes)
260 DIST-BINS-$(NOT_MSVS)      += $(addprefix bin/,$(ALL_EXAMPLES:.c=$(EXE_SFX)))
261 INSTALL-BINS-$(NOT_MSVS)   += $(addprefix bin/,$(UTILS:.c=$(EXE_SFX)))
262 DIST-SRCS-yes              += $(ALL_SRCS)
263 INSTALL-SRCS-yes           += $(UTIL_SRCS)
264 OBJS-$(NOT_MSVS)           += $(call objs,$(ALL_SRCS))
265 BINS-$(NOT_MSVS)           += $(addprefix $(BUILD_PFX),$(ALL_EXAMPLES:.c=$(EXE_SFX)))
266
267
268 # Instantiate linker template for all examples.
269 CODEC_LIB=$(if $(CONFIG_DEBUG_LIBS),vpx_g,vpx)
270 SHARED_LIB_SUF=$(if $(filter darwin%,$(TGT_OS)),.dylib,.so)
271 CODEC_LIB_SUF=$(if $(CONFIG_SHARED),$(SHARED_LIB_SUF),.a)
272 $(foreach bin,$(BINS-yes),\
273     $(eval $(bin):$(LIB_PATH)/lib$(CODEC_LIB)$(CODEC_LIB_SUF))\
274     $(eval $(call linker_template,$(bin),\
275         $(call objs,$($(notdir $(bin:$(EXE_SFX)=)).SRCS)) \
276         -l$(CODEC_LIB) $(addprefix -l,$(CODEC_EXTRA_LIBS))\
277         )))
278
279 # The following pairs define a mapping of locations in the distribution
280 # tree to locations in the source/build trees.
281 INSTALL_MAPS += src/%.c   %.c
282 INSTALL_MAPS += src/%     $(SRC_PATH_BARE)/%
283 INSTALL_MAPS += bin/%     %
284 INSTALL_MAPS += %         %
285
286
287 # Set up additional MSVS environment
288 ifeq ($(CONFIG_MSVS),yes)
289 CODEC_LIB=$(if $(CONFIG_SHARED),vpx,$(if $(CONFIG_STATIC_MSVCRT),vpxmt,vpxmd))
290 # This variable uses deferred expansion intentionally, since the results of
291 # $(wildcard) may change during the course of the Make.
292 VS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
293 INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),bin/$(p)/%  $(p)/Release/%)
294 endif
295
296 # Build Visual Studio Projects. We use a template here to instantiate
297 # explicit rules rather than using an implicit rule because we want to
298 # leverage make's VPATH searching rather than specifying the paths on
299 # each file in ALL_EXAMPLES. This has the unfortunate side effect that
300 # touching the source files trigger a rebuild of the project files
301 # even though there is no real dependency there (the dependency is on
302 # the makefiles). We may want to revisit this.
303 define vcproj_template
304 $(1): $($(1:.$(VCPROJ_SFX)=).SRCS) vpx.$(VCPROJ_SFX)
305         @echo "    [vcproj] $$@"
306         $$(GEN_VCPROJ)\
307             --exe\
308             --target=$$(TOOLCHAIN)\
309             --name=$$(@:.$(VCPROJ_SFX)=)\
310             --ver=$$(CONFIG_VS_VERSION)\
311             --proj-guid=$$($$(@:.$(VCPROJ_SFX)=).GUID)\
312             --src-path-bare="$(SRC_PATH_BARE)" \
313             $$(if $$(CONFIG_STATIC_MSVCRT),--static-crt) \
314             --out=$$@ $$(INTERNAL_CFLAGS) $$(CFLAGS) \
315             $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -l$$(CODEC_LIB) $$^
316 endef
317 ALL_EXAMPLES_BASENAME := $(notdir $(ALL_EXAMPLES))
318 PROJECTS-$(CONFIG_MSVS) += $(ALL_EXAMPLES_BASENAME:.c=.$(VCPROJ_SFX))
319 INSTALL-BINS-$(CONFIG_MSVS) += $(foreach p,$(VS_PLATFORMS),\
320                                $(addprefix bin/$(p)/,$(ALL_EXAMPLES_BASENAME:.c=.exe)))
321 $(foreach proj,$(call enabled,PROJECTS),\
322     $(eval $(call vcproj_template,$(proj))))
323
324 #
325 # Documentation Rules
326 #
327 %.dox: %.c
328         @echo "    [DOXY] $@"
329         @mkdir -p $(dir $@)
330         @echo "/*!\page example_$(@F:.dox=) $(@F:.dox=)" > $@
331         @echo "   \includelineno $(<F)" >> $@
332         @echo "*/" >> $@
333
334 samples.dox: examples.mk
335         @echo "    [DOXY] $@"
336         @echo "/*!\page samples Sample Code" > $@
337         @echo "    This SDK includes a number of sample applications."\
338               "Each sample documents a feature of the SDK in both prose"\
339               "and the associated C code."\
340               "The following samples are included: ">>$@
341         @$(foreach ex,$(sort $(notdir $(EXAMPLES:.c=))),\
342            echo "     - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
343         @echo >> $@
344         @echo "    In addition, the SDK contains a number of utilities."\
345               "Since these utilities are built upon the concepts described"\
346               "in the sample code listed above, they are not documented in"\
347               "pieces like the samples are. Their source is included here"\
348               "for reference. The following utilities are included:" >> $@
349         @$(foreach ex,$(sort $(UTILS:.c=)),\
350            echo "     - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
351         @echo "*/" >> $@
352
353 CLEAN-OBJS += examples.doxy samples.dox $(ALL_EXAMPLES:.c=.dox)
354 DOCS-yes += examples.doxy samples.dox
355 examples.doxy: samples.dox $(ALL_EXAMPLES:.c=.dox)
356         @echo "INPUT += $^" > $@