1
0
mirror of git://f0xx.org/ac/ac-scripts synced 2026-07-29 08:58:25 +03:00
Files
ac-scripts/native-build-cache.sh
Anton Afanasyeu 3c197ed9dd initial
2026-06-23 12:20:53 +02:00

125 lines
4.0 KiB
Bash

#!/usr/bin/env bash
# Host build accelerators for native codecs (libvpx / NDK). Source, do not execute.
#
# ccache (default: auto-detect):
# ANDROIDCAST_CCACHE=auto|1|0
# CCACHE_DIR — default: <repo>/build/.ccache
#
# distcc (off by default; experimental for libvpx configure/make only, not ndk-build):
# ANDROIDCAST_USE_DISTCC=1
# DISTCC_HOSTS=localhost/8 192.168.1.10/16
#
set -euo pipefail
[[ -n "${ANDROIDCAST_NATIVE_CACHE_SOURCED:-}" ]] && return 0
ANDROIDCAST_NATIVE_CACHE_SOURCED=1
androidcast_project_root() {
if [[ -n "${ANDROIDCAST_ROOT:-}" ]]; then
printf '%s\n' "$ANDROIDCAST_ROOT"
return 0
fi
local here
here="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
printf '%s\n' "$here"
}
androidcast_ccache_wanted() {
case "${ANDROIDCAST_CCACHE:-auto}" in
0 | false | FALSE | no | NO | off | OFF) return 1 ;;
1 | true | TRUE | yes | YES | on | ON) return 0 ;;
auto | AUTO | "")
command -v ccache >/dev/null 2>&1
;;
*) return 0 ;;
esac
}
androidcast_ndk_clang_basename() {
case "${1:-}" in
arm64-v8a) echo aarch64-linux-android29-clang ;;
armeabi-v7a) echo armv7a-linux-androideabi29-clang ;;
x86_64) echo x86_64-linux-android29-clang ;;
x86) echo i686-linux-android29-clang ;;
*) echo "" ;;
esac
}
androidcast_ndk_clangxx_basename() {
case "${1:-}" in
arm64-v8a) echo aarch64-linux-android29-clang++ ;;
armeabi-v7a) echo armv7a-linux-androideabi29-clang++ ;;
x86_64) echo x86_64-linux-android29-clang++ ;;
x86) echo i686-linux-android29-clang++ ;;
*) echo "" ;;
esac
}
# Configure ccache + optional distcc; set CC/CXX/NDK_CCACHE for libvpx + ndk-build.
# Args: project_root abi ndk_root ndk_host_bin
androidcast_apply_native_build_accelerators() {
local root="${1:?root}"
local abi="${2:?abi}"
local ndk_bin="${4:?ndk_host_bin}"
local clang clangxx
clang="$(androidcast_ndk_clang_basename "$abi")"
clangxx="$(androidcast_ndk_clangxx_basename "$abi")"
if [[ -z "$clang" || ! -x "$ndk_bin/$clang" ]]; then
echo "WARN: NDK clang not found for $abi under $ndk_bin" >&2
return 0
fi
local prefix=""
local ccache_on=false
local distcc_on=false
if androidcast_ccache_wanted && command -v ccache >/dev/null 2>&1; then
ccache_on=true
export CCACHE_DIR="${CCACHE_DIR:-$root/build/.ccache}"
mkdir -p "$CCACHE_DIR"
export CCACHE_BASEDIR="$root"
export CCACHE_COMPRESS="${CCACHE_COMPRESS:-1}"
export CCACHE_COMPILERCHECK="${CCACHE_COMPILERCHECK:-content}"
export CCACHE_MAXSIZE="${CCACHE_MAXSIZE:-5G}"
export NDK_CCACHE="${NDK_CCACHE:-ccache}"
prefix="ccache "
echo "ccache: ON (dir=$CCACHE_DIR, NDK_CCACHE=$NDK_CCACHE)"
ccache -s 2>/dev/null | sed 's/^/ /' || true
elif androidcast_ccache_wanted; then
echo "ccache: requested but not installed (install ccache or ANDROIDCAST_CCACHE=0)"
else
echo "ccache: off (ANDROIDCAST_CCACHE=${ANDROIDCAST_CCACHE:-auto})"
fi
case "${ANDROIDCAST_USE_DISTCC:-0}" in
1 | true | TRUE | yes | YES | on | ON)
if command -v distcc >/dev/null 2>&1 && [[ -n "${DISTCC_HOSTS:-}" ]]; then
distcc_on=true
export DISTCC_VERBOSE="${DISTCC_VERBOSE:-0}"
prefix="distcc ${prefix}"
echo "distcc: ON (experimental, libvpx make/configure only; hosts=$DISTCC_HOSTS)"
elif command -v distcc >/dev/null 2>&1; then
echo "distcc: ANDROIDCAST_USE_DISTCC=1 but DISTCC_HOSTS empty — skipped" >&2
else
echo "distcc: requested but distcc not installed — skipped" >&2
fi
;;
*)
echo "distcc: off (set ANDROIDCAST_USE_DISTCC=1 and DISTCC_HOSTS to try)"
;;
esac
export CC="${prefix}${ndk_bin}/${clang}"
if [[ -n "$clangxx" && -x "$ndk_bin/$clangxx" ]]; then
export CXX="${prefix}${ndk_bin}/${clangxx}"
else
export CXX="${prefix}${ndk_bin}/${clang}"
fi
export AR="${ndk_bin}/llvm-ar"
export RANLIB="${ndk_bin}/llvm-ranlib"
# libvpx configure reads these when cross-compiling.
export AS="$CC"
export LD="${ndk_bin}/ld.lld"
}