mirror of
https://github.com/samsonjs/media.git
synced 2026-04-14 12:45:47 +00:00
126 lines
4 KiB
Bash
Executable file
126 lines
4 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2019 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
set -eu
|
|
|
|
FFMPEG_MODULE_PATH="$1"
|
|
echo "FFMPEG_MODULE_PATH is ${FFMPEG_MODULE_PATH}"
|
|
NDK_PATH="$2"
|
|
echo "NDK path is ${NDK_PATH}"
|
|
HOST_PLATFORM="$3"
|
|
echo "Host platform is ${HOST_PLATFORM}"
|
|
ANDROID_ABI="$4"
|
|
echo "ANDROID_ABI is ${ANDROID_ABI}"
|
|
ENABLED_DECODERS=("${@:5}")
|
|
echo "Enabled decoders are ${ENABLED_DECODERS[@]}"
|
|
JOBS="$(nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 4)"
|
|
echo "Using $JOBS jobs for make"
|
|
COMMON_OPTIONS="
|
|
--target-os=android
|
|
--enable-static
|
|
--disable-shared
|
|
--disable-doc
|
|
--disable-programs
|
|
--disable-everything
|
|
--disable-avdevice
|
|
--disable-avformat
|
|
--disable-swscale
|
|
--disable-postproc
|
|
--disable-avfilter
|
|
--disable-symver
|
|
--enable-swresample
|
|
--extra-ldexeflags=-pie
|
|
--disable-v4l2-m2m
|
|
--disable-vulkan
|
|
"
|
|
TOOLCHAIN_PREFIX="${NDK_PATH}/toolchains/llvm/prebuilt/${HOST_PLATFORM}/bin"
|
|
for decoder in "${ENABLED_DECODERS[@]}"
|
|
do
|
|
COMMON_OPTIONS="${COMMON_OPTIONS} --enable-decoder=${decoder}"
|
|
done
|
|
|
|
ARMV7_CLANG="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi${ANDROID_ABI}-clang"
|
|
if [[ -e "${TOOLCHAIN_PREFIX}" && ! -e "$ARMV7_CLANG" ]]
|
|
then
|
|
echo "AVMv7 Clang compiler with path $ARMV7_CLANG does not exist"
|
|
echo "It's likely your NDK version doesn't support ANDROID_ABI $ANDROID_ABI"
|
|
echo "Either use older version of NDK or raise ANDROID_ABI (be aware that ANDROID_ABI must not be greater than your application's minSdk)"
|
|
exit 1
|
|
fi
|
|
ANDROID_ABI_64BIT="$ANDROID_ABI"
|
|
if [[ "$ANDROID_ABI_64BIT" -lt 21 ]]
|
|
then
|
|
echo "Using ANDROID_ABI 21 for 64-bit architectures"
|
|
ANDROID_ABI_64BIT=21
|
|
fi
|
|
|
|
cd "${FFMPEG_MODULE_PATH}/jni/ffmpeg"
|
|
./configure \
|
|
--libdir=android-libs/armeabi-v7a \
|
|
--arch=arm \
|
|
--cpu=armv7-a \
|
|
--cross-prefix="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi${ANDROID_ABI}-" \
|
|
--nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
|
|
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
|
|
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
|
|
--strip="${TOOLCHAIN_PREFIX}/llvm-strip" \
|
|
--extra-cflags="-march=armv7-a -mfloat-abi=softfp" \
|
|
--extra-ldflags="-Wl,--fix-cortex-a8" \
|
|
${COMMON_OPTIONS}
|
|
make -j$JOBS
|
|
make install-libs
|
|
make clean
|
|
./configure \
|
|
--libdir=android-libs/arm64-v8a \
|
|
--arch=aarch64 \
|
|
--cpu=armv8-a \
|
|
--cross-prefix="${TOOLCHAIN_PREFIX}/aarch64-linux-android${ANDROID_ABI_64BIT}-" \
|
|
--nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
|
|
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
|
|
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
|
|
--strip="${TOOLCHAIN_PREFIX}/llvm-strip" \
|
|
${COMMON_OPTIONS}
|
|
make -j$JOBS
|
|
make install-libs
|
|
make clean
|
|
./configure \
|
|
--libdir=android-libs/x86 \
|
|
--arch=x86 \
|
|
--cpu=i686 \
|
|
--cross-prefix="${TOOLCHAIN_PREFIX}/i686-linux-android${ANDROID_ABI}-" \
|
|
--nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
|
|
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
|
|
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
|
|
--strip="${TOOLCHAIN_PREFIX}/llvm-strip" \
|
|
--disable-asm \
|
|
${COMMON_OPTIONS}
|
|
make -j$JOBS
|
|
make install-libs
|
|
make clean
|
|
./configure \
|
|
--libdir=android-libs/x86_64 \
|
|
--arch=x86_64 \
|
|
--cpu=x86-64 \
|
|
--cross-prefix="${TOOLCHAIN_PREFIX}/x86_64-linux-android${ANDROID_ABI_64BIT}-" \
|
|
--nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
|
|
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
|
|
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
|
|
--strip="${TOOLCHAIN_PREFIX}/llvm-strip" \
|
|
--disable-asm \
|
|
${COMMON_OPTIONS}
|
|
make -j$JOBS
|
|
make install-libs
|
|
make clean
|