]> granicus.if.org Git - libvpx/blob - examples.mk
Merge "Adding encode_tiles() function."
[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_DECODER)          += vp8_multi_resolution_encoder.c
183 vp8_multi_resolution_encoder.SRCS       += $(LIBYUV_SRCS)
184 vp8_multi_resolution_encoder.GUID        = 04f8738e-63c8-423b-90fa-7c2703a374de
185 vp8_multi_resolution_encoder.DESCRIPTION = VP8 Multiple-resolution Encoding
186 endif
187 endif
188
189 # Handle extra library flags depending on codec configuration
190
191 # We should not link to math library (libm) on RVCT
192 # when building for bare-metal targets
193 ifeq ($(CONFIG_OS_SUPPORT), yes)
194 CODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
195 CODEC_EXTRA_LIBS-$(CONFIG_VP9)         += m
196 else
197     ifeq ($(CONFIG_GCC), yes)
198     CODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
199     CODEC_EXTRA_LIBS-$(CONFIG_VP9)         += m
200     endif
201 endif
202 #
203 # End of specified files. The rest of the build rules should happen
204 # automagically from here.
205 #
206
207
208 # Examples need different flags based on whether we're building
209 # from an installed tree or a version controlled tree. Determine
210 # the proper paths.
211 ifeq ($(HAVE_ALT_TREE_LAYOUT),yes)
212     LIB_PATH := $(SRC_PATH_BARE)/../lib
213     INC_PATH := $(SRC_PATH_BARE)/../include
214 else
215     LIB_PATH-yes                     += $(if $(BUILD_PFX),$(BUILD_PFX),.)
216     INC_PATH-$(CONFIG_VP8_DECODER)   += $(SRC_PATH_BARE)/vp8
217     INC_PATH-$(CONFIG_VP8_ENCODER)   += $(SRC_PATH_BARE)/vp8
218     INC_PATH-$(CONFIG_VP9_DECODER)   += $(SRC_PATH_BARE)/vp9
219     INC_PATH-$(CONFIG_VP9_ENCODER)   += $(SRC_PATH_BARE)/vp9
220     LIB_PATH := $(call enabled,LIB_PATH)
221     INC_PATH := $(call enabled,INC_PATH)
222 endif
223 INTERNAL_CFLAGS = $(addprefix -I,$(INC_PATH))
224 INTERNAL_LDFLAGS += $(addprefix -L,$(LIB_PATH))
225
226
227 # Expand list of selected examples to build (as specified above)
228 UTILS           = $(call enabled,UTILS)
229 EXAMPLES        = $(addprefix examples/,$(call enabled,EXAMPLES))
230 ALL_EXAMPLES    = $(UTILS) $(EXAMPLES)
231 UTIL_SRCS       = $(foreach ex,$(UTILS),$($(ex:.c=).SRCS))
232 ALL_SRCS        = $(foreach ex,$(ALL_EXAMPLES),$($(notdir $(ex:.c=)).SRCS))
233 CODEC_EXTRA_LIBS=$(sort $(call enabled,CODEC_EXTRA_LIBS))
234
235
236 # Expand all example sources into a variable containing all sources
237 # for that example (not just them main one specified in UTILS/EXAMPLES)
238 # and add this file to the list (for MSVS workspace generation)
239 $(foreach ex,$(ALL_EXAMPLES),$(eval $(notdir $(ex:.c=)).SRCS += $(ex) examples.mk))
240
241
242 # If this is a universal (fat) binary, then all the subarchitectures have
243 # already been built and our job is to stitch them together. The
244 # BUILD_OBJS variable indicates whether we should be building
245 # (compiling, linking) the library. The LIPO_OBJS variable indicates
246 # that we're stitching.
247 $(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_OBJS,BUILD_OBJS):=yes)
248
249
250 # Create build/install dependencies for all examples. The common case
251 # is handled here. The MSVS case is handled below.
252 NOT_MSVS = $(if $(CONFIG_MSVS),,yes)
253 DIST-BINS-$(NOT_MSVS)      += $(addprefix bin/,$(ALL_EXAMPLES:.c=$(EXE_SFX)))
254 INSTALL-BINS-$(NOT_MSVS)   += $(addprefix bin/,$(UTILS:.c=$(EXE_SFX)))
255 DIST-SRCS-yes              += $(ALL_SRCS)
256 INSTALL-SRCS-yes           += $(UTIL_SRCS)
257 OBJS-$(NOT_MSVS)           += $(if $(BUILD_OBJS),$(call objs,$(ALL_SRCS)))
258 BINS-$(NOT_MSVS)           += $(addprefix $(BUILD_PFX),$(ALL_EXAMPLES:.c=$(EXE_SFX)))
259
260
261 # Instantiate linker template for all examples.
262 CODEC_LIB=$(if $(CONFIG_DEBUG_LIBS),vpx_g,vpx)
263 SHARED_LIB_SUF=$(if $(filter darwin%,$(TGT_OS)),.dylib,.so)
264 CODEC_LIB_SUF=$(if $(CONFIG_SHARED),$(SHARED_LIB_SUF),.a)
265 $(foreach bin,$(BINS-yes),\
266     $(if $(BUILD_OBJS),$(eval $(bin):\
267         $(LIB_PATH)/lib$(CODEC_LIB)$(CODEC_LIB_SUF)))\
268     $(if $(BUILD_OBJS),$(eval $(call linker_template,$(bin),\
269         $(call objs,$($(notdir $(bin:$(EXE_SFX)=)).SRCS)) \
270         -l$(CODEC_LIB) $(addprefix -l,$(CODEC_EXTRA_LIBS))\
271         )))\
272     $(if $(LIPO_OBJS),$(eval $(call lipo_bin_template,$(bin))))\
273     )
274
275
276 # The following pairs define a mapping of locations in the distribution
277 # tree to locations in the source/build trees.
278 INSTALL_MAPS += src/%.c   %.c
279 INSTALL_MAPS += src/%     $(SRC_PATH_BARE)/%
280 INSTALL_MAPS += bin/%     %
281 INSTALL_MAPS += %         %
282
283
284 # Set up additional MSVS environment
285 ifeq ($(CONFIG_MSVS),yes)
286 CODEC_LIB=$(if $(CONFIG_SHARED),vpx,$(if $(CONFIG_STATIC_MSVCRT),vpxmt,vpxmd))
287 # This variable uses deferred expansion intentionally, since the results of
288 # $(wildcard) may change during the course of the Make.
289 VS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
290 INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),bin/$(p)/%  $(p)/Release/%)
291 endif
292
293 # Build Visual Studio Projects. We use a template here to instantiate
294 # explicit rules rather than using an implicit rule because we want to
295 # leverage make's VPATH searching rather than specifying the paths on
296 # each file in ALL_EXAMPLES. This has the unfortunate side effect that
297 # touching the source files trigger a rebuild of the project files
298 # even though there is no real dependency there (the dependency is on
299 # the makefiles). We may want to revisit this.
300 define vcproj_template
301 $(1): $($(1:.$(VCPROJ_SFX)=).SRCS) vpx.$(VCPROJ_SFX)
302         @echo "    [vcproj] $$@"
303         $$(GEN_VCPROJ)\
304             --exe\
305             --target=$$(TOOLCHAIN)\
306             --name=$$(@:.$(VCPROJ_SFX)=)\
307             --ver=$$(CONFIG_VS_VERSION)\
308             --proj-guid=$$($$(@:.$(VCPROJ_SFX)=).GUID)\
309             --src-path-bare="$(SRC_PATH_BARE)" \
310             $$(if $$(CONFIG_STATIC_MSVCRT),--static-crt) \
311             --out=$$@ $$(INTERNAL_CFLAGS) $$(CFLAGS) \
312             $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -l$$(CODEC_LIB) $$^
313 endef
314 ALL_EXAMPLES_BASENAME := $(notdir $(ALL_EXAMPLES))
315 PROJECTS-$(CONFIG_MSVS) += $(ALL_EXAMPLES_BASENAME:.c=.$(VCPROJ_SFX))
316 INSTALL-BINS-$(CONFIG_MSVS) += $(foreach p,$(VS_PLATFORMS),\
317                                $(addprefix bin/$(p)/,$(ALL_EXAMPLES_BASENAME:.c=.exe)))
318 $(foreach proj,$(call enabled,PROJECTS),\
319     $(eval $(call vcproj_template,$(proj))))
320
321 #
322 # Documentation Rules
323 #
324 %.dox: %.c
325         @echo "    [DOXY] $@"
326         @echo "/*!\page example_$(@F:.dox=) $(@F:.dox=)" > $@
327         @echo "   \includelineno $(<F)" >> $@
328         @echo "*/" >> $@
329
330 samples.dox: examples.mk
331         @echo "    [DOXY] $@"
332         @echo "/*!\page samples Sample Code" > $@
333         @echo "    This SDK includes a number of sample applications."\
334               "Each sample documents a feature of the SDK in both prose"\
335               "and the associated C code."\
336               "The following samples are included: ">>$@
337         @$(foreach ex,$(sort $(notdir $(EXAMPLES:.c=))),\
338            echo "     - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
339         @echo >> $@
340         @echo "    In addition, the SDK contains a number of utilities."\
341               "Since these utilities are built upon the concepts described"\
342               "in the sample code listed above, they are not documented in"\
343               "pieces like the samples are. Their source is included here"\
344               "for reference. The following utilities are included:" >> $@
345         @$(foreach ex,$(sort $(UTILS:.c=)),\
346            echo "     - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
347         @echo "*/" >> $@
348
349 CLEAN-OBJS += examples.doxy samples.dox $(ALL_EXAMPLES:.c=.dox)
350 DOCS-yes += examples.doxy samples.dox
351 examples.doxy: samples.dox $(ALL_EXAMPLES:.c=.dox)
352         @echo "INPUT += $^" > $@