284 lines
8.1 KiB
Batchfile
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 |