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