1 # Main makefile for VLC 3rd party libraries ("contrib")
2 # Copyright (C) 2003-2011 the VideoLAN team
4 # This file is under the same license as the vlc package.
8 # bootstrap configuration
11 TOPSRC ?
= ..
/..
/contrib
14 TARBALLS
:= $(TOPSRC
)/tarballs
16 PATH
:=$(abspath ..
/..
/extras
/tools
/build
/bin
):$(PATH
)
19 PKGS_ALL
:= $(patsubst $(SRC
)/%/rules.mak
,%,$(wildcard $(SRC
)/*/rules.mak
))
20 DATE
:= $(shell date
+%Y
%m
%d
)
23 # Common download locations
24 GNU ?
= http
://ftp.gnu.org
/gnu
25 SF
:= https
://netcologne.dl.sourceforge.net
/
26 VIDEOLAN
:= http
://downloads.videolan.org
/pub
/videolan
27 CONTRIB_VIDEOLAN
:= http
://downloads.videolan.org
/pub
/contrib
28 GITHUB
:= https
://github.com
/
31 # Machine-dependent variables
34 PREFIX ?
= $(TOPDST
)/$(HOST
)
35 PREFIX
:= $(abspath
$(PREFIX
))
36 BUILDPREFIX ?
= $(TOPDST
)
37 BUILDPREFIX
:= $(abspath
$(BUILDPREFIX
))
38 BUILDBINDIR ?
= $(BUILDPREFIX
)/bin
39 ifneq ($(HOST
),$(BUILD
))
40 HAVE_CROSS_COMPILE
= 1
42 ARCH
:= $(shell $(SRC
)/get-arch.sh
$(HOST
))
44 ifeq ($(ARCH
)-$(HAVE_WIN32
),x86_64-1
)
48 ifdef HAVE_CROSS_COMPILE
51 need_pkg
= $(shell $(PKG_CONFIG
) $(1) || echo
1)
55 # Default values for tools
57 ifndef HAVE_CROSS_COMPILE
58 ifneq ($(findstring $(origin CC
),undefined default
),)
61 ifneq ($(findstring $(origin CXX
),undefined default
),)
64 ifneq ($(findstring $(origin LD
),undefined default
),)
67 ifneq ($(findstring $(origin AR
),undefined default
),)
70 ifneq ($(findstring $(origin RANLIB
),undefined default
),)
73 ifneq ($(findstring $(origin STRIP
),undefined default
),)
76 ifneq ($(findstring $(origin WIDL
),undefined default
),)
80 ifneq ($(findstring $(origin CC
),undefined default
),)
83 ifneq ($(findstring $(origin CXX
),undefined default
),)
86 ifneq ($(findstring $(origin LD
),undefined default
),)
89 ifneq ($(findstring $(origin AR
),undefined default
),)
92 ifneq ($(findstring $(origin RANLIB
),undefined default
),)
93 RANLIB
:= $(HOST
)-ranlib
95 ifneq ($(findstring $(origin STRIP
),undefined default
),)
96 STRIP
:= $(HOST
)-strip
98 ifneq ($(findstring $(origin WIDL
),undefined default
),)
104 ifneq ($(findstring $(origin CC
),undefined default
),)
107 ifneq ($(findstring $(origin CXX
),undefined default
),)
114 EXTRA_CFLAGS
+= -isysroot
$(MACOSX_SDK
) -mmacosx-version-min
=$(MIN_OSX_VERSION
) -DMACOSX_DEPLOYMENT_TARGET
=$(MIN_OSX_VERSION
)
115 EXTRA_CXXFLAGS
+= -stdlib
=libc
++
116 EXTRA_LDFLAGS
+= -Wl
,-syslibroot
,$(MACOSX_SDK
) -mmacosx-version-min
=$(MIN_OSX_VERSION
) -isysroot
$(MACOSX_SDK
) -DMACOSX_DEPLOYMENT_TARGET
=$(MIN_OSX_VERSION
)
117 ifeq ($(ARCH
),x86_64
)
119 EXTRA_LDFLAGS
+= -m64
122 EXTRA_LDFLAGS
+= -m32
125 XCODE_FLAGS
= MACOSX_DEPLOYMENT_TARGET
=$(MIN_OSX_VERSION
) -sdk macosx
$(OSX_VERSION
) -arch
$(ARCH
)
135 AS
=perl
$(abspath ..
/..
/extras
/tools
/build
/bin
/gas-preprocessor.pl
) $(CC
)
136 CCAS
=gas-preprocessor.pl
$(CC
) -c
144 EXTRA_CFLAGS
+= $(CFLAGS
)
145 EXTRA_LDFLAGS
+= $(LDFLAGS
)
149 ifneq ($(shell $(CC
) $(CFLAGS
) -E
-dM
-include _mingw.h
- < /dev
/null | grep
-E __MINGW64_VERSION_MAJOR
),)
155 ifeq ($(ARCH
),x86_64
)
157 EXTRA_LDFLAGS
+= -m64
160 EXTRA_LDFLAGS
+= -m32
164 cppcheck
= $(shell $(CC
) $(CFLAGS
) -E
-dM
- < /dev
/null | grep
-E
$(1))
166 EXTRA_CFLAGS
+= -I
$(PREFIX
)/include
167 CPPFLAGS
:= $(CPPFLAGS
) $(EXTRA_CFLAGS
)
168 CFLAGS
:= $(CFLAGS
) $(EXTRA_CFLAGS
) -g
169 CXXFLAGS
:= $(CXXFLAGS
) $(EXTRA_CFLAGS
) $(EXTRA_CXXFLAGS
) -g
170 EXTRA_LDFLAGS
+= -L
$(PREFIX
)/lib
171 LDFLAGS
:= $(LDFLAGS
) $(EXTRA_LDFLAGS
)
173 ifndef WITH_OPTIMIZATION
174 CFLAGS
:= $(CFLAGS
) -O0
175 CXXFLAGS
:= $(CXXFLAGS
) -O0
177 CFLAGS
:= $(CFLAGS
) -O2
178 CXXFLAGS
:= $(CXXFLAGS
) -O2
181 # Do not export those! Use HOSTVARS.
183 # Do the FPU detection, after we have figured out our compilers and flags.
184 ifneq ($(findstring $(ARCH
),aarch64 i386 ppc ppc64 sparc sparc64 x86_64
),)
185 # This should be consistent with include/vlc_cpu.h
187 else ifneq ($(findstring $(ARCH
),arm
),)
188 ifneq ($(call cppcheck
, __VFP_FP__
)),)
189 ifeq ($(call cppcheck
, __SOFTFP__
),)
193 else ifneq ($(call cppcheck
, __mips_hard_float
),)
197 ACLOCAL_AMFLAGS
+= -I
$(PREFIX
)/share
/aclocal
198 export ACLOCAL_AMFLAGS
204 PKG_CONFIG ?
= pkg-config
205 ifdef HAVE_CROSS_COMPILE
206 # This inhibits .pc file from within the cross-compilation toolchain sysroot.
207 # Hopefully, nobody ever needs that.
208 PKG_CONFIG_PATH
:= /usr
/share
/pkgconfig
209 PKG_CONFIG_LIBDIR
:= /usr
/$(HOST
)/lib
/pkgconfig
210 export PKG_CONFIG_LIBDIR
212 PKG_CONFIG_PATH
:= $(PREFIX
)/lib
/pkgconfig
:$(PKG_CONFIG_PATH
)
213 export PKG_CONFIG_PATH
216 ifeq ($(shell git
--version
>/dev
/null
2>&1 || echo FAIL
),)
220 GIT ?
= $(error git not found
!)
223 ifeq ($(shell svn
--version
>/dev
/null
2>&1 || echo FAIL
),)
227 SVN ?
= $(error subversion client
(svn
) not found
!)
229 ifeq ($(shell curl
--version
>/dev
/null
2>&1 || echo FAIL
),)
230 download
= curl
-f
-L
-- "$(1)" > "$@"
231 else ifeq ($(shell wget
--version
>/dev
/null
2>&1 || echo FAIL
),)
232 download
= (rm -f
$@.tmp
&& \
233 wget
--passive
-c
-p
-O
$@.tmp
"$(1)" && \
236 else ifeq ($(which fetch
>/dev
/null
2>&1 || echo FAIL
),)
237 download
= (rm -f
$@.tmp
&& \
238 fetch
-p
-o
$@.tmp
"$(1)" && \
242 download
= $(error Neither curl nor wget found
!)
245 download_pkg
= $(call download
,$(CONTRIB_VIDEOLAN
)/$(2)/$(lastword
$(subst /, ,$(@
)))) || \
246 ( $(call download
,$(1)) && echo
"Please upload this package $(lastword $(subst /, ,$(@))) to our FTP" )
248 ifeq ($(shell which xz
>/dev
/null
2>&1 || echo FAIL
),)
251 XZ ?
= $(error XZ
(LZMA
) compressor not found
!)
254 ifeq ($(shell sha512sum
--version
>/dev
/null
2>&1 || echo FAIL
),)
255 SHA512SUM
= sha512sum
--check
256 else ifeq ($(shell shasum
--version
>/dev
/null
2>&1 || echo FAIL
),)
257 SHA512SUM
= shasum
-a
512 --check
258 else ifeq ($(shell openssl version
>/dev
/null
2>&1 || echo FAIL
),)
259 SHA512SUM
= openssl dgst
-sha512
261 SHA512SUM
= $(error SHA-512 checksumming not found
!)
264 ifeq ($(shell protoc
--version
>/dev
/null
2>&1 || echo FAIL
),)
267 PROTOC ?
= $(error Protobuf compiler
(protoc
) not found
!)
273 HOSTCONF
:= --prefix="$(PREFIX)"
274 HOSTCONF
+= --datarootdir
="$(PREFIX)/share"
275 HOSTCONF
+= --includedir="$(PREFIX)/include"
276 HOSTCONF
+= --libdir="$(PREFIX)/lib"
277 HOSTCONF
+= --build
="$(BUILD)" --host
="$(HOST)" --target
="$(HOST)"
278 HOSTCONF
+= --program-prefix
=""
280 HOSTCONF
+= --enable-static
--disable-shared
--disable-dependency-tracking
282 HOSTCONF
+= --without-pic
285 HOSTCONF
+= --with-pic
290 CC
="$(CC)" CXX
="$(CXX)" LD
="$(LD)" \
291 AR
="$(AR)" CCAS
="$(CCAS)" RANLIB
="$(RANLIB)" STRIP
="$(STRIP)" \
292 PATH
="$(PREFIX)/bin:$(PATH)"
293 HOSTVARS
:= $(HOSTTOOLS
) \
294 CPPFLAGS
="$(CPPFLAGS)" \
296 CXXFLAGS
="$(CXXFLAGS)" \
298 HOSTVARS_PIC
:= $(HOSTTOOLS
) \
299 CPPFLAGS
="$(CPPFLAGS) $(PIC)" \
300 CFLAGS
="$(CFLAGS) $(PIC)" \
301 CXXFLAGS
="$(CXXFLAGS) $(PIC)" \
305 rm -Rf
-- "$(@:.tar.xz=)" && \
306 $(GIT
) init
--bare
"$(@:.tar.xz=)" && \
307 (cd
"$(@:.tar.xz=)" && \
308 $(GIT
) remote add
origin "$(1)" && \
309 $(GIT
) fetch
origin "$(2)") && \
310 (cd
"$(@:.tar.xz=)" && \
311 $(GIT
) archive
--prefix="$(notdir $(@:.tar.xz=))/" \
312 --format
=tar "$(3)") > "$(@:.xz=)" && \
313 echo
"$(3) $(@)" > "$(@:.tar.xz=.githash)" && \
314 rm -Rf
-- "$(@:.tar.xz=)" && \
315 $(XZ
) --stdout
"$(@:.xz=)" > "$@.tmp" && \
316 rm -f
"$(@:.xz=)" && \
317 mv
-f
-- "$@.tmp" "$@"
319 h
=`sed -n -e "s,^\([0-9a-fA-F]\{40\}\) $<,\1,p" \
320 < "$(<:.tar.xz=.githash)"` && \
324 $(foreach f
,$(filter $(TARBALLS
)/%,$^
), \
325 grep
-- " $(f:$(TARBALLS)/%=%)$$" \
326 "$(SRC)/$(patsubst .sum-%,%,$@)/$(2)SUMS" &&) \
327 (cd
$(TARBALLS
) && $(1) /dev
/stdin
) < \
328 "$(SRC)/$(patsubst .sum-%,%,$@)/$(2)SUMS"
329 CHECK_SHA512
= $(call checksum
,$(SHA512SUM
),SHA512
)
330 UNPACK
= $(RM
) -R
$@ \
331 $(foreach f
,$(filter %.
tar.gz
%.tgz
,$^
), && tar xvzf
$(f
)) \
332 $(foreach f
,$(filter %.
tar.bz2
,$^
), && tar xvjf
$(f
)) \
333 $(foreach f
,$(filter %.
tar.xz
,$^
), && tar xvJf
$(f
)) \
334 $(foreach f
,$(filter %.zip
,$^
), && unzip
$(f
))
335 UNPACK_DIR
= $(patsubst %.
tar,%,$(basename $(notdir $<)))
336 APPLY
= (cd
$(UNPACK_DIR
) && patch
-fp1
) <
337 pkg_static
= (cd
$(UNPACK_DIR
) && ..
/..
/..
/contrib
/src
/pkg-static.sh
$(1))
338 MOVE
= mv
$(UNPACK_DIR
) $@
&& touch
$@
340 AUTOMAKE_DATA_DIRS
=$(foreach n
,$(foreach n
,$(subst :, ,$(shell echo
$$PATH)),$(abspath
$(n
)/..
/share
)),$(wildcard $(n
)/automake
*))
341 UPDATE_AUTOCONFIG
= for
dir in
$(AUTOMAKE_DATA_DIRS
); do \
342 if
test -f
"$${dir}/config.sub" -a
-f
"$${dir}/config.guess"; then \
343 cp
"$${dir}/config.sub" "$${dir}/config.guess" $(UNPACK_DIR
); \
349 AUTORECONF
= AUTOPOINT
=true autoreconf
351 AUTORECONF
= autoreconf
353 RECONF
= mkdir
-p
-- $(PREFIX
)/share
/aclocal
&& \
354 cd
$< && $(AUTORECONF
) -fiv
$(ACLOCAL_AMFLAGS
)
355 CMAKE
= cmake .
-DCMAKE_TOOLCHAIN_FILE
=$(abspath toolchain.cmake
) \
356 -DCMAKE_INSTALL_PREFIX
=$(PREFIX
) $(CMAKE_GENERATOR
)
359 # Per-package build rules
362 include $(SRC
)/*/rules.mak
364 ifeq ($(PKGS_DISABLE
), all)
370 ifneq ($(filter $(PKGS_DISABLE
),$(PKGS_ENABLE
)),)
371 $(error Same package
(s
) disabled and enabled at the same time
)
373 # Apply automatic selection (= remove distro packages):
374 PKGS_AUTOMATIC
:= $(filter-out $(PKGS_FOUND
),$(PKGS
))
375 # Apply manual selection (from bootstrap):
376 PKGS_MANUAL
:= $(sort $(PKGS_ENABLE
) $(filter-out $(PKGS_DISABLE
),$(PKGS_AUTOMATIC
)))
377 # Resolve dependencies:
378 PKGS_DEPS
:= $(filter-out $(PKGS_FOUND
) $(PKGS_MANUAL
),$(sort $(foreach p
,$(PKGS_MANUAL
),$(DEPS_
$(p
)))))
379 PKGS
:= $(sort $(PKGS_MANUAL
) $(PKGS_DEPS
))
381 fetch
: $(PKGS
:%=.sum-
%)
382 fetch-all
: $(PKGS_ALL
:%=.sum-
%)
383 install: $(PKGS
:%=.
%)
386 -$(RM
) $(foreach p
,$(PKGS_ALL
),.
$(p
) .sum-
$(p
) .dep-
$(p
))
387 -$(RM
) toolchain.cmake
388 -$(RM
) -R
"$(PREFIX)"
389 -$(RM
) -R
"$(BUILDBINDIR)"
393 -$(RM
) $(TARBALLS
)/*.
*
399 PREBUILT_URL
=http
://download.videolan.org
/pub
/videolan
/contrib
/$(HOST
)/vlc-contrib-
$(HOST
)-latest.
tar.bz2
401 vlc-contrib-
$(HOST
)-latest.
tar.bz2
:
402 $(call download
,$(PREBUILT_URL
))
404 prebuilt
: vlc-contrib-
$(HOST
)-latest.
tar.bz2
406 $(RM
) -r
$(TOPDST
)/$(HOST
)
408 cd
$(TOPDST
)/$(HOST
) && $(SRC
)/change_prefix.sh
410 ifndef HAVE_CROSS_COMPILE
411 $(RM
) `find $(TOPDST)/$(HOST)/bin | file -f- | grep ELF | awk -F: '{print $$1}' | xargs`
419 # remove useless files
420 cd tmp
/$(notdir $(PREFIX
)); \
421 cd share
; rm -Rf man doc gtk-doc
info lua projectM
; cd ..
; \
422 rm -Rf man sbin etc lib
/lua lib
/sidplay
423 cd tmp
/$(notdir $(PREFIX
)) && $(abspath
$(SRC
))/change_prefix.sh
$(PREFIX
) @@CONTRIB_PREFIX@@
424 (cd tmp
&& tar c
$(notdir $(PREFIX
))/) | bzip2
-c
> ..
/vlc-contrib-
$(HOST
)-$(DATE
).
tar.bz2
428 @echo
' $(PKGS_ALL)' | tr
" " "\n" |
sort | tr
"\n" " " |fmt
429 @echo Distribution-provided packages
:
430 @echo
' $(PKGS_FOUND)' | tr
" " "\n" |
sort | tr
"\n" " " |fmt
431 @echo Automatically selected packages
:
432 @echo
' $(PKGS_AUTOMATIC)' | tr
" " "\n" |
sort | tr
"\n" " " |fmt
433 @echo Manually deselected packages
:
434 @echo
' $(PKGS_DISABLE)' | tr
" " "\n" |
sort | tr
"\n" " " |fmt
435 @echo Manually selected packages
:
436 @echo
' $(PKGS_ENABLE)' | tr
" " "\n" |
sort | tr
"\n" " " |fmt
437 @echo Depended-on packages
:
438 @echo
' $(PKGS_DEPS)' | tr
" " "\n" |
sort | tr
"\n" " " |fmt
439 @echo To-be-built packages
:
440 @echo
' $(PKGS)' | tr
" " "\n" |
sort | tr
"\n" " " |fmt
445 .PHONY
: all fetch fetch-all
install mostlyclean clean distclean package list help prebuilt
451 ifdef HAVE_WINDOWSPHONE
452 echo
"set(CMAKE_SYSTEM_NAME WindowsPhone)" >> $@
455 echo
"set(CMAKE_SYSTEM_NAME WindowsStore)" >> $@
457 echo
"set(CMAKE_SYSTEM_NAME Windows)" >> $@
460 ifndef WITH_OPTIMIZATION
461 echo
"set(CMAKE_BUILD_TYPE Debug)" >> $@
463 echo
"set(CMAKE_BUILD_TYPE Release)" >> $@
465 ifdef HAVE_CROSS_COMPILE
466 echo
"set(CMAKE_RC_COMPILER $(HOST)-windres)" >> $@
470 echo
"set(CMAKE_SYSTEM_NAME Darwin)" >> $@
471 echo
"set(CMAKE_C_FLAGS $(CFLAGS) $(EXTRA_CFLAGS))" >> $@
472 echo
"set(CMAKE_CXX_FLAGS $(CFLAGS) $(EXTRA_CXXFLAGS))" >> $@
473 echo
"set(CMAKE_LD_FLAGS $(LDFLAGS))" >> $@
474 echo
"set(CMAKE_AR ar CACHE FILEPATH "Archiver
")" >> $@
476 echo
"set(CMAKE_OSX_SYSROOT $(IOS_SDK))" >> $@
478 echo
"set(CMAKE_OSX_SYSROOT $(MACOSX_SDK))" >> $@
481 ifdef HAVE_CROSS_COMPILE
482 echo
"set(_CMAKE_TOOLCHAIN_PREFIX $(HOST)-)" >> $@
484 # cmake will overwrite our --sysroot with a native (host) one on Darwin
485 # Set it to "" right away to short-circuit this behaviour
486 echo
"set(CMAKE_CXX_SYSROOT_FLAG \"\")" >> $@
487 echo
"set(CMAKE_C_SYSROOT_FLAG \"\")" >> $@
490 echo
"set(CMAKE_C_COMPILER $(CC))" >> $@
491 echo
"set(CMAKE_CXX_COMPILER $(CXX))" >> $@
492 echo
"set(CMAKE_FIND_ROOT_PATH $(PREFIX))" >> $@
493 echo
"set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)" >> $@
494 echo
"set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)" >> $@
495 echo
"set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)" >> $@
497 # Default pattern rules
498 .sum-
%: $(SRC
)/%/SHA512SUMS
503 $(error Download and
check target not defined for
$*)
505 # Dummy dependency on found packages
506 $(patsubst %,.dep-
%,$(PKGS_FOUND
)): .dep-
%:
509 # Real dependency on missing packages
510 $(patsubst %,.dep-
%,$(filter-out $(PKGS_FOUND
),$(PKGS_ALL
))): .dep-
%: .
%
515 # Dependency propagation (convert 'DEPS_foo = bar' to '.foo: .bar')
516 $(foreach p
,$(PKGS_ALL
),.
$(p
)): .
%: $$(foreach d
,$$(DEPS_
$$*),.dep-
$$(d
))