ZaStoGram/TMessagesProj/jni/prebuild/build_openh264.sh
2026-09-17 02:11:18 +04:00

81 lines
2 KiB
Shell
Executable file

#!/usr/bin/env bash
# Compile static OpenH264 libraries for Android into lib/<abi>/.
set -Eeuo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/common.sh"
OPENH264_SRC="${OPENH264_SOURCE_DIR:-$SCRIPT_DIR/../third_party/openh264}"
BUILD_DIR="$SCRIPT_DIR/build/openh264"
require_ndk
require_command make
[[ -f "$OPENH264_SRC/Makefile" ]] || {
echo "ERROR: OpenH264 Makefile not found: $OPENH264_SRC/Makefile" >&2
echo " Set OPENH264_SOURCE_DIR if the source tree is elsewhere." >&2
exit 1
}
if [[ " $ABIS " == *" x86 "* || " $ABIS " == *" x86_64 "* ]]; then
require_command nasm
fi
abi_to_arch() {
case "$1" in
armeabi-v7a) echo arm ;;
arm64-v8a) echo arm64 ;;
x86) echo x86 ;;
x86_64) echo x86_64 ;;
*) echo "ERROR: unsupported ABI: $1" >&2; return 1 ;;
esac
}
copy_source_tree() {
local dst="$1"
rm -rf "$dst"
mkdir -p "$dst"
cp -R "$OPENH264_SRC/." "$dst/"
}
rm -rf "$BUILD_DIR"
mkdir -p "$BUILD_DIR"
for abi in $ABIS; do
arch="$(abi_to_arch "$abi")"
work_src="$BUILD_DIR/$abi"
abi_out="$(abi_output_dir "$abi")"
echo
echo "==> Building OpenH264 for $abi (ARCH=$arch, API=$API)"
copy_source_tree "$work_src"
make -C "$work_src" \
-j"$JOBS" \
V=No \
OS=android \
ARCH="$arch" \
NDKROOT="$ANDROID_NDK_HOME" \
TARGET="android-$API" \
NDKLEVEL="$API" \
BUILDTYPE=Release \
CFLAGS_OPT="-O3 $REPRODUCIBLE_PATH_FLAGS $PREBUILD_OBJECT_FLAGS" \
ENABLEPIC=Yes \
libopenh264.a
[[ -f "$work_src/libopenh264.a" ]] || {
echo "ERROR: build succeeded but libopenh264.a was not produced for $abi" >&2
exit 1
}
copy_archive "$work_src/libopenh264.a" "$abi_out/libopenh264.a"
finalize_archive "$abi_out/libopenh264.a"
echo "==> $abi_out/libopenh264.a"
done
rm -rf "$BUILD_DIR"
echo
echo "OpenH264 static build completed."