mirror of
git://f0xx.org/android_cast
synced 2026-07-29 05:17:39 +03:00
@@ -74,6 +74,10 @@ export ANDROID_NDK_HOME="$NDK"
|
||||
export ANDROID_NDK_ROOT="$NDK"
|
||||
export PATH="$NDK_HOST_BIN:$PATH"
|
||||
|
||||
# shellcheck source=native-build-cache.sh
|
||||
source "$ROOT/scripts/native-build-cache.sh"
|
||||
androidcast_apply_native_build_accelerators "$ROOT" "$ABI" "$NDK" "$NDK_HOST_BIN"
|
||||
|
||||
VPX_CONFIGURE_EXTRA=()
|
||||
APP_CFLAGS_EXTRA=""
|
||||
case "$ABI" in
|
||||
@@ -88,6 +92,9 @@ case "$ABI" in
|
||||
;;
|
||||
esac
|
||||
|
||||
## common native optimization options
|
||||
APP_CFLAGS_EXTRA+=" -O2 -fdata-sections -ffunction-sections -Wl,--gc-sections -ftree-vectorize -O2 -s -funroll-loops -fomit-frame-pointer "
|
||||
|
||||
echo "Building libvpx for $ABI (target=$VPX_TARGET) ..."
|
||||
echo " source: $VPX_SRC"
|
||||
echo " build: $BUILD_DIR"
|
||||
@@ -125,6 +132,7 @@ elif [[ "$ABI" == x86 || "$ABI" == x86_64 ]] && [[ -f "$BUILD_DIR/vpx_config.h"
|
||||
fi
|
||||
|
||||
if $need_configure; then
|
||||
# CC/CXX may be ccache-wrapped NDK clang (see native-build-cache.sh).
|
||||
"$VPX_SRC/configure" \
|
||||
--target="$VPX_TARGET" \
|
||||
--disable-examples \
|
||||
|
||||
32
scripts/ci-build.sh
Executable file
32
scripts/ci-build.sh
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
# CI entry: native codecs (all ABIs) + Gradle debug APK + unit tests.
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$ROOT"
|
||||
|
||||
export ANDROIDCAST_ROOT="$ROOT"
|
||||
export ANDROIDCAST_CCACHE="${ANDROIDCAST_CCACHE:-1}"
|
||||
export ANDROIDCAST_USE_DISTCC="${ANDROIDCAST_USE_DISTCC:-0}"
|
||||
|
||||
# shellcheck source=android-ndk.sh
|
||||
source "$ROOT/scripts/android-ndk.sh"
|
||||
export ANDROID_NDK_HOME="$(androidcast_find_ndk_root "$ROOT")"
|
||||
export ANDROID_NDK_ROOT="$ANDROID_NDK_HOME"
|
||||
|
||||
if [[ -f .gitmodules ]]; then
|
||||
git submodule update --init --recursive
|
||||
fi
|
||||
|
||||
ABIS="${ANDROIDCAST_CI_ABIS:-armeabi-v7a arm64-v8a x86_64}"
|
||||
echo "==> Building libvpx for: $ABIS"
|
||||
rm -rf "$ROOT/build/native"
|
||||
mkdir -p "$ROOT/build/native"
|
||||
for abi in $ABIS; do
|
||||
./scripts/build-native-codecs.sh "$abi"
|
||||
done
|
||||
|
||||
echo "==> Gradle assembleDebug + unit tests"
|
||||
./gradlew --no-daemon clean assembleDebug testDebugUnitTest
|
||||
|
||||
echo "==> Done: $ROOT/app/build/outputs/apk/debug/app-debug.apk"
|
||||
124
scripts/native-build-cache.sh
Normal file
124
scripts/native-build-cache.sh
Normal file
@@ -0,0 +1,124 @@
|
||||
#!/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"
|
||||
}
|
||||
Reference in New Issue
Block a user