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