Files
video-v1/build_libwebm_android.bat
2025-09-29 02:42:26 +09:00

284 lines
8.1 KiB
Batchfile

@echo off
setlocal enabledelayedexpansion
:: ================================================================================================
:: Android libwebm Library Build Script
:: ================================================================================================
:: Purpose: Build libwebm library for Android ARM64 platform
:: Target: lib/android-arm64-v8a/libwebm/
:: Author: Generated with Claude Code
::
:: Prerequisites:
:: 1. Android NDK r25+ installed
:: 2. CMake installed and in PATH
:: 3. libwebm source code available in oss/libwebm
::
:: Usage:
:: 1. Set Android NDK environment variable:
:: set ANDROID_NDK_HOME=C:\Android\android-ndk-r25c
:: 2. libwebm source should be available at:
:: oss/libwebm/
:: 3. Run this script:
:: build_libwebm_android.bat (for ARM64)
:: build_libwebm_android.bat arm32 (for ARM32)
::
:: Output:
:: - lib/android-arm64-v8a/libwebm/libwebm.a (ARM64)
:: - lib/android-armeabi-v7a/libwebm/libwebm.a (ARM32)
:: - include/libwebm/*.h
:: ================================================================================================
echo.
echo ========================================
echo Android libwebm 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 "CMAKE_ANDROID_ARCH_ABI=armeabi-v7a"
) else (
set "ANDROID_ABI=arm64-v8a"
set "ANDROID_TOOLCHAIN_PREFIX=aarch64-linux-android"
set "CMAKE_ANDROID_ARCH_ABI=arm64-v8a"
)
set "ANDROID_PLATFORM=android-29"
set "ANDROID_API_LEVEL=29"
:: Set output directory
set "OUTPUT_DIR=%PROJECT_ROOT%\lib\android-%ANDROID_ABI%\libwebm"
:: libwebm source directory
set "LIBWEBM_SOURCE_DIR=%PROJECT_ROOT%\oss\libwebm"
set "BUILD_DIR=%PROJECT_ROOT%\build-android\libwebm"
echo Project Root: %PROJECT_ROOT%
echo libwebm Source: %LIBWEBM_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 libwebm source directory exists
if not exist "%LIBWEBM_SOURCE_DIR%" (
echo ❌ Error: libwebm source directory not found: %LIBWEBM_SOURCE_DIR%
echo Please ensure libwebm source is available at:
echo %PROJECT_ROOT%\oss\libwebm\
exit /b 1
)
echo ✅ libwebm source found: %LIBWEBM_SOURCE_DIR%
:: Check for required tools
where cmake >nul 2>&1
if errorlevel 1 (
echo ❌ Error: cmake not found in PATH
echo Please install CMake and add it to your PATH
exit /b 1
)
echo ✅ Build tools found: cmake
:: 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 path
set "ANDROID_TOOLCHAIN_FILE=%ANDROID_NDK_HOME%\build\cmake\android.toolchain.cmake"
echo.
echo 🔧 Configuring libwebm build with CMake...
echo.
:: Change to build directory
pushd "%BUILD_DIR%"
:: Configure CMake for Android cross-compilation (static library for embedding)
cmake "%LIBWEBM_SOURCE_DIR%" ^
-DCMAKE_TOOLCHAIN_FILE="%ANDROID_TOOLCHAIN_FILE%" ^
-DANDROID_ABI=%CMAKE_ANDROID_ARCH_ABI% ^
-DANDROID_PLATFORM=%ANDROID_PLATFORM% ^
-DANDROID_NDK="%ANDROID_NDK_HOME%" ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_ANDROID_STL_TYPE=c++_shared ^
-DBUILD_SHARED_LIBS=OFF ^
-DCMAKE_POSITION_INDEPENDENT_CODE=ON ^
-DENABLE_WEBM_PARSER=ON ^
-DENABLE_WEBMTS=OFF ^
-DENABLE_WEBMINFO=OFF ^
-DENABLE_TESTS=OFF ^
-DENABLE_IWYU=OFF ^
-DENABLE_SAMPLES=OFF ^
-G "Ninja"
if errorlevel 1 (
echo ❌ Error: CMake configuration failed
popd
exit /b 1
)
echo.
echo 🔨 Building libwebm library...
echo.
:: Build with cmake
cmake --build . --config Release -j %NUMBER_OF_PROCESSORS%
if errorlevel 1 (
echo ❌ Error: Build failed
popd
exit /b 1
)
popd
echo.
echo 📦 Installing libwebm to output directory...
echo.
:: Copy built library
if exist "%BUILD_DIR%\libwebm.a" (
copy "%BUILD_DIR%\libwebm.a" "%OUTPUT_DIR%\"
if errorlevel 1 (
echo ❌ Error: Failed to copy libwebm.a
exit /b 1
)
echo ✅ Copied: libwebm.a
) else (
echo ❌ Error: libwebm.a not found in build directory
dir "%BUILD_DIR%"
exit /b 1
)
:: Copy headers
set "HEADER_OUTPUT_DIR=%PROJECT_ROOT%\include\libwebm"
if not exist "%HEADER_OUTPUT_DIR%" (
mkdir "%HEADER_OUTPUT_DIR%"
)
:: Copy public headers from libwebm source
echo ✅ Copying libwebm headers...
:: Copy main headers
if exist "%LIBWEBM_SOURCE_DIR%\mkvmuxer.hpp" (
copy "%LIBWEBM_SOURCE_DIR%\mkvmuxer.hpp" "%HEADER_OUTPUT_DIR%\"
)
if exist "%LIBWEBM_SOURCE_DIR%\mkvmuxertypes.hpp" (
copy "%LIBWEBM_SOURCE_DIR%\mkvmuxertypes.hpp" "%HEADER_OUTPUT_DIR%\"
)
if exist "%LIBWEBM_SOURCE_DIR%\mkvmuxerutil.hpp" (
copy "%LIBWEBM_SOURCE_DIR%\mkvmuxerutil.hpp" "%HEADER_OUTPUT_DIR%\"
)
if exist "%LIBWEBM_SOURCE_DIR%\mkvparser.hpp" (
copy "%LIBWEBM_SOURCE_DIR%\mkvparser.hpp" "%HEADER_OUTPUT_DIR%\"
)
if exist "%LIBWEBM_SOURCE_DIR%\mkvreader.hpp" (
copy "%LIBWEBM_SOURCE_DIR%\mkvreader.hpp" "%HEADER_OUTPUT_DIR%\"
)
if exist "%LIBWEBM_SOURCE_DIR%\mkvwriter.hpp" (
copy "%LIBWEBM_SOURCE_DIR%\mkvwriter.hpp" "%HEADER_OUTPUT_DIR%\"
)
if exist "%LIBWEBM_SOURCE_DIR%\webmids.hpp" (
copy "%LIBWEBM_SOURCE_DIR%\webmids.hpp" "%HEADER_OUTPUT_DIR%\"
)
if exist "%LIBWEBM_SOURCE_DIR%\hdr_util.hpp" (
copy "%LIBWEBM_SOURCE_DIR%\hdr_util.hpp" "%HEADER_OUTPUT_DIR%\"
)
:: Copy mkvmuxer headers
if exist "%LIBWEBM_SOURCE_DIR%\mkvmuxer\*.h" (
if not exist "%HEADER_OUTPUT_DIR%\mkvmuxer" mkdir "%HEADER_OUTPUT_DIR%\mkvmuxer"
copy "%LIBWEBM_SOURCE_DIR%\mkvmuxer\*.h" "%HEADER_OUTPUT_DIR%\mkvmuxer\"
)
:: Copy mkvparser headers
if exist "%LIBWEBM_SOURCE_DIR%\mkvparser\*.h" (
if not exist "%HEADER_OUTPUT_DIR%\mkvparser" mkdir "%HEADER_OUTPUT_DIR%\mkvparser"
copy "%LIBWEBM_SOURCE_DIR%\mkvparser\*.h" "%HEADER_OUTPUT_DIR%\mkvparser\"
)
:: Copy common headers
if exist "%LIBWEBM_SOURCE_DIR%\common\*.h" (
if not exist "%HEADER_OUTPUT_DIR%\common" mkdir "%HEADER_OUTPUT_DIR%\common"
copy "%LIBWEBM_SOURCE_DIR%\common\*.h" "%HEADER_OUTPUT_DIR%\common\"
)
:: Copy webvtt headers
if exist "%LIBWEBM_SOURCE_DIR%\webvtt\*.h" (
if not exist "%HEADER_OUTPUT_DIR%\webvtt" mkdir "%HEADER_OUTPUT_DIR%\webvtt"
copy "%LIBWEBM_SOURCE_DIR%\webvtt\*.h" "%HEADER_OUTPUT_DIR%\webvtt\"
)
echo ✅ Copied: libwebm headers to include/libwebm/
:: Display build summary
echo.
echo ========================================
echo Build Summary
echo ========================================
echo Library: %OUTPUT_DIR%\libwebm.a
echo Headers: %HEADER_OUTPUT_DIR%\*.h
echo Platform: Android %ANDROID_ABI% (API %ANDROID_API_LEVEL%)
echo Build Type: Release
echo.
:: Verify output files
if exist "%OUTPUT_DIR%\libwebm.a" (
echo ✅ Success: Android libwebm library built successfully
:: Display file size
for %%F in ("%OUTPUT_DIR%\libwebm.a") do (
echo Library Size: %%~zF bytes
)
) else (
echo ❌ Error: Build completed but libwebm.a not found in output directory
exit /b 1
)
echo.
echo 🎯 Next Steps:
echo 1. The Android libwebm 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