From 29d523887a9abcde24229b5b271dab3fd061efc6 Mon Sep 17 00:00:00 2001 From: Kiriti Gowda Date: Wed, 17 Apr 2024 06:25:16 -0700 Subject: [PATCH] LibVA - Updates and fixes (#16) * Setup - Updates * Jenkins - Updates * CMakeList - Updates for Libva public [ROCm/rocjpeg commit: 6aaca70cd95d359915834b95738d043da4f676b0] --- projects/rocjpeg/.jenkins/common.groovy | 1 + projects/rocjpeg/CHANGELOG.md | 35 ++++++++++ projects/rocjpeg/CMakeLists.txt | 34 +++++----- projects/rocjpeg/README.md | 23 ++++--- projects/rocjpeg/cmake/FindLibva.cmake | 25 ++++++- projects/rocjpeg/rocJPEG-setup.py | 87 +++++++++++++++++++------ 6 files changed, 156 insertions(+), 49 deletions(-) create mode 100644 projects/rocjpeg/CHANGELOG.md diff --git a/projects/rocjpeg/.jenkins/common.groovy b/projects/rocjpeg/.jenkins/common.groovy index fb06692899..f4099fa766 100644 --- a/projects/rocjpeg/.jenkins/common.groovy +++ b/projects/rocjpeg/.jenkins/common.groovy @@ -16,6 +16,7 @@ def runCompileCommand(platform, project, jobName, boolean debug=false, boolean s make -j\$(nproc) sudo make install sudo make package + objdump -x /opt/rocm/lib/librocjpeg.so | grep NEEDED ldd -v /opt/rocm/lib/librocjpeg.so """ diff --git a/projects/rocjpeg/CHANGELOG.md b/projects/rocjpeg/CHANGELOG.md new file mode 100644 index 0000000000..0454cc904e --- /dev/null +++ b/projects/rocjpeg/CHANGELOG.md @@ -0,0 +1,35 @@ +# rocJPEG changelog + +Documentation for rocJPEG is available at +[https://rocm.docs.amd.com/projects/rocJPEG/en/latest/](TBD) + +## rocJPEG 0.2.0 (Unreleased) + +## Additions + +* Changelog.md + +## Optimizations + +* Setup Script - Error Check install & cleanup + +### Changes + +* Dependencies - Updates to core dependencies +* LibVA Headers - Use public headers + +### Fixes + +* Package deps + +### Tested configurations + +* Linux + * Ubuntu - `20.04` / `22.04` + * RHEL - `8` / `9` +* ROCm: + * rocm-core - `6.1.0.60100-64` + * amdgpu-core - `1:6.1.60100-1741643` +* libva-dev - `2.7.0-2` / `2.14.0-1` +* mesa-amdgpu-va-drivers - `1:24.1.0` +* rocJPEG Setup Script - `V1.1.0` diff --git a/projects/rocjpeg/CMakeLists.txt b/projects/rocjpeg/CMakeLists.txt index 47ae154c1b..196e11f1e0 100644 --- a/projects/rocjpeg/CMakeLists.txt +++ b/projects/rocjpeg/CMakeLists.txt @@ -23,7 +23,7 @@ cmake_minimum_required (VERSION 3.5) -set(VERSION "0.1.0") +set(VERSION "0.2.0") set(CMAKE_CXX_STANDARD 17) # Set Project Version and Language @@ -182,13 +182,13 @@ if(HIP_FOUND AND Libva_FOUND) string(REGEX MATCH "22.04" UBUNTU_22_FOUND ${OS_RELEASE}) # Set the dependent packages - set(rocJPEG_DEBIAN_PACKAGE_LIST "rocm-hip-runtime, libdrm-amdgpu1, libva-amdgpu-drm2, mesa-amdgpu-va-drivers") - set(rocJPEG_RPM_PACKAGE_LIST "rocm-hip-runtime, libdrm-amdgpu, libva-amdgpu, mesa-amdgpu-dri-drivers") - set(rocJPEG_DEBIAN_DEV_PACKAGE_LIST "rocm-hip-runtime-dev, libva-amdgpu-dev, pkg-config") + set(rocJPEG_DEBIAN_PACKAGE_LIST "rocm-hip-runtime, libva2, libdrm-amdgpu1, mesa-amdgpu-va-drivers") + set(rocJPEG_RPM_PACKAGE_LIST "rocm-hip-runtime, libva, libdrm-amdgpu, mesa-amdgpu-dri-drivers") + set(rocJPEG_DEBIAN_DEV_PACKAGE_LIST "rocm-hip-runtime-dev, libva-dev, pkg-config") if(UBUNTU_22_FOUND) set(rocJPEG_DEBIAN_DEV_PACKAGE_LIST "${rocJPEG_DEBIAN_DEV_PACKAGE_LIST}, libstdc++-12-dev") endif() - set(rocJPEG_RPM_DEV_PACKAGE_LIST "rocm-hip-runtime-devel, libva-amdgpu-devel, pkg-config") + set(rocJPEG_RPM_DEV_PACKAGE_LIST "rocm-hip-runtime-devel, libva-devel, pkg-config") # '%{?dist}' breaks manual builds on debian systems due to empty Provides execute_process( @@ -242,21 +242,21 @@ if(HIP_FOUND AND Libva_FOUND) set(CPACK_RPM_TEST_PACKAGE_OBSOLETES "${PROJECT_NAME}-test") if(NOT ROCM_DEP_ROCMCORE) - string(REGEX REPLACE ",? ?rocm-core," "" CPACK_RPM_RUNTIME_PACKAGE_REQUIRES ${CPACK_RPM_RUNTIME_PACKAGE_REQUIRES}) - string(REGEX REPLACE ",? ?rocm-core-asan," "" CPACK_RPM_ASAN_PACKAGE_REQUIRES ${CPACK_RPM_ASAN_PACKAGE_REQUIRES}) - string(REGEX REPLACE ",? ?rocm-core," "" CPACK_RPM_DEV_PACKAGE_REQUIRES ${CPACK_RPM_DEV_PACKAGE_REQUIRES}) - string(REGEX REPLACE ",? ?rocm-core," "" CPACK_RPM_TEST_PACKAGE_REQUIRES ${CPACK_RPM_TEST_PACKAGE_REQUIRES}) - string(REGEX REPLACE ",? ?rocm-core," "" CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS ${CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS}) - string(REGEX REPLACE ",? ?rocm-core-asan," "" CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS}) - string(REGEX REPLACE ",? ?rocm-core," "" CPACK_DEBIAN_DEV_PACKAGE_DEPENDS ${CPACK_DEBIAN_DEV_PACKAGE_DEPENDS}) - string(REGEX REPLACE ",? ?rocm-core," "" CPACK_DEBIAN_TEST_PACKAGE_DEPENDS ${CPACK_DEBIAN_TEST_PACKAGE_DEPENDS}) + string(REGEX REPLACE ",? ?rocm-core," "" CPACK_RPM_RUNTIME_PACKAGE_REQUIRES ${CPACK_RPM_RUNTIME_PACKAGE_REQUIRES}) + string(REGEX REPLACE ",? ?rocm-core-asan," "" CPACK_RPM_ASAN_PACKAGE_REQUIRES ${CPACK_RPM_ASAN_PACKAGE_REQUIRES}) + string(REGEX REPLACE ",? ?rocm-core," "" CPACK_RPM_DEV_PACKAGE_REQUIRES ${CPACK_RPM_DEV_PACKAGE_REQUIRES}) + string(REGEX REPLACE ",? ?rocm-core," "" CPACK_RPM_TEST_PACKAGE_REQUIRES ${CPACK_RPM_TEST_PACKAGE_REQUIRES}) + string(REGEX REPLACE ",? ?rocm-core," "" CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS ${CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS}) + string(REGEX REPLACE ",? ?rocm-core-asan," "" CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS}) + string(REGEX REPLACE ",? ?rocm-core," "" CPACK_DEBIAN_DEV_PACKAGE_DEPENDS ${CPACK_DEBIAN_DEV_PACKAGE_DEPENDS}) + string(REGEX REPLACE ",? ?rocm-core," "" CPACK_DEBIAN_TEST_PACKAGE_DEPENDS ${CPACK_DEBIAN_TEST_PACKAGE_DEPENDS}) endif() if(ENABLE_ASAN_PACKAGING) - # ASAN Package requires asan component with only libraries and license file - set(CPACK_COMPONENTS_ALL asan) + # ASAN Package requires asan component with only libraries and license file + set(CPACK_COMPONENTS_ALL asan) else() - set(CPACK_COMPONENTS_ALL runtime dev test) + set(CPACK_COMPONENTS_ALL runtime dev test) endif() set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") @@ -314,6 +314,6 @@ else() message(FATAL_ERROR "-- ERROR!: HIP Not Found! - please install rocm-hip-runtime-dev!") endif() if(NOT Libva_FOUND) - message(FATAL_ERROR "-- ERROR!: libva Not Found - please install libva-amdgpu-dev(DBEAIN)/libva-amdgpu-devel(RPM) package!") + message(FATAL_ERROR "-- ERROR!: libva Not Found - please install libva-dev(DEBIAN)/libva-devel(RPM) package!") endif() endif() \ No newline at end of file diff --git a/projects/rocjpeg/README.md b/projects/rocjpeg/README.md index 6b2121d16d..18362ef001 100644 --- a/projects/rocjpeg/README.md +++ b/projects/rocjpeg/README.md @@ -28,14 +28,19 @@ rocJPEG is a high performance JPEG decode SDK for AMD GPUs. Using the rocJPEG AP > [!IMPORTANT] > `sudo amdgpu-install --usecase=rocm` -* AMD Multimedia packages +* [Video Acceleration API](https://en.wikipedia.org/wiki/Video_Acceleration_API) Version `1.5.0+` - `Libva` is an implementation for VA-API + ```shell + sudo apt install libva-dev + ``` + > [!NOTE] + > RPM Packages for `RHEL`/`SLES` - `libva-devel` -```shell -sudo apt install libva-amdgpu-dev libdrm-amdgpu1 mesa-amdgpu-va-drivers -``` - -> [!NOTE] -> RPM Packages for `RHEL`/`SLES` - `libva-amdgpu-devel libdrm-amdgpu mesa-amdgpu-dri-drivers` +* AMD VA Drivers + ```shell + sudo apt install mesa-amdgpu-va-drivers + ``` + > [!NOTE] + > RPM Packages for `RHEL`/`SLES` - `libdrm-amdgpu mesa-amdgpu-dri-drivers` * CMake `3.5` or later @@ -204,4 +209,6 @@ page. * ROCm: * rocm-core - `6.1.0.60100-62` * amdgpu-core - `1:6.1.60100-1741643` -* rocJPEG Setup Script - `V1.0` +* libva-dev - `2.7.0-2` / `2.14.0-1` +* mesa-amdgpu-va-drivers - `1:24.1.0` +* rocJPEG Setup Script - `V1.1` diff --git a/projects/rocjpeg/cmake/FindLibva.cmake b/projects/rocjpeg/cmake/FindLibva.cmake index 08a2214b24..40bbb58f32 100644 --- a/projects/rocjpeg/cmake/FindLibva.cmake +++ b/projects/rocjpeg/cmake/FindLibva.cmake @@ -21,14 +21,33 @@ # ################################################################################ -find_library(LIBVA_LIBRARY NAMES va HINTS /opt/amdgpu/lib/x86_64-linux-gnu /opt/amdgpu/lib64 NO_DEFAULT_PATH) -find_library(LIBVA_DRM_LIBRARY NAMES va-drm HINTS /opt/amdgpu/lib/x86_64-linux-gnu /opt/amdgpu/lib64 NO_DEFAULT_PATH) -find_path(LIBVA_INCLUDE_DIR NAMES va/va.h PATHS /opt/amdgpu/include NO_DEFAULT_PATH) +find_library(LIBVA_LIBRARY NAMES va HINTS /usr/lib/x86_64-linux-gnu /usr/lib64 /opt/amdgpu/lib/x86_64-linux-gnu /opt/amdgpu/lib64) +find_library(LIBVA_DRM_LIBRARY NAMES va-drm HINTS /usr/lib/x86_64-linux-gnu /usr/lib64 /opt/amdgpu/lib/x86_64-linux-gnu /opt/amdgpu/lib64) +find_path(LIBVA_INCLUDE_DIR NAMES va/va.h PATHS /usr/include /opt/amdgpu/include) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Libva DEFAULT_MSG LIBVA_INCLUDE_DIR LIBVA_LIBRARY) mark_as_advanced(LIBVA_INCLUDE_DIR LIBVA_LIBRARY LIBVA_DRM_LIBRARY) +if(Libva_FOUND) + # Find VA Version + file(READ "${LIBVA_INCLUDE_DIR}/va/va_version.h" VA_VERSION_FILE) + string(REGEX MATCH "VA_MAJOR_VERSION ([0-9]*)" _ ${VA_VERSION_FILE}) + set(va_ver_major ${CMAKE_MATCH_1}) + string(REGEX MATCH "VA_MINOR_VERSION ([0-9]*)" _ ${VA_VERSION_FILE}) + set(va_ver_minor ${CMAKE_MATCH_1}) + string(REGEX MATCH "VA_MICRO_VERSION ([0-9]*)" _ ${VA_VERSION_FILE}) + set(va_ver_micro ${CMAKE_MATCH_1}) + message("-- ${White}Found Libva Version: ${va_ver_major}.${va_ver_minor}.${va_ver_micro}${ColourReset}") + + if((${va_ver_major} GREATER_EQUAL 1) AND (${va_ver_minor} GREATER_EQUAL 5)) + message("-- ${White}\tLibva Version Supported${ColourReset}") + else() + set(Libva_FOUND FALSE) + message("-- ${Yellow}\tLibva Version Not Supported${ColourReset}") + endif() +endif() + if(Libva_FOUND) if(NOT TARGET Libva::va) add_library(Libva::va UNKNOWN IMPORTED) diff --git a/projects/rocjpeg/rocJPEG-setup.py b/projects/rocjpeg/rocJPEG-setup.py index ee87682e66..7625fc3215 100644 --- a/projects/rocjpeg/rocJPEG-setup.py +++ b/projects/rocjpeg/rocJPEG-setup.py @@ -27,11 +27,18 @@ if sys.version_info[0] < 3: else: import subprocess -__copyright__ = "Copyright (c) 2024, AMD ROCm rocJPEG" -__version__ = "1.0" +__copyright__ = "Copyright (c) 2024, AMD rocJPEG" +__version__ = "1.1.0" __email__ = "mivisionx.support@amd.com" __status__ = "Shipping" +# error check calls +def ERROR_CHECK(call): + status = call + if(status != 0): + print('ERROR_CHECK failed with status:'+str(status)) + exit(status) + # Arguments parser = argparse.ArgumentParser() parser.add_argument('--rocm_path', type=str, default='/opt/rocm', @@ -75,12 +82,13 @@ linuxSystemInstall = '' linuxCMake = 'cmake' linuxSystemInstall_check = '' linuxFlag = '' +sudoValidateOption= '-v' if "centos" in platfromInfo or "redhat" in platfromInfo or os.path.exists('/usr/bin/yum'): linuxSystemInstall = 'yum -y' linuxSystemInstall_check = '--nogpgcheck' if "centos-7" in platfromInfo or "redhat-7" in platfromInfo: - linuxCMake = 'cmake3' - os.system(linuxSystemInstall+' install cmake3') + print("\nrocJPEG Setup on "+platfromInfo+" is unsupported\n") + exit(-1) if not "centos" in platfromInfo or not "redhat" in platfromInfo: platfromInfo = platfromInfo+'-redhat' elif "Ubuntu" in platfromInfo or os.path.exists('/usr/bin/apt-get'): @@ -95,7 +103,7 @@ elif os.path.exists('/usr/bin/zypper'): platfromInfo = platfromInfo+'-SLES' else: print("\nrocJPEG Setup on "+platfromInfo+" is unsupported\n") - print("\nrocJPEG Setup Supported on: Ubuntu 20/22; CentOS 8; RedHat 8/9; & SLES 15 SP5\n") + print("\nrocJPEG Setup Supported on: Ubuntu 20/22, RedHat 8/9, & SLES 15 SP4\n") exit(-1) # rocJPEG Setup @@ -103,26 +111,63 @@ print("\nrocJPEG Setup on: "+platfromInfo+"\n") print("\nrocJPEG Dependencies Installation with rocJPEG-setup.py V-"+__version__+"\n") if userName == 'root': - os.system(linuxSystemInstall+' update') - os.system(linuxSystemInstall+' install sudo') + ERROR_CHECK(os.system(linuxSystemInstall+' update')) + ERROR_CHECK(os.system(linuxSystemInstall+' install sudo')) -# install pre-reqs -os.system('sudo -v') -os.system(linuxSystemInstall+' update') -os.system('sudo '+linuxFlag+' '+linuxSystemInstall+' ' + - linuxSystemInstall_check+' install gcc cmake pkg-config') +# source install - common package dependencies +commonPackages = [ + 'gcc', + 'cmake', + 'git', + 'wget', + 'unzip', + 'pkg-config', + 'inxi', + 'rocm-hip-runtime' +] -# rocJPEG Core - VA/DRM Requirements +# Debian packages +coreDebianPackages = [ + 'rocm-hip-runtime-dev', + 'libva2', + 'libva-dev', + 'libdrm-amdgpu1', + 'mesa-amdgpu-va-drivers', + 'vainfo' +] +coreDebianU22Packages = [ + 'libstdc++-12-dev' +] + +# RPM Packages +coreRPMPackages = [ + 'rocm-hip-runtime-devel', + 'libva', + 'libva-devel', + 'libdrm-amdgpu', + 'mesa-amdgpu-dri-drivers', + 'libva-utils' +] + +# common packages +ERROR_CHECK(os.system('sudo '+sudoValidateOption)) +for i in range(len(commonPackages)): + ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall + + ' '+linuxSystemInstall_check+' install '+ commonPackages[i])) + +# rocJPEG Core - LibVA Requirements +ERROR_CHECK(os.system('sudo '+sudoValidateOption)) if "Ubuntu" in platfromInfo: - os.system('sudo -v') - os.system('sudo '+linuxFlag+' '+linuxSystemInstall+' '+linuxSystemInstall_check + - ' install vainfo libdrm-amdgpu1 libva-amdgpu-dev mesa-amdgpu-va-drivers') + for i in range(len(coreDebianPackages)): + ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall + + ' '+linuxSystemInstall_check+' install '+ coreDebianPackages[i])) if "22.04" in platform.version(): - os.system('sudo '+linuxFlag+' '+linuxSystemInstall+' '+linuxSystemInstall_check + - ' install libstdc++-12-dev') + for i in range(len(coreDebianU22Packages)): + ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall + + ' '+linuxSystemInstall_check+' install '+ coreDebianU22Packages[i])) else: - os.system('sudo -v') - os.system('sudo '+linuxFlag+' '+linuxSystemInstall+' '+linuxSystemInstall_check + - ' install libdrm-amdgpu libva-amdgpu-devel mesa-amdgpu-dri-drivers') + for i in range(len(coreRPMPackages)): + ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall + + ' '+linuxSystemInstall_check+' install '+ coreRPMPackages[i])) print("\nrocJPEG Dependencies Installed with rocJPEG-setup.py V-"+__version__+"\n")