blob: f6e7c006248bdb41ba1dd856cae2b86a9ac4bf2f [file] [log] [blame]
John Koleszar0ea50ce2010-05-18 11:58:33 -04001##
John Koleszarc2140b82010-09-09 08:16:39 -04002## Copyright (c) 2010 The WebM project authors. All Rights Reserved.
John Koleszar0ea50ce2010-05-18 11:58:33 -04003##
John Koleszar94c52e42010-06-18 12:39:21 -04004## Use of this source code is governed by a BSD-style license
John Koleszar09202d82010-06-04 16:19:40 -04005## 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
John Koleszar94c52e42010-06-18 12:39:21 -04007## in the file PATENTS. All contributing project authors may
John Koleszar09202d82010-06-04 16:19:40 -04008## be found in the AUTHORS file in the root of the source tree.
John Koleszar0ea50ce2010-05-18 11:58:33 -04009##
10
John Koleszar7dfec962012-03-01 12:50:40 -080011LIBYUV_SRCS += third_party/libyuv/include/libyuv/basic_types.h \
12 third_party/libyuv/include/libyuv/cpu_id.h \
13 third_party/libyuv/include/libyuv/scale.h \
14 third_party/libyuv/source/row.h \
15 third_party/libyuv/source/scale.c \
16 third_party/libyuv/source/cpu_id.c
John Koleszar0ea50ce2010-05-18 11:58:33 -040017
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -070018LIBWEBM_MUXER_SRCS += third_party/libwebm/mkvmuxer.cpp \
19 third_party/libwebm/mkvmuxerutil.cpp \
20 third_party/libwebm/mkvwriter.cpp \
21 third_party/libwebm/mkvmuxer.hpp \
22 third_party/libwebm/mkvmuxertypes.hpp \
23 third_party/libwebm/mkvmuxerutil.hpp \
24 third_party/libwebm/mkvparser.hpp \
25 third_party/libwebm/mkvwriter.hpp \
26 third_party/libwebm/webmids.hpp
27
Vignesh Venkatasubramaniandbd24712014-04-03 00:41:14 -070028LIBWEBM_PARSER_SRCS = third_party/libwebm/mkvparser.cpp \
29 third_party/libwebm/mkvreader.cpp \
30 third_party/libwebm/mkvparser.hpp \
31 third_party/libwebm/mkvreader.hpp
32
James Zern77bbcab2014-02-05 16:55:01 -080033# List of examples to build. UTILS are tools meant for distribution
34# while EXAMPLES demonstrate specific portions of the API.
John Koleszarea68ee02010-10-21 15:02:10 -040035UTILS-$(CONFIG_DECODERS) += vpxdec.c
36vpxdec.SRCS += md5_utils.c md5_utils.h
Dmitry Kovalev4334c072014-02-26 16:32:09 -080037vpxdec.SRCS += vpx_ports/mem_ops.h
38vpxdec.SRCS += vpx_ports/mem_ops_aligned.h
John Koleszarea68ee02010-10-21 15:02:10 -040039vpxdec.SRCS += vpx_ports/vpx_timer.h
40vpxdec.SRCS += vpx/vpx_integer.h
Attila Nagy1a7d25a2011-09-15 15:34:12 +030041vpxdec.SRCS += args.c args.h
Tom Finegan00a35aa2013-11-14 12:37:42 -080042vpxdec.SRCS += ivfdec.c ivfdec.h
John Koleszarc377bf02010-11-02 09:11:57 -040043vpxdec.SRCS += tools_common.c tools_common.h
Dmitry Kovalev5ab635832014-01-17 17:02:37 -080044vpxdec.SRCS += y4menc.c y4menc.h
John Koleszar7d8fc262013-02-25 16:58:47 -080045vpxdec.SRCS += $(LIBYUV_SRCS)
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -070046ifeq ($(CONFIG_WEBM_IO),yes)
Vignesh Venkatasubramaniandbd24712014-04-03 00:41:14 -070047 vpxdec.SRCS += $(LIBWEBM_PARSER_SRCS)
48 vpxdec.SRCS += webmdec.cc webmdec.h
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -070049endif
John Koleszarea68ee02010-10-21 15:02:10 -040050vpxdec.GUID = BA5FE66F-38DD-E034-F542-B1578C5FB950
51vpxdec.DESCRIPTION = Full featured decoder
52UTILS-$(CONFIG_ENCODERS) += vpxenc.c
Tom Finegan49dc9ca2013-11-21 16:46:40 -080053vpxenc.SRCS += args.c args.h y4minput.c y4minput.h vpxenc.h
Tom Finegan00a35aa2013-11-14 12:37:42 -080054vpxenc.SRCS += ivfdec.c ivfdec.h
55vpxenc.SRCS += ivfenc.c ivfenc.h
Dmitry Kovalevf11da2b2014-01-29 12:28:29 -080056vpxenc.SRCS += rate_hist.c rate_hist.h
John Koleszarc377bf02010-11-02 09:11:57 -040057vpxenc.SRCS += tools_common.c tools_common.h
Tom Finegan249366b2013-11-25 12:05:19 -080058vpxenc.SRCS += warnings.c warnings.h
Attila Nagy1a7d25a2011-09-15 15:34:12 +030059vpxenc.SRCS += vpx_ports/mem_ops.h
John Koleszarea68ee02010-10-21 15:02:10 -040060vpxenc.SRCS += vpx_ports/mem_ops_aligned.h
Johannc459d372012-04-02 15:08:18 -070061vpxenc.SRCS += vpx_ports/vpx_timer.h
Tom Finegan78cb2e62013-11-07 21:28:45 -080062vpxenc.SRCS += vpxstats.c vpxstats.h
John Koleszar7dfec962012-03-01 12:50:40 -080063vpxenc.SRCS += $(LIBYUV_SRCS)
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -070064ifeq ($(CONFIG_WEBM_IO),yes)
Vignesh Venkatasubramanian2dcbf8c2014-03-19 11:56:02 -070065 vpxenc.SRCS += $(LIBWEBM_MUXER_SRCS)
66 vpxenc.SRCS += webmenc.cc webmenc.h
Vignesh Venkatasubramanian0ffa3832014-03-14 08:10:35 -070067endif
John Koleszarea68ee02010-10-21 15:02:10 -040068vpxenc.GUID = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
69vpxenc.DESCRIPTION = Full featured encoder
James Zern20eb5cb2014-02-21 17:57:27 -080070EXAMPLES-$(CONFIG_VP9_ENCODER) += vp9_spatial_scalable_encoder.c
Ivan Maltz1ed0e1b2013-10-23 11:53:37 -070071vp9_spatial_scalable_encoder.SRCS += args.c args.h
Tom Finegan00a35aa2013-11-14 12:37:42 -080072vp9_spatial_scalable_encoder.SRCS += ivfenc.c ivfenc.h
73vp9_spatial_scalable_encoder.SRCS += tools_common.c tools_common.h
Dmitry Kovalev14db3bf2014-02-12 11:23:49 -080074vp9_spatial_scalable_encoder.SRCS += video_common.h
75vp9_spatial_scalable_encoder.SRCS += video_writer.h video_writer.c
Minghai Shangb0c146e2014-02-28 14:22:57 -080076vp9_spatial_scalable_encoder.SRCS += vpxstats.c vpxstats.h
James Zerna0fcbcf2013-09-17 18:47:25 -070077vp9_spatial_scalable_encoder.GUID = 4A38598D-627D-4505-9C7B-D4020C84100D
78vp9_spatial_scalable_encoder.DESCRIPTION = Spatial Scalable Encoder
John Koleszarea68ee02010-10-21 15:02:10 -040079
Deb Mukherjee4298be32014-04-03 14:06:20 -070080ifneq ($(CONFIG_SHARED),yes)
James Zern98e16b12014-03-03 18:03:23 -080081EXAMPLES-$(CONFIG_VP9_ENCODER) += resize_util.c
Deb Mukherjeecacea002014-01-23 14:53:53 -080082endif
83
John Koleszaree8bcb12010-05-24 10:16:44 -040084# XMA example disabled for now, not used in VP8
85#UTILS-$(CONFIG_DECODERS) += example_xma.c
86#example_xma.GUID = A955FC4A-73F1-44F7-135E-30D84D32F022
87#example_xma.DESCRIPTION = External Memory Allocation mode usage
John Koleszar0ea50ce2010-05-18 11:58:33 -040088
Marco Paniconi4864ab22014-02-06 09:23:17 -080089EXAMPLES-$(CONFIG_ENCODERS) += vpx_temporal_scalable_patterns.c
90vpx_temporal_scalable_patterns.SRCS += ivfenc.c ivfenc.h
91vpx_temporal_scalable_patterns.SRCS += tools_common.c tools_common.h
Dmitry Kovalev4f8a30b2014-02-06 14:20:58 -080092vpx_temporal_scalable_patterns.SRCS += video_common.h
93vpx_temporal_scalable_patterns.SRCS += video_writer.h video_writer.c
Marco Paniconi4864ab22014-02-06 09:23:17 -080094vpx_temporal_scalable_patterns.GUID = B18C08F2-A439-4502-A78E-849BE3D60947
95vpx_temporal_scalable_patterns.DESCRIPTION = Temporal Scalability Encoder
James Zern77bbcab2014-02-05 16:55:01 -080096EXAMPLES-$(CONFIG_VP8_DECODER) += simple_decoder.c
97simple_decoder.GUID = D3BBF1E9-2427-450D-BBFF-B2843C1D44CC
Dmitry Kovalev7ec27692014-01-27 13:40:29 -080098simple_decoder.SRCS += ivfdec.h ivfdec.c
99simple_decoder.SRCS += tools_common.h tools_common.c
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -0800100simple_decoder.SRCS += video_common.h
101simple_decoder.SRCS += video_reader.h video_reader.c
Dmitry Kovalev4334c072014-02-26 16:32:09 -0800102simple_decoder.SRCS += vpx_ports/mem_ops.h
103simple_decoder.SRCS += vpx_ports/mem_ops_aligned.h
James Zern77bbcab2014-02-05 16:55:01 -0800104simple_decoder.DESCRIPTION = Simplified decoder loop
105EXAMPLES-$(CONFIG_VP8_DECODER) += postproc.c
Dmitry Kovalev2e862ce2014-01-28 11:27:30 -0800106postproc.SRCS += ivfdec.h ivfdec.c
107postproc.SRCS += tools_common.h tools_common.c
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -0800108postproc.SRCS += video_common.h
109postproc.SRCS += video_reader.h video_reader.c
Dmitry Kovalev4334c072014-02-26 16:32:09 -0800110postproc.SRCS += vpx_ports/mem_ops.h
111postproc.SRCS += vpx_ports/mem_ops_aligned.h
James Zern77bbcab2014-02-05 16:55:01 -0800112postproc.GUID = 65E33355-F35E-4088-884D-3FD4905881D7
113postproc.DESCRIPTION = Decoder postprocessor control
114EXAMPLES-$(CONFIG_VP8_DECODER) += decode_to_md5.c
Dmitry Kovalevc2b33682014-01-24 11:20:09 -0800115decode_to_md5.SRCS += md5_utils.h md5_utils.c
116decode_to_md5.SRCS += ivfdec.h ivfdec.c
117decode_to_md5.SRCS += tools_common.h tools_common.c
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -0800118decode_to_md5.SRCS += video_common.h
119decode_to_md5.SRCS += video_reader.h video_reader.c
Dmitry Kovalev4334c072014-02-26 16:32:09 -0800120decode_to_md5.SRCS += vpx_ports/mem_ops.h
121decode_to_md5.SRCS += vpx_ports/mem_ops_aligned.h
James Zern77bbcab2014-02-05 16:55:01 -0800122decode_to_md5.GUID = 59120B9B-2735-4BFE-B022-146CA340FE42
123decode_to_md5.DESCRIPTION = Frame by frame MD5 checksum
James Zern77bbcab2014-02-05 16:55:01 -0800124EXAMPLES-$(CONFIG_VP8_ENCODER) += simple_encoder.c
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -0800125simple_encoder.SRCS += ivfenc.h ivfenc.c
126simple_encoder.SRCS += tools_common.h tools_common.c
127simple_encoder.SRCS += video_common.h
128simple_encoder.SRCS += video_writer.h video_writer.c
John Koleszar0ea50ce2010-05-18 11:58:33 -0400129simple_encoder.GUID = 4607D299-8A71-4D2C-9B1D-071899B6FBFD
130simple_encoder.DESCRIPTION = Simplified encoder loop
James Zern77bbcab2014-02-05 16:55:01 -0800131EXAMPLES-$(CONFIG_VP8_ENCODER) += twopass_encoder.c
Dmitry Kovalev592936b2014-02-07 11:37:39 -0800132twopass_encoder.SRCS += ivfenc.h ivfenc.c
133twopass_encoder.SRCS += tools_common.h tools_common.c
134twopass_encoder.SRCS += video_common.h
135twopass_encoder.SRCS += video_writer.h video_writer.c
John Koleszar0ea50ce2010-05-18 11:58:33 -0400136twopass_encoder.GUID = 73494FA6-4AF9-4763-8FBB-265C92402FD8
137twopass_encoder.DESCRIPTION = Two-pass encoder loop
John Koleszar0ea50ce2010-05-18 11:58:33 -0400138ifeq ($(CONFIG_DECODERS),yes)
James Zern77bbcab2014-02-05 16:55:01 -0800139EXAMPLES-$(CONFIG_VP8_ENCODER) += decode_with_drops.c
140decode_with_drops.SRCS += ivfdec.h ivfdec.c
141decode_with_drops.SRCS += tools_common.h tools_common.c
Dmitry Kovalev37e6fd32014-02-05 18:34:46 -0800142decode_with_drops.SRCS += video_common.h
143decode_with_drops.SRCS += video_reader.h video_reader.c
Dmitry Kovalev4334c072014-02-26 16:32:09 -0800144decode_with_drops.SRCS += vpx_ports/mem_ops.h
145decode_with_drops.SRCS += vpx_ports/mem_ops_aligned.h
John Koleszar0ea50ce2010-05-18 11:58:33 -0400146endif
147decode_with_drops.GUID = CE5C53C4-8DDA-438A-86ED-0DDD3CDB8D26
148decode_with_drops.DESCRIPTION = Drops frames while decoding
John Koleszara9c75972012-11-08 17:09:30 -0800149ifeq ($(CONFIG_VP8_DECODER),yes)
James Zern77bbcab2014-02-05 16:55:01 -0800150EXAMPLES-$(CONFIG_ERROR_CONCEALMENT) += decode_with_partial_drops.c
Stefan Holmerd04f8522011-05-02 15:30:51 +0200151endif
152decode_with_partial_drops.GUID = 61C2D026-5754-46AC-916F-1343ECC5537E
153decode_with_partial_drops.DESCRIPTION = Drops parts of frames while decoding
Alex Converse61ecd7f2014-03-10 16:13:49 -0700154EXAMPLES-$(CONFIG_ENCODERS) += set_maps.c
155set_maps.SRCS += ivfenc.h ivfenc.c
156set_maps.SRCS += tools_common.h tools_common.c
157set_maps.SRCS += video_common.h
158set_maps.SRCS += video_writer.h video_writer.c
159set_maps.GUID = ECB2D24D-98B8-4015-A465-A4AF3DCC145F
160set_maps.DESCRIPTION = Set active and ROI maps
James Zern77bbcab2014-02-05 16:55:01 -0800161EXAMPLES-$(CONFIG_VP8_ENCODER) += vp8cx_set_ref.c
Dmitry Kovalevcb4eb792014-03-03 17:41:51 -0800162vp8cx_set_ref.SRCS += ivfenc.h ivfenc.c
163vp8cx_set_ref.SRCS += tools_common.h tools_common.c
164vp8cx_set_ref.SRCS += video_common.h
165vp8cx_set_ref.SRCS += video_writer.h video_writer.c
John Koleszar0ea50ce2010-05-18 11:58:33 -0400166vp8cx_set_ref.GUID = C5E31F7F-96F6-48BD-BD3E-10EBF6E8057A
167vp8cx_set_ref.DESCRIPTION = VP8 set encoder reference frame
168
Dmitry Kovalev98254a42014-01-17 16:56:04 -0800169
170ifeq ($(CONFIG_MULTI_RES_ENCODING),yes)
James Zern77bbcab2014-02-05 16:55:01 -0800171EXAMPLES-$(CONFIG_VP8_DECODER) += vp8_multi_resolution_encoder.c
Dmitry Kovalev98254a42014-01-17 16:56:04 -0800172vp8_multi_resolution_encoder.SRCS += $(LIBYUV_SRCS)
173vp8_multi_resolution_encoder.GUID = 04f8738e-63c8-423b-90fa-7c2703a374de
174vp8_multi_resolution_encoder.DESCRIPTION = VP8 Multiple-resolution Encoding
175endif
John Koleszar0ea50ce2010-05-18 11:58:33 -0400176
177# Handle extra library flags depending on codec configuration
John Koleszar0ea50ce2010-05-18 11:58:33 -0400178
Tero Rintaluoma11a222f2011-01-24 11:21:40 +0200179# We should not link to math library (libm) on RVCT
180# when building for bare-metal targets
181ifeq ($(CONFIG_OS_SUPPORT), yes)
182CODEC_EXTRA_LIBS-$(CONFIG_VP8) += m
Ronald S. Bultje4b2c2b92012-11-01 11:09:58 -0700183CODEC_EXTRA_LIBS-$(CONFIG_VP9) += m
Tero Rintaluoma11a222f2011-01-24 11:21:40 +0200184else
185 ifeq ($(CONFIG_GCC), yes)
186 CODEC_EXTRA_LIBS-$(CONFIG_VP8) += m
Ronald S. Bultje4b2c2b92012-11-01 11:09:58 -0700187 CODEC_EXTRA_LIBS-$(CONFIG_VP9) += m
Tero Rintaluoma11a222f2011-01-24 11:21:40 +0200188 endif
189endif
John Koleszar0ea50ce2010-05-18 11:58:33 -0400190#
191# End of specified files. The rest of the build rules should happen
192# automagically from here.
193#
194
195
196# Examples need different flags based on whether we're building
197# from an installed tree or a version controlled tree. Determine
198# the proper paths.
199ifeq ($(HAVE_ALT_TREE_LAYOUT),yes)
200 LIB_PATH := $(SRC_PATH_BARE)/../lib
201 INC_PATH := $(SRC_PATH_BARE)/../include
202else
203 LIB_PATH-yes += $(if $(BUILD_PFX),$(BUILD_PFX),.)
John Koleszar0ea50ce2010-05-18 11:58:33 -0400204 INC_PATH-$(CONFIG_VP8_DECODER) += $(SRC_PATH_BARE)/vp8
205 INC_PATH-$(CONFIG_VP8_ENCODER) += $(SRC_PATH_BARE)/vp8
Ronald S. Bultje4b2c2b92012-11-01 11:09:58 -0700206 INC_PATH-$(CONFIG_VP9_DECODER) += $(SRC_PATH_BARE)/vp9
207 INC_PATH-$(CONFIG_VP9_ENCODER) += $(SRC_PATH_BARE)/vp9
John Koleszar0ea50ce2010-05-18 11:58:33 -0400208 LIB_PATH := $(call enabled,LIB_PATH)
209 INC_PATH := $(call enabled,INC_PATH)
210endif
Ronald S. Bultjebbf890f2011-05-02 13:56:41 -0400211INTERNAL_CFLAGS = $(addprefix -I,$(INC_PATH))
212INTERNAL_LDFLAGS += $(addprefix -L,$(LIB_PATH))
John Koleszar0ea50ce2010-05-18 11:58:33 -0400213
214
215# Expand list of selected examples to build (as specified above)
216UTILS = $(call enabled,UTILS)
James Zern77bbcab2014-02-05 16:55:01 -0800217EXAMPLES = $(addprefix examples/,$(call enabled,EXAMPLES))
218ALL_EXAMPLES = $(UTILS) $(EXAMPLES)
John Koleszaree8bcb12010-05-24 10:16:44 -0400219UTIL_SRCS = $(foreach ex,$(UTILS),$($(ex:.c=).SRCS))
James Zern77bbcab2014-02-05 16:55:01 -0800220ALL_SRCS = $(foreach ex,$(ALL_EXAMPLES),$($(notdir $(ex:.c=)).SRCS))
John Koleszar0ea50ce2010-05-18 11:58:33 -0400221CODEC_EXTRA_LIBS=$(sort $(call enabled,CODEC_EXTRA_LIBS))
222
223
224# Expand all example sources into a variable containing all sources
James Zern77bbcab2014-02-05 16:55:01 -0800225# for that example (not just them main one specified in UTILS/EXAMPLES)
John Koleszar0ea50ce2010-05-18 11:58:33 -0400226# and add this file to the list (for MSVS workspace generation)
James Zern77bbcab2014-02-05 16:55:01 -0800227$(foreach ex,$(ALL_EXAMPLES),$(eval $(notdir $(ex:.c=)).SRCS += $(ex) examples.mk))
John Koleszar0ea50ce2010-05-18 11:58:33 -0400228
229
230# If this is a universal (fat) binary, then all the subarchitectures have
231# already been built and our job is to stitch them together. The
232# BUILD_OBJS variable indicates whether we should be building
233# (compiling, linking) the library. The LIPO_OBJS variable indicates
234# that we're stitching.
235$(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_OBJS,BUILD_OBJS):=yes)
236
237
238# Create build/install dependencies for all examples. The common case
239# is handled here. The MSVS case is handled below.
240NOT_MSVS = $(if $(CONFIG_MSVS),,yes)
KO Myung-Hun2dad8d62012-02-03 13:31:11 +0900241DIST-BINS-$(NOT_MSVS) += $(addprefix bin/,$(ALL_EXAMPLES:.c=$(EXE_SFX)))
242INSTALL-BINS-$(NOT_MSVS) += $(addprefix bin/,$(UTILS:.c=$(EXE_SFX)))
John Koleszaree8bcb12010-05-24 10:16:44 -0400243DIST-SRCS-yes += $(ALL_SRCS)
244INSTALL-SRCS-yes += $(UTIL_SRCS)
John Koleszar0ea50ce2010-05-18 11:58:33 -0400245OBJS-$(NOT_MSVS) += $(if $(BUILD_OBJS),$(call objs,$(ALL_SRCS)))
KO Myung-Hun2dad8d62012-02-03 13:31:11 +0900246BINS-$(NOT_MSVS) += $(addprefix $(BUILD_PFX),$(ALL_EXAMPLES:.c=$(EXE_SFX)))
John Koleszar0ea50ce2010-05-18 11:58:33 -0400247
248
249# Instantiate linker template for all examples.
250CODEC_LIB=$(if $(CONFIG_DEBUG_LIBS),vpx_g,vpx)
jimbankoski45e551b2012-07-25 19:39:33 -0700251SHARED_LIB_SUF=$(if $(filter darwin%,$(TGT_OS)),.dylib,.so)
252CODEC_LIB_SUF=$(if $(CONFIG_SHARED),$(SHARED_LIB_SUF),.a)
John Koleszar0ea50ce2010-05-18 11:58:33 -0400253$(foreach bin,$(BINS-yes),\
James Zern495b2412011-07-25 15:40:36 -0700254 $(if $(BUILD_OBJS),$(eval $(bin):\
255 $(LIB_PATH)/lib$(CODEC_LIB)$(CODEC_LIB_SUF)))\
John Koleszar0ea50ce2010-05-18 11:58:33 -0400256 $(if $(BUILD_OBJS),$(eval $(call linker_template,$(bin),\
KO Myung-Hun2dad8d62012-02-03 13:31:11 +0900257 $(call objs,$($(notdir $(bin:$(EXE_SFX)=)).SRCS)) \
John Koleszar0ea50ce2010-05-18 11:58:33 -0400258 -l$(CODEC_LIB) $(addprefix -l,$(CODEC_EXTRA_LIBS))\
259 )))\
260 $(if $(LIPO_OBJS),$(eval $(call lipo_bin_template,$(bin))))\
261 )
262
263
John Koleszar0ea50ce2010-05-18 11:58:33 -0400264# The following pairs define a mapping of locations in the distribution
265# tree to locations in the source/build trees.
266INSTALL_MAPS += src/%.c %.c
267INSTALL_MAPS += src/% $(SRC_PATH_BARE)/%
268INSTALL_MAPS += bin/% %
269INSTALL_MAPS += % %
270
271
272# Set up additional MSVS environment
273ifeq ($(CONFIG_MSVS),yes)
Jim Bankoski1b16e742012-07-23 12:32:59 -0700274CODEC_LIB=$(if $(CONFIG_SHARED),vpx,$(if $(CONFIG_STATIC_MSVCRT),vpxmt,vpxmd))
John Koleszar0ea50ce2010-05-18 11:58:33 -0400275# This variable uses deferred expansion intentionally, since the results of
276# $(wildcard) may change during the course of the Make.
277VS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
278INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),bin/$(p)/% $(p)/Release/%)
279endif
280
281# Build Visual Studio Projects. We use a template here to instantiate
282# explicit rules rather than using an implicit rule because we want to
283# leverage make's VPATH searching rather than specifying the paths on
284# each file in ALL_EXAMPLES. This has the unfortunate side effect that
285# touching the source files trigger a rebuild of the project files
286# even though there is no real dependency there (the dependency is on
287# the makefiles). We may want to revisit this.
288define vcproj_template
Martin Storsjo9a5cac02013-05-18 19:57:19 +0300289$(1): $($(1:.$(VCPROJ_SFX)=).SRCS) vpx.$(VCPROJ_SFX)
John Koleszar0ea50ce2010-05-18 11:58:33 -0400290 @echo " [vcproj] $$@"
Martin Storsjo0b4637e2013-05-17 00:56:46 +0300291 $$(GEN_VCPROJ)\
John Koleszar0ea50ce2010-05-18 11:58:33 -0400292 --exe\
293 --target=$$(TOOLCHAIN)\
Martin Storsjo0b4637e2013-05-17 00:56:46 +0300294 --name=$$(@:.$(VCPROJ_SFX)=)\
John Koleszar0ea50ce2010-05-18 11:58:33 -0400295 --ver=$$(CONFIG_VS_VERSION)\
Martin Storsjo0b4637e2013-05-17 00:56:46 +0300296 --proj-guid=$$($$(@:.$(VCPROJ_SFX)=).GUID)\
John Koleszar0ea50ce2010-05-18 11:58:33 -0400297 $$(if $$(CONFIG_STATIC_MSVCRT),--static-crt) \
Ronald S. Bultjebbf890f2011-05-02 13:56:41 -0400298 --out=$$@ $$(INTERNAL_CFLAGS) $$(CFLAGS) \
Martin Storsjoa37e84d2013-05-19 12:21:29 +0300299 $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -l$$(CODEC_LIB) $$^
John Koleszar0ea50ce2010-05-18 11:58:33 -0400300endef
James Zern77bbcab2014-02-05 16:55:01 -0800301ALL_EXAMPLES_BASENAME := $(notdir $(ALL_EXAMPLES))
302PROJECTS-$(CONFIG_MSVS) += $(ALL_EXAMPLES_BASENAME:.c=.$(VCPROJ_SFX))
John Koleszar0ea50ce2010-05-18 11:58:33 -0400303INSTALL-BINS-$(CONFIG_MSVS) += $(foreach p,$(VS_PLATFORMS),\
James Zern77bbcab2014-02-05 16:55:01 -0800304 $(addprefix bin/$(p)/,$(ALL_EXAMPLES_BASENAME:.c=.exe)))
John Koleszar0ea50ce2010-05-18 11:58:33 -0400305$(foreach proj,$(call enabled,PROJECTS),\
306 $(eval $(call vcproj_template,$(proj))))
James Zern354c5662014-02-14 19:38:20 -0800307
308#
309# Documentation Rules
310#
311%.dox: %.c
312 @echo " [DOXY] $@"
313 @echo "/*!\page example_$(@F:.dox=) $(@F:.dox=)" > $@
314 @echo " \includelineno $(<F)" >> $@
315 @echo "*/" >> $@
316
317samples.dox: examples.mk
318 @echo " [DOXY] $@"
319 @echo "/*!\page samples Sample Code" > $@
320 @echo " This SDK includes a number of sample applications."\
321 "Each sample documents a feature of the SDK in both prose"\
322 "and the associated C code."\
323 "The following samples are included: ">>$@
324 @$(foreach ex,$(sort $(notdir $(EXAMPLES:.c=))),\
325 echo " - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
326 @echo >> $@
327 @echo " In addition, the SDK contains a number of utilities."\
328 "Since these utilities are built upon the concepts described"\
329 "in the sample code listed above, they are not documented in"\
330 "pieces like the samples are. Their source is included here"\
331 "for reference. The following utilities are included:" >> $@
332 @$(foreach ex,$(sort $(UTILS:.c=)),\
333 echo " - \subpage example_$(ex) $($(ex).DESCRIPTION)" >> $@;)
334 @echo "*/" >> $@
335
336CLEAN-OBJS += examples.doxy samples.dox $(ALL_EXAMPLES:.c=.dox)
337DOCS-yes += examples.doxy samples.dox
338examples.doxy: samples.dox $(ALL_EXAMPLES:.c=.dox)
339 @echo "INPUT += $^" > $@