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