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