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