2 ## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
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.
11 LIBYUV_SRCS += third_party/libyuv/include/libyuv/basic_types.h \
12 third_party/libyuv/include/libyuv/convert.h \
13 third_party/libyuv/include/libyuv/convert_argb.h \
14 third_party/libyuv/include/libyuv/convert_from.h \
15 third_party/libyuv/include/libyuv/cpu_id.h \
16 third_party/libyuv/include/libyuv/planar_functions.h \
17 third_party/libyuv/include/libyuv/rotate.h \
18 third_party/libyuv/include/libyuv/row.h \
19 third_party/libyuv/include/libyuv/scale.h \
20 third_party/libyuv/include/libyuv/scale_row.h \
21 third_party/libyuv/source/cpu_id.cc \
22 third_party/libyuv/source/planar_functions.cc \
23 third_party/libyuv/source/row_any.cc \
24 third_party/libyuv/source/row_common.cc \
25 third_party/libyuv/source/row_gcc.cc \
26 third_party/libyuv/source/row_msa.cc \
27 third_party/libyuv/source/row_neon.cc \
28 third_party/libyuv/source/row_neon64.cc \
29 third_party/libyuv/source/row_win.cc \
30 third_party/libyuv/source/scale.cc \
31 third_party/libyuv/source/scale_any.cc \
32 third_party/libyuv/source/scale_common.cc \
33 third_party/libyuv/source/scale_gcc.cc \
34 third_party/libyuv/source/scale_msa.cc \
35 third_party/libyuv/source/scale_neon.cc \
36 third_party/libyuv/source/scale_neon64.cc \
37 third_party/libyuv/source/scale_win.cc \
39 LIBWEBM_COMMON_SRCS += third_party/libwebm/common/hdr_util.cc \
40 third_party/libwebm/common/hdr_util.h \
41 third_party/libwebm/common/webmids.h
43 LIBWEBM_MUXER_SRCS += third_party/libwebm/mkvmuxer/mkvmuxer.cc \
44 third_party/libwebm/mkvmuxer/mkvmuxerutil.cc \
45 third_party/libwebm/mkvmuxer/mkvwriter.cc \
46 third_party/libwebm/mkvmuxer/mkvmuxer.h \
47 third_party/libwebm/mkvmuxer/mkvmuxertypes.h \
48 third_party/libwebm/mkvmuxer/mkvmuxerutil.h \
49 third_party/libwebm/mkvparser/mkvparser.h \
50 third_party/libwebm/mkvmuxer/mkvwriter.h
52 LIBWEBM_PARSER_SRCS = third_party/libwebm/mkvparser/mkvparser.cc \
53 third_party/libwebm/mkvparser/mkvreader.cc \
54 third_party/libwebm/mkvparser/mkvparser.h \
55 third_party/libwebm/mkvparser/mkvreader.h
57 # Add compile flags and include path for libwebm sources.
58 ifeq ($(CONFIG_WEBM_IO),yes)
59 CXXFLAGS += -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
60 INC_PATH-yes += $(SRC_PATH_BARE)/third_party/libwebm
64 # List of examples to build. UTILS are tools meant for distribution
65 # while EXAMPLES demonstrate specific portions of the API.
66 UTILS-$(CONFIG_DECODERS) += vpxdec.c
67 vpxdec.SRCS += md5_utils.c md5_utils.h
68 vpxdec.SRCS += vpx_ports/compiler_attributes.h
69 vpxdec.SRCS += vpx_ports/mem_ops.h
70 vpxdec.SRCS += vpx_ports/mem_ops_aligned.h
71 vpxdec.SRCS += vpx_ports/msvc.h
72 vpxdec.SRCS += vpx_ports/vpx_timer.h
73 vpxdec.SRCS += vpx/vpx_integer.h
74 vpxdec.SRCS += args.c args.h
75 vpxdec.SRCS += ivfdec.c ivfdec.h
76 vpxdec.SRCS += y4minput.c y4minput.h
77 vpxdec.SRCS += tools_common.c tools_common.h
78 vpxdec.SRCS += y4menc.c y4menc.h
79 ifeq ($(CONFIG_LIBYUV),yes)
80 vpxdec.SRCS += $(LIBYUV_SRCS)
81 $(BUILD_PFX)third_party/libyuv/%.cc.o: CXXFLAGS += ${LIBYUV_CXXFLAGS}
83 ifeq ($(CONFIG_WEBM_IO),yes)
84 vpxdec.SRCS += $(LIBWEBM_COMMON_SRCS)
85 vpxdec.SRCS += $(LIBWEBM_MUXER_SRCS)
86 vpxdec.SRCS += $(LIBWEBM_PARSER_SRCS)
87 vpxdec.SRCS += webmdec.cc webmdec.h
89 vpxdec.GUID = BA5FE66F-38DD-E034-F542-B1578C5FB950
90 vpxdec.DESCRIPTION = Full featured decoder
91 UTILS-$(CONFIG_ENCODERS) += vpxenc.c
92 vpxenc.SRCS += args.c args.h y4minput.c y4minput.h vpxenc.h
93 vpxenc.SRCS += ivfdec.c ivfdec.h
94 vpxenc.SRCS += ivfenc.c ivfenc.h
95 vpxenc.SRCS += rate_hist.c rate_hist.h
96 vpxenc.SRCS += tools_common.c tools_common.h
97 vpxenc.SRCS += warnings.c warnings.h
98 vpxenc.SRCS += vpx_ports/mem_ops.h
99 vpxenc.SRCS += vpx_ports/mem_ops_aligned.h
100 vpxenc.SRCS += vpx_ports/msvc.h
101 vpxenc.SRCS += vpx_ports/vpx_timer.h
102 vpxenc.SRCS += vpxstats.c vpxstats.h
103 ifeq ($(CONFIG_LIBYUV),yes)
104 vpxenc.SRCS += $(LIBYUV_SRCS)
106 ifeq ($(CONFIG_WEBM_IO),yes)
107 vpxenc.SRCS += $(LIBWEBM_COMMON_SRCS)
108 vpxenc.SRCS += $(LIBWEBM_MUXER_SRCS)
109 vpxenc.SRCS += $(LIBWEBM_PARSER_SRCS)
110 vpxenc.SRCS += webmenc.cc webmenc.h
112 vpxenc.GUID = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
113 vpxenc.DESCRIPTION = Full featured encoder
115 EXAMPLES-$(CONFIG_VP9_ENCODER) += vp9_spatial_svc_encoder.c
116 vp9_spatial_svc_encoder.SRCS += args.c args.h
117 vp9_spatial_svc_encoder.SRCS += ivfenc.c ivfenc.h
118 vp9_spatial_svc_encoder.SRCS += y4minput.c y4minput.h
119 vp9_spatial_svc_encoder.SRCS += tools_common.c tools_common.h
120 vp9_spatial_svc_encoder.SRCS += video_common.h
121 vp9_spatial_svc_encoder.SRCS += video_writer.h video_writer.c
122 vp9_spatial_svc_encoder.SRCS += vpx_ports/msvc.h
123 vp9_spatial_svc_encoder.SRCS += vpxstats.c vpxstats.h
124 vp9_spatial_svc_encoder.SRCS += examples/svc_encodeframe.c
125 vp9_spatial_svc_encoder.SRCS += examples/svc_context.h
126 vp9_spatial_svc_encoder.GUID = 4A38598D-627D-4505-9C7B-D4020C84100D
127 vp9_spatial_svc_encoder.DESCRIPTION = VP9 Spatial SVC Encoder
129 ifneq ($(CONFIG_SHARED),yes)
130 EXAMPLES-$(CONFIG_VP9_ENCODER) += resize_util.c
133 EXAMPLES-$(CONFIG_ENCODERS) += vpx_temporal_svc_encoder.c
134 vpx_temporal_svc_encoder.SRCS += ivfenc.c ivfenc.h
135 vpx_temporal_svc_encoder.SRCS += y4minput.c y4minput.h
136 vpx_temporal_svc_encoder.SRCS += tools_common.c tools_common.h
137 vpx_temporal_svc_encoder.SRCS += video_common.h
138 vpx_temporal_svc_encoder.SRCS += video_writer.h video_writer.c
139 vpx_temporal_svc_encoder.SRCS += vpx_ports/msvc.h
140 vpx_temporal_svc_encoder.GUID = B18C08F2-A439-4502-A78E-849BE3D60947
141 vpx_temporal_svc_encoder.DESCRIPTION = Temporal SVC Encoder
142 EXAMPLES-$(CONFIG_DECODERS) += simple_decoder.c
143 simple_decoder.GUID = D3BBF1E9-2427-450D-BBFF-B2843C1D44CC
144 simple_decoder.SRCS += ivfdec.h ivfdec.c
145 simple_decoder.SRCS += y4minput.c y4minput.h
146 simple_decoder.SRCS += tools_common.h tools_common.c
147 simple_decoder.SRCS += video_common.h
148 simple_decoder.SRCS += video_reader.h video_reader.c
149 simple_decoder.SRCS += vpx_ports/mem_ops.h
150 simple_decoder.SRCS += vpx_ports/mem_ops_aligned.h
151 simple_decoder.SRCS += vpx_ports/msvc.h
152 simple_decoder.DESCRIPTION = Simplified decoder loop
153 EXAMPLES-$(CONFIG_DECODERS) += postproc.c
154 postproc.SRCS += ivfdec.h ivfdec.c
155 postproc.SRCS += y4minput.c y4minput.h
156 postproc.SRCS += tools_common.h tools_common.c
157 postproc.SRCS += video_common.h
158 postproc.SRCS += video_reader.h video_reader.c
159 postproc.SRCS += vpx_ports/mem_ops.h
160 postproc.SRCS += vpx_ports/mem_ops_aligned.h
161 postproc.SRCS += vpx_ports/msvc.h
162 postproc.GUID = 65E33355-F35E-4088-884D-3FD4905881D7
163 postproc.DESCRIPTION = Decoder postprocessor control
164 EXAMPLES-$(CONFIG_DECODERS) += decode_to_md5.c
165 decode_to_md5.SRCS += md5_utils.h md5_utils.c
166 decode_to_md5.SRCS += ivfdec.h ivfdec.c
167 decode_to_md5.SRCS += y4minput.c y4minput.h
168 decode_to_md5.SRCS += tools_common.h tools_common.c
169 decode_to_md5.SRCS += video_common.h
170 decode_to_md5.SRCS += video_reader.h video_reader.c
171 decode_to_md5.SRCS += vpx_ports/compiler_attributes.h
172 decode_to_md5.SRCS += vpx_ports/mem_ops.h
173 decode_to_md5.SRCS += vpx_ports/mem_ops_aligned.h
174 decode_to_md5.SRCS += vpx_ports/msvc.h
175 decode_to_md5.GUID = 59120B9B-2735-4BFE-B022-146CA340FE42
176 decode_to_md5.DESCRIPTION = Frame by frame MD5 checksum
177 EXAMPLES-$(CONFIG_ENCODERS) += simple_encoder.c
178 simple_encoder.SRCS += ivfenc.h ivfenc.c
179 simple_encoder.SRCS += y4minput.c y4minput.h
180 simple_encoder.SRCS += tools_common.h tools_common.c
181 simple_encoder.SRCS += video_common.h
182 simple_encoder.SRCS += video_writer.h video_writer.c
183 simple_encoder.SRCS += vpx_ports/msvc.h
184 simple_encoder.GUID = 4607D299-8A71-4D2C-9B1D-071899B6FBFD
185 simple_encoder.DESCRIPTION = Simplified encoder loop
186 EXAMPLES-$(CONFIG_VP9_ENCODER) += vp9_lossless_encoder.c
187 vp9_lossless_encoder.SRCS += ivfenc.h ivfenc.c
188 vp9_lossless_encoder.SRCS += y4minput.c y4minput.h
189 vp9_lossless_encoder.SRCS += tools_common.h tools_common.c
190 vp9_lossless_encoder.SRCS += video_common.h
191 vp9_lossless_encoder.SRCS += video_writer.h video_writer.c
192 vp9_lossless_encoder.SRCS += vpx_ports/msvc.h
193 vp9_lossless_encoder.GUID = B63C7C88-5348-46DC-A5A6-CC151EF93366
194 vp9_lossless_encoder.DESCRIPTION = Simplified lossless VP9 encoder
195 EXAMPLES-$(CONFIG_ENCODERS) += twopass_encoder.c
196 twopass_encoder.SRCS += ivfenc.h ivfenc.c
197 twopass_encoder.SRCS += y4minput.c y4minput.h
198 twopass_encoder.SRCS += tools_common.h tools_common.c
199 twopass_encoder.SRCS += video_common.h
200 twopass_encoder.SRCS += video_writer.h video_writer.c
201 twopass_encoder.SRCS += vpx_ports/msvc.h
202 twopass_encoder.GUID = 73494FA6-4AF9-4763-8FBB-265C92402FD8
203 twopass_encoder.DESCRIPTION = Two-pass encoder loop
204 EXAMPLES-$(CONFIG_DECODERS) += decode_with_drops.c
205 decode_with_drops.SRCS += ivfdec.h ivfdec.c
206 decode_with_drops.SRCS += y4minput.c y4minput.h
207 decode_with_drops.SRCS += tools_common.h tools_common.c
208 decode_with_drops.SRCS += video_common.h
209 decode_with_drops.SRCS += video_reader.h video_reader.c
210 decode_with_drops.SRCS += vpx_ports/mem_ops.h
211 decode_with_drops.SRCS += vpx_ports/mem_ops_aligned.h
212 decode_with_drops.SRCS += vpx_ports/msvc.h
213 decode_with_drops.GUID = CE5C53C4-8DDA-438A-86ED-0DDD3CDB8D26
214 decode_with_drops.DESCRIPTION = Drops frames while decoding
215 EXAMPLES-$(CONFIG_ENCODERS) += set_maps.c
216 set_maps.SRCS += ivfenc.h ivfenc.c
217 set_maps.SRCS += y4minput.c y4minput.h
218 set_maps.SRCS += tools_common.h tools_common.c
219 set_maps.SRCS += video_common.h
220 set_maps.SRCS += video_writer.h video_writer.c
221 set_maps.SRCS += vpx_ports/msvc.h
222 set_maps.GUID = ECB2D24D-98B8-4015-A465-A4AF3DCC145F
223 set_maps.DESCRIPTION = Set active and ROI maps
224 EXAMPLES-$(CONFIG_VP8_ENCODER) += vp8cx_set_ref.c
225 vp8cx_set_ref.SRCS += ivfenc.h ivfenc.c
226 vp8cx_set_ref.SRCS += y4minput.c y4minput.h
227 vp8cx_set_ref.SRCS += tools_common.h tools_common.c
228 vp8cx_set_ref.SRCS += video_common.h
229 vp8cx_set_ref.SRCS += video_writer.h video_writer.c
230 vp8cx_set_ref.SRCS += vpx_ports/msvc.h
231 vp8cx_set_ref.GUID = C5E31F7F-96F6-48BD-BD3E-10EBF6E8057A
232 vp8cx_set_ref.DESCRIPTION = VP8 set encoder reference frame
234 ifeq ($(CONFIG_VP9_ENCODER),yes)
235 ifeq ($(CONFIG_DECODERS),yes)
236 EXAMPLES-yes += vp9cx_set_ref.c
237 vp9cx_set_ref.SRCS += ivfenc.h ivfenc.c
238 vp9cx_set_ref.SRCS += y4minput.c y4minput.h
239 vp9cx_set_ref.SRCS += tools_common.h tools_common.c
240 vp9cx_set_ref.SRCS += video_common.h
241 vp9cx_set_ref.SRCS += video_writer.h video_writer.c
242 vp9cx_set_ref.GUID = 65D7F14A-2EE6-4293-B958-AB5107A03B55
243 vp9cx_set_ref.DESCRIPTION = VP9 set encoder reference frame
247 ifeq ($(CONFIG_MULTI_RES_ENCODING),yes)
248 ifeq ($(CONFIG_LIBYUV),yes)
249 EXAMPLES-$(CONFIG_VP8_ENCODER) += vp8_multi_resolution_encoder.c
250 vp8_multi_resolution_encoder.SRCS += ivfenc.h ivfenc.c
251 vp8_multi_resolution_encoder.SRCS += y4minput.c y4minput.h
252 vp8_multi_resolution_encoder.SRCS += tools_common.h tools_common.c
253 vp8_multi_resolution_encoder.SRCS += video_writer.h video_writer.c
254 vp8_multi_resolution_encoder.SRCS += vpx_ports/msvc.h
255 vp8_multi_resolution_encoder.SRCS += $(LIBYUV_SRCS)
256 vp8_multi_resolution_encoder.GUID = 04f8738e-63c8-423b-90fa-7c2703a374de
257 vp8_multi_resolution_encoder.DESCRIPTION = VP8 Multiple-resolution Encoding
261 # Handle extra library flags depending on codec configuration
263 # We should not link to math library (libm) on RVCT
264 # when building for bare-metal targets
265 ifeq ($(CONFIG_OS_SUPPORT), yes)
266 CODEC_EXTRA_LIBS-$(CONFIG_VP8) += m
267 CODEC_EXTRA_LIBS-$(CONFIG_VP9) += m
269 ifeq ($(CONFIG_GCC), yes)
270 CODEC_EXTRA_LIBS-$(CONFIG_VP8) += m
271 CODEC_EXTRA_LIBS-$(CONFIG_VP9) += m
275 # End of specified files. The rest of the build rules should happen
276 # automagically from here.
280 # Examples need different flags based on whether we're building
281 # from an installed tree or a version controlled tree. Determine
283 ifeq ($(HAVE_ALT_TREE_LAYOUT),yes)
284 LIB_PATH-yes := $(SRC_PATH_BARE)/../lib
285 INC_PATH-yes := $(SRC_PATH_BARE)/../include
287 LIB_PATH-yes += $(if $(BUILD_PFX),$(BUILD_PFX),.)
288 INC_PATH-$(CONFIG_VP8_DECODER) += $(SRC_PATH_BARE)/vp8
289 INC_PATH-$(CONFIG_VP8_ENCODER) += $(SRC_PATH_BARE)/vp8
290 INC_PATH-$(CONFIG_VP9_DECODER) += $(SRC_PATH_BARE)/vp9
291 INC_PATH-$(CONFIG_VP9_ENCODER) += $(SRC_PATH_BARE)/vp9
293 INC_PATH-$(CONFIG_LIBYUV) += $(SRC_PATH_BARE)/third_party/libyuv/include
294 LIB_PATH := $(call enabled,LIB_PATH)
295 INC_PATH := $(call enabled,INC_PATH)
296 INTERNAL_CFLAGS = $(addprefix -I,$(INC_PATH))
297 INTERNAL_LDFLAGS += $(addprefix -L,$(LIB_PATH))
300 # Expand list of selected examples to build (as specified above)
301 UTILS = $(call enabled,UTILS)
302 EXAMPLES = $(addprefix examples/,$(call enabled,EXAMPLES))
303 ALL_EXAMPLES = $(UTILS) $(EXAMPLES)
304 UTIL_SRCS = $(foreach ex,$(UTILS),$($(ex:.c=).SRCS))
305 ALL_SRCS = $(foreach ex,$(ALL_EXAMPLES),$($(notdir $(ex:.c=)).SRCS))
306 CODEC_EXTRA_LIBS=$(sort $(call enabled,CODEC_EXTRA_LIBS))
309 # Expand all example sources into a variable containing all sources
310 # for that example (not just them main one specified in UTILS/EXAMPLES)
311 # and add this file to the list (for MSVS workspace generation)
312 $(foreach ex,$(ALL_EXAMPLES),$(eval $(notdir $(ex:.c=)).SRCS += $(ex) examples.mk))
315 # Create build/install dependencies for all examples. The common case
316 # is handled here. The MSVS case is handled below.
317 NOT_MSVS = $(if $(CONFIG_MSVS),,yes)
318 DIST-BINS-$(NOT_MSVS) += $(addprefix bin/,$(ALL_EXAMPLES:.c=$(EXE_SFX)))
319 INSTALL-BINS-$(NOT_MSVS) += $(addprefix bin/,$(UTILS:.c=$(EXE_SFX)))
320 DIST-SRCS-yes += $(ALL_SRCS)
321 INSTALL-SRCS-yes += $(UTIL_SRCS)
322 OBJS-$(NOT_MSVS) += $(call objs,$(ALL_SRCS))
323 BINS-$(NOT_MSVS) += $(addprefix $(BUILD_PFX),$(ALL_EXAMPLES:.c=$(EXE_SFX)))
326 # Instantiate linker template for all examples.
327 CODEC_LIB=$(if $(CONFIG_DEBUG_LIBS),vpx_g,vpx)
328 ifneq ($(filter darwin%,$(TGT_OS)),)
329 SHARED_LIB_SUF=.dylib
331 ifneq ($(filter os2%,$(TGT_OS)),)
332 SHARED_LIB_SUF=_dll.a
337 CODEC_LIB_SUF=$(if $(CONFIG_SHARED),$(SHARED_LIB_SUF),.a)
338 $(foreach bin,$(BINS-yes),\
339 $(eval $(bin):$(LIB_PATH)/lib$(CODEC_LIB)$(CODEC_LIB_SUF))\
340 $(eval $(call linker_template,$(bin),\
341 $(call objs,$($(notdir $(bin:$(EXE_SFX)=)).SRCS)) \
342 -l$(CODEC_LIB) $(addprefix -l,$(CODEC_EXTRA_LIBS))\
345 # The following pairs define a mapping of locations in the distribution
346 # tree to locations in the source/build trees.
347 INSTALL_MAPS += src/%.c %.c
348 INSTALL_MAPS += src/% $(SRC_PATH_BARE)/%
349 INSTALL_MAPS += bin/% %
353 # Set up additional MSVS environment
354 ifeq ($(CONFIG_MSVS),yes)
355 CODEC_LIB=$(if $(CONFIG_SHARED),vpx,$(if $(CONFIG_STATIC_MSVCRT),vpxmt,vpxmd))
356 # This variable uses deferred expansion intentionally, since the results of
357 # $(wildcard) may change during the course of the Make.
358 VS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
359 INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),bin/$(p)/% $(p)/Release/%)
362 # Build Visual Studio Projects. We use a template here to instantiate
363 # explicit rules rather than using an implicit rule because we want to
364 # leverage make's VPATH searching rather than specifying the paths on
365 # each file in ALL_EXAMPLES. This has the unfortunate side effect that
366 # touching the source files trigger a rebuild of the project files
367 # even though there is no real dependency there (the dependency is on
368 # the makefiles). We may want to revisit this.
369 define vcproj_template
370 $(1): $($(1:.$(VCPROJ_SFX)=).SRCS) vpx.$(VCPROJ_SFX)
371 $(if $(quiet),@echo " [vcproj] $$@")
372 $(qexec)$$(GEN_VCPROJ)\
374 --target=$$(TOOLCHAIN)\
375 --name=$$(@:.$(VCPROJ_SFX)=)\
376 --ver=$$(CONFIG_VS_VERSION)\
377 --proj-guid=$$($$(@:.$(VCPROJ_SFX)=).GUID)\
378 --src-path-bare="$(SRC_PATH_BARE)" \
380 $$(if $$(CONFIG_STATIC_MSVCRT),--static-crt) \
381 --out=$$@ $$(INTERNAL_CFLAGS) $$(CFLAGS) \
382 $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -l$$(CODEC_LIB) $$^
384 ALL_EXAMPLES_BASENAME := $(notdir $(ALL_EXAMPLES))
385 PROJECTS-$(CONFIG_MSVS) += $(ALL_EXAMPLES_BASENAME:.c=.$(VCPROJ_SFX))
386 INSTALL-BINS-$(CONFIG_MSVS) += $(foreach p,$(VS_PLATFORMS),\
387 $(addprefix bin/$(p)/,$(ALL_EXAMPLES_BASENAME:.c=.exe)))
388 $(foreach proj,$(call enabled,PROJECTS),\
389 $(eval $(call vcproj_template,$(proj))))
392 # Documentation Rules
397 @echo "/*!\page example_$(@F:.dox=) $(@F:.dox=)" > $@
398 @echo " \includelineno $(<F)" >> $@
401 samples.dox: examples.mk
403 @echo "/*!\page samples Sample Code" > $@
404 @echo " This SDK includes a number of sample applications."\
405 "Each sample documents a feature of the SDK in both prose"\
406 "and the associated C code."\
407 "The following samples are included: ">>$@
408 @$(foreach ex,$(sort $(notdir $(EXAMPLES:.c=))),\
409 echo " - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
411 @echo " In addition, the SDK contains a number of utilities."\
412 "Since these utilities are built upon the concepts described"\
413 "in the sample code listed above, they are not documented in"\
414 "pieces like the samples are. Their source is included here"\
415 "for reference. The following utilities are included:" >> $@
416 @$(foreach ex,$(sort $(UTILS:.c=)),\
417 echo " - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
420 CLEAN-OBJS += examples.doxy samples.dox $(ALL_EXAMPLES:.c=.dox)
421 DOCS-yes += examples.doxy samples.dox
422 examples.doxy: samples.dox $(ALL_EXAMPLES:.c=.dox)
423 @echo "INPUT += $^" > $@
424 @echo "ENABLED_SECTIONS += samples" >> $@