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