diff --git a/clients/benchmarks/CMakeLists.txt b/clients/benchmarks/CMakeLists.txt index 02a2d0ab4..e23bbf958 100644 --- a/clients/benchmarks/CMakeLists.txt +++ b/clients/benchmarks/CMakeLists.txt @@ -232,8 +232,15 @@ endif() if (NOT WIN32) if (BUILD_WITH_ROCTX) - target_link_libraries(rocsparse-bench PRIVATE -lroctx64) - target_compile_definitions( rocsparse-bench PRIVATE ROCSPARSE_CLIENTS_WITH_ROCTX ) + + if(ROCTRACER_INCLUDE_DIR AND ROCTX_LIBRARY) + # Add the include directory + target_include_directories(rocsparse-bench PRIVATE ${ROCTRACER_INCLUDE_DIR}) + + # Link the rocTx lib + target_link_libraries(rocsparse-bench PRIVATE ${ROCTX_LIBRARY}) + target_compile_definitions( rocsparse-bench PRIVATE ROCSPARSE_CLIENTS_WITH_ROCTX ) + endif() endif() endif() diff --git a/clients/tests/CMakeLists.txt b/clients/tests/CMakeLists.txt index d26a10cdf..f5611d52b 100644 --- a/clients/tests/CMakeLists.txt +++ b/clients/tests/CMakeLists.txt @@ -416,8 +416,14 @@ endif() if (NOT WIN32) if (BUILD_WITH_ROCTX) - target_link_libraries(rocsparse-test PRIVATE -lroctx64) - target_compile_definitions( rocsparse-test PRIVATE ROCSPARSE_CLIENTS_WITH_ROCTX ) + if(ROCTRACER_INCLUDE_DIR AND ROCTX_LIBRARY) + # Add the include directory + target_include_directories(rocsparse-test PRIVATE ${ROCTRACER_INCLUDE_DIR}) + + # Link the rocTx lib + target_link_libraries(rocsparse-test PRIVATE ${ROCTX_LIBRARY}) + target_compile_definitions( rocsparse-test PRIVATE ROCSPARSE_CLIENTS_WITH_ROCTX ) + endif() endif() endif() diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index c52d9a143..a6229fbbe 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -96,8 +96,50 @@ endif() if (NOT WIN32) if (BUILD_SHARED_LIBS AND BUILD_WITH_ROCTX) - target_link_libraries(rocsparse PRIVATE -lroctx64) - target_compile_definitions( rocsparse PRIVATE ROCSPARSE_BUILT_WITH_ROCTX ) + + set(ROCTX_PATH "" CACHE STRING "Path to the roctx library (directory containing libroctx64.so)") + + find_path(ROCTRACER_INCLUDE_DIR + NAMES roctracer/roctx.h + HINTS + ${ROCTX_PATH} + ${ROCTX_PATH}/include + /opt/rocm/include + ${ROCTX_PATH}/../include + DOC "Path to the roctracer include directory containing roctx.h") + + find_library(ROCTX_LIBRARY + NAMES roctx64 + HINTS + ${ROCTX_PATH} # User-provided path + ${ROCTX_PATH}/lib + ${ROCTX_PATH}/lib64 + PATHS + /opt/rocm/lib # Default ROCm path + ) + + if(ROCTRACER_INCLUDE_DIR AND ROCTX_LIBRARY) + message(STATUS "Found roctracer include directory: ${ROCTRACER_INCLUDE_DIR}") + message(STATUS "Found roctx library: ${ROCTX_LIBRARY}") + + # Add the include directory + target_include_directories(rocsparse PRIVATE ${ROCTRACER_INCLUDE_DIR}) + + # Link the rocTx lib + target_link_libraries(rocsparse PRIVATE ${ROCTX_LIBRARY}) + target_compile_definitions( rocsparse PRIVATE ROCSPARSE_BUILT_WITH_ROCTX ) + message(STATUS "ROCTX tracing support enabled for target rocsparse.") + else() + message(WARNING "ROCTX tracing will be disabled for target rocsparse.") + + if(NOT ROCTRACER_INCLUDE_DIR) + message(WARNING "Header 'roctracer/roctx.h' not found.") + endif() + + if(NOT ROCTX_LIBRARY) + message(WARNING "Library 'roctx64' not found. ROCTX_PATH: '${ROCTX_PATH}' Default PATH: '/opt/rocm/lib'.") + endif() + endif() endif() endif()