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