@@ -568,32 +568,59 @@ function(make_torchcodec_image_library)
568568 # device="cuda") routes to the same decode_jpegs_cuda op, backed by rocJPEG.
569569 resolve_image_codec ("${TORCHCODEC_BUILD_ROCJPEG} " want_rocjpeg )
570570 if (ENABLE_ROCM AND want_rocjpeg)
571- if (DEFINED ENV{ROCM_PATH})
572- set (ROCM_PATH "$ENV{ROCM_PATH} " )
573- elseif (NOT DEFINED ROCM_PATH)
574- set (ROCM_PATH "/opt/rocm" )
571+ # Resolve the ROCm install root. torch's ROCM_HOME is the source of truth
572+ # torchvision uses and it handles versioned installs (e.g. /opt/rocm-7.2.0)
573+ # that a bare /opt/rocm may not point at. We fall back to the usual env
574+ # vars and /opt/rocm* globs if torch can't tell us.
575+ set (_rocm_candidates "" )
576+ execute_process (
577+ COMMAND "${Python3_EXECUTABLE} " -c
578+ "from torch.utils.cpp_extension import ROCM_HOME; print(ROCM_HOME or '')"
579+ OUTPUT_VARIABLE _torch_rocm_home
580+ OUTPUT_STRIP_TRAILING_WHITESPACE
581+ ERROR_QUIET )
582+ if (_torch_rocm_home)
583+ list (APPEND _rocm_candidates "${_torch_rocm_home} " )
575584 endif ()
585+ foreach (_var ROCM_HOME ROCM_PATH HIP_PATH)
586+ if (DEFINED ENV{${_var} })
587+ list (APPEND _rocm_candidates "$ENV{${_var} }" )
588+ endif ()
589+ endforeach ()
590+ file (GLOB _rocm_globs "/opt/rocm" "/opt/rocm-*" )
591+ list (APPEND _rocm_candidates ${_rocm_globs} )
592+ list (REMOVE_DUPLICATES _rocm_candidates)
593+ set (ROCM_PATH "" )
594+ foreach (_cand ${_rocm_candidates} )
595+ if (IS_DIRECTORY "${_cand} " )
596+ set (ROCM_PATH "${_cand} " )
597+ break ()
598+ endif ()
599+ endforeach ()
600+ message (STATUS "ROCm candidates: ${_rocm_candidates} -> using ROCM_PATH=${ROCM_PATH} " )
601+
576602 # So find_package(hip) locates ${ROCM_PATH}/lib/cmake/hip/hip-config.cmake.
577603 list (APPEND CMAKE_PREFIX_PATH "${ROCM_PATH} " )
578604 find_package (hip REQUIRED )
579605 find_path (ROCJPEG_INCLUDE_DIR
580606 NAMES rocjpeg/rocjpeg.h
581- PATHS "${ROCM_PATH} /include" )
607+ HINTS "${ROCM_PATH} /include" " ${ROCM_PATH} " )
582608 find_library (ROCJPEG_LIBRARY
583609 NAMES rocjpeg
584- PATHS "${ROCM_PATH} /lib" )
610+ HINTS "${ROCM_PATH} /lib" " ${ROCM_PATH} /lib64" " ${ROCM_PATH} " )
585611 if (NOT ROCJPEG_INCLUDE_DIR OR NOT ROCJPEG_LIBRARY)
586612 message (FATAL_ERROR
587- "rocJPEG not found (looked under ${ROCM_PATH} ), but ROCm GPU JPEG "
588- "decoding is enabled. Install the rocJPEG runtime and dev headers, "
589- "or set TORCHCODEC_BUILD_ROCJPEG=0 to build without it "
613+ "rocJPEG not found (searched ROCm roots: ${_rocm_candidates} ). "
614+ "include=${ROCJPEG_INCLUDE_DIR} lib=${ROCJPEG_LIBRARY} . Install the "
615+ "rocJPEG runtime and dev headers (e.g. the 'rocjpeg' / 'rocjpeg-devel' "
616+ "package), or set TORCHCODEC_BUILD_ROCJPEG=0 to build without it "
590617 "(decode_jpeg(device='cuda') will raise at runtime)." )
591618 endif ()
592619 target_include_directories (${image_library_name} PRIVATE ${ROCJPEG_INCLUDE_DIR} )
593620 target_link_libraries (${image_library_name} PRIVATE ${ROCJPEG_LIBRARY} hip::host )
594621 target_compile_definitions (${image_library_name} PRIVATE
595622 TORCHCODEC_ENABLE_ROCJPEG=1 USE_ROCM __HIP_PLATFORM_AMD__ )
596- message (STATUS "Building torchcodec with rocJPEG GPU JPEG decoding support." )
623+ message (STATUS "Building torchcodec with rocJPEG GPU JPEG decoding support ( ${ROCJPEG_LIBRARY} ) ." )
597624 elseif (ENABLE_ROCM)
598625 message (STATUS "Not building torchcodec with rocJPEG support (disabled via TORCHCODEC_BUILD_ROCJPEG/TORCHCODEC_BUILD_IMAGE): decode_jpeg(device='cuda') will raise at runtime." )
599626 endif ()
0 commit comments