gnutls: remove gnutls_ServerHandshake()
[vlc.git] / contrib / src / ffmpeg / rules.mak
1 # FFmpeg
2
3 #Uncomment the one you want
4 #USE_LIBAV ?= 1
5 #USE_FFMPEG ?= 1
6
7 ifndef USE_LIBAV
8 FFMPEG_HASH=d0e740b8fb30f02914594d00eb311a32442a63f8
9 FFMPEG_GITURL := http://git.videolan.org/git/ffmpeg.git
10 FFMPEG_LAVC_MIN := 57.37.100
11 USE_FFMPEG := 1
12 else
13 FFMPEG_HASH=35ed7f93dbc72d733e454ae464b1324f38af62a0
14 FFMPEG_GITURL := git://git.libav.org/libav.git
15 FFMPEG_LAVC_MIN := 57.16.0
16 endif
17
18 FFMPEG_BASENAME := $(subst .,_,$(subst \,_,$(subst /,_,$(FFMPEG_HASH))))
19
20 # bsf=vp9_superframe is needed to mux VP9 inside webm/mkv
21 FFMPEGCONF = \
22         --cc="$(CC)" \
23         --pkg-config="$(PKG_CONFIG)" \
24         --disable-doc \
25         --disable-encoder=vorbis \
26         --disable-decoder=opus \
27         --enable-libgsm \
28         --disable-debug \
29         --disable-avdevice \
30         --disable-devices \
31         --disable-avfilter \
32         --disable-filters \
33         --disable-protocol=concat \
34         --disable-bsfs \
35         --disable-bzlib \
36         --disable-avresample \
37         --enable-bsf=vp9_superframe
38
39 ifdef USE_FFMPEG
40 FFMPEGCONF += \
41         --disable-swresample \
42         --disable-iconv \
43         --disable-avisynth \
44         --disable-nvenc \
45         --disable-linux-perf
46 ifdef HAVE_DARWIN_OS
47 FFMPEGCONF += \
48         --disable-securetransport
49 endif
50 endif
51
52 # Disable VDA on macOS with libav
53 ifdef USE_LIBAV
54 ifdef HAVE_DARWIN_OS
55 FFMPEGCONF += \
56         --disable-vda
57 endif
58 endif
59
60 DEPS_ffmpeg = zlib gsm
61
62 ifndef USE_LIBAV
63 FFMPEGCONF += \
64         --enable-libopenjpeg
65 DEPS_ffmpeg += openjpeg $(DEPS_openjpeg)
66 endif
67
68 # Optional dependencies
69 ifndef BUILD_NETWORK
70 FFMPEGCONF += --disable-network
71 endif
72 ifdef BUILD_ENCODERS
73 FFMPEGCONF += --enable-libmp3lame --enable-libvpx --disable-decoder=libvpx_vp8 --disable-decoder=libvpx_vp9
74 ifndef USE_FFMPEG
75 FFMPEGCONF += --disable-decoder=libvpx
76 endif
77 DEPS_ffmpeg += lame $(DEPS_lame) vpx $(DEPS_vpx)
78 else
79 FFMPEGCONF += --disable-encoders --disable-muxers
80 endif
81
82 # Small size
83 ifdef WITH_OPTIMIZATION
84 ifdef ENABLE_SMALL
85 FFMPEGCONF += --enable-small
86 endif
87 ifeq ($(ARCH),arm)
88 ifdef HAVE_ARMV7A
89 FFMPEGCONF += --enable-thumb
90 endif
91 endif
92 else
93 FFMPEGCONF += --optflags=-O0
94 endif
95
96 ifdef HAVE_CROSS_COMPILE
97 FFMPEGCONF += --enable-cross-compile --disable-programs
98 ifndef HAVE_DARWIN_OS
99 FFMPEGCONF += --cross-prefix=$(HOST)-
100 endif
101 endif
102
103 # ARM stuff
104 ifeq ($(ARCH),arm)
105 FFMPEGCONF += --arch=arm
106 ifdef HAVE_NEON
107 FFMPEGCONF += --enable-neon
108 endif
109 ifdef HAVE_ARMV7A
110 FFMPEGCONF += --cpu=cortex-a8
111 endif
112 ifdef HAVE_ARMV6
113 FFMPEGCONF += --cpu=armv6 --disable-neon
114 endif
115 endif
116
117 # ARM64 stuff
118 ifeq ($(ARCH),aarch64)
119 FFMPEGCONF += --arch=aarch64
120 endif
121
122 # MIPS stuff
123 ifeq ($(ARCH),mipsel)
124 FFMPEGCONF += --arch=mips
125 endif
126 ifeq ($(ARCH),mips64el)
127 FFMPEGCONF += --arch=mips64
128 endif
129
130 # x86 stuff
131 ifeq ($(ARCH),i386)
132 ifndef HAVE_DARWIN_OS
133 FFMPEGCONF += --arch=x86
134 endif
135 endif
136
137 # x86_64 stuff
138 ifeq ($(ARCH),x86_64)
139 ifndef HAVE_DARWIN_OS
140 FFMPEGCONF += --arch=x86_64
141 endif
142 endif
143
144 # Darwin
145 ifdef HAVE_DARWIN_OS
146 FFMPEGCONF += --arch=$(ARCH) --target-os=darwin
147 ifdef USE_FFMPEG
148 FFMPEGCONF += --disable-lzma
149 endif
150 ifeq ($(ARCH),x86_64)
151 FFMPEGCONF += --cpu=core2
152 endif
153 ifdef HAVE_IOS
154 FFMPEGCONF += --enable-pic --extra-ldflags="$(EXTRA_CFLAGS)"
155 ifdef HAVE_NEON
156 FFMPEGCONF += --as="$(AS)"
157 endif
158 endif
159 endif
160
161 # Linux
162 ifdef HAVE_LINUX
163 FFMPEGCONF += --target-os=linux --enable-pic --extra-libs="-lm"
164
165 endif
166
167 ifdef HAVE_ANDROID
168 # broken text relocations
169 ifeq ($(ANDROID_ABI), x86)
170 FFMPEGCONF +=  --disable-mmx --disable-mmxext --disable-inline-asm
171 endif
172 ifeq ($(ANDROID_ABI), x86_64)
173 FFMPEGCONF +=  --disable-mmx --disable-mmxext --disable-inline-asm
174 endif
175 ifdef HAVE_NEON
176 ifeq ($(ANDROID_ABI), armeabi-v7a)
177 FFMPEGCONF += --as='gas-preprocessor.pl -as-type clang -arch arm $(CC)'
178 endif
179 endif
180 endif
181
182 # Windows
183 ifdef HAVE_WIN32
184 ifndef HAVE_VISUALSTUDIO
185 DEPS_ffmpeg += d3d11
186 ifndef HAVE_MINGW_W64
187 DEPS_ffmpeg += directx
188 endif
189 endif
190 FFMPEGCONF += --target-os=mingw32
191 FFMPEGCONF += --enable-w32threads
192 ifndef HAVE_WINSTORE
193 FFMPEGCONF += --enable-dxva2
194 else
195 FFMPEGCONF += --disable-dxva2
196 endif
197
198 ifeq ($(ARCH),x86_64)
199 FFMPEGCONF += --cpu=athlon64 --arch=x86_64
200 else
201 ifeq ($(ARCH),i386) # 32bits intel
202 FFMPEGCONF+= --cpu=i686 --arch=x86
203 else
204 ifdef HAVE_ARMV7A
205 FFMPEGCONF+= --arch=arm
206 endif
207 endif
208 endif
209
210 else # !Windows
211 FFMPEGCONF += --enable-pthreads
212 endif
213
214 # Solaris
215 ifdef HAVE_SOLARIS
216 ifeq ($(ARCH),x86_64)
217 FFMPEGCONF += --cpu=core2
218 endif
219 FFMPEGCONF += --target-os=sunos --enable-pic
220 endif
221
222 ifdef HAVE_NACL
223 FFMPEGCONF+=--disable-inline-asm --disable-asm --target-os=linux
224 endif
225
226 # Build
227 PKGS += ffmpeg
228 ifeq ($(call need_pkg,"libavcodec >= $(FFMPEG_LAVC_MIN) libavformat >= 53.21.0 libswscale"),)
229 PKGS_FOUND += ffmpeg
230 endif
231
232 FFMPEGCONF += --nm="$(NM)" --ar="$(AR)"
233
234 $(TARBALLS)/ffmpeg-$(FFMPEG_BASENAME).tar.xz:
235         $(call download_git,$(FFMPEG_GITURL),,$(FFMPEG_HASH))
236
237 .sum-ffmpeg: $(TARBALLS)/ffmpeg-$(FFMPEG_BASENAME).tar.xz
238         $(call check_githash,$(FFMPEG_HASH))
239         touch $@
240
241 ffmpeg: ffmpeg-$(FFMPEG_BASENAME).tar.xz .sum-ffmpeg
242         rm -Rf $@ $@-$(FFMPEG_BASENAME)
243         mkdir -p $@-$(FFMPEG_BASENAME)
244         tar xvJf "$<" --strip-components=1 -C $@-$(FFMPEG_BASENAME)
245 ifdef USE_FFMPEG
246         $(APPLY) $(SRC)/ffmpeg/armv7_fixup.patch
247         $(APPLY) $(SRC)/ffmpeg/dxva_vc1_crash.patch
248         $(APPLY) $(SRC)/ffmpeg/h264_early_SAR.patch
249 endif
250 ifdef USE_LIBAV
251         $(APPLY) $(SRC)/ffmpeg/libav_gsm.patch
252 endif
253         $(MOVE)
254
255 .ffmpeg: ffmpeg
256         cd $< && $(HOSTVARS) ./configure \
257                 --extra-ldflags="$(LDFLAGS)" $(FFMPEGCONF) \
258                 --prefix="$(PREFIX)" --enable-static --disable-shared
259         cd $< && $(MAKE) install-libs install-headers
260         touch $@