]> git.sesse.net Git - vlc/blob - contrib/src/ffmpeg/rules.mak
contrib: add two macros to simplify patching and unpacking
[vlc] / contrib / src / ffmpeg / rules.mak
1 # FFmpeg
2
3 FFMPEG_VERSION=0.4.8
4 FFMPEG_URL=$(SF)/ffmpeg/ffmpeg-$(FFMPEG_VERSION).tar.gz
5 FFMPEG_SVN=svn://svn.ffmpeg.org/ffmpeg/trunk
6 FFMPEG_SVN_REV=26400
7
8
9 FFMPEGCONF = --cc="$(CC)" \
10         --disable-doc \
11         --disable-decoder=libvpx \
12         --disable-debug \
13         --enable-gpl \
14         --enable-postproc \
15         --disable-ffprobe \
16         --disable-ffserver \
17         --disable-ffmpeg \
18         --disable-ffplay \
19         --disable-devices \
20         --disable-protocols \
21         --disable-avfilter \
22         --disable-network
23
24 # Optional dependencies
25 ifdef BUILD_ENCODERS
26 # TODO:
27 #FFMPEGCONF+= --enable-libmp3lame
28 #.ffmpeg: .lame
29 #PKGS += lame
30 else
31 FFMPEGCONF += --disable-encoders --disable-muxers
32 # XXX: REVISIT --enable-small ?
33 endif
34
35 #FFMPEGCONF+= --enable-libgsm
36 #.ffmpeg: .gsm
37 #PKGS += gsm
38
39 #FFMPEGCONF += --enable-libvpx
40 #.ffmpeg: .vpx
41 #PKGS += vpx
42
43 # XXX: REVISIT
44 #ifndef HAVE_FPU
45 #FFMPEGCONF+= --disable-mpegaudio-hp
46 #endif
47
48 ifdef HAVE_CROSS_COMPILE
49 FFMPEGCONF += --enable-cross-compile --cross-prefix=$(HOST)-
50 endif
51
52 # ARM stuff
53 ifeq ($(ARCH),arm)
54 FFMPEGCONF += --disable-runtime-cpudetect
55 endif
56
57 # Darwin
58 ifdef HAVE_DARWIN_OS
59 FFMPEGCONF += --arch=$(ARCH) --target-os=darwin
60 FFMPEG_CFLAGS += -DHAVE_LRINTF
61 endif
62 ifdef HAVE_MACOSX
63 ifneq ($(findstring $(ARCH),i386 x86_64),)
64 FFMPEGCONF += --enable-memalign-hack
65 endif
66 ifeq ($(ARCH),x86_64)
67 FFMPEGCONF += --cpu=core2
68 endif
69 .ffmpeg: .yasm
70 PKGS += yasm
71 endif
72
73 # Linux
74 ifdef HAVE_LINUX
75 FFMPEGCONF += --target-os=linux --enable-pic
76 endif
77
78 # Windows
79 ifdef HAVE_WIN32
80 FFMPEGCONF += --target-os=mingw32 --enable-memalign-hack
81 FFMPEGCONF += --enable-w32threads \
82         --disable-bzlib --disable-bsfs \
83         --disable-decoder=dca --disable-encoder=vorbis
84
85 ifdef HAVE_WIN64
86 FFMPEGCONF += --disable-dxva2
87
88 FFMPEGCONF += --cpu=athlon64 --arch=x86_64
89 else # !WIN64
90 FFMPEGCONF += --enable-dxva2
91 .ffmpeg: .directx
92 PKGS += directx
93
94 FFMPEGCONF+= --cpu=i686 --arch=x86
95 endif
96 else
97 FFMPEGCONF += --enable-pthreads
98 endif
99
100 ifdef HAVE_WINCE
101 FFMPEGCONF += --target-os=mingw32ce --arch=armv4l --cpu=armv4t \
102         --disable-decoder=snow --disable-decoder=vc9 \
103         --disable-decoder=wmv3 --disable-decoder=vorbis \
104         --disable-decoder=dvdsub --disable-decoder=dvbsub
105 endif
106
107 FFMPEG_CFLAGS += --std=gnu99
108
109 # Build
110
111 PKGS += ffmpeg
112
113 ffmpeg-$(FFMPEG_VERSION).tar.gz:
114         $(error FFmpeg snapshot is too old, VCS must be used!)
115         $(call download,$(FFMPEG_URL))
116
117 $(TARBALLS)/ffmpeg-svn.tar.gz:
118         $(SVN) export $(FFMPEG_SVN) ffmpeg-svn
119         tar cvz ffmpeg-svn > $@
120
121 FFMPEG_VERSION := svn
122
123 .sum-ffmpeg: $(TARBALLS)/ffmpeg-$(FFMPEG_VERSION).tar.gz
124         $(warning Not implemented.)
125         touch $@
126
127 ffmpeg: ffmpeg-$(FFMPEG_VERSION).tar.gz .sum-ffmpeg
128         $(UNPACK)
129 ifdef HAVE_WIN64
130         $(APPLY) $(SRC)/ffmpeg/ffmpeg-win64.patch
131 endif
132 ifdef HAVE_WIN32
133         sed -i "s/std=c99/std=gnu99/" $@-$(FFMPEG_VERSION)/configure
134 endif
135         $(APPLY) $(SRC)/ffmpeg/libavformat-ape.c.patch
136         $(MOVE)
137
138 .ffmpeg: ffmpeg
139         # TODO: .zlib
140         cd $< && $(HOSTVARS) ./configure \
141                 --extra-cflags="$(FFMPEG_CFLAGS) -DHAVE_STDINT_H"  \
142                 --extra-ldflags="$(LDFLAGS)" $(FFMPEGCONF) \
143                 --prefix="$(PREFIX)" --enable-static --disable-shared
144         cd $< && $(MAKE) install-libs install-headers
145         touch $@