Files
rocm-systems/projects/rocjpeg/rocJPEG-setup.py
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

246 sor
8.5 KiB
Python

2026-01-26 11:05:59 -08:00
# Copyright (c) 2024 - 2026 Advanced Micro Devices, Inc. All rights reserved.
2024-03-25 17:05:31 -04:00
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
import os
import sys
import argparse
import platform
2024-06-11 14:27:16 -07:00
import traceback
2024-03-25 17:05:31 -04:00
if sys.version_info[0] < 3:
import commands
else:
import subprocess
2026-01-26 11:05:59 -08:00
__copyright__ = "Copyright (c) 2024 - 2026, AMD ROCm rocJPEG"
__version__ = "2.4.0"
2024-03-25 17:05:31 -04:00
__email__ = "mivisionx.support@amd.com"
__status__ = "Shipping"
2024-04-17 06:25:16 -07:00
# error check calls
2024-11-19 11:47:05 -08:00
def ERROR_CHECK(waitval):
if(waitval != 0): # return code and signal flags
print('ERROR_CHECK failed with status:'+str(waitval))
2024-06-11 14:27:16 -07:00
traceback.print_stack()
2024-11-19 11:47:05 -08:00
status = ((waitval >> 8) | waitval) & 255 # combine exit code and wait flags into single non-zero byte
2024-04-17 06:25:16 -07:00
exit(status)
2024-03-25 17:05:31 -04:00
# Arguments
parser = argparse.ArgumentParser()
parser.add_argument('--rocm_path', type=str, default='/opt/rocm',
help='ROCm Installation Path - optional (default:/opt/rocm) - ROCm Installation Required')
2024-08-07 07:21:13 -07:00
parser.add_argument('--runtime', type=str, default='ON',
help='Install RunTime Dependencies - optional (default:ON) [options:ON/OFF]')
2024-03-25 17:05:31 -04:00
args = parser.parse_args()
2024-08-07 07:21:13 -07:00
runtimeInstall = args.runtime.upper()
2024-03-25 17:05:31 -04:00
ROCM_PATH = args.rocm_path
if "ROCM_PATH" in os.environ:
ROCM_PATH = os.environ.get('ROCM_PATH')
print("\nROCm PATH set to -- "+ROCM_PATH+"\n")
# check ROCm installation
if os.path.exists(ROCM_PATH):
print("\nROCm Installation Found -- "+ROCM_PATH+"\n")
os.system('echo ROCm Info -- && '+ROCM_PATH+'/bin/rocminfo')
else:
print(
"WARNING: If ROCm installed, set ROCm Path with \"--rocm_path\" option for full installation [Default:/opt/rocm]\n")
print("ERROR: rocJPEG Setup requires ROCm install\n")
exit(-1)
2024-08-07 07:21:13 -07:00
if runtimeInstall not in ('OFF', 'ON'):
print(
"ERROR: Runtime Option Not Supported - [Supported Options: OFF or ON]\n")
exit()
2024-03-25 17:05:31 -04:00
# get platfrom info
platfromInfo = platform.platform()
# sudo requirement check
sudoLocation = ''
userName = ''
if sys.version_info[0] < 3:
status, sudoLocation = commands.getstatusoutput("which sudo")
if sudoLocation != '/usr/bin/sudo':
status, userName = commands.getstatusoutput("whoami")
else:
status, sudoLocation = subprocess.getstatusoutput("which sudo")
if sudoLocation != '/usr/bin/sudo':
status, userName = subprocess.getstatusoutput("whoami")
2024-06-11 14:27:16 -07:00
# check os version
os_info_data = 'NOT Supported'
if os.path.exists('/etc/os-release'):
with open('/etc/os-release', 'r') as os_file:
os_info_data = os_file.read().replace('\n', ' ')
os_info_data = os_info_data.replace('"', '')
2024-03-25 17:05:31 -04:00
# setup for Linux
linuxSystemInstall = ''
linuxCMake = 'cmake'
linuxSystemInstall_check = ''
linuxFlag = ''
2024-04-17 06:25:16 -07:00
sudoValidateOption= '-v'
osUpdate = ''
2024-08-07 07:21:13 -07:00
if "centos" in os_info_data or "redhat" in os_info_data:
2024-03-25 17:05:31 -04:00
linuxSystemInstall = 'yum -y'
linuxSystemInstall_check = '--nogpgcheck'
osUpdate = 'makecache'
2024-06-11 14:27:16 -07:00
if "VERSION_ID=7" in os_info_data:
linuxCMake = 'cmake3'
platfromInfo = platfromInfo+'-redhat-7'
elif "VERSION_ID=8" in os_info_data:
platfromInfo = platfromInfo+'-redhat-8'
elif "VERSION_ID=9" in os_info_data:
platfromInfo = platfromInfo+'-redhat-9'
else:
platfromInfo = platfromInfo+'-redhat-centos-undefined-version'
2024-08-07 07:21:13 -07:00
elif "Ubuntu" in os_info_data:
2024-03-25 17:05:31 -04:00
linuxSystemInstall = 'apt-get -y'
linuxSystemInstall_check = '--allow-unauthenticated'
linuxFlag = '-S'
osUpdate = 'update'
2024-06-11 14:27:16 -07:00
if "VERSION_ID=20" in os_info_data:
platfromInfo = platfromInfo+'-Ubuntu-20'
elif "VERSION_ID=22" in os_info_data:
platfromInfo = platfromInfo+'-Ubuntu-22'
elif "VERSION_ID=24" in os_info_data:
platfromInfo = platfromInfo+'-Ubuntu-24'
else:
platfromInfo = platfromInfo+'-Ubuntu-undefined-version'
2024-08-07 07:21:13 -07:00
elif "SLES" in os_info_data:
2024-03-25 17:05:31 -04:00
linuxSystemInstall = 'zypper -n'
linuxSystemInstall_check = '--no-gpg-checks'
platfromInfo = platfromInfo+'-SLES'
osUpdate = 'refresh'
2024-08-07 07:21:13 -07:00
elif "Mariner" in os_info_data:
linuxSystemInstall = 'tdnf -y'
linuxSystemInstall_check = '--nogpgcheck'
platfromInfo = platfromInfo+'-Mariner'
runtimeInstall = 'OFF'
osUpdate = 'makecache'
2024-03-25 17:05:31 -04:00
else:
print("\nrocJPEG Setup on "+platfromInfo+" is unsupported\n")
print("\nrocJPEG Setup Supported on: Ubuntu 20/22/24, RedHat 8/9, & SLES 15\n")
2024-03-25 17:05:31 -04:00
exit(-1)
# rocJPEG Setup
print("\nrocJPEG Setup on: "+platfromInfo+"\n")
print("\nrocJPEG Dependencies Installation with rocJPEG-setup.py V-"+__version__+"\n")
if userName == 'root':
ERROR_CHECK(os.system(linuxSystemInstall+' '+osUpdate))
2024-04-17 06:25:16 -07:00
ERROR_CHECK(os.system(linuxSystemInstall+' install sudo'))
# source install - common package dependencies
commonPackages = [
'cmake',
2025-10-03 10:05:42 -07:00
'hip-runtime-amd'
2024-04-17 06:25:16 -07:00
]
# Debian packages
coreDebianPackages = [
'libva-dev',
2025-10-03 10:05:42 -07:00
'hip-dev'
2024-04-17 06:25:16 -07:00
]
coreDebianU22Packages = [
'libva-amdgpu-dev',
2025-10-03 10:05:42 -07:00
'hip-dev',
2024-04-17 06:25:16 -07:00
'libstdc++-12-dev'
]
2024-08-07 07:21:13 -07:00
runtimeDebianPackages = [
'libva-drm2',
'mesa-amdgpu-va-drivers',
'vainfo'
]
runtimeDebianU22Packages = [
2024-10-22 11:55:31 -04:00
'libva-amdgpu-drm2',
2024-08-07 07:21:13 -07:00
'mesa-amdgpu-va-drivers',
'vainfo'
]
2024-04-17 06:25:16 -07:00
# RPM Packages
if "centos" in os_info_data or "redhat" in os_info_data:
coreRPMPackages = [
'libva-devel',
'hip-devel'
]
runtimeRPMPackages = [
'libva',
'mesa-amdgpu-va-drivers',
'libva-utils'
]
else:
coreRPMPackages = [
'libva-devel',
2025-10-03 10:05:42 -07:00
'hip-devel'
]
runtimeRPMPackages = [
'libva-drm2',
'mesa-amdgpu-va-drivers',
'libva-utils'
]
2024-03-25 17:05:31 -04:00
2024-06-11 14:27:16 -07:00
# update
ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall +' '+linuxSystemInstall_check+' '+osUpdate))
2024-06-11 14:27:16 -07:00
2024-04-17 06:25:16 -07:00
# 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]))
2024-03-25 17:05:31 -04:00
2024-08-07 07:21:13 -07:00
# rocJPEG Core - Requirements
2024-04-17 06:25:16 -07:00
ERROR_CHECK(os.system('sudo '+sudoValidateOption))
2024-03-25 17:05:31 -04:00
if "Ubuntu" in platfromInfo:
2024-06-11 14:27:16 -07:00
if "VERSION_ID=22" in os_info_data:
2024-04-17 06:25:16 -07:00
for i in range(len(coreDebianU22Packages)):
ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall +
2024-06-11 14:27:16 -07:00
' '+linuxSystemInstall_check+' install '+ coreDebianU22Packages[i]))
else:
for i in range(len(coreDebianPackages)):
ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall +
' '+linuxSystemInstall_check+' install '+ coreDebianPackages[i]))
2024-03-25 17:05:31 -04:00
else:
2024-04-17 06:25:16 -07:00
for i in range(len(coreRPMPackages)):
ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall +
' '+linuxSystemInstall_check+' install '+ coreRPMPackages[i]))
2024-03-25 17:05:31 -04:00
2024-08-07 07:21:13 -07:00
# rocJPEG runTime - Requirements
ERROR_CHECK(os.system('sudo '+sudoValidateOption))
if runtimeInstall == 'ON':
if "Ubuntu" in platfromInfo:
if "VERSION_ID=22" in os_info_data:
for i in range(len(runtimeDebianU22Packages)):
ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall +
' '+linuxSystemInstall_check+' install '+ runtimeDebianU22Packages[i]))
else:
for i in range(len(runtimeDebianPackages)):
ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall +
' '+linuxSystemInstall_check+' install '+ runtimeDebianPackages[i]))
2024-08-07 07:21:13 -07:00
else:
for i in range(len(runtimeRPMPackages)):
ERROR_CHECK(os.system('sudo '+linuxFlag+' '+linuxSystemInstall +
' '+linuxSystemInstall_check+' install '+ runtimeRPMPackages[i]))
2024-03-25 17:05:31 -04:00
print("\nrocJPEG Dependencies Installed with rocJPEG-setup.py V-"+__version__+"\n")