]> git.sesse.net Git - vlc/blob - contrib/src/ffmpeg/rules.mak
Contribs: more cleanups for libav/FFmpeg
[vlc] / contrib / src / ffmpeg / rules.mak
1 # FFmpeg
2
3 #FFMPEG_SNAPURL := http://git.videolan.org/?p=ffmpeg.git;a=snapshot;h=HEAD;sf=tgz
4 FFMPEG_SNAPURL := http://git.libav.org/?p=libav.git;a=snapshot;h=HEAD;sf=tgz
5
6 FFMPEGCONF = \
7         --cc="$(CC)" \
8         --disable-doc \
9         --disable-decoder=bink \
10         --enable-libgsm \
11         --enable-libopenjpeg \
12         --disable-debug \
13         --disable-avdevice \
14         --disable-devices \
15         --disable-avfilter \
16         --disable-filters \
17         --disable-bsfs \
18         --disable-bzlib
19
20 # Those tools are named differently in FFmpeg and Libav
21 #       --disable-ffserver \
22 #       --disable-ffplay \
23 #       --disable-ffprobe
24 DEPS_ffmpeg = zlib gsm openjpeg
25
26 # Optional dependencies
27 ifdef BUILD_ENCODERS
28 FFMPEGCONF += --enable-libmp3lame --enable-libvpx --disable-decoder=libvpx
29 DEPS_ffmpeg += lame $(DEPS_lame) vpx $(DEPS_vpx)
30 else
31 FFMPEGCONF += --disable-encoders --disable-muxers
32 endif
33
34 # Small size
35 ifdef ENABLE_SMALL
36 FFMPEGCONF += --enable-small --optflags=-O2
37 ifeq ($(ARCH),arm)
38 ifdef HAVE_ARMV7A
39 # XXX: assumes > ARMv7-A, and thus thumb2-able
40 FFMPEGCONF += --enable-thumb
41 endif
42 endif
43 endif
44
45 ifdef HAVE_CROSS_COMPILE
46 FFMPEGCONF += --enable-cross-compile
47 ifndef HAVE_IOS
48 FFMPEGCONF += --cross-prefix=$(HOST)-
49 endif
50 endif
51
52 # ARM stuff
53 ifeq ($(ARCH),arm)
54 FFMPEGCONF += --arch=arm
55 ifdef HAVE_NEON
56 FFMPEGCONF += --cpu=cortex-a8 --enable-neon
57 FFMPEG_CFLAGS += -mfpu=neon
58 endif
59 endif
60
61 # x86 stuff
62 ifeq ($(ARCH),i386)
63 FFMPEGCONF += --arch=x86
64 endif
65
66 # Darwin
67 ifdef HAVE_DARWIN_OS
68 FFMPEGCONF += --arch=$(ARCH) --target-os=darwin
69 ifneq ($(findstring $(ARCH),i386 x86_64),)
70 FFMPEGCONF += --enable-memalign-hack
71 endif
72 ifeq ($(ARCH),x86_64)
73 FFMPEGCONF += --cpu=core2
74 endif
75 endif
76 ifdef HAVE_IOS
77 FFMPEGCONF += --enable-pic --as="$(AS)" --disable-decoder=snow
78 endif
79
80 # Linux
81 ifdef HAVE_LINUX
82 FFMPEGCONF += --target-os=linux --enable-pic
83
84 # Android x86
85 ifeq ($(ANDROID_ABI), x86)
86 ifdef HAVE_ANDROID
87 # Android-x86 gcc doesn't guarantee an aligned stack, but this is
88 # handled by __attribute__((force_align_arg_pointer)) in libavcodec
89 # already, so we tell gcc to assume this alignment, so we don't need
90 # to waste a precious register in assembly functions to realign it.
91 FFMPEG_CFLAGS += -mincoming-stack-boundary=4
92 endif # HAVE_ANDROID
93 endif # x86
94
95 endif
96
97 # Windows
98 ifdef HAVE_WIN32
99 ifndef HAVE_MINGW_W64
100 DEPS_ffmpeg += directx
101 endif
102 FFMPEGCONF += --target-os=mingw32 --enable-memalign-hack
103 FFMPEGCONF += --enable-w32threads --enable-dxva2 \
104         --disable-decoder=dca --disable-encoder=vorbis \
105
106 ifdef HAVE_WIN64
107 FFMPEGCONF += --cpu=athlon64 --arch=x86_64
108 else # !WIN64
109 FFMPEGCONF+= --cpu=i686 --arch=x86
110 endif
111
112 else # !Windows
113 FFMPEGCONF += --enable-pthreads
114 endif
115
116 # Build
117 PKGS += ffmpeg
118 ifeq ($(call need_pkg,"libavcodec >= 52.25.0 libavformat >= 52.30.0 libswscale"),)
119 PKGS_FOUND += ffmpeg
120 endif
121
122 $(TARBALLS)/ffmpeg-git.tar.gz:
123         $(call download,$(FFMPEG_SNAPURL))
124
125 FFMPEG_VERSION := git
126
127 .sum-ffmpeg: $(TARBALLS)/ffmpeg-$(FFMPEG_VERSION).tar.gz
128         $(warning Not implemented.)
129         touch $@
130
131 ffmpeg: ffmpeg-$(FFMPEG_VERSION).tar.gz .sum-ffmpeg
132         rm -Rf $@ $@-git
133         mkdir -p $@-git
134         $(ZCAT) "$<" | (cd $@-git && tar xv --strip-components=1)
135         $(MOVE)
136
137 .ffmpeg: ffmpeg
138         cd $< && $(HOSTVARS) ./configure \
139                 --extra-ldflags="$(LDFLAGS)" $(FFMPEGCONF) \
140                 --prefix="$(PREFIX)" --enable-static --disable-shared
141         cd $< && $(MAKE) install-libs install-headers
142         touch $@