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 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 60 --enable-decoder=h263,h264,mpeg2video,mpeg4,vp8,vp9 61 --enable-decoder=mp2,mp3,mp3float,aac,aac_latm,ape,flac,vorbis,opus,amrnb,amrwb 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 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 170 --enable-decoder=h263,h264,mpeg2video,mpeg4,vp8,vp9 171 --enable-decoder=mp2,mp3,mp3float,aac,aac_latm,ape,flac,vorbis,opus,amrnb,amrwb 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