Home | History | Annotate | Download | only in libvpx
      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