• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# FFmpeg build configure
2
3#!/bin/bash
4
5set -ex
6FFMPEG_PATH=$1
7FFMPEG_OUT_PATH=$2
8FFMPEG_PLAT=$3
9LLVM_PATH=$4
10SYSROOT_PATH=$5
11USE_CLANG_COVERAGE=$6
12
13if [ ${FFMPEG_PLAT} = "aarch64" ]; then
14
15FF_CONFIG_OPTIONS="
16    --arch=aarch64
17    --target-os=linux
18    --disable-programs
19    --disable-avdevice
20    --disable-postproc
21    --disable-network
22    --disable-dwt
23    --disable-faan
24    --disable-pixelutils
25    --disable-bsfs
26    --disable-encoders
27    --disable-decoders
28    --disable-hwaccels
29    --disable-muxers
30    --disable-demuxers
31    --disable-parsers
32    --disable-protocols
33    --disable-devices
34    --disable-filters
35    --disable-doc
36    --disable-debug
37    --disable-iconv
38    --disable-stripping
39    --disable-vaapi
40    --disable-vdpau
41    --disable-zlib
42    --disable-xlib
43    --disable-cuvid
44    --disable-cuda
45    --disable-libxcb
46    --disable-libxcb_shm
47    --disable-libxcb_shape
48    --disable-libxcb_xfixes
49    --disable-sdl2
50    --disable-bzlib
51    --disable-lzma
52    --disable-vulkan
53    --enable-demuxer=mp3,aac,ape,flac,ogg,wav,mov,mpegts,amr,amrnb,amrwb,matroska,flv,mpegps,asf,asf_o,srt,h264,webvtt,av3a,avi,mpegvideo
54    --enable-muxer=mp4,h264,ipod,amr,mpegts,mp3,wav,flac,av3a
55    --enable-parser=h263,h264,mpeg4video,vp8,vp9,mpegvideo
56    --enable-parser=mpegaudio,aac,aac_latm,av3a,amr,opus
57    --enable-decoder=h263,h264,mpeg2video,mpeg4,vp8,vp9
58    --enable-decoder=mp2,mp3,mp3float,aac,aac_latm,ape,flac,vorbis,opus,amrnb,amrwb
59    --enable-decoder=png,bmp
60    --enable-encoder=aac,aac_latm,opus,flac
61    --enable-encoder=mpeg4,h263
62    --enable-bsf=h264_mp4toannexb
63    --enable-protocol=file
64    --enable-cross-compile
65    --enable-shared
66    --enable-lsp
67    --enable-filter=crop,transpose,vflip,hflip
68    --cc=${LLVM_PATH}/bin/clang
69    --ld=${LLVM_PATH}/bin/clang
70    --strip=${LLVM_PATH}/bin/llvm-strip
71"
72EXTRA_CFLAGS="
73    --target=aarch64-linux-ohos
74    --sysroot=${SYSROOT_PATH}
75"
76EXTRA_LDFLAGS="
77    --target=aarch64-linux-ohos
78    --sysroot=${SYSROOT_PATH}
79"
80
81if [ ${USE_CLANG_COVERAGE} = "true" ]; then
82    EXTRA_CFLAGS="
83        --target=aarch64-linux-ohos
84        --sysroot=${SYSROOT_PATH}
85        --coverage
86        -mllvm
87        -limited-coverage-experimental=true
88    "
89    EXTRA_LDFLAGS="
90        --target=aarch64-linux-ohos
91        --sysroot=${SYSROOT_PATH}
92        --coverage
93        -fno-use-cxa-atexit
94    "
95fi
96
97FF_CONFIG_OPTIONS=`echo $FF_CONFIG_OPTIONS`
98
99${FFMPEG_PATH}/configure ${FF_CONFIG_OPTIONS} --extra-cflags="${EXTRA_CFLAGS}" --extra-ldflags="${EXTRA_LDFLAGS}"
100
101else
102
103oldPath=`pwd`
104
105FFMPEG_PATH=${oldPath}/${FFMPEG_PATH}
106FFMPEG_OUT_PATH=${oldPath}/${FFMPEG_OUT_PATH}
107currentPath=${oldPath}/${FFMPEG_OUT_PATH}tmp
108mkdir -p ${currentPath}
109cd ${currentPath}
110
111FF_CONFIG_OPTIONS="
112    --disable-programs
113    --disable-avdevice
114    --disable-postproc
115    --disable-network
116    --disable-dwt
117    --disable-faan
118    --disable-pixelutils
119    --disable-bsfs
120    --disable-encoders
121    --disable-decoders
122    --disable-hwaccels
123    --disable-muxers
124    --disable-demuxers
125    --disable-parsers
126    --disable-protocols
127    --disable-devices
128    --disable-filters
129    --disable-asm
130    --disable-doc
131    --disable-debug
132    --disable-iconv
133    --disable-stripping
134    --disable-vaapi
135    --disable-vdpau
136    --disable-zlib
137    --disable-xlib
138    --disable-cuvid
139    --disable-cuda
140    --disable-libxcb
141    --disable-libxcb_shm
142    --disable-libxcb_shape
143    --disable-libxcb_xfixes
144    --disable-sdl2
145    --disable-bzlib
146    --disable-lzma
147    --enable-demuxer=mp3,aac,ape,flac,ogg,wav,mov,mpegts,amr,amrnb,amrwb,matroska,flv,mpegps,asf,asf_o,srt,h264,webvtt,av3a,avi,mpegvideo
148    --enable-muxer=mp4,h264,ipod,amr,mpegts,mp3,wav,flac,av3a
149    --enable-parser=h263,h264,mpeg4video,vp8,vp9,mpegvideo
150    --enable-parser=mpegaudio,aac,aac_latm,av3a,amr,opus
151    --enable-decoder=h263,h264,mpeg2video,mpeg4,vp8,vp9
152    --enable-decoder=mp2,mp3,mp3float,aac,aac_latm,ape,flac,vorbis,opus,amrnb,amrwb
153    --enable-decoder=png,bmp
154    --enable-encoder=aac,aac_latm,opus,flac
155    --enable-encoder=mpeg4,h263
156    --enable-bsf=h264_mp4toannexb
157    --enable-protocol=file
158    --enable-lsp
159    --enable-filter=crop,transpose,vflip,hflip
160"
161
162FF_CONFIG_OPTIONS=`echo $FF_CONFIG_OPTIONS`
163
164${FFMPEG_PATH}/configure ${FF_CONFIG_OPTIONS}
165
166fi
167
168sed -i 's/HAVE_SYSCTL 1/HAVE_SYSCTL 0/g' config.h
169sed -i 's/HAVE_SYSCTL=yes/!HAVE_SYSCTL=yes/g' ./ffbuild/config.mak
170sed -i 's/HAVE_GLOB 1/HAVE_GLOB 0/g' config.h
171sed -i 's/HAVE_GLOB=yes/!HAVE_GLOB=yes/g' config.h
172sed -i 's/HAVE_GMTIME_R 1/HAVE_GMTIME_R 0/g' config.h
173sed -i 's/HAVE_LOCALTIME_R 1/HAVE_LOCALTIME_R 0/g' config.h
174sed -i 's/HAVE_PTHREAD_CANCEL 1/HAVE_PTHREAD_CANCEL 0/g' config.h
175sed -i 's/HAVE_VALGRIND_VALGRIND_H 1/HAVE_VALGRIND_VALGRIND_H 0/g' config.h
176
177tmp_file=".tmpfile"
178## remove invalid restrict define
179sed 's/#define av_restrict restrict/#define av_restrict/' ./config.h >$tmp_file
180mv $tmp_file ./config.h
181
182## replace original FFMPEG_CONFIGURATION define with $FF_CONFIG_OPTIONS
183sed '/^#define FFMPEG_CONFIGURATION/d' ./config.h >$tmp_file
184mv $tmp_file ./config.h
185total_line=`wc -l ./config.h | cut -d' ' -f 1`
186tail_line=`expr $total_line - 3`
187head -3 config.h > $tmp_file
188echo "#define FFMPEG_CONFIGURATION \"${FF_CONFIG_OPTIONS}\"" >> $tmp_file
189tail -$tail_line config.h >> $tmp_file
190mv $tmp_file ./config.h
191
192rm -f config.err
193
194## rm BUILD_ROOT information
195sed '/^BUILD_ROOT=/d' ./ffbuild/config.mak > $tmp_file
196rm -f ./ffbuild/config.mak
197mv $tmp_file ./ffbuild/config.mak
198
199## rm amr-eabi-gcc
200sed '/^CC=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file
201rm -f ./ffbuild/config.mak
202mv $tmp_file ./ffbuild/config.mak
203
204## rm amr-eabi-gcc
205sed '/^AS=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file
206rm -f ./ffbuild/config.mak
207mv $tmp_file ./ffbuild/config.mak
208
209
210## rm amr-eabi-gcc
211sed '/^LD=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file
212rm -f ./ffbuild/config.mak
213mv $tmp_file ./ffbuild/config.mak
214
215## rm amr-eabi-gcc
216sed '/^DEPCC=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file
217rm -f ./ffbuild/config.mak
218mv $tmp_file ./ffbuild/config.mak
219
220sed -i 's/restrict restrict/restrict /g' config.h
221
222sed -i '/getenv(x)/d' config.h
223sed -i 's/HAVE_DOS_PATHS 0/HAVE_DOS_PATHS 1/g' config.h
224
225mv config.h ${FFMPEG_OUT_PATH}/config.h
226mv ./ffbuild/config.mak ${FFMPEG_OUT_PATH}/config.mak
227rm -rf ${FFMPEG_OUT_PATH}/libavcodec
228mv -f libavcodec ${FFMPEG_OUT_PATH}
229rm -rf ${FFMPEG_OUT_PATH}/libavformat
230mv -f libavformat ${FFMPEG_OUT_PATH}
231rm -rf ${FFMPEG_OUT_PATH}/libavutil
232mv -f libavutil ${FFMPEG_OUT_PATH}
233rm -rf ${FFMPEG_OUT_PATH}/libavdevice
234mv -f libavdevice ${FFMPEG_OUT_PATH}
235rm -rf ${FFMPEG_OUT_PATH}/libavfilter
236mv -f libavfilter ${FFMPEG_OUT_PATH}
237rm -rf ./ffbuild
238if [ ${FFMPEG_PLAT} != "aarch64" ]; then
239cd $oldPath
240rm -rf ${currentPath}
241fi
242
243## other work need to be done manually
244cat <<!EOF
245#####################################################
246                    ****NOTICE****
247You need to modify the file config.mak and delete
248all full path string in macro:
249SRC_PATH, SRC_PATH_BARE, BUILD_ROOT, LDFLAGS.
250Please refer to the old version of config.mak to
251check how to modify it.
252#####################################################
253!EOF
254