281 lines
12 KiB
Batchfile
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 |