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