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