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