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

281 lines
12 KiB
Batchfile

@echo off
:: ============================================================================
:: AMD AMF Library Setup Script
:: Copies AMF headers (Header-only library approach)
:: AMF runtime is provided by AMD GPU drivers
:: ============================================================================
setlocal enabledelayedexpansion
set SOURCE_DIR=D:\Project\video-av1\oss\AMF\amf\public
set BUILD_DIR_BASE=D:\Project\video-av1\build\amf
set TEMP_INSTALL_PREFIX=%BUILD_DIR_BASE%\temp_install
set FINAL_INSTALL_PREFIX=D:\Project\video-av1
echo ============================================================================
echo Setting up AMD AMF Library (Header-only)
echo ============================================================================
echo Source Directory: %SOURCE_DIR%
echo Build Directory: %BUILD_DIR_BASE%
echo Temp Install: %TEMP_INSTALL_PREFIX%
echo Final Install: %FINAL_INSTALL_PREFIX%
echo.
:: Check if source directory exists
if not exist "%SOURCE_DIR%" (
echo ERROR: Source directory not found: %SOURCE_DIR%
exit /b 1
)
:: Clean previous build directories
if exist "%BUILD_DIR_BASE%" (
echo Cleaning previous build directories...
rmdir /s /q "%BUILD_DIR_BASE%"
)
:: Create build directories
mkdir "%BUILD_DIR_BASE%"
mkdir "%TEMP_INSTALL_PREFIX%"
mkdir "%TEMP_INSTALL_PREFIX%\include"
mkdir "%TEMP_INSTALL_PREFIX%\include\amf"
mkdir "%TEMP_INSTALL_PREFIX%\lib"
echo ============================================================================
echo AMD AMF is a header-only SDK
echo Runtime libraries are provided by AMD GPU drivers
echo ============================================================================
:: Copy AMF headers
echo Copying AMF headers...
if exist "%SOURCE_DIR%\include" (
xcopy /E /Y "%SOURCE_DIR%\include\*" "%TEMP_INSTALL_PREFIX%\include\amf\"
)
:: Copy common headers that might be needed
if exist "%SOURCE_DIR%\common" (
echo Copying AMF common headers...
mkdir "%TEMP_INSTALL_PREFIX%\include\amf\common"
xcopy /Y "%SOURCE_DIR%\common\*.h" "%TEMP_INSTALL_PREFIX%\include\amf\common\"
)
echo ============================================================================
echo Creating AMF import library stubs
echo ============================================================================
:: Create a simple CMakeLists.txt for stub libraries
echo cmake_minimum_required(VERSION 3.16) > "%BUILD_DIR_BASE%\CMakeLists.txt"
echo project(AMF_Stub VERSION 1.4.0) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo. >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo set(CMAKE_CXX_STANDARD 17) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo set(CMAKE_CXX_STANDARD_REQUIRED ON) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo. >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo # Set debug postfix >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo set(CMAKE_DEBUG_POSTFIX "-debug") >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo. >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo # Add AMF source files >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo set(AMF_SOURCES >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/AMFFactory.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/AMFSTL.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/CurrentTimeImpl.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/DataStreamFactory.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/DataStreamFile.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/DataStreamMemory.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/IOCapsImpl.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/JsonImpl.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/OpenGLImportTable.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/PropertyStorageExImpl.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/Thread.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/TraceAdapter.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/VulkanImportTable.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/Windows/ThreadWindows.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common/Windows/UtilsWindows.cpp" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo ^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo. >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo # Create AMF library from actual sources >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo add_library(AMF STATIC ${AMF_SOURCES}^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo. >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo # Add include directories >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo target_include_directories(AMF PUBLIC >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/include" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo "${CMAKE_CURRENT_SOURCE_DIR}/../../../oss/AMF/amf/public/common" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo ^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo. >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo # Add preprocessor definitions >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo target_compile_definitions(AMF PUBLIC >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo WIN32 >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo _WINDOWS >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo AMF_CORE_STATIC >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo ^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo. >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo # Set runtime library to /MD (consistent with other libraries^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo if(MSVC^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo set_target_properties(AMF PROPERTIES >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo MSVC_RUNTIME_LIBRARY "MultiThreadedDLL$<$<CONFIG:Debug>:Debug>" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo ^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo endif(^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo. >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo # Enable automatic export generation >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo set_target_properties(AMF PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo. >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo # Set library properties >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo set_target_properties(AMF PROPERTIES >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo OUTPUT_NAME "amf" >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo ^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo. >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo # Installation >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo install(TARGETS AMF >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo RUNTIME DESTINATION bin >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo LIBRARY DESTINATION lib >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo ARCHIVE DESTINATION lib >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo ^) >> "%BUILD_DIR_BASE%\CMakeLists.txt"
echo ============================================================================
echo Building Debug Configuration
echo ============================================================================
cd "%BUILD_DIR_BASE%"
mkdir debug
cd debug
cmake "%BUILD_DIR_BASE%" ^
-G "Visual Studio 17 2022" ^
-A x64 ^
-DCMAKE_BUILD_TYPE=Debug ^
-DCMAKE_INSTALL_PREFIX="%TEMP_INSTALL_PREFIX%" ^
-DBUILD_SHARED_LIBS=ON ^
-DCMAKE_DEBUG_POSTFIX=-debug
if errorlevel 1 (
echo ERROR: CMake configuration failed for Debug
exit /b 1
)
cmake --build . --config Debug --parallel 4
if errorlevel 1 (
echo ERROR: Build failed for Debug configuration
exit /b 1
)
echo Installing Debug configuration...
cmake --install . --config Debug
echo ============================================================================
echo Building Release Configuration
echo ============================================================================
cd "%BUILD_DIR_BASE%"
mkdir release
cd release
cmake "%BUILD_DIR_BASE%" ^
-G "Visual Studio 17 2022" ^
-A x64 ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX="%TEMP_INSTALL_PREFIX%" ^
-DBUILD_SHARED_LIBS=ON
if errorlevel 1 (
echo ERROR: CMake configuration failed for Release
exit /b 1
)
cmake --build . --config Release --parallel 4
if errorlevel 1 (
echo ERROR: Build failed for Release configuration
exit /b 1
)
echo Installing Release configuration...
cmake --install . --config Release
echo ============================================================================
echo Organizing Output Files
echo ============================================================================
:: Copy headers to final location
if exist "%TEMP_INSTALL_PREFIX%\include\amf" (
echo Copying headers to %FINAL_INSTALL_PREFIX%\include\amf\...
if not exist "%FINAL_INSTALL_PREFIX%\include\amf" mkdir "%FINAL_INSTALL_PREFIX%\include\amf"
xcopy /E /Y "%TEMP_INSTALL_PREFIX%\include\amf\*" "%FINAL_INSTALL_PREFIX%\include\amf\"
)
:: Copy libraries to final location (Windows x64)
if exist "%TEMP_INSTALL_PREFIX%\lib" (
echo Copying libraries to %FINAL_INSTALL_PREFIX%\lib\windows-x64\amf\...
if not exist "%FINAL_INSTALL_PREFIX%\lib\windows-x64\amf" mkdir "%FINAL_INSTALL_PREFIX%\lib\windows-x64\amf"
xcopy /E /Y "%TEMP_INSTALL_PREFIX%\lib\*" "%FINAL_INSTALL_PREFIX%\lib\windows-x64\amf\"
)
:: Copy lib files from build directories (if not installed properly)
echo Looking for additional lib files in build directories...
if exist "%BUILD_DIR_BASE%\debug" (
for /r "%BUILD_DIR_BASE%\debug" %%f in (*.lib) do (
echo Copying debug lib: %%f
copy "%%f" "%FINAL_INSTALL_PREFIX%\lib\windows-x64\amf\"
)
)
if exist "%BUILD_DIR_BASE%\release" (
for /r "%BUILD_DIR_BASE%\release" %%f in (*.lib) do (
echo Copying release lib: %%f
copy "%%f" "%FINAL_INSTALL_PREFIX%\lib\windows-x64\amf\"
)
)
:: Copy DLLs to final location
if exist "%TEMP_INSTALL_PREFIX%\bin" (
echo Copying DLLs to %FINAL_INSTALL_PREFIX%\lib\windows-x64\amf\...
xcopy /Y "%TEMP_INSTALL_PREFIX%\bin\*.dll" "%FINAL_INSTALL_PREFIX%\lib\windows-x64\amf\"
)
echo ============================================================================
echo Verifying Build Results
echo ============================================================================
echo Checking headers:
if exist "%FINAL_INSTALL_PREFIX%\include\amf\core\Interface.h" (
echo [OK] Headers installed successfully
) else (
echo [ERROR] Headers not found
)
echo.
echo Checking libraries:
dir "%FINAL_INSTALL_PREFIX%\lib\windows-x64\amf\*.lib" 2>nul
if errorlevel 1 (
echo [ERROR] Library files not found
) else (
echo [OK] Library files found
)
echo.
echo Checking DLLs:
dir "%FINAL_INSTALL_PREFIX%\lib\windows-x64\amf\*.dll" 2>nul
if errorlevel 1 (
echo [ERROR] DLL files not found
) else (
echo [OK] DLL files found
)
echo ============================================================================
echo AMD AMF Setup Complete!
echo ============================================================================
echo Headers: %FINAL_INSTALL_PREFIX%\include\amf\
echo Libraries: %FINAL_INSTALL_PREFIX%\lib\windows-x64\amf\
echo.
echo NOTE: AMD AMF is primarily a header-only SDK
echo Runtime libraries are provided by AMD GPU drivers
echo Stub libraries created for linking purposes only
echo ============================================================================
:: Clean up temporary build directory (optional - uncomment to enable)
:: echo Cleaning up temporary build directory...
:: rmdir /s /q "%BUILD_DIR_BASE%"
echo Build files are in: %BUILD_DIR_BASE%
echo Final output is in: %FINAL_INSTALL_PREFIX%
cd "%FINAL_INSTALL_PREFIX%"
pause