Merge "Cleanup vp9_rd."
[aom.git] / examples.mk
blobce833fcf010d95e19e661495de611273b8d1c742
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 ##
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
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
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
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
100 ifneq ($(CONFIG_SHARED),yes)
101 EXAMPLES-$(CONFIG_VP9_ENCODER) += resize_util.c
102 endif
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
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
189 # Handle extra library flags depending on codec configuration
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
203 # End of specified files. The rest of the build rules should happen
204 # automagically from here.
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))
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))
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))
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)
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)))
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))))\
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 += % %
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
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))))
322 # Documentation Rules
324 %.dox: %.c
325 @echo " [DOXY] $@"
326 @echo "/*!\page example_$(@F:.dox=) $(@F:.dox=)" > $@
327 @echo " \includelineno $(<F)" >> $@
328 @echo "*/" >> $@
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 "*/" >> $@
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 += $^" > $@