@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