290 lines
8.0 KiB
Batchfile
290 lines
8.0 KiB
Batchfile
@echo off
|
|
setlocal enabledelayedexpansion
|
|
|
|
:: ================================================================================================
|
|
:: Android dav1d Library Build Script
|
|
:: ================================================================================================
|
|
:: Purpose: Build dav1d library for Android ARM64 platform
|
|
:: Target: lib/android-arm64-v8a/dav1d/
|
|
:: Author: Generated with Claude Code
|
|
::
|
|
:: Prerequisites:
|
|
:: 1. Android NDK r25+ installed
|
|
:: 2. Python with meson and ninja installed: pip install meson ninja
|
|
:: 3. dav1d source code cloned in parent directory
|
|
::
|
|
:: Usage:
|
|
:: 1. Set Android NDK environment variable:
|
|
:: set ANDROID_NDK_HOME=C:\Android\android-ndk-r25c
|
|
:: 2. dav1d source should be available at:
|
|
:: oss/dav1d/
|
|
:: 3. Run this script:
|
|
:: build_dav1d_android.bat (for ARM64)
|
|
:: build_dav1d_android.bat arm32 (for ARM32)
|
|
::
|
|
:: Output:
|
|
:: - lib/android-arm64-v8a/dav1d/libdav1d.a (ARM64)
|
|
:: - lib/android-armeabi-v7a/dav1d/libdav1d.a (ARM32)
|
|
:: - include/dav1d/*.h
|
|
:: ================================================================================================
|
|
|
|
echo.
|
|
echo ========================================
|
|
echo Android dav1d Library Build Script
|
|
echo ========================================
|
|
echo.
|
|
|
|
:: Set project root directory
|
|
set "PROJECT_ROOT=%~dp0"
|
|
set "PROJECT_ROOT=%PROJECT_ROOT:~0,-1%"
|
|
|
|
:: Set Android build configuration (default to ARM64, can be overridden)
|
|
if "%1"=="arm32" (
|
|
set "ANDROID_ABI=armeabi-v7a"
|
|
set "ANDROID_TOOLCHAIN_PREFIX=armv7a-linux-androideabi"
|
|
set "MESON_CPU_FAMILY=arm"
|
|
set "MESON_CPU=armv7"
|
|
) else (
|
|
set "ANDROID_ABI=arm64-v8a"
|
|
set "ANDROID_TOOLCHAIN_PREFIX=aarch64-linux-android"
|
|
set "MESON_CPU_FAMILY=aarch64"
|
|
set "MESON_CPU=aarch64"
|
|
)
|
|
set "ANDROID_PLATFORM=android-29"
|
|
set "ANDROID_API_LEVEL=29"
|
|
|
|
:: Set output directory
|
|
set "OUTPUT_DIR=%PROJECT_ROOT%\lib\android-%ANDROID_ABI%\dav1d"
|
|
|
|
:: dav1d source directory
|
|
set "DAV1D_SOURCE_DIR=%PROJECT_ROOT%\oss\dav1d"
|
|
set "BUILD_DIR=%PROJECT_ROOT%\build-android\dav1d"
|
|
|
|
echo Project Root: %PROJECT_ROOT%
|
|
echo dav1d Source: %DAV1D_SOURCE_DIR%
|
|
echo Build Directory: %BUILD_DIR%
|
|
echo Output Directory: %OUTPUT_DIR%
|
|
echo Android ABI: %ANDROID_ABI%
|
|
echo Android API Level: %ANDROID_API_LEVEL%
|
|
echo.
|
|
|
|
:: Check if Android NDK is set
|
|
if "%ANDROID_NDK_HOME%"=="" (
|
|
if "%ANDROID_NDK_ROOT%"=="" (
|
|
echo ❌ Error: Android NDK not found
|
|
echo Please set ANDROID_NDK_HOME or ANDROID_NDK_ROOT environment variable
|
|
echo Example: set ANDROID_NDK_HOME=C:\Android\android-ndk-r25c
|
|
exit /b 1
|
|
) else (
|
|
set "ANDROID_NDK_HOME=%ANDROID_NDK_ROOT%"
|
|
)
|
|
)
|
|
|
|
echo ✅ Android NDK found: %ANDROID_NDK_HOME%
|
|
|
|
:: Check if dav1d source directory exists
|
|
if not exist "%DAV1D_SOURCE_DIR%" (
|
|
echo ❌ Error: dav1d source directory not found: %DAV1D_SOURCE_DIR%
|
|
echo Please ensure dav1d source is available at:
|
|
echo %PROJECT_ROOT%\oss\dav1d\
|
|
exit /b 1
|
|
)
|
|
|
|
echo ✅ dav1d source found: %DAV1D_SOURCE_DIR%
|
|
|
|
:: Check for required tools
|
|
where meson >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo ❌ Error: meson not found in PATH
|
|
echo Please install meson: pip install meson
|
|
exit /b 1
|
|
)
|
|
|
|
where ninja >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo ❌ Error: ninja not found in PATH
|
|
echo Please install ninja: pip install ninja
|
|
exit /b 1
|
|
)
|
|
|
|
echo ✅ Build tools found: meson, ninja
|
|
|
|
:: Create build directory
|
|
if exist "%BUILD_DIR%" (
|
|
echo 🧹 Cleaning existing build directory...
|
|
rmdir /s /q "%BUILD_DIR%"
|
|
)
|
|
|
|
mkdir "%BUILD_DIR%"
|
|
if errorlevel 1 (
|
|
echo ❌ Error: Failed to create build directory
|
|
exit /b 1
|
|
)
|
|
|
|
:: Create output directory
|
|
if not exist "%OUTPUT_DIR%" (
|
|
mkdir "%OUTPUT_DIR%"
|
|
if errorlevel 1 (
|
|
echo ❌ Error: Failed to create output directory
|
|
exit /b 1
|
|
)
|
|
)
|
|
|
|
:: Set Android toolchain paths
|
|
set "ANDROID_TOOLCHAIN_DIR=%ANDROID_NDK_HOME%\toolchains\llvm\prebuilt\windows-x86_64"
|
|
set "ANDROID_SYSROOT=%ANDROID_TOOLCHAIN_DIR%\sysroot"
|
|
|
|
:: Create meson cross-compilation file for Android
|
|
set "CROSS_FILE=%BUILD_DIR%\android-%ANDROID_ABI%.txt"
|
|
|
|
echo.
|
|
echo 📝 Creating meson cross-compilation file for %ANDROID_ABI% (with 16 KB page alignment)...
|
|
|
|
(
|
|
echo [binaries]
|
|
echo c = '%ANDROID_TOOLCHAIN_DIR%\bin\%ANDROID_TOOLCHAIN_PREFIX%%ANDROID_API_LEVEL%-clang.cmd'
|
|
echo cpp = '%ANDROID_TOOLCHAIN_DIR%\bin\%ANDROID_TOOLCHAIN_PREFIX%%ANDROID_API_LEVEL%-clang++.cmd'
|
|
echo ar = '%ANDROID_TOOLCHAIN_DIR%\bin\llvm-ar.exe'
|
|
echo strip = '%ANDROID_TOOLCHAIN_DIR%\bin\llvm-strip.exe'
|
|
echo pkg-config = 'pkg-config'
|
|
echo.
|
|
echo [host_machine]
|
|
echo system = 'android'
|
|
echo cpu_family = '%MESON_CPU_FAMILY%'
|
|
echo cpu = '%MESON_CPU%'
|
|
echo endian = 'little'
|
|
echo.
|
|
echo [properties]
|
|
echo sys_root = '%ANDROID_SYSROOT%'
|
|
echo.
|
|
echo [built-in options]
|
|
echo c_args = ['-DANDROID', '-D__ANDROID_API__=%ANDROID_API_LEVEL%']
|
|
echo cpp_args = ['-DANDROID', '-D__ANDROID_API__=%ANDROID_API_LEVEL%']
|
|
echo c_link_args = ['-Wl,-z,max-page-size=16384', '-Wl,-z,common-page-size=16384']
|
|
echo cpp_link_args = ['-Wl,-z,max-page-size=16384', '-Wl,-z,common-page-size=16384']
|
|
) > "%CROSS_FILE%"
|
|
|
|
echo ✅ Created cross-compilation file: %CROSS_FILE%
|
|
|
|
echo.
|
|
echo 🔧 Configuring dav1d build with meson...
|
|
echo.
|
|
|
|
:: Change to dav1d source directory
|
|
pushd "%DAV1D_SOURCE_DIR%"
|
|
|
|
:: Configure meson cross-compilation for Android (static library for embedding)
|
|
meson setup "%BUILD_DIR%" ^
|
|
--cross-file="%CROSS_FILE%" ^
|
|
--default-library=static ^
|
|
--buildtype=release ^
|
|
--strip ^
|
|
-Denable_tools=false ^
|
|
-Denable_tests=false ^
|
|
-Denable_examples=false ^
|
|
-Denable_docs=false ^
|
|
-Db_lto=true ^
|
|
-Db_ndebug=true
|
|
|
|
if errorlevel 1 (
|
|
echo ❌ Error: meson configuration failed
|
|
popd
|
|
exit /b 1
|
|
)
|
|
|
|
echo.
|
|
echo 🔨 Building dav1d library...
|
|
echo.
|
|
|
|
:: Build with ninja
|
|
ninja -C "%BUILD_DIR%" -j%NUMBER_OF_PROCESSORS%
|
|
|
|
if errorlevel 1 (
|
|
echo ❌ Error: Build failed
|
|
popd
|
|
exit /b 1
|
|
)
|
|
|
|
popd
|
|
|
|
echo.
|
|
echo 📦 Installing dav1d to output directory...
|
|
echo.
|
|
|
|
:: Copy built library and headers
|
|
if exist "%BUILD_DIR%\src\libdav1d.a" (
|
|
copy "%BUILD_DIR%\src\libdav1d.a" "%OUTPUT_DIR%\"
|
|
if errorlevel 1 (
|
|
echo ❌ Error: Failed to copy libdav1d.a
|
|
exit /b 1
|
|
)
|
|
echo ✅ Copied: libdav1d.a
|
|
) else (
|
|
echo ❌ Error: libdav1d.a not found in build directory
|
|
dir "%BUILD_DIR%\src"
|
|
exit /b 1
|
|
)
|
|
|
|
:: Copy headers
|
|
set "HEADER_OUTPUT_DIR=%PROJECT_ROOT%\include\dav1d"
|
|
if not exist "%HEADER_OUTPUT_DIR%" (
|
|
mkdir "%HEADER_OUTPUT_DIR%"
|
|
)
|
|
|
|
:: Copy public headers from dav1d source
|
|
if exist "%DAV1D_SOURCE_DIR%\include\dav1d\*.h" (
|
|
copy "%DAV1D_SOURCE_DIR%\include\dav1d\*.h" "%HEADER_OUTPUT_DIR%\"
|
|
if errorlevel 1 (
|
|
echo ❌ Error: Failed to copy dav1d headers
|
|
exit /b 1
|
|
)
|
|
echo ✅ Copied: dav1d headers to include/dav1d/
|
|
)
|
|
|
|
:: Copy generated config header if exists
|
|
if exist "%BUILD_DIR%\include\dav1d\version.h" (
|
|
copy "%BUILD_DIR%\include\dav1d\version.h" "%HEADER_OUTPUT_DIR%\"
|
|
echo ✅ Copied: version.h
|
|
)
|
|
|
|
:: Display build summary
|
|
echo.
|
|
echo ========================================
|
|
echo Build Summary
|
|
echo ========================================
|
|
echo Library: %OUTPUT_DIR%\libdav1d.a
|
|
echo Headers: %HEADER_OUTPUT_DIR%\*.h
|
|
echo Platform: Android %ANDROID_ABI% (API %ANDROID_API_LEVEL%)
|
|
echo Build Type: Release with LTO
|
|
echo.
|
|
|
|
:: Verify output files
|
|
if exist "%OUTPUT_DIR%\libdav1d.a" (
|
|
echo ✅ Success: Android dav1d library built successfully
|
|
|
|
:: Display library info using file command if available
|
|
where file >nul 2>&1
|
|
if not errorlevel 1 (
|
|
echo.
|
|
echo 📋 Library Information:
|
|
file "%OUTPUT_DIR%\libdav1d.a"
|
|
)
|
|
|
|
:: Display file size
|
|
for %%F in ("%OUTPUT_DIR%\libdav1d.a") do (
|
|
echo Library Size: %%~zF bytes
|
|
)
|
|
) else (
|
|
echo ❌ Error: Build completed but libdav1d.a not found in output directory
|
|
exit /b 1
|
|
)
|
|
|
|
echo.
|
|
echo 🎯 Next Steps:
|
|
echo 1. The Android dav1d library is ready for use in VavCore
|
|
echo 2. Build VavCore Android library: platforms\android\vavcore\build.sh
|
|
echo 3. Test the library with Android VavCore integration
|
|
echo.
|
|
|
|
endlocal
|
|
exit /b 0 |