libs.mk 17.5 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 15 16 17 18
# 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)
  ASM:=$(if $(filter yes,$(CONFIG_GCC)),.asm.s,.asm)
else
  ASM:=.asm
endif
John Koleszar's avatar
John Koleszar committed
19

Johann's avatar
Johann committed
20
CODEC_SRCS-yes += CHANGELOG
21 22
CODEC_SRCS-yes += libs.mk

Johann's avatar
Johann committed
23 24 25 26 27 28 29
# 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)

30 31
include $(SRC_PATH_BARE)/vpx/vpx_codec.mk
CODEC_SRCS-yes += $(addprefix vpx/,$(call enabled,API_SRCS))
John Koleszar's avatar
John Koleszar committed
32 33 34 35 36 37 38

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
39 40 41
include $(SRC_PATH_BARE)/vpx_ports/vpx_ports.mk
CODEC_SRCS-yes += $(addprefix vpx_ports/,$(call enabled,PORTS_SRCS))

John Koleszar's avatar
John Koleszar committed
42 43 44 45 46 47

ifeq ($(CONFIG_VP8_ENCODER),yes)
  VP8_PREFIX=vp8/
  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))
48
  CODEC_SRCS-yes += $(VP8_PREFIX)vp8cx.mk vpx/vp8.h vpx/vp8cx.h
49
  CODEC_SRCS-$(ARCH_ARM) += $(VP8_PREFIX)vp8cx_arm.mk
50
  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8cx.h
51 52
  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
  CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8cx.h
John Koleszar's avatar
John Koleszar committed
53 54 55 56 57 58 59 60
  CODEC_DOC_SECTIONS += vp8 vp8_encoder
endif

ifeq ($(CONFIG_VP8_DECODER),yes)
  VP8_PREFIX=vp8/
  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))
61 62 63 64
  CODEC_SRCS-yes += $(VP8_PREFIX)vp8dx.mk vpx/vp8.h vpx/vp8dx.h
  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8dx.h
  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
  CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8dx.h
John Koleszar's avatar
John Koleszar committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78
  CODEC_DOC_SECTIONS += vp8 vp8_decoder
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)
79
GTEST_LIB=$(if $(CONFIG_STATIC_MSVCRT),gtestmt,gtestmd)
John Koleszar's avatar
John Koleszar committed
80 81 82 83 84 85 86
# 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.
87 88
INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/vpx/%
INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/vpx_ports/%
89
INSTALL_MAPS += $(LIBSUBDIR)/%     %
John Koleszar's avatar
John Koleszar committed
90 91
INSTALL_MAPS += src/%     $(SRC_PATH_BARE)/%
ifeq ($(CONFIG_MSVS),yes)
92 93
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
94 95 96
endif

CODEC_SRCS-$(BUILD_LIBVPX) += build/make/version.sh
John Koleszar's avatar
John Koleszar committed
97
CODEC_SRCS-$(BUILD_LIBVPX) += build/make/rtcd.sh
98
CODEC_SRCS-$(BUILD_LIBVPX) += vpx/vpx_integer.h
John Koleszar's avatar
John Koleszar committed
99 100
CODEC_SRCS-$(BUILD_LIBVPX) += $(BUILD_PFX)vpx_config.c
INSTALL-SRCS-no += $(BUILD_PFX)vpx_config.c
John Koleszar's avatar
John Koleszar committed
101 102 103
CODEC_EXPORTS-$(BUILD_LIBVPX) += vpx/exports_com
CODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_enc
CODEC_EXPORTS-$(CONFIG_DECODERS) += vpx/exports_dec
104 105 106 107 108 109 110 111

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
112 113
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
ifeq ($(CONFIG_MSVS),yes)
114 115 116 117
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
118 119
endif
else
120
INSTALL-LIBS-$(CONFIG_STATIC) += $(LIBSUBDIR)/libvpx.a
121
INSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(LIBSUBDIR)/libvpx_g.a
John Koleszar's avatar
John Koleszar committed
122 123
endif

124
CODEC_SRCS=$(filter-out %_test.cc,$(call enabled,CODEC_SRCS))
John Koleszar's avatar
John Koleszar committed
125 126 127
INSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(CODEC_SRCS)
INSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(call enabled,CODEC_EXPORTS)

128 129 130 131 132 133 134 135

# 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
136 137 138
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
ifeq ($(CONFIG_MSVS),yes)

Johann's avatar
Johann committed
139 140 141
obj_int_extract.vcproj: $(SRC_PATH_BARE)/build/make/obj_int_extract.c
	@cp $(SRC_PATH_BARE)/build/x86-msvs/obj_int_extract.bat .
	@echo "    [CREATE] $@"
142
	$(qexec)$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh \
Johann's avatar
Johann committed
143 144 145 146 147 148 149 150 151 152 153 154 155
    --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)" \

PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.vcproj
PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.bat

John Koleszar's avatar
John Koleszar committed
156 157
vpx.def: $(call enabled,CODEC_EXPORTS)
	@echo "    [CREATE] $@"
158
	$(qexec)$(SRC_PATH_BARE)/build/make/gen_msvs_def.sh\
John Koleszar's avatar
John Koleszar committed
159 160 161 162 163 164
            --name=vpx\
            --out=$@ $^
CLEAN-OBJS += vpx.def

vpx.vcproj: $(CODEC_SRCS) vpx.def
	@echo "    [CREATE] $@"
165
	$(qexec)$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh \
Johann's avatar
Johann committed
166 167
			--lib \
			--target=$(TOOLCHAIN) \
John Koleszar's avatar
John Koleszar committed
168
            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
Johann's avatar
Johann committed
169 170 171 172 173 174
            --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
175 176 177 178

PROJECTS-$(BUILD_LIBVPX) += vpx.vcproj

vpx.vcproj: vpx_config.asm
John Koleszar's avatar
John Koleszar committed
179
vpx.vcproj: vpx_rtcd.h
John Koleszar's avatar
John Koleszar committed
180 181 182 183 184

endif
else
LIBVPX_OBJS=$(call objs,$(CODEC_SRCS))
OBJS-$(BUILD_LIBVPX) += $(LIBVPX_OBJS)
185
LIBS-$(if $(BUILD_LIBVPX),$(CONFIG_STATIC)) += $(BUILD_PFX)libvpx.a $(BUILD_PFX)libvpx_g.a
John Koleszar's avatar
John Koleszar committed
186
$(BUILD_PFX)libvpx_g.a: $(LIBVPX_OBJS)
John Koleszar's avatar
John Koleszar committed
187 188 189

BUILD_LIBVPX_SO         := $(if $(BUILD_LIBVPX),$(CONFIG_SHARED))
LIBVPX_SO               := libvpx.so.$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)
190 191
LIBS-$(BUILD_LIBVPX_SO) += $(BUILD_PFX)$(LIBVPX_SO)\
                           $(notdir $(LIBVPX_SO_SYMLINKS))
John Koleszar's avatar
John Koleszar committed
192
$(BUILD_PFX)$(LIBVPX_SO): $(LIBVPX_OBJS) libvpx.ver
Tero Rintaluoma's avatar
Tero Rintaluoma committed
193
$(BUILD_PFX)$(LIBVPX_SO): extralibs += -lm
John Koleszar's avatar
John Koleszar committed
194 195 196 197 198 199 200 201 202 203 204 205 206
$(BUILD_PFX)$(LIBVPX_SO): SONAME = libvpx.so.$(VERSION_MAJOR)
$(BUILD_PFX)$(LIBVPX_SO): SO_VERSION_SCRIPT = libvpx.ver
LIBVPX_SO_SYMLINKS      := $(addprefix $(LIBSUBDIR)/, \
                             libvpx.so libvpx.so.$(VERSION_MAJOR) \
                             libvpx.so.$(VERSION_MAJOR).$(VERSION_MINOR))

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

207 208 209 210 211 212 213 214 215 216 217 218
define libvpx_symlink_template
$(1): $(2)
	@echo "    [LN]      $$@"
	$(qexec)ln -sf $(LIBVPX_SO) $$@
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)),\
    $(DIST_DIR)/$(LIBSUBDIR)/$(LIBVPX_SO)))
John Koleszar's avatar
John Koleszar committed
219 220 221

INSTALL-LIBS-$(CONFIG_SHARED) += $(LIBVPX_SO_SYMLINKS)
INSTALL-LIBS-$(CONFIG_SHARED) += $(LIBSUBDIR)/$(LIBVPX_SO)
222 223 224 225 226 227 228

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
229
	$(qexec)echo 'libdir=$${prefix}/$(LIBSUBDIR)' >> $@
230 231 232 233 234 235 236
	$(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:' >> $@
237 238
	$(qexec)echo 'Libs: -L$${libdir} -lvpx' >> $@
	$(qexec)echo 'Libs.private: -lm -lpthread' >> $@
239 240 241 242
	$(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
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269
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
270 271
$(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
272

Johann's avatar
Johann committed
273 274 275
#
# Calculate platform- and compiler-specific offsets for hand coded assembly
#
Johann's avatar
Johann committed
276

Johann's avatar
Johann committed
277 278
OFFSET_PATTERN:='^[a-zA-Z0-9_]* EQU'

Johann's avatar
Johann committed
279
ifeq ($(filter icc gcc,$(TGT_CC)), $(TGT_CC))
280
    $(BUILD_PFX)asm_com_offsets.asm: $(BUILD_PFX)$(VP8_PREFIX)common/asm_com_offsets.c.S
281 282
	@echo "    [CREATE] $@"
	$(qexec)LC_ALL=C grep $(OFFSET_PATTERN) $< | tr -d '$$\#' $(ADS2GAS) > $@
283 284
    $(BUILD_PFX)$(VP8_PREFIX)common/asm_com_offsets.c.S: $(VP8_PREFIX)common/asm_com_offsets.c
    CLEAN-OBJS += $(BUILD_PFX)asm_com_offsets.asm $(BUILD_PFX)$(VP8_PREFIX)common/asm_com_offsets.c.S
Johann's avatar
Johann committed
285

286
    $(BUILD_PFX)asm_enc_offsets.asm: $(BUILD_PFX)$(VP8_PREFIX)encoder/asm_enc_offsets.c.S
287 288
	@echo "    [CREATE] $@"
	$(qexec)LC_ALL=C grep $(OFFSET_PATTERN) $< | tr -d '$$\#' $(ADS2GAS) > $@
289 290
    $(BUILD_PFX)$(VP8_PREFIX)encoder/asm_enc_offsets.c.S: $(VP8_PREFIX)encoder/asm_enc_offsets.c
    CLEAN-OBJS += $(BUILD_PFX)asm_enc_offsets.asm $(BUILD_PFX)$(VP8_PREFIX)encoder/asm_enc_offsets.c.S
Johann's avatar
Johann committed
291

292
    $(BUILD_PFX)asm_dec_offsets.asm: $(BUILD_PFX)$(VP8_PREFIX)decoder/asm_dec_offsets.c.S
293 294
	@echo "    [CREATE] $@"
	$(qexec)LC_ALL=C grep $(OFFSET_PATTERN) $< | tr -d '$$\#' $(ADS2GAS) > $@
295 296
    $(BUILD_PFX)$(VP8_PREFIX)decoder/asm_dec_offsets.c.S: $(VP8_PREFIX)decoder/asm_dec_offsets.c
    CLEAN-OBJS += $(BUILD_PFX)asm_dec_offsets.asm $(BUILD_PFX)$(VP8_PREFIX)decoder/asm_dec_offsets.c.S
Johann's avatar
Johann committed
297 298
else
  ifeq ($(filter rvct,$(TGT_CC)), $(TGT_CC))
Johann's avatar
Johann committed
299
    asm_com_offsets.asm: obj_int_extract
300
    asm_com_offsets.asm: $(VP8_PREFIX)common/asm_com_offsets.c.o
301 302
	@echo "    [CREATE] $@"
	$(qexec)./obj_int_extract rvds $< $(ADS2GAS) > $@
Johann's avatar
Johann committed
303 304 305
    OBJS-yes += $(VP8_PREFIX)common/asm_com_offsets.c.o
    CLEAN-OBJS += asm_com_offsets.asm
    $(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_com_offsets.asm
Johann's avatar
Johann committed
306

Johann's avatar
Johann committed
307 308
    asm_enc_offsets.asm: obj_int_extract
    asm_enc_offsets.asm: $(VP8_PREFIX)encoder/asm_enc_offsets.c.o
309 310
	@echo "    [CREATE] $@"
	$(qexec)./obj_int_extract rvds $< $(ADS2GAS) > $@
Johann's avatar
Johann committed
311 312 313
    OBJS-yes += $(VP8_PREFIX)encoder/asm_enc_offsets.c.o
    CLEAN-OBJS += asm_enc_offsets.asm
    $(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_enc_offsets.asm
Johann's avatar
Johann committed
314

Johann's avatar
Johann committed
315 316
    asm_dec_offsets.asm: obj_int_extract
    asm_dec_offsets.asm: $(VP8_PREFIX)decoder/asm_dec_offsets.c.o
317 318
	@echo "    [CREATE] $@"
	$(qexec)./obj_int_extract rvds $< $(ADS2GAS) > $@
Johann's avatar
Johann committed
319 320 321
    OBJS-yes += $(VP8_PREFIX)decoder/asm_dec_offsets.c.o
    CLEAN-OBJS += asm_dec_offsets.asm
    $(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_dec_offsets.asm
Johann's avatar
Johann committed
322 323 324
  endif
endif

John Koleszar's avatar
John Koleszar committed
325 326 327
$(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
328 329 330
#
# Rule to generate runtime cpu detection files
#
331
$(BUILD_PFX)vpx_rtcd.h: $(SRC_PATH_BARE)/$(sort $(filter %rtcd_defs.sh,$(CODEC_SRCS)))
John Koleszar's avatar
John Koleszar committed
332 333 334 335 336 337 338
	@echo "    [CREATE] $@"
	$(qexec)$(SRC_PATH_BARE)/build/make/rtcd.sh --arch=$(TGT_ISA) \
          --sym=vpx_rtcd \
          --config=$(target)$(if $(FAT_ARCHS),,-$(TOOLCHAIN)).mk \
          $(RTCD_OPTIONS) $^ > $@
CLEAN-OBJS += $(BUILD_PFX)vpx_rtcd.h

339 340 341 342
CODEC_DOC_SRCS += vpx/vpx_codec.h \
                  vpx/vpx_decoder.h \
                  vpx/vpx_encoder.h \
                  vpx/vpx_image.h
John Koleszar's avatar
John Koleszar committed
343

344 345 346 347
##
## libvpx test directives
##
ifeq ($(CONFIG_UNIT_TESTS),yes)
348
LIBVPX_TEST_DATA_PATH ?= .
349 350 351 352

include $(SRC_PATH_BARE)/test/test.mk
LIBVPX_TEST_SRCS=$(addprefix test/,$(call enabled,LIBVPX_TEST_SRCS))
LIBVPX_TEST_BINS=./test_libvpx
353 354 355 356 357 358 359 360 361 362 363 364
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:";\
365 366 367 368 369 370
            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; \
371 372 373
        else\
            echo "Skipping test data integrity check, sha1sum not found.";\
        fi
374

375 376 377 378 379
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
ifeq ($(CONFIG_MSVS),yes)

gtest.vcproj: $(SRC_PATH_BARE)/third_party/googletest/src/src/gtest-all.cc
	@echo "    [CREATE] $@"
380
	$(qexec)$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh \
381 382 383 384 385 386 387 388 389 390 391 392
            --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)" \
            --out=gtest.vcproj $(SRC_PATH_BARE)/third_party/googletest/src/src/gtest-all.cc \
            -I. -I"$(SRC_PATH_BARE)/third_party/googletest/src/include" -I"$(SRC_PATH_BARE)/third_party/googletest/src"

PROJECTS-$(CONFIG_MSVS) += gtest.vcproj

393 394
test_libvpx.vcproj: $(LIBVPX_TEST_SRCS)
	@echo "    [CREATE] $@"
395
	$(qexec)$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh \
396 397 398 399 400 401 402
            --exe \
            --target=$(TOOLCHAIN) \
            --name=test_libvpx \
            --proj-guid=CD837F5F-52D8-4314-A370-895D614166A7 \
            --ver=$(CONFIG_VS_VERSION) \
            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
            --out=$@ $(INTERNAL_CFLAGS) $(CFLAGS) \
403
            -I. -I"$(SRC_PATH_BARE)/third_party/googletest/src/include" \
404
            -L. -l$(CODEC_LIB) -lwinmm -l$(GTEST_LIB) $^
405

406
PROJECTS-$(CONFIG_MSVS) += test_libvpx.vcproj
407

408
test:: testdata
409 410 411 412 413 414 415
	@set -e; for t in $(addprefix Win32/Release/,$(notdir $(LIBVPX_TEST_BINS:.cc=.exe))); do $$t; done
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))
416 417
$(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
418 419 420 421
OBJS-$(BUILD_LIBVPX) += $(GTEST_OBJS)
LIBS-$(BUILD_LIBVPX) += $(BUILD_PFX)libgtest.a $(BUILD_PFX)libgtest_g.a
$(BUILD_PFX)libgtest_g.a: $(GTEST_OBJS)

422 423 424
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
425
OBJS-$(BUILD_LIBVPX) += $(LIBVPX_TEST_OBJS)
James Zern's avatar
James Zern committed
426
BINS-$(BUILD_LIBVPX) += $(LIBVPX_TEST_BINS)
427

428 429 430 431 432
# 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)

433 434
CODEC_LIB=$(if $(CONFIG_DEBUG_LIBS),vpx_g,vpx)
CODEC_LIB_SUF=$(if $(CONFIG_SHARED),.so,.a)
435
$(foreach bin,$(LIBVPX_TEST_BINS),\
436 437
    $(if $(BUILD_LIBVPX),$(eval $(bin): \
        lib$(CODEC_LIB)$(CODEC_LIB_SUF) libgtest.a ))\
438
    $(if $(BUILD_LIBVPX),$(eval $(call linkerxx_template,$(bin),\
439
        $(LIBVPX_TEST_OBJS) \
440 441 442 443
        -L. -lvpx -lgtest -lpthread -lm)\
        )))\
    $(if $(LIPO_LIBS),$(eval $(call lipo_bin_template,$(bin))))\

444
test:: $(LIBVPX_TEST_BINS) testdata
445 446 447 448 449 450 451 452
	@set -e; for t in $(LIBVPX_TEST_BINS); do $$t; done

endif
endif

##
## documentation directives
##
John Koleszar's avatar
John Koleszar committed
453 454 455 456 457 458 459 460 461
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))" >> $@
462 463 464

## Generate vpx_rtcd.h for all objects
$(OBJS-yes:.o=.d): $(BUILD_PFX)vpx_rtcd.h