|
| 1 | +# FFmpeg build configure |
| 2 | + |
| 3 | +#!/bin/bash |
| 4 | + |
| 5 | +set -ex |
| 6 | +FFMPEG_PATH=$1 |
| 7 | +FFMPEG_OUT_PATH=$2 |
| 8 | +FFMPEG_PLAT=$3 |
| 9 | +LLVM_PATH=$4 |
| 10 | +SYSROOT_PATH=$5 |
| 11 | +USE_CLANG_COVERAGE=$6 |
| 12 | +FFMPEG_ENABLE_DEMUXERS=$7 |
| 13 | +FFMPEG_ENABLE_PARSERS=$8 |
| 14 | +FFMPEG_ENABLE_DECODERS=$9 |
| 15 | + |
| 16 | +FF_CONFIG_OPTIONS=" |
| 17 | + --prefix=${FFMPEG_OUT_PATH} |
| 18 | + --enable-libx264 |
| 19 | + --enable-libx265 |
| 20 | + --enable-libvpx |
| 21 | + --enable-libsvtav1 |
| 22 | + --enable-libmp3lame |
| 23 | + --enable-libfdk-aac |
| 24 | + --enable-libopus |
| 25 | + --enable-libvorbis |
| 26 | + --enable-gpl |
| 27 | + --enable-nonfree |
| 28 | +" |
| 29 | + |
| 30 | +if [ ${FFMPEG_PLAT} = "aarch64" ]; then |
| 31 | + |
| 32 | +FF_CONFIG_OPTIONS="$FF_CONFIG_OPTIONS |
| 33 | + --arch=aarch64 |
| 34 | + --target-os=linux |
| 35 | + --enable-cross-compile |
| 36 | + --cc=${LLVM_PATH}/bin/clang |
| 37 | + --ld=${LLVM_PATH}/bin/clang |
| 38 | + --strip=${LLVM_PATH}/bin/llvm-strip |
| 39 | +" |
| 40 | + |
| 41 | +if [ -n "${FFMPEG_ENABLE_DEMUXERS}" ]; then |
| 42 | +FF_CONFIG_OPTIONS+=" |
| 43 | + --enable-demuxer=${FFMPEG_ENABLE_DEMUXERS}" |
| 44 | +fi |
| 45 | + |
| 46 | +if [ -n "${FFMPEG_ENABLE_PARSERS}" ]; then |
| 47 | +FF_CONFIG_OPTIONS+=" |
| 48 | + --enable-parser=${FFMPEG_ENABLE_PARSERS}" |
| 49 | +fi |
| 50 | + |
| 51 | +if [ -n "${FFMPEG_ENABLE_DECODERS}" ]; then |
| 52 | +FF_CONFIG_OPTIONS+=" |
| 53 | + --enable-decoder=${FFMPEG_ENABLE_DECODERS}" |
| 54 | +fi |
| 55 | + |
| 56 | +EXTRA_CFLAGS=" |
| 57 | + --target=aarch64-linux-ohos |
| 58 | + --sysroot=${SYSROOT_PATH} |
| 59 | +" |
| 60 | +EXTRA_LDFLAGS=" |
| 61 | + --target=aarch64-linux-ohos |
| 62 | + --sysroot=${SYSROOT_PATH} |
| 63 | +" |
| 64 | + |
| 65 | +if [ ${USE_CLANG_COVERAGE} = "true" ]; then |
| 66 | + EXTRA_CFLAGS=" |
| 67 | + --target=aarch64-linux-ohos |
| 68 | + --sysroot=${SYSROOT_PATH} |
| 69 | + --coverage |
| 70 | + -mllvm |
| 71 | + -limited-coverage-experimental=true |
| 72 | + " |
| 73 | + EXTRA_LDFLAGS=" |
| 74 | + --target=aarch64-linux-ohos |
| 75 | + --sysroot=${SYSROOT_PATH} |
| 76 | + --coverage |
| 77 | + -fno-use-cxa-atexit |
| 78 | + " |
| 79 | +fi |
| 80 | + |
| 81 | +FF_CONFIG_OPTIONS=`echo $FF_CONFIG_OPTIONS` |
| 82 | + |
| 83 | +${FFMPEG_PATH}/configure ${FF_CONFIG_OPTIONS} --extra-cflags="${EXTRA_CFLAGS}" --extra-ldflags="${EXTRA_LDFLAGS}" |
| 84 | + |
| 85 | +else |
| 86 | + |
| 87 | +oldPath=`pwd` |
| 88 | + |
| 89 | +FFMPEG_PATH=${oldPath}/${FFMPEG_PATH} |
| 90 | +FFMPEG_OUT_PATH=${oldPath}/${FFMPEG_OUT_PATH} |
| 91 | +currentPath=${oldPath}/${FFMPEG_OUT_PATH}tmp |
| 92 | +mkdir -p ${currentPath} |
| 93 | +cd ${currentPath} |
| 94 | + |
| 95 | +if [ -n "${FFMPEG_ENABLE_DEMUXERS}" ]; then |
| 96 | +FF_CONFIG_OPTIONS+=" |
| 97 | + --enable-demuxer=${FFMPEG_ENABLE_DEMUXERS}" |
| 98 | +fi |
| 99 | + |
| 100 | +if [ -n "${FFMPEG_ENABLE_PARSERS}" ]; then |
| 101 | +FF_CONFIG_OPTIONS+=" |
| 102 | + --enable-parser=${FFMPEG_ENABLE_PARSERS}" |
| 103 | +fi |
| 104 | + |
| 105 | +if [ -n "${FFMPEG_ENABLE_DECODERS}" ]; then |
| 106 | +FF_CONFIG_OPTIONS+=" |
| 107 | + --enable-decoder=${FFMPEG_ENABLE_DECODERS}" |
| 108 | +fi |
| 109 | + |
| 110 | +FF_CONFIG_OPTIONS=`echo $FF_CONFIG_OPTIONS` |
| 111 | + |
| 112 | +${FFMPEG_PATH}/configure ${FF_CONFIG_OPTIONS} |
| 113 | + |
| 114 | +fi |
| 115 | + |
| 116 | +sed -i 's/HAVE_SYSCTL 1/HAVE_SYSCTL 0/g' config.h |
| 117 | +sed -i 's/HAVE_SYSCTL=yes/!HAVE_SYSCTL=yes/g' ./ffbuild/config.mak |
| 118 | +sed -i 's/HAVE_GLOB 1/HAVE_GLOB 0/g' config.h |
| 119 | +sed -i 's/HAVE_GLOB=yes/!HAVE_GLOB=yes/g' config.h |
| 120 | +sed -i 's/HAVE_GMTIME_R 1/HAVE_GMTIME_R 0/g' config.h |
| 121 | +sed -i 's/HAVE_LOCALTIME_R 1/HAVE_LOCALTIME_R 0/g' config.h |
| 122 | +sed -i 's/HAVE_PTHREAD_CANCEL 1/HAVE_PTHREAD_CANCEL 0/g' config.h |
| 123 | +sed -i 's/HAVE_VALGRIND_VALGRIND_H 1/HAVE_VALGRIND_VALGRIND_H 0/g' config.h |
| 124 | + |
| 125 | +tmp_file=".tmpfile" |
| 126 | +## remove invalid restrict define |
| 127 | +sed 's/#define av_restrict restrict/#define av_restrict/' ./config.h >$tmp_file |
| 128 | +mv $tmp_file ./config.h |
| 129 | + |
| 130 | +## replace original FFMPEG_CONFIGURATION define with $FF_CONFIG_OPTIONS |
| 131 | +sed '/^#define FFMPEG_CONFIGURATION/d' ./config.h >$tmp_file |
| 132 | +mv $tmp_file ./config.h |
| 133 | +total_line=`wc -l ./config.h | cut -d' ' -f 1` |
| 134 | +tail_line=`expr $total_line - 3` |
| 135 | +head -3 config.h > $tmp_file |
| 136 | +echo "#define FFMPEG_CONFIGURATION \"${FF_CONFIG_OPTIONS}\"" >> $tmp_file |
| 137 | +tail -$tail_line config.h >> $tmp_file |
| 138 | +mv $tmp_file ./config.h |
| 139 | + |
| 140 | +rm -f config.err |
| 141 | + |
| 142 | +## rm BUILD_ROOT information |
| 143 | +sed '/^BUILD_ROOT=/d' ./ffbuild/config.mak > $tmp_file |
| 144 | +rm -f ./ffbuild/config.mak |
| 145 | +mv $tmp_file ./ffbuild/config.mak |
| 146 | + |
| 147 | +## rm amr-eabi-gcc |
| 148 | +sed '/^CC=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file |
| 149 | +rm -f ./ffbuild/config.mak |
| 150 | +mv $tmp_file ./ffbuild/config.mak |
| 151 | + |
| 152 | +## rm amr-eabi-gcc |
| 153 | +sed '/^AS=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file |
| 154 | +rm -f ./ffbuild/config.mak |
| 155 | +mv $tmp_file ./ffbuild/config.mak |
| 156 | + |
| 157 | + |
| 158 | +## rm amr-eabi-gcc |
| 159 | +sed '/^LD=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file |
| 160 | +rm -f ./ffbuild/config.mak |
| 161 | +mv $tmp_file ./ffbuild/config.mak |
| 162 | + |
| 163 | +## rm amr-eabi-gcc |
| 164 | +sed '/^DEPCC=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file |
| 165 | +rm -f ./ffbuild/config.mak |
| 166 | +mv $tmp_file ./ffbuild/config.mak |
| 167 | + |
| 168 | +sed -i 's/restrict restrict/restrict /g' config.h |
| 169 | + |
| 170 | +sed -i '/getenv(x)/d' config.h |
| 171 | +sed -i 's/HAVE_DOS_PATHS 0/HAVE_DOS_PATHS 1/g' config.h |
| 172 | + |
0 commit comments