From cd729ab63054c7b4e2c650a6f33c3f0b92c368b4 Mon Sep 17 00:00:00 2001 From: habajpai-amd Date: Fri, 29 Aug 2025 00:25:55 +0530 Subject: [PATCH] Improve library discovery in openmp-target example (#792) cmake(openmp/target): make libomptarget discovery robust across ROCm layouts --- .../examples/openmp/target/CMakeLists.txt | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/projects/rocprofiler-systems/examples/openmp/target/CMakeLists.txt b/projects/rocprofiler-systems/examples/openmp/target/CMakeLists.txt index 0dbab81bf3..225a64e233 100644 --- a/projects/rocprofiler-systems/examples/openmp/target/CMakeLists.txt +++ b/projects/rocprofiler-systems/examples/openmp/target/CMakeLists.txt @@ -57,20 +57,40 @@ function(add_offload_flags tgt) endforeach() endfunction() -get_filename_component(OMP_TARGET_COMPILER_DIR ${OMP_TARGET_COMPILER} PATH) -get_filename_component(OMP_TARGET_COMPILER_DIR ${OMP_TARGET_COMPILER_DIR} PATH) +# Derive the ROCm root +get_filename_component(_omp_bin_dir "${OMP_TARGET_COMPILER}" DIRECTORY) +get_filename_component(ROCM_ROOT_DIR "${_omp_bin_dir}" DIRECTORY) message(STATUS "Using OpenMP target compiler: ${OMP_TARGET_COMPILER}") -message(STATUS "Using OpenMP target compiler directory: ${OMP_TARGET_COMPILER_DIR}") +message(STATUS "ROCm root inferred from compiler: ${ROCM_ROOT_DIR}") -set(_rocm_llvm_lib "${OMP_TARGET_COMPILER_DIR}/llvm/lib") -set(_rocm_clang_lib "${OMP_TARGET_COMPILER_DIR}/lib") -set(_COMMON_RPATH "${_rocm_llvm_lib};${_rocm_clang_lib}") +# Candidate lib directories for libomptarget across ROCm layouts +set(_LLVM_LIB_HINTS + "${ROCM_ROOT_DIR}/lib" + "${ROCM_ROOT_DIR}/llvm/lib" + "$ENV{ROCM_PATH}/llvm/lib" + "$ENV{ROCM_PATH}/lib/llvm/lib" + "/opt/rocm/llvm/lib" + "/opt/rocm/lib/llvm/lib" +) -if(NOT EXISTS "${_rocm_llvm_lib}/libomptarget.so") - message(FATAL_ERROR "Could not find libomptarget.so in ${_rocm_llvm_lib}") +# Find libomptarget +find_library(LIBOMPTARGET_SO NAMES omptarget HINTS ${_LLVM_LIB_HINTS}) + +if(NOT LIBOMPTARGET_SO) + message(FATAL_ERROR "Could not find libomptarget in any of:\n ${_LLVM_LIB_HINTS}") endif() +# Use the directory that actually contains the library we found +get_filename_component(_rocm_llvm_lib "${LIBOMPTARGET_SO}" DIRECTORY) +set(_rocm_clang_lib "${ROCM_ROOT_DIR}/lib") +set(_COMMON_RPATH "${_rocm_llvm_lib};${_rocm_clang_lib}") +list(REMOVE_DUPLICATES _COMMON_RPATH) + +message(STATUS "libomptarget found at: ${LIBOMPTARGET_SO}") +message(STATUS "LLVM libdir: ${_rocm_llvm_lib}") +message(STATUS "Clang libdir: ${_rocm_clang_lib}") + # Shared library add_library(openmp-target-lib SHARED)