libs.mk 17.9 KB
Newer Older
John Koleszar's avatar
John Koleszar committed
1
##
2
##  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
John Koleszar's avatar
John Koleszar committed
3
##
4
##  Use of this source code is governed by a BSD-style license
5
6
##  that can be found in the LICENSE file in the root of the source
##  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.
John Koleszar's avatar
John Koleszar committed
9
10
11
##


Johann's avatar
Johann committed
12
13
14
# ARM assembly files are written in RVCT-style. We use some make magic to
# filter those files to allow GCC compilation
ifeq ($(ARCH_ARM),yes)
15
  ASM:=$(if $(filter yes,$(CONFIG_GCC)$(CONFIG_MSVS)),.asm.s,.asm)
Johann's avatar
Johann committed
16
17
18
else
  ASM:=.asm
endif
John Koleszar's avatar
John Koleszar committed
19

20
21
22
23
24
25
#
# Calculate platform- and compiler-specific offsets for hand coded assembly
#
ifeq ($(filter icc gcc,$(TGT_CC)), $(TGT_CC))
OFFSET_PATTERN:='^[a-zA-Z0-9_]* EQU'
define asm_offsets_template
26
$$(BUILD_PFX)$(1): $$(BUILD_PFX)$(2).S
27
28
	@echo "    [CREATE] $$@"
	$$(qexec)LC_ALL=C grep $$(OFFSET_PATTERN) $$< | tr -d '$$$$\#' $$(ADS2GAS) > $$@
29
30
$$(BUILD_PFX)$(2).S: $(2)
CLEAN-OBJS += $$(BUILD_PFX)$(1) $(2).S
31
32
33
34
35
endef
else
  ifeq ($(filter rvct,$(TGT_CC)), $(TGT_CC))
define asm_offsets_template
$$(BUILD_PFX)$(1): obj_int_extract
36
$$(BUILD_PFX)$(1): $$(BUILD_PFX)$(2).o
37
38
	@echo "    [CREATE] $$@"
	$$(qexec)./obj_int_extract rvds $$< $$(ADS2GAS) > $$@
39
OBJS-yes += $$(BUILD_PFX)$(2).o
40
41
42
43
44
45
CLEAN-OBJS += $$(BUILD_PFX)$(1)
$$(filter %$$(ASM).o,$$(OBJS-yes)): $$(BUILD_PFX)$(1)
endef
endif # rvct
endif # !gcc

46
47
48
49
50
51
52
53
#
# Rule to generate runtime cpu detection files
#
define rtcd_h_template
$$(BUILD_PFX)$(1).h: $$(SRC_PATH_BARE)/$(2)
	@echo "    [CREATE] $$@"
	$$(qexec)$$(SRC_PATH_BARE)/build/make/rtcd.sh --arch=$$(TGT_ISA) \
          --sym=$(1) \
Johann's avatar
Johann committed
54
          --config=$$(CONFIG_DIR)$$(target)$$(if $$(FAT_ARCHS),,-$$(TOOLCHAIN)).mk \
55
56
57
58
          $$(RTCD_OPTIONS) $$^ > $$@
CLEAN-OBJS += $$(BUILD_PFX)$(1).h
RTCD += $$(BUILD_PFX)$(1).h
endef
59

Johann's avatar
Johann committed
60
CODEC_SRCS-yes += CHANGELOG
61
62
CODEC_SRCS-yes += libs.mk

Johann's avatar
Johann committed
63
64
65
66
67
68
69
# If this is a universal (fat) binary, then all the subarchitectures have
# already been built and our job is to stitch them together. The
# BUILD_LIBVPX variable indicates whether we should be building
# (compiling, linking) the library. The LIPO_LIBVPX variable indicates
# that we're stitching.
$(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_LIBVPX,BUILD_LIBVPX):=yes)

70
71
include $(SRC_PATH_BARE)/vpx/vpx_codec.mk
CODEC_SRCS-yes += $(addprefix vpx/,$(call enabled,API_SRCS))
72
CODEC_DOC_SRCS += $(addprefix vpx/,$(call enabled,API_DOC_SRCS))
John Koleszar's avatar
John Koleszar committed
73
74
75
76
77
78
79

include $(SRC_PATH_BARE)/vpx_mem/vpx_mem.mk
CODEC_SRCS-yes += $(addprefix vpx_mem/,$(call enabled,MEM_SRCS))

include $(SRC_PATH_BARE)/vpx_scale/vpx_scale.mk
CODEC_SRCS-yes += $(addprefix vpx_scale/,$(call enabled,SCALE_SRCS))

Johann's avatar
Johann committed
80
81
82
include $(SRC_PATH_BARE)/vpx_ports/vpx_ports.mk
CODEC_SRCS-yes += $(addprefix vpx_ports/,$(call enabled,PORTS_SRCS))

83
84
85
86
ifneq ($(CONFIG_VP8_ENCODER)$(CONFIG_VP8_DECODER),)
  VP8_PREFIX=vp8/
  include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8_common.mk
endif
John Koleszar's avatar
John Koleszar committed
87
88
89
90
91

ifeq ($(CONFIG_VP8_ENCODER),yes)
  include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8cx.mk
  CODEC_SRCS-yes += $(addprefix $(VP8_PREFIX),$(call enabled,VP8_CX_SRCS))
  CODEC_EXPORTS-yes += $(addprefix $(VP8_PREFIX),$(VP8_CX_EXPORTS))
92
  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8cx.h
93
  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
John Koleszar's avatar
John Koleszar committed
94
95
96
97
98
99
100
  CODEC_DOC_SECTIONS += vp8 vp8_encoder
endif

ifeq ($(CONFIG_VP8_DECODER),yes)
  include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8dx.mk
  CODEC_SRCS-yes += $(addprefix $(VP8_PREFIX),$(call enabled,VP8_DX_SRCS))
  CODEC_EXPORTS-yes += $(addprefix $(VP8_PREFIX),$(VP8_DX_EXPORTS))
101
102
  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8dx.h
  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
John Koleszar's avatar
John Koleszar committed
103
104
105
  CODEC_DOC_SECTIONS += vp8 vp8_decoder
endif

106
107
108
109
ifneq ($(CONFIG_VP9_ENCODER)$(CONFIG_VP9_DECODER),)
  VP9_PREFIX=vp9/
  include $(SRC_PATH_BARE)/$(VP9_PREFIX)vp9_common.mk
endif
John Koleszar's avatar
John Koleszar committed
110

111
112
113
114
115
ifeq ($(CONFIG_VP9_ENCODER),yes)
  VP9_PREFIX=vp9/
  include $(SRC_PATH_BARE)/$(VP9_PREFIX)vp9cx.mk
  CODEC_SRCS-yes += $(addprefix $(VP9_PREFIX),$(call enabled,VP9_CX_SRCS))
  CODEC_EXPORTS-yes += $(addprefix $(VP9_PREFIX),$(VP9_CX_EXPORTS))
116
117
  CODEC_SRCS-yes += $(VP9_PREFIX)vp9cx.mk vpx/vp8.h vpx/vp8cx.h
  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8cx.h
118
  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP9_PREFIX)/%
119
  CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8cx.h
120
  CODEC_DOC_SECTIONS += vp9 vp9_encoder
John Koleszar's avatar
John Koleszar committed
121
122
endif

123
124
125
126
127
128
ifeq ($(CONFIG_VP9_DECODER),yes)
  VP9_PREFIX=vp9/
  include $(SRC_PATH_BARE)/$(VP9_PREFIX)vp9dx.mk
  CODEC_SRCS-yes += $(addprefix $(VP9_PREFIX),$(call enabled,VP9_DX_SRCS))
  CODEC_EXPORTS-yes += $(addprefix $(VP9_PREFIX),$(VP9_DX_EXPORTS))
  CODEC_SRCS-yes += $(VP9_PREFIX)vp9dx.mk vpx/vp8.h vpx/vp8dx.h
129
  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8dx.h
130
  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP9_PREFIX)/%
131
  CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8dx.h
132
  CODEC_DOC_SECTIONS += vp9 vp9_decoder
John Koleszar's avatar
John Koleszar committed
133
134
135
136
137
138
139
140
141
142
143
144
145
endif


ifeq ($(CONFIG_ENCODERS),yes)
  CODEC_DOC_SECTIONS += encoder
endif
ifeq ($(CONFIG_DECODERS),yes)
  CODEC_DOC_SECTIONS += decoder
endif


ifeq ($(CONFIG_MSVS),yes)
CODEC_LIB=$(if $(CONFIG_STATIC_MSVCRT),vpxmt,vpxmd)
146
GTEST_LIB=$(if $(CONFIG_STATIC_MSVCRT),gtestmt,gtestmd)
John Koleszar's avatar
John Koleszar committed
147
148
149
150
151
152
153
# This variable uses deferred expansion intentionally, since the results of
# $(wildcard) may change during the course of the Make.
VS_PLATFORMS = $(foreach d,$(wildcard */Release/$(CODEC_LIB).lib),$(word 1,$(subst /, ,$(d))))
endif

# The following pairs define a mapping of locations in the distribution
# tree to locations in the source/build trees.
154
155
INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/vpx/%
INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/vpx_ports/%
156
INSTALL_MAPS += $(LIBSUBDIR)/%     %
John Koleszar's avatar
John Koleszar committed
157
158
INSTALL_MAPS += src/%     $(SRC_PATH_BARE)/%
ifeq ($(CONFIG_MSVS),yes)
159
160
INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/%  $(p)/Release/%)
INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/%  $(p)/Debug/%)
John Koleszar's avatar
John Koleszar committed
161
162
163
endif

CODEC_SRCS-$(BUILD_LIBVPX) += build/make/version.sh
John Koleszar's avatar
John Koleszar committed
164
CODEC_SRCS-$(BUILD_LIBVPX) += build/make/rtcd.sh
165
166
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/emmintrin_compat.h
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/vpx_once.h
John Koleszar's avatar
John Koleszar committed
167
168
CODEC_SRCS-$(BUILD_LIBVPX) += $(BUILD_PFX)vpx_config.c
INSTALL-SRCS-no += $(BUILD_PFX)vpx_config.c
169
ifeq ($(ARCH_X86)$(ARCH_X86_64),yes)
170
CODEC_SRCS-$(BUILD_LIBVPX) += third_party/x86inc/x86inc.asm
171
endif
John Koleszar's avatar
John Koleszar committed
172
173
174
CODEC_EXPORTS-$(BUILD_LIBVPX) += vpx/exports_com
CODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_enc
CODEC_EXPORTS-$(CONFIG_DECODERS) += vpx/exports_dec
175
176
177
178
179
180
181
182

INSTALL-LIBS-yes += include/vpx/vpx_codec.h
INSTALL-LIBS-yes += include/vpx/vpx_image.h
INSTALL-LIBS-yes += include/vpx/vpx_integer.h
INSTALL-LIBS-yes += include/vpx/vpx_codec_impl_top.h
INSTALL-LIBS-yes += include/vpx/vpx_codec_impl_bottom.h
INSTALL-LIBS-$(CONFIG_DECODERS) += include/vpx/vpx_decoder.h
INSTALL-LIBS-$(CONFIG_ENCODERS) += include/vpx/vpx_encoder.h
John Koleszar's avatar
John Koleszar committed
183
184
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
ifeq ($(CONFIG_MSVS),yes)
185
186
187
188
INSTALL-LIBS-yes                  += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/$(CODEC_LIB).lib)
INSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/$(CODEC_LIB)d.lib)
INSTALL-LIBS-$(CONFIG_SHARED) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/vpx.dll)
INSTALL-LIBS-$(CONFIG_SHARED) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/vpx.exp)
John Koleszar's avatar
John Koleszar committed
189
190
endif
else
191
INSTALL-LIBS-$(CONFIG_STATIC) += $(LIBSUBDIR)/libvpx.a
192
INSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(LIBSUBDIR)/libvpx_g.a
John Koleszar's avatar
John Koleszar committed
193
194
endif

195
CODEC_SRCS=$(call enabled,CODEC_SRCS)
John Koleszar's avatar
John Koleszar committed
196
197
198
INSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(CODEC_SRCS)
INSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(call enabled,CODEC_EXPORTS)

199
200
201
202
203
204
205
206

# Generate a list of all enabled sources, in particular for exporting to gyp
# based build systems.
libvpx_srcs.txt:
	@echo "    [CREATE] $@"
	@echo $(CODEC_SRCS) | xargs -n1 echo | sort -u > $@


John Koleszar's avatar
John Koleszar committed
207
208
209
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
ifeq ($(CONFIG_MSVS),yes)

210
obj_int_extract.$(VCPROJ_SFX): $(SRC_PATH_BARE)/build/make/obj_int_extract.c
211
	@cp $(SRC_PATH_BARE)/build/$(MSVS_ARCH_DIR)/obj_int_extract.bat .
Johann's avatar
Johann committed
212
	@echo "    [CREATE] $@"
213
	$(qexec)$(GEN_VCPROJ) \
Johann's avatar
Johann committed
214
215
216
217
218
219
220
221
222
223
    --exe \
    --target=$(TOOLCHAIN) \
    --name=obj_int_extract \
    --ver=$(CONFIG_VS_VERSION) \
    --proj-guid=E1360C65-D375-4335-8057-7ED99CC3F9B2 \
    $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
    --out=$@ $^ \
    -I. \
    -I"$(SRC_PATH_BARE)" \

224
PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.$(VCPROJ_SFX)
Johann's avatar
Johann committed
225

John Koleszar's avatar
John Koleszar committed
226
227
vpx.def: $(call enabled,CODEC_EXPORTS)
	@echo "    [CREATE] $@"
228
	$(qexec)$(SRC_PATH_BARE)/build/make/gen_msvs_def.sh\
John Koleszar's avatar
John Koleszar committed
229
230
231
232
            --name=vpx\
            --out=$@ $^
CLEAN-OBJS += vpx.def

233
vpx.$(VCPROJ_SFX): $(CODEC_SRCS) vpx.def obj_int_extract.$(VCPROJ_SFX)
John Koleszar's avatar
John Koleszar committed
234
	@echo "    [CREATE] $@"
235
	$(qexec)$(GEN_VCPROJ) \
Jim Bankoski's avatar
Jim Bankoski committed
236
237
            $(if $(CONFIG_SHARED),--dll,--lib) \
            --target=$(TOOLCHAIN) \
John Koleszar's avatar
John Koleszar committed
238
            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
Johann's avatar
Johann committed
239
240
241
242
243
244
            --name=vpx \
            --proj-guid=DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74 \
            --module-def=vpx.def \
            --ver=$(CONFIG_VS_VERSION) \
            --out=$@ $(CFLAGS) $^ \
            --src-path-bare="$(SRC_PATH_BARE)" \
John Koleszar's avatar
John Koleszar committed
245

246
PROJECTS-$(BUILD_LIBVPX) += vpx.$(VCPROJ_SFX)
John Koleszar's avatar
John Koleszar committed
247

248
249
vpx.$(VCPROJ_SFX): vpx_config.asm
vpx.$(VCPROJ_SFX): $(RTCD)
John Koleszar's avatar
John Koleszar committed
250
251
252
253
254

endif
else
LIBVPX_OBJS=$(call objs,$(CODEC_SRCS))
OBJS-$(BUILD_LIBVPX) += $(LIBVPX_OBJS)
255
LIBS-$(if $(BUILD_LIBVPX),$(CONFIG_STATIC)) += $(BUILD_PFX)libvpx.a $(BUILD_PFX)libvpx_g.a
John Koleszar's avatar
John Koleszar committed
256
$(BUILD_PFX)libvpx_g.a: $(LIBVPX_OBJS)
John Koleszar's avatar
John Koleszar committed
257

jimbankoski's avatar
jimbankoski committed
258

John Koleszar's avatar
John Koleszar committed
259
BUILD_LIBVPX_SO         := $(if $(BUILD_LIBVPX),$(CONFIG_SHARED))
jimbankoski's avatar
jimbankoski committed
260
261
262
263
264
265
266

ifeq ($(filter darwin%,$(TGT_OS)),$(TGT_OS))
LIBVPX_SO               := libvpx.$(VERSION_MAJOR).dylib
EXPORT_FILE             := libvpx.syms
LIBVPX_SO_SYMLINKS      := $(addprefix $(LIBSUBDIR)/, \
                             libvpx.dylib  )
else
John Koleszar's avatar
John Koleszar committed
267
LIBVPX_SO               := libvpx.so.$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)
jimbankoski's avatar
jimbankoski committed
268
269
270
271
272
273
274
EXPORT_FILE             := libvpx.ver
SYM_LINK                := libvpx.so
LIBVPX_SO_SYMLINKS      := $(addprefix $(LIBSUBDIR)/, \
                             libvpx.so libvpx.so.$(VERSION_MAJOR) \
                             libvpx.so.$(VERSION_MAJOR).$(VERSION_MINOR))
endif

275
276
LIBS-$(BUILD_LIBVPX_SO) += $(BUILD_PFX)$(LIBVPX_SO)\
                           $(notdir $(LIBVPX_SO_SYMLINKS))
jimbankoski's avatar
jimbankoski committed
277
$(BUILD_PFX)$(LIBVPX_SO): $(LIBVPX_OBJS) $(EXPORT_FILE)
Tero Rintaluoma's avatar
Tero Rintaluoma committed
278
$(BUILD_PFX)$(LIBVPX_SO): extralibs += -lm
John Koleszar's avatar
John Koleszar committed
279
$(BUILD_PFX)$(LIBVPX_SO): SONAME = libvpx.so.$(VERSION_MAJOR)
jimbankoski's avatar
jimbankoski committed
280
$(BUILD_PFX)$(LIBVPX_SO): EXPORTS_FILE = $(EXPORT_FILE)
John Koleszar's avatar
John Koleszar committed
281
282
283
284
285
286
287
288

libvpx.ver: $(call enabled,CODEC_EXPORTS)
	@echo "    [CREATE] $@"
	$(qexec)echo "{ global:" > $@
	$(qexec)for f in $?; do awk '{print $$2";"}' < $$f >>$@; done
	$(qexec)echo "local: *; };" >> $@
CLEAN-OBJS += libvpx.ver

jimbankoski's avatar
jimbankoski committed
289
290
291
292
293
libvpx.syms: $(call enabled,CODEC_EXPORTS)
	@echo "    [CREATE] $@"
	$(qexec)awk '{print "_"$$2}' $^ >$@
CLEAN-OBJS += libvpx.syms

294
295
define libvpx_symlink_template
$(1): $(2)
jimbankoski's avatar
jimbankoski committed
296
	@echo "    [LN]     $(2) $$@"
297
	$(qexec)mkdir -p $$(dir $$@)
jimbankoski's avatar
jimbankoski committed
298
	$(qexec)ln -sf $(2) $$@
299
300
301
302
303
304
305
endef

$(eval $(call libvpx_symlink_template,\
    $(addprefix $(BUILD_PFX),$(notdir $(LIBVPX_SO_SYMLINKS))),\
    $(BUILD_PFX)$(LIBVPX_SO)))
$(eval $(call libvpx_symlink_template,\
    $(addprefix $(DIST_DIR)/,$(LIBVPX_SO_SYMLINKS)),\
306
    $(LIBVPX_SO)))
John Koleszar's avatar
John Koleszar committed
307

jimbankoski's avatar
jimbankoski committed
308
309
310

INSTALL-LIBS-$(BUILD_LIBVPX_SO) += $(LIBVPX_SO_SYMLINKS)
INSTALL-LIBS-$(BUILD_LIBVPX_SO) += $(LIBSUBDIR)/$(LIBVPX_SO)
John Koleszar's avatar
John Koleszar committed
311

312
313
314
315
316
317
318

LIBS-$(BUILD_LIBVPX) += vpx.pc
vpx.pc: config.mk libs.mk
	@echo "    [CREATE] $@"
	$(qexec)echo '# pkg-config file from libvpx $(VERSION_STRING)' > $@
	$(qexec)echo 'prefix=$(PREFIX)' >> $@
	$(qexec)echo 'exec_prefix=$${prefix}' >> $@
Takanori MATSUURA's avatar
Takanori MATSUURA committed
319
	$(qexec)echo 'libdir=$${prefix}/$(LIBSUBDIR)' >> $@
320
321
322
323
324
325
326
	$(qexec)echo 'includedir=$${prefix}/include' >> $@
	$(qexec)echo '' >> $@
	$(qexec)echo 'Name: vpx' >> $@
	$(qexec)echo 'Description: WebM Project VPx codec implementation' >> $@
	$(qexec)echo 'Version: $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)' >> $@
	$(qexec)echo 'Requires:' >> $@
	$(qexec)echo 'Conflicts:' >> $@
327
	$(qexec)echo 'Libs: -L$${libdir} -lvpx -lm' >> $@
Johann's avatar
Johann committed
328
ifeq ($(HAVE_PTHREAD_H),yes)
329
	$(qexec)echo 'Libs.private: -lm -lpthread' >> $@
Johann's avatar
Johann committed
330
331
332
else
	$(qexec)echo 'Libs.private: -lm' >> $@
endif
333
334
335
336
	$(qexec)echo 'Cflags: -I$${includedir}' >> $@
INSTALL-LIBS-yes += $(LIBSUBDIR)/pkgconfig/vpx.pc
INSTALL_MAPS += $(LIBSUBDIR)/pkgconfig/%.pc %.pc
CLEAN-OBJS += vpx.pc
John Koleszar's avatar
John Koleszar committed
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
endif

LIBS-$(LIPO_LIBVPX) += libvpx.a
$(eval $(if $(LIPO_LIBVPX),$(call lipo_lib_template,libvpx.a)))

#
# Rule to make assembler configuration file from C configuration file
#
ifeq ($(ARCH_X86)$(ARCH_X86_64),yes)
# YASM
$(BUILD_PFX)vpx_config.asm: $(BUILD_PFX)vpx_config.h
	@echo "    [CREATE] $@"
	@egrep "#define [A-Z0-9_]+ [01]" $< \
	    | awk '{print $$2 " equ " $$3}' > $@
else
ADS2GAS=$(if $(filter yes,$(CONFIG_GCC)),| $(ASM_CONVERSION))
$(BUILD_PFX)vpx_config.asm: $(BUILD_PFX)vpx_config.h
	@echo "    [CREATE] $@"
	@egrep "#define [A-Z0-9_]+ [01]" $< \
	    | awk '{print $$2 " EQU " $$3}' $(ADS2GAS) > $@
	@echo "        END" $(ADS2GAS) >> $@
CLEAN-OBJS += $(BUILD_PFX)vpx_config.asm
endif

#
# Add assembler dependencies for configuration and offsets
#
Johann's avatar
Johann committed
364
365
$(filter %.s.o,$(OBJS-yes)):     $(BUILD_PFX)vpx_config.asm
$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
John Koleszar's avatar
John Koleszar committed
366

Johann's avatar
Johann committed
367

John Koleszar's avatar
John Koleszar committed
368
369
370
$(shell $(SRC_PATH_BARE)/build/make/version.sh "$(SRC_PATH_BARE)" $(BUILD_PFX)vpx_version.h)
CLEAN-OBJS += $(BUILD_PFX)vpx_version.h

John Koleszar's avatar
John Koleszar committed
371

372
373
374
375
##
## libvpx test directives
##
ifeq ($(CONFIG_UNIT_TESTS),yes)
376
LIBVPX_TEST_DATA_PATH ?= .
377
378
379

include $(SRC_PATH_BARE)/test/test.mk
LIBVPX_TEST_SRCS=$(addprefix test/,$(call enabled,LIBVPX_TEST_SRCS))
380
LIBVPX_TEST_BINS=./test_libvpx$(EXE_SFX)
381
382
383
384
385
386
387
388
389
390
391
392
LIBVPX_TEST_DATA=$(addprefix $(LIBVPX_TEST_DATA_PATH)/,\
                     $(call enabled,LIBVPX_TEST_DATA))
libvpx_test_data_url=http://downloads.webmproject.org/test_data/libvpx/$(1)

$(LIBVPX_TEST_DATA):
	@echo "    [DOWNLOAD] $@"
	$(qexec)trap 'rm -f $@' INT TERM &&\
            curl -L -o $@ $(call libvpx_test_data_url,$(@F))

testdata:: $(LIBVPX_TEST_DATA)
	$(qexec)if [ -x "$$(which sha1sum)" ]; then\
            echo "Checking test data:";\
393
394
395
396
397
398
            if [ -n "$(LIBVPX_TEST_DATA)" ]; then\
                for f in $(call enabled,LIBVPX_TEST_DATA); do\
                    grep $$f $(SRC_PATH_BARE)/test/test-data.sha1 |\
                        (cd $(LIBVPX_TEST_DATA_PATH); sha1sum -c);\
                done; \
            fi; \
399
400
401
        else\
            echo "Skipping test data integrity check, sha1sum not found.";\
        fi
402

403
404
405
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
ifeq ($(CONFIG_MSVS),yes)

406
gtest.$(VCPROJ_SFX): $(SRC_PATH_BARE)/third_party/googletest/src/src/gtest-all.cc
407
	@echo "    [CREATE] $@"
408
	$(qexec)$(GEN_VCPROJ) \
409
410
411
412
413
414
415
            --lib \
            --target=$(TOOLCHAIN) \
            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
            --name=gtest \
            --proj-guid=EC00E1EC-AF68-4D92-A255-181690D1C9B1 \
            --ver=$(CONFIG_VS_VERSION) \
            --src-path-bare="$(SRC_PATH_BARE)" \
416
            -D_VARIADIC_MAX=10 \
417
            --out=gtest.$(VCPROJ_SFX) $(SRC_PATH_BARE)/third_party/googletest/src/src/gtest-all.cc \
418
419
            -I. -I"$(SRC_PATH_BARE)/third_party/googletest/src/include" -I"$(SRC_PATH_BARE)/third_party/googletest/src"

420
PROJECTS-$(CONFIG_MSVS) += gtest.$(VCPROJ_SFX)
421

422
test_libvpx.$(VCPROJ_SFX): $(LIBVPX_TEST_SRCS) vpx.$(VCPROJ_SFX) gtest.$(VCPROJ_SFX)
423
	@echo "    [CREATE] $@"
424
	$(qexec)$(GEN_VCPROJ) \
425
426
427
            --exe \
            --target=$(TOOLCHAIN) \
            --name=test_libvpx \
428
            -D_VARIADIC_MAX=10 \
429
430
431
432
            --proj-guid=CD837F5F-52D8-4314-A370-895D614166A7 \
            --ver=$(CONFIG_VS_VERSION) \
            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
            --out=$@ $(INTERNAL_CFLAGS) $(CFLAGS) \
433
            -I. -I"$(SRC_PATH_BARE)/third_party/googletest/src/include" \
Martin Storsjo's avatar
Martin Storsjo committed
434
            -L. -l$(CODEC_LIB) -l$(GTEST_LIB) $^
435

436
PROJECTS-$(CONFIG_MSVS) += test_libvpx.$(VCPROJ_SFX)
437

438
LIBVPX_TEST_BINS := $(addprefix $(TGT_OS:win64=x64)/Release/,$(notdir $(LIBVPX_TEST_BINS)))
439
440
441
442
443
444
endif
else

include $(SRC_PATH_BARE)/third_party/googletest/gtest.mk
GTEST_SRCS := $(addprefix third_party/googletest/src/,$(call enabled,GTEST_SRCS))
GTEST_OBJS=$(call objs,$(GTEST_SRCS))
445
446
$(GTEST_OBJS) $(GTEST_OBJS:.o=.d): CXXFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src
$(GTEST_OBJS) $(GTEST_OBJS:.o=.d): CXXFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src/include
447
448
449
450
OBJS-$(BUILD_LIBVPX) += $(GTEST_OBJS)
LIBS-$(BUILD_LIBVPX) += $(BUILD_PFX)libgtest.a $(BUILD_PFX)libgtest_g.a
$(BUILD_PFX)libgtest_g.a: $(GTEST_OBJS)

451
452
453
LIBVPX_TEST_OBJS=$(sort $(call objs,$(LIBVPX_TEST_SRCS)))
$(LIBVPX_TEST_OBJS) $(LIBVPX_TEST_OBJS:.o=.d): CXXFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src
$(LIBVPX_TEST_OBJS) $(LIBVPX_TEST_OBJS:.o=.d): CXXFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src/include
454
OBJS-$(BUILD_LIBVPX) += $(LIBVPX_TEST_OBJS)
James Zern's avatar
James Zern committed
455
BINS-$(BUILD_LIBVPX) += $(LIBVPX_TEST_BINS)
456

457
458
459
460
461
# Install test sources only if codec source is included
INSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(patsubst $(SRC_PATH_BARE)/%,%,\
    $(shell find $(SRC_PATH_BARE)/third_party/googletest -type f))
INSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(LIBVPX_TEST_SRCS)

462
463
CODEC_LIB=$(if $(CONFIG_DEBUG_LIBS),vpx_g,vpx)
CODEC_LIB_SUF=$(if $(CONFIG_SHARED),.so,.a)
464
$(foreach bin,$(LIBVPX_TEST_BINS),\
465
466
    $(if $(BUILD_LIBVPX),$(eval $(bin): \
        lib$(CODEC_LIB)$(CODEC_LIB_SUF) libgtest.a ))\
467
    $(if $(BUILD_LIBVPX),$(eval $(call linkerxx_template,$(bin),\
468
        $(LIBVPX_TEST_OBJS) \
469
        -L. -lvpx -lgtest -lpthread -lm)\
470
471
472
473
        )))\
    $(if $(LIPO_LIBS),$(eval $(call lipo_bin_template,$(bin))))\

endif
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490

define test_shard_template
test:: test_shard.$(1)
test_shard.$(1): $(LIBVPX_TEST_BINS) testdata
	@set -e; \
	 for t in $(LIBVPX_TEST_BINS); do \
	   export GTEST_SHARD_INDEX=$(1); \
	   export GTEST_TOTAL_SHARDS=$(2); \
	   $$$$t; \
	 done
.PHONY: test_shard.$(1)
endef

NUM_SHARDS := 10
SHARDS := 0 1 2 3 4 5 6 7 8 9
$(foreach s,$(SHARDS),$(eval $(call test_shard_template,$(s),$(NUM_SHARDS))))

491
492
493
494
495
endif

##
## documentation directives
##
John Koleszar's avatar
John Koleszar committed
496
497
498
499
500
501
502
503
504
CLEAN-OBJS += libs.doxy
DOCS-yes += libs.doxy
libs.doxy: $(CODEC_DOC_SRCS)
	@echo "    [CREATE] $@"
	@rm -f $@
	@echo "INPUT += $^" >> $@
	@echo "PREDEFINED = VPX_CODEC_DISABLE_COMPAT" >> $@
	@echo "INCLUDE_PATH += ." >> $@;
	@echo "ENABLED_SECTIONS += $(sort $(CODEC_DOC_SECTIONS))" >> $@
505

506
507
## Generate rtcd.h for all objects
$(OBJS-yes:.o=.d): $(RTCD)
508
509
510

## Update the global src list
SRCS += $(CODEC_SRCS) $(LIBVPX_TEST_SRCS) $(GTEST_SRCS)