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