diff --git a/amdsmi_cli/CMakeLists.txt b/amdsmi_cli/CMakeLists.txt index 96a9c4d4ba..d0cba22c50 100644 --- a/amdsmi_cli/CMakeLists.txt +++ b/amdsmi_cli/CMakeLists.txt @@ -22,6 +22,7 @@ add_custom_command( ${PY_PACKAGE_DIR}/amdsmi_logger.py ${PY_PACKAGE_DIR}/amdsmi_parser.py ${PY_PACKAGE_DIR}/amdsmi_cli_exceptions.py + ${PY_PACKAGE_DIR}/rocm_version.py ${PY_PACKAGE_DIR}/BDF.py ${PY_PACKAGE_DIR}/README.md ${PY_PACKAGE_DIR}/Release_Notes.md @@ -35,6 +36,7 @@ add_custom_command( COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_logger.py ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_parser.py ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/amdsmi_cli_exceptions.py ${PY_PACKAGE_DIR}/ + COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/rocm_version.py ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/BDF.py ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/README.md ${PY_PACKAGE_DIR}/ COMMAND ln -Pf ${CMAKE_CURRENT_SOURCE_DIR}/Release_Notes.md ${PY_PACKAGE_DIR}/) @@ -52,6 +54,7 @@ add_custom_target( ${PY_PACKAGE_DIR}/amdsmi_logger.py ${PY_PACKAGE_DIR}/amdsmi_parser.py ${PY_PACKAGE_DIR}/amdsmi_cli_exceptions.py + ${PY_PACKAGE_DIR}/rocm_version.py ${PY_PACKAGE_DIR}/BDF.py ${PY_PACKAGE_DIR}/README.md ${PY_PACKAGE_DIR}/Release_Notes.md) diff --git a/amdsmi_cli/README.md b/amdsmi_cli/README.md index 4f1a9a5ad7..b656a87ea4 100644 --- a/amdsmi_cli/README.md +++ b/amdsmi_cli/README.md @@ -78,7 +78,9 @@ amd-smi will report the version and current platform detected when running the c ~$ amd-smi usage: amd-smi [-h] ... -AMD System Management Interface | Version: 23.4.0.0 | Platform: Linux Baremetal +AMD System Management Interface | Version: 23.4.0.0 | ROCm version: 6.1.0 | +Platform: Linux Baremetal + optional arguments: -h, --help show this help message and exit diff --git a/amdsmi_cli/amdsmi_commands.py b/amdsmi_cli/amdsmi_commands.py index 64b47e5100..26ff1602c7 100644 --- a/amdsmi_cli/amdsmi_commands.py +++ b/amdsmi_cli/amdsmi_commands.py @@ -30,6 +30,7 @@ from _version import __version__ from amdsmi_helpers import AMDSMIHelpers from amdsmi_logger import AMDSMILogger from amdsmi_cli_exceptions import AmdSmiRequiredCommandException +from rocm_version import get_rocm_version from amdsmi import amdsmi_interface from amdsmi import amdsmi_exception @@ -93,16 +94,19 @@ class AMDSMICommands(): try: amdsmi_lib_version = amdsmi_interface.amdsmi_get_lib_version() amdsmi_lib_version_str = f"{amdsmi_lib_version['year']}.{amdsmi_lib_version['major']}.{amdsmi_lib_version['minor']}.{amdsmi_lib_version['release']}" + rocm_version_str = get_rocm_version(); except amdsmi_exception.AmdSmiLibraryException as e: amdsmi_lib_version_str = e.get_error_info() self.logger.output['tool'] = 'AMDSMI Tool' self.logger.output['version'] = f'{__version__}' self.logger.output['amdsmi_library_version'] = f'{amdsmi_lib_version_str}' + self.logger.output['rocm_version'] = f'{rocm_version_str}' if self.logger.is_human_readable_format(): print(f'AMDSMI Tool: {__version__} | '\ - f'AMDSMI Library version: {amdsmi_lib_version_str}') + f'AMDSMI Library version: {amdsmi_lib_version_str} | ' \ + f'ROCm version: {rocm_version_str}' ) elif self.logger.is_json_format() or self.logger.is_csv_format(): self.logger.print_output() diff --git a/amdsmi_cli/amdsmi_parser.py b/amdsmi_cli/amdsmi_parser.py index 3a1496bc15..045cf1fa7a 100644 --- a/amdsmi_cli/amdsmi_parser.py +++ b/amdsmi_cli/amdsmi_parser.py @@ -31,6 +31,7 @@ from pathlib import Path from _version import __version__ from amdsmi_helpers import AMDSMIHelpers +from rocm_version import get_rocm_version import amdsmi_cli_exceptions @@ -78,13 +79,14 @@ class AMDSMIParser(argparse.ArgumentParser): version_string = f"Version: {__version__}" platform_string = f"Platform: {self.helpers.os_info()}" - + rocm_version = get_rocm_version(); + rocm_version_string = f"ROCm version: {rocm_version}" program_name = 'amd-smi' # Adjust argument parser options super().__init__( formatter_class= lambda prog: AMDSMIParserHelpFormatter(prog), - description=f"AMD System Management Interface | {version_string} | {platform_string}", + description=f"AMD System Management Interface | {version_string} | {rocm_version_string} | {platform_string}", add_help=True, prog=program_name) diff --git a/amdsmi_cli/rocm_version.py b/amdsmi_cli/rocm_version.py new file mode 100644 index 0000000000..2c948a2ff7 --- /dev/null +++ b/amdsmi_cli/rocm_version.py @@ -0,0 +1,29 @@ +import os +import ctypes +from pathlib import Path + +# Get the ROCm version for rocm-core library +def get_rocm_version(): + try: + librocm_core_file = Path(__file__).resolve().parent.parent.parent / "lib" / "librocm-core.so" + if not librocm_core_file.is_file(): + return "N/A" + + # python binding + librocm_core = ctypes.CDLL(librocm_core_file) + VerErrors = ctypes.c_uint32 + get_rocm_core_version = librocm_core.getROCmVersion + get_rocm_core_version.restype = VerErrors + get_rocm_core_version.argtypes = [ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32),ctypes.POINTER(ctypes.c_uint32)] + + # call the function + major = ctypes.c_uint32() + minor = ctypes.c_uint32() + patch = ctypes.c_uint32() + + if get_rocm_core_version(ctypes.byref(major), ctypes.byref(minor),ctypes.byref(patch)) == 0: + return "%d.%d.%d" % (major.value, minor.value, patch.value) + return "N/A" + except: + return "N/A" +