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_mips.
cc \
26 third_party
/libyuv
/source
/row_neon.
cc \
27 third_party
/libyuv
/source
/row_neon64.
cc \
28 third_party
/libyuv
/source
/row_posix.
cc \
29 third_party
/libyuv
/source
/row_win.
cc \
30 third_party
/libyuv
/source
/scale.
cc \
31 third_party
/libyuv
/source
/scale_common.
cc \
32 third_party
/libyuv
/source
/scale_mips.
cc \
33 third_party
/libyuv
/source
/scale_neon.
cc \
34 third_party
/libyuv
/source
/scale_neon64.
cc \
35 third_party
/libyuv
/source
/scale_posix.
cc \
36 third_party
/libyuv
/source
/scale_win.
cc \
38 LIBWEBM_MUXER_SRCS
+= third_party
/libwebm
/mkvmuxer.
cpp \
39 third_party
/libwebm
/mkvmuxerutil.
cpp \
40 third_party
/libwebm
/mkvwriter.
cpp \
41 third_party
/libwebm
/mkvmuxer.hpp \
42 third_party
/libwebm
/mkvmuxertypes.hpp \
43 third_party
/libwebm
/mkvmuxerutil.hpp \
44 third_party
/libwebm
/mkvparser.hpp \
45 third_party
/libwebm
/mkvwriter.hpp \
46 third_party
/libwebm
/webmids.hpp
48 LIBWEBM_PARSER_SRCS
= third_party
/libwebm
/mkvparser.
cpp \
49 third_party
/libwebm
/mkvreader.
cpp \
50 third_party
/libwebm
/mkvparser.hpp \
51 third_party
/libwebm
/mkvreader.hpp
53 # List of examples to build. UTILS are tools meant for distribution
54 # while EXAMPLES demonstrate specific portions of the API.
55 UTILS-
$(CONFIG_DECODERS
) += vpxdec.c
56 vpxdec.SRCS
+= md5_utils.c md5_utils.h
57 vpxdec.SRCS
+= vpx_ports
/mem_ops.h
58 vpxdec.SRCS
+= vpx_ports
/mem_ops_aligned.h
59 vpxdec.SRCS
+= vpx_ports
/vpx_timer.h
60 vpxdec.SRCS
+= vpx
/vpx_integer.h
61 vpxdec.SRCS
+= args.c args.h
62 vpxdec.SRCS
+= ivfdec.c ivfdec.h
63 vpxdec.SRCS
+= tools_common.c tools_common.h
64 vpxdec.SRCS
+= y4menc.c y4menc.h
65 ifeq ($(CONFIG_LIBYUV
),yes
)
66 vpxdec.SRCS
+= $(LIBYUV_SRCS
)
68 ifeq ($(CONFIG_WEBM_IO
),yes
)
69 vpxdec.SRCS
+= $(LIBWEBM_PARSER_SRCS
)
70 vpxdec.SRCS
+= webmdec.
cc webmdec.h
72 vpxdec.GUID
= BA5FE66F-38DD-E034-F542-B1578C5FB950
73 vpxdec.DESCRIPTION
= Full featured decoder
74 UTILS-
$(CONFIG_ENCODERS
) += vpxenc.c
75 vpxenc.SRCS
+= args.c args.h y4minput.c y4minput.h vpxenc.h
76 vpxenc.SRCS
+= ivfdec.c ivfdec.h
77 vpxenc.SRCS
+= ivfenc.c ivfenc.h
78 vpxenc.SRCS
+= rate_hist.c rate_hist.h
79 vpxenc.SRCS
+= tools_common.c tools_common.h
80 vpxenc.SRCS
+= warnings.c warnings.h
81 vpxenc.SRCS
+= vpx_ports
/mem_ops.h
82 vpxenc.SRCS
+= vpx_ports
/mem_ops_aligned.h
83 vpxenc.SRCS
+= vpx_ports
/vpx_timer.h
84 vpxenc.SRCS
+= vpxstats.c vpxstats.h
85 ifeq ($(CONFIG_LIBYUV
),yes
)
86 vpxenc.SRCS
+= $(LIBYUV_SRCS
)
88 ifeq ($(CONFIG_WEBM_IO
),yes
)
89 vpxenc.SRCS
+= $(LIBWEBM_MUXER_SRCS
)
90 vpxenc.SRCS
+= webmenc.
cc webmenc.h
92 vpxenc.GUID
= 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
93 vpxenc.DESCRIPTION
= Full featured encoder
94 ifeq ($(CONFIG_SPATIAL_SVC
),yes
)
95 EXAMPLES-
$(CONFIG_VP9_ENCODER
) += vp9_spatial_svc_encoder.c
96 vp9_spatial_svc_encoder.SRCS
+= args.c args.h
97 vp9_spatial_svc_encoder.SRCS
+= ivfenc.c ivfenc.h
98 vp9_spatial_svc_encoder.SRCS
+= tools_common.c tools_common.h
99 vp9_spatial_svc_encoder.SRCS
+= video_common.h
100 vp9_spatial_svc_encoder.SRCS
+= video_writer.h video_writer.c
101 vp9_spatial_svc_encoder.SRCS
+= vpxstats.c vpxstats.h
102 vp9_spatial_svc_encoder.GUID
= 4A38598D-627D-4505-9C7B-D4020C84100D
103 vp9_spatial_svc_encoder.DESCRIPTION
= VP9 Spatial SVC Encoder
106 ifneq ($(CONFIG_SHARED
),yes
)
107 EXAMPLES-
$(CONFIG_VP9_ENCODER
) += resize_util.c
110 EXAMPLES-
$(CONFIG_ENCODERS
) += vpx_temporal_svc_encoder.c
111 vpx_temporal_svc_encoder.SRCS
+= ivfenc.c ivfenc.h
112 vpx_temporal_svc_encoder.SRCS
+= tools_common.c tools_common.h
113 vpx_temporal_svc_encoder.SRCS
+= video_common.h
114 vpx_temporal_svc_encoder.SRCS
+= video_writer.h video_writer.c
115 vpx_temporal_svc_encoder.GUID
= B18C08F2-A439-4502-A78E-849BE3D60947
116 vpx_temporal_svc_encoder.DESCRIPTION
= Temporal SVC Encoder
117 EXAMPLES-
$(CONFIG_VP8_DECODER
) += simple_decoder.c
118 simple_decoder.GUID
= D3BBF1E9-2427-450D-BBFF-B2843C1D44CC
119 simple_decoder.SRCS
+= ivfdec.h ivfdec.c
120 simple_decoder.SRCS
+= tools_common.h tools_common.c
121 simple_decoder.SRCS
+= video_common.h
122 simple_decoder.SRCS
+= video_reader.h video_reader.c
123 simple_decoder.SRCS
+= vpx_ports
/mem_ops.h
124 simple_decoder.SRCS
+= vpx_ports
/mem_ops_aligned.h
125 simple_decoder.DESCRIPTION
= Simplified decoder loop
126 EXAMPLES-
$(CONFIG_VP8_DECODER
) += postproc.c
127 postproc.SRCS
+= ivfdec.h ivfdec.c
128 postproc.SRCS
+= tools_common.h tools_common.c
129 postproc.SRCS
+= video_common.h
130 postproc.SRCS
+= video_reader.h video_reader.c
131 postproc.SRCS
+= vpx_ports
/mem_ops.h
132 postproc.SRCS
+= vpx_ports
/mem_ops_aligned.h
133 postproc.GUID
= 65E33355-F35E-4088-884D-3FD4905881D7
134 postproc.DESCRIPTION
= Decoder postprocessor control
135 EXAMPLES-
$(CONFIG_VP8_DECODER
) += decode_to_md5.c
136 decode_to_md5.SRCS
+= md5_utils.h md5_utils.c
137 decode_to_md5.SRCS
+= ivfdec.h ivfdec.c
138 decode_to_md5.SRCS
+= tools_common.h tools_common.c
139 decode_to_md5.SRCS
+= video_common.h
140 decode_to_md5.SRCS
+= video_reader.h video_reader.c
141 decode_to_md5.SRCS
+= vpx_ports
/mem_ops.h
142 decode_to_md5.SRCS
+= vpx_ports
/mem_ops_aligned.h
143 decode_to_md5.GUID
= 59120B9B-2735-4BFE-B022-146CA340FE42
144 decode_to_md5.DESCRIPTION
= Frame by frame MD5 checksum
145 EXAMPLES-
$(CONFIG_VP8_ENCODER
) += simple_encoder.c
146 simple_encoder.SRCS
+= ivfenc.h ivfenc.c
147 simple_encoder.SRCS
+= tools_common.h tools_common.c
148 simple_encoder.SRCS
+= video_common.h
149 simple_encoder.SRCS
+= video_writer.h video_writer.c
150 simple_encoder.GUID
= 4607D299-8A71-4D2C-9B1D-071899B6FBFD
151 simple_encoder.DESCRIPTION
= Simplified encoder loop
152 EXAMPLES-
$(CONFIG_VP8_ENCODER
) += twopass_encoder.c
153 twopass_encoder.SRCS
+= ivfenc.h ivfenc.c
154 twopass_encoder.SRCS
+= tools_common.h tools_common.c
155 twopass_encoder.SRCS
+= video_common.h
156 twopass_encoder.SRCS
+= video_writer.h video_writer.c
157 twopass_encoder.GUID
= 73494FA6-4AF9-4763-8FBB-265C92402FD8
158 twopass_encoder.DESCRIPTION
= Two-pass encoder loop
159 ifeq ($(CONFIG_DECODERS
),yes
)
160 EXAMPLES-
$(CONFIG_VP8_ENCODER
) += decode_with_drops.c
161 decode_with_drops.SRCS
+= ivfdec.h ivfdec.c
162 decode_with_drops.SRCS
+= tools_common.h tools_common.c
163 decode_with_drops.SRCS
+= video_common.h
164 decode_with_drops.SRCS
+= video_reader.h video_reader.c
165 decode_with_drops.SRCS
+= vpx_ports
/mem_ops.h
166 decode_with_drops.SRCS
+= vpx_ports
/mem_ops_aligned.h
168 decode_with_drops.GUID
= CE5C53C4-8DDA-438A-86ED-0DDD3CDB8D26
169 decode_with_drops.DESCRIPTION
= Drops frames while decoding
170 EXAMPLES-
$(CONFIG_ENCODERS
) += set_maps.c
171 set_maps.SRCS
+= ivfenc.h ivfenc.c
172 set_maps.SRCS
+= tools_common.h tools_common.c
173 set_maps.SRCS
+= video_common.h
174 set_maps.SRCS
+= video_writer.h video_writer.c
175 set_maps.GUID
= ECB2D24D-98B8-4015-A465-A4AF3DCC145F
176 set_maps.DESCRIPTION
= Set active and ROI maps
177 EXAMPLES-
$(CONFIG_VP8_ENCODER
) += vp8cx_set_ref.c
178 vp8cx_set_ref.SRCS
+= ivfenc.h ivfenc.c
179 vp8cx_set_ref.SRCS
+= tools_common.h tools_common.c
180 vp8cx_set_ref.SRCS
+= video_common.h
181 vp8cx_set_ref.SRCS
+= video_writer.h video_writer.c
182 vp8cx_set_ref.GUID
= C5E31F7F-96F6-48BD-BD3E-10EBF6E8057A
183 vp8cx_set_ref.DESCRIPTION
= VP8 set encoder reference frame
186 ifeq ($(CONFIG_MULTI_RES_ENCODING
),yes
)
187 ifeq ($(CONFIG_LIBYUV
),yes
)
188 EXAMPLES-
$(CONFIG_VP8_ENCODER
) += vp8_multi_resolution_encoder.c
189 vp8_multi_resolution_encoder.SRCS
+= ivfenc.h ivfenc.c
190 vp8_multi_resolution_encoder.SRCS
+= tools_common.h tools_common.c
191 vp8_multi_resolution_encoder.SRCS
+= video_writer.h video_writer.c
192 vp8_multi_resolution_encoder.SRCS
+= $(LIBYUV_SRCS
)
193 vp8_multi_resolution_encoder.GUID
= 04f8738e-63c8-423b-90fa-7c2703a374de
194 vp8_multi_resolution_encoder.DESCRIPTION
= VP8 Multiple-resolution Encoding
198 # Handle extra library flags depending on codec configuration
200 # We should not link to math library (libm) on RVCT
201 # when building for bare-metal targets
202 ifeq ($(CONFIG_OS_SUPPORT
), yes
)
203 CODEC_EXTRA_LIBS-
$(CONFIG_VP8
) += m
204 CODEC_EXTRA_LIBS-
$(CONFIG_VP9
) += m
206 ifeq ($(CONFIG_GCC
), yes
)
207 CODEC_EXTRA_LIBS-
$(CONFIG_VP8
) += m
208 CODEC_EXTRA_LIBS-
$(CONFIG_VP9
) += m
212 # End of specified files. The rest of the build rules should happen
213 # automagically from here.
217 # Examples need different flags based on whether we're building
218 # from an installed tree or a version controlled tree. Determine
220 ifeq ($(HAVE_ALT_TREE_LAYOUT
),yes
)
221 LIB_PATH-yes
:= $(SRC_PATH_BARE
)/..
/lib
222 INC_PATH-yes
:= $(SRC_PATH_BARE
)/..
/include
224 LIB_PATH-yes
+= $(if
$(BUILD_PFX
),$(BUILD_PFX
),.
)
225 INC_PATH-
$(CONFIG_VP8_DECODER
) += $(SRC_PATH_BARE
)/vp8
226 INC_PATH-
$(CONFIG_VP8_ENCODER
) += $(SRC_PATH_BARE
)/vp8
227 INC_PATH-
$(CONFIG_VP9_DECODER
) += $(SRC_PATH_BARE
)/vp9
228 INC_PATH-
$(CONFIG_VP9_ENCODER
) += $(SRC_PATH_BARE
)/vp9
230 INC_PATH-
$(CONFIG_LIBYUV
) += $(SRC_PATH_BARE
)/third_party
/libyuv
/include
231 LIB_PATH
:= $(call enabled
,LIB_PATH
)
232 INC_PATH
:= $(call enabled
,INC_PATH
)
233 INTERNAL_CFLAGS
= $(addprefix -I
,$(INC_PATH
))
234 INTERNAL_LDFLAGS
+= $(addprefix -L
,$(LIB_PATH
))
237 # Expand list of selected examples to build (as specified above)
238 UTILS
= $(call enabled
,UTILS
)
239 EXAMPLES
= $(addprefix examples
/,$(call enabled
,EXAMPLES
))
240 ALL_EXAMPLES
= $(UTILS
) $(EXAMPLES
)
241 UTIL_SRCS
= $(foreach ex
,$(UTILS
),$($(ex
:.c
=).SRCS
))
242 ALL_SRCS
= $(foreach ex
,$(ALL_EXAMPLES
),$($(notdir $(ex
:.c
=)).SRCS
))
243 CODEC_EXTRA_LIBS
=$(sort $(call enabled
,CODEC_EXTRA_LIBS
))
246 # Expand all example sources into a variable containing all sources
247 # for that example (not just them main one specified in UTILS/EXAMPLES)
248 # and add this file to the list (for MSVS workspace generation)
249 $(foreach ex
,$(ALL_EXAMPLES
),$(eval
$(notdir $(ex
:.c
=)).SRCS
+= $(ex
) examples.mk
))
252 # If this is a universal (fat) binary, then all the subarchitectures have
253 # already been built and our job is to stitch them together. The
254 # BUILD_OBJS variable indicates whether we should be building
255 # (compiling, linking) the library. The LIPO_OBJS variable indicates
256 # that we're stitching.
257 $(eval
$(if
$(filter universal
%,$(TOOLCHAIN
)),LIPO_OBJS
,BUILD_OBJS
):=yes
)
260 # Create build/install dependencies for all examples. The common case
261 # is handled here. The MSVS case is handled below.
262 NOT_MSVS
= $(if
$(CONFIG_MSVS
),,yes
)
263 DIST-BINS-
$(NOT_MSVS
) += $(addprefix bin
/,$(ALL_EXAMPLES
:.c
=$(EXE_SFX
)))
264 INSTALL-BINS-
$(NOT_MSVS
) += $(addprefix bin
/,$(UTILS
:.c
=$(EXE_SFX
)))
265 DIST-SRCS-yes
+= $(ALL_SRCS
)
266 INSTALL-SRCS-yes
+= $(UTIL_SRCS
)
267 OBJS-
$(NOT_MSVS
) += $(if
$(BUILD_OBJS
),$(call objs
,$(ALL_SRCS
)))
268 BINS-
$(NOT_MSVS
) += $(addprefix $(BUILD_PFX
),$(ALL_EXAMPLES
:.c
=$(EXE_SFX
)))
271 # Instantiate linker template for all examples.
272 CODEC_LIB
=$(if
$(CONFIG_DEBUG_LIBS
),vpx_g
,vpx
)
273 SHARED_LIB_SUF
=$(if
$(filter darwin
%,$(TGT_OS
)),.dylib
,.so
)
274 CODEC_LIB_SUF
=$(if
$(CONFIG_SHARED
),$(SHARED_LIB_SUF
),.a
)
275 $(foreach bin
,$(BINS-yes
),\
276 $(if
$(BUILD_OBJS
),$(eval
$(bin
):\
277 $(LIB_PATH
)/lib
$(CODEC_LIB
)$(CODEC_LIB_SUF
)))\
278 $(if
$(BUILD_OBJS
),$(eval
$(call linker_template
,$(bin
),\
279 $(call objs
,$($(notdir $(bin
:$(EXE_SFX
)=)).SRCS
)) \
280 -l
$(CODEC_LIB
) $(addprefix -l
,$(CODEC_EXTRA_LIBS
))\
282 $(if
$(LIPO_OBJS
),$(eval
$(call lipo_bin_template
,$(bin
))))\
286 # The following pairs define a mapping of locations in the distribution
287 # tree to locations in the source/build trees.
288 INSTALL_MAPS
+= src
/%.c
%.c
289 INSTALL_MAPS
+= src
/% $(SRC_PATH_BARE
)/%
290 INSTALL_MAPS
+= bin
/% %
294 # Set up additional MSVS environment
295 ifeq ($(CONFIG_MSVS
),yes
)
296 CODEC_LIB
=$(if
$(CONFIG_SHARED
),vpx
,$(if
$(CONFIG_STATIC_MSVCRT
),vpxmt
,vpxmd
))
297 # This variable uses deferred expansion intentionally, since the results of
298 # $(wildcard) may change during the course of the Make.
299 VS_PLATFORMS
= $(foreach d
,$(wildcard */Release
/$(CODEC_LIB
).lib
),$(word 1,$(subst /, ,$(d
))))
300 INSTALL_MAPS
+= $(foreach p
,$(VS_PLATFORMS
),bin
/$(p
)/% $(p
)/Release
/%)
303 # Build Visual Studio Projects. We use a template here to instantiate
304 # explicit rules rather than using an implicit rule because we want to
305 # leverage make's VPATH searching rather than specifying the paths on
306 # each file in ALL_EXAMPLES. This has the unfortunate side effect that
307 # touching the source files trigger a rebuild of the project files
308 # even though there is no real dependency there (the dependency is on
309 # the makefiles). We may want to revisit this.
310 define vcproj_template
311 $(1): $($(1:.
$(VCPROJ_SFX
)=).SRCS
) vpx.
$(VCPROJ_SFX
)
312 @echo
" [vcproj] $$@"
315 --target
=$$(TOOLCHAIN
)\
316 --name
=$$(@
:.
$(VCPROJ_SFX
)=)\
317 --ver
=$$(CONFIG_VS_VERSION
)\
318 --proj-guid
=$$($$(@
:.
$(VCPROJ_SFX
)=).GUID
)\
319 --src-path-bare
="$(SRC_PATH_BARE)" \
320 $$(if
$$(CONFIG_STATIC_MSVCRT
),--static-crt
) \
321 --out
=$$@
$$(INTERNAL_CFLAGS
) $$(CFLAGS
) \
322 $$(INTERNAL_LDFLAGS
) $$(LDFLAGS
) -l
$$(CODEC_LIB
) $$^
324 ALL_EXAMPLES_BASENAME
:= $(notdir $(ALL_EXAMPLES
))
325 PROJECTS-
$(CONFIG_MSVS
) += $(ALL_EXAMPLES_BASENAME
:.c
=.
$(VCPROJ_SFX
))
326 INSTALL-BINS-
$(CONFIG_MSVS
) += $(foreach p
,$(VS_PLATFORMS
),\
327 $(addprefix bin
/$(p
)/,$(ALL_EXAMPLES_BASENAME
:.c
=.exe
)))
328 $(foreach proj
,$(call enabled
,PROJECTS
),\
329 $(eval
$(call vcproj_template
,$(proj
))))
332 # Documentation Rules
336 @echo
"/*!\page example_$(@F:.dox=) $(@F:.dox=)" > $@
337 @echo
" \includelineno $(<F)" >> $@
340 samples.dox
: examples.mk
342 @echo
"/*!\page samples Sample Code" > $@
343 @echo
" This SDK includes a number of sample applications."\
344 "Each sample documents a feature of the SDK in both prose"\
345 "and the associated C code."\
346 "The following samples are included: ">>$@
347 @
$(foreach ex
,$(sort $(notdir $(EXAMPLES
:.c
=))),\
348 echo
" - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@
;)
350 @echo
" In addition, the SDK contains a number of utilities."\
351 "Since these utilities are built upon the concepts described"\
352 "in the sample code listed above, they are not documented in"\
353 "pieces like the samples are. Their source is included here"\
354 "for reference. The following utilities are included:" >> $@
355 @
$(foreach ex
,$(sort $(UTILS
:.c
=)),\
356 echo
" - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@
;)
359 CLEAN-OBJS
+= examples.doxy samples.dox
$(ALL_EXAMPLES
:.c
=.dox
)
360 DOCS-yes
+= examples.doxy samples.dox
361 examples.doxy
: samples.dox
$(ALL_EXAMPLES
:.c
=.dox
)
362 @echo
"INPUT += $^" > $@