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