Skip to content

Commit dc63d50

Browse files
ntrost57jsandham
authored andcommitted
[rocm-libraries] ROCm/rocm-libraries#1155 (commit 6818db4)
Fix/rhel10omp (#1114) Fixes OpenMP rpath issue in RHEL10 Co-authored-by: James Sandham <33790278+jsandham@users.noreply.github.com>
1 parent 794220f commit dc63d50

File tree

4 files changed

+45
-45
lines changed

4 files changed

+45
-45
lines changed

clients/CMakeLists.txt

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,24 @@
2424
# The ROCm platform requires Ubuntu 16.04 or Fedora 24, which has cmake 3.5
2525
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
2626

27+
function( apply_omp_settings lib_target_ )
28+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND TARGET OpenMP::OpenMP_CXX)
29+
set_target_properties( ${lib_target_} PROPERTIES
30+
BUILD_RPATH "${HIP_CLANG_ROOT}/lib"
31+
)
32+
set_target_properties( ${lib_target_} PROPERTIES
33+
INSTALL_RPATH "$ORIGIN/../llvm/lib"
34+
)
35+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND TARGET OpenMP::omp)
36+
set_target_properties( ${lib_target_} PROPERTIES
37+
BUILD_RPATH "${HIP_CLANG_ROOT}/${openmp_LIB_DIR}"
38+
)
39+
set_target_properties( ${lib_target_} PROPERTIES
40+
INSTALL_RPATH "$ORIGIN/../llvm/${openmp_LIB_DIR}"
41+
)
42+
endif()
43+
endfunction()
44+
2745
if (rocblas_FOUND)
2846
message("Build rocSPARSE client with rocBLAS")
2947
add_compile_options(-DROCSPARSE_WITH_ROCBLAS)
@@ -69,6 +87,24 @@ if ( BUILD_FORTRAN_CLIENTS )
6987

7088
endif()
7189

90+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
91+
# Look for openmp config in ROCm install to populate openmp_LIB_DIR and openmp_LIB_INSTALL_DIR
92+
find_package(OpenMP CONFIG PATHS "${HIP_CLANG_ROOT}/lib/cmake")
93+
endif()
94+
95+
# OpenMP
96+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND TARGET OpenMP::omp)
97+
set(ROCSPARSE_CLIENT_LIBS "OpenMP::omp")
98+
message(STATUS "Found openmp-config.cmake at ${OpenMP_DIR}")
99+
else()
100+
# if it fails to find OpenMP compile and link flags in strange configurations it can just use non-parallel reference computation
101+
# if there is no omp.h to find the client compilation will fail and this should be obvious, used to be REQUIRED
102+
find_package(OpenMP)
103+
if (TARGET OpenMP::OpenMP_CXX)
104+
set(ROCSPARSE_CLIENT_LIBS "OpenMP::OpenMP_CXX")
105+
endif()
106+
endif()
107+
72108
# Determine if CXX Compiler is hip-clang
73109
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
74110
message(STATUS "Using hip-clang to build for amdgpu backend")
@@ -108,18 +144,6 @@ elseif(NOT CMAKE_CXX_STANDARD EQUAL 17)
108144
message(FATAL_ERROR "Only C++14 and C++17 are supported")
109145
endif()
110146

111-
# If OpenMP is available, we can use it to speed up some tests
112-
find_package(OpenMP QUIET)
113-
114-
if(OPENMP_FOUND)
115-
if(NOT TARGET OpenMP::OpenMP_CXX)
116-
# OpenMP cmake fix for cmake <= 3.9
117-
add_library(OpenMP::OpenMP_CXX IMPORTED INTERFACE)
118-
set_property(TARGET OpenMP::OpenMP_CXX PROPERTY INTERFACE_COMPILE_OPTIONS ${OpenMP_CXX_FLAGS})
119-
set_property(TARGET OpenMP::OpenMP_CXX PROPERTY INTERFACE_LINK_LIBRARIES ${OpenMP_CXX_FLAGS} Threads::Threads)
120-
endif()
121-
endif()
122-
123147
if(BUILD_CLIENTS_SAMPLES)
124148
add_subdirectory(samples)
125149
endif()

clients/benchmarks/CMakeLists.txt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -215,21 +215,15 @@ target_compile_options(rocsparse-bench PRIVATE -Wno-deprecated -Wno-unused-comma
215215
# Internal common header
216216
target_include_directories(rocsparse-bench PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>)
217217

218+
# Add OpenMP if available
219+
apply_omp_settings(rocsparse-bench)
220+
218221
# Target link libraries
219-
target_link_libraries(rocsparse-bench PRIVATE roc::rocsparse hip::host hip::device)
222+
target_link_libraries(rocsparse-bench PRIVATE roc::rocsparse hip::host hip::device ${ROCSPARSE_CLIENT_LIBS})
220223
if (rocsparseio_FOUND)
221224
target_link_libraries(rocsparse-bench PRIVATE roc::rocsparseio)
222225
endif()
223226

224-
# Add OpenMP if available
225-
if(OPENMP_FOUND)
226-
if (NOT WIN32)
227-
target_link_libraries(rocsparse-bench PRIVATE OpenMP::OpenMP_CXX -Wl,-rpath=${HIP_CLANG_ROOT}/lib)
228-
else()
229-
target_link_libraries(rocsparse-bench PRIVATE libomp)
230-
endif()
231-
endif()
232-
233227
if (NOT WIN32)
234228
if (BUILD_WITH_ROCTX)
235229

clients/tests/CMakeLists.txt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -402,17 +402,11 @@ target_compile_options(rocsparse-test PRIVATE -ffp-contract=on -mfma -Wno-deprec
402402
# Internal common header
403403
target_include_directories(rocsparse-test PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>)
404404

405-
# Target link libraries
406-
target_link_libraries(rocsparse-test PRIVATE GTest::gtest roc::rocsparse hip::host hip::device)
407-
408405
# Add OpenMP if available
409-
if(OPENMP_FOUND)
410-
if (NOT WIN32)
411-
target_link_libraries(rocsparse-test PRIVATE OpenMP::OpenMP_CXX -Wl,-rpath=${HIP_CLANG_ROOT}/lib)
412-
else()
413-
target_link_libraries(rocsparse-test PRIVATE libomp)
414-
endif()
415-
endif()
406+
apply_omp_settings(rocsparse-test)
407+
408+
# Target link libraries
409+
target_link_libraries(rocsparse-test PRIVATE GTest::gtest roc::rocsparse hip::host hip::device ${ROCSPARSE_CLIENT_LIBS})
416410

417411
if (NOT WIN32)
418412
if (BUILD_WITH_ROCTX)

clients/tools/CMakeLists.txt

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,7 @@ foreach(app ${ROCSPARSEIO_TOOLS_SOURCES})
3535
add_executable(${app} ${app}.cpp ${ROCSPARSEIO_SOURCES})
3636

3737
# Internal common header
38-
target_include_directories(${app} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../include ${CMAKE_CURRENT_SOURCE_DIR}/../common)
39-
40-
# Target link libraries
41-
target_link_libraries(${app} PRIVATE roc::rocsparse hip::host ${EXTRA_LIBS})
42-
43-
# Add OpenMP if available
44-
if(OPENMP_FOUND)
45-
if (NOT WIN32)
46-
target_link_libraries(${app} PRIVATE OpenMP::OpenMP_CXX -Wl,-rpath=${HIP_CLANG_ROOT}/lib)
47-
else()
48-
target_link_libraries(${app} PRIVATE libomp)
49-
endif()
50-
endif()
38+
target_include_directories(${app} PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../common>)
5139

5240
# Set tools output directory
5341
set_target_properties(${app} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/staging")

0 commit comments

Comments
 (0)