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