Skip to content

Commit 16a8997

Browse files
jplehrronlieb
authored andcommitted
[Offload] Enable unified ROCr in external project build
With ROCm 6.3 the ROCr runtime includes the ROCt, with some changes to the directory structure and where build artifacts are placed. The CMake variable OFFLOAD_EXTERNAL_PROJECT_UNIFIED_ROCR is introduced to enable the search paths for this unified ROCr when enabled as an external project. This builds ROCr as part of the compilder build and resolves the dependency issue offload otherwise hits. The ExternalProject mechanism is what AOMP uses today. However, ROCm 6.2 does still have separate ROCr and ROCt. Change-Id: Ia0d8241a77ccb1048d546f0a57f43ed29e2c48ca
1 parent c37bc26 commit 16a8997

File tree

3 files changed

+75
-13
lines changed

3 files changed

+75
-13
lines changed

llvm/runtimes/CMakeLists.txt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,39 @@ if(build_runtimes)
503503
endif()
504504

505505
if("offload" IN_LIST LLVM_ENABLE_RUNTIMES)
506+
# With ROCm 6.3 the ROCr runtime and the thunk layer share a single repository.
507+
# No need to provide a separate path for ROCt.
508+
if (OFFLOAD_EXTERNAL_PROJECT_UNIFIED_ROCR)
509+
if(NOT DEFINED LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH)
510+
message(SEND_ERROR "External ROCr requires setting LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH")
511+
endif()
512+
513+
message(STATUS "Add external unified ROCr: ${LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH}")
514+
ExternalProject_Add(rocr-runtime
515+
SOURCE_DIR ${LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH}
516+
DEPENDS clang llvm-link lld opt llvm-objcopy
517+
INSTALL_COMMAND ""
518+
CMAKE_ARGS -DBUILD_SHARED_LIBS=ON
519+
-DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/lib/cmake
520+
-DIMAGE_SUPPORT=OFF
521+
-DLLVM_RUNTIME_OPENMP=ON)
522+
set(HSA_DEP rocr-runtime)
523+
524+
# omptarget device RTL depends on device libs, leading to circular dependency in build scripts.
525+
# Providing path to the sources enables to build them as part of compiler build, which
526+
# removes the ciruclar dependency on the script-side.
527+
if (DEFINED LIBOMPTARGET_EXTERNAL_PROJECT_ROCM_DEVICE_LIBS_PATH)
528+
message(STATUS "Add external AMD device-libs: ${LIBOMPTARGET_EXTERNAL_PROJECT_ROCM_DEVICE_LIBS_PATH}")
529+
ExternalProject_Add(rocm-device-libs
530+
SOURCE_DIR ${LIBOMPTARGET_EXTERNAL_PROJECT_ROCM_DEVICE_LIBS_PATH}
531+
DEPENDS clang llvm-link lld opt llvm-objcopy
532+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${ROCM_DEVICE_LIBS_INSTALL_PREFIX_PATH}
533+
-DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/lib/cmake
534+
-DROCM_DEVICE_LIBS_BITCODE_INSTALL_LOC_NEW=${ROCM_DEVICE_LIBS_BITCODE_INSTALL_LOC}
535+
-DROCM_DEVICE_LIBS_BITCODE_INSTALL_LOC_OLD=amdgcn)
536+
endif()
537+
endif()
538+
506539
if(DEFINED LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH AND
507540
DEFINED LIBOMPTARGET_EXTERNAL_PROJECT_THUNK_PATH AND
508541
DEFINED LIBOMPTARGET_EXTERNAL_PROJECT_ROCM_DEVICE_LIBS_PATH)

offload/hostexec/CMakeLists.txt

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,41 @@ endif()
1818

1919
# If we are bootstrapping hsa via external project we need to use find_library
2020
# as it will not be installed.
21-
if(DEFINED LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH)
22-
find_library(HSA_RUNTIME hsa-runtime64 HINTS ${CMAKE_BINARY_DIR}/../../runtimes/rocr-runtime-prefix/src/rocr-runtime-build ${CMAKE_INSTALL_PREFIX} PATHS /opt/rocm)
21+
if(OFFLOAD_EXTERNAL_PROJECT_UNIFIED_ROCR)
22+
# With ROCm 6.3 ROCr and ROCt are in one repo and we need to account for the different paths
23+
find_library(HSA_RUNTIME hsa-runtime64
24+
HINTS
25+
${CMAKE_BINARY_DIR}/../../runtimes/rocr-runtime-prefix/src/rocr-runtime-build/rocr/lib
26+
${CMAKE_INSTALL_PREFIX}
27+
PATHS
28+
/opt/rocm)
2329
else()
24-
# As of rocm-3.7, hsa is installed with cmake packages and kmt is found via hsa
25-
find_package(hsa-runtime64 QUIET 1.2.0 HINTS ${CMAKE_INSTALL_PREFIX} PATHS /opt/rocm)
30+
if(DEFINED LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH)
31+
find_library(HSA_RUNTIME hsa-runtime64
32+
HINTS
33+
${CMAKE_BINARY_DIR}/../../runtimes/rocr-runtime-prefix/src/rocr-runtime-build
34+
${CMAKE_INSTALL_PREFIX}
35+
PATHS
36+
/opt/rocm)
37+
else()
38+
# As of rocm-3.7, hsa is installed with cmake packages and kmt is found via hsa
39+
find_package(hsa-runtime64 QUIET 1.2.0 HINTS ${CMAKE_INSTALL_PREFIX} PATHS /opt/rocm)
40+
endif()
2641
endif()
2742

2843
if(DEFINED HSA_RUNTIME)
2944
message(STATUS "Building hostexec for AMDGCN linked against libhsa")
30-
set(HSA_INCLUDE ${LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH}/inc)
45+
if(OFFLOAD_EXTERNAL_PROJECT_UNIFIED_ROCR)
46+
set(HSA_INCLUDE ${LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH}/runtime/hsa-runtime/inc)
47+
else()
48+
set(HSA_INCLUDE ${LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH}/inc)
49+
endif()
3150
set(HOSTEXEC_EXTRA_SOURCE)
3251
set(HOSTEXEC_DEP_LIBRARIES ${HSA_RUNTIME})
52+
message(STATUS "HSA Runtime found: ${HSA_RUNTIME}")
53+
message(STATUS "HSA Runtime include: ${HSA_INCLUDE}")
3354
elseif(${hsa-runtime64_FOUND})
34-
message(STATUS "Building hostexec for AMDGCN linked against libhsa")
55+
message(STATUS "Building hostexec for AMDGCN linked against libhsa64")
3556
set(HSA_INCLUDE ${hsa-runtime64_DIR}/../../../include/hsa)
3657
get_target_property(HSA_INCLUDE hsa-runtime64::hsa-runtime64 INTERFACE_INCLUDE_DIRECTORIES)
3758
set(HOSTEXEC_EXTRA_SOURCE)

offload/plugins-nextgen/amdgpu/CMakeLists.txt

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,21 @@ endif()
99
# If we are bootstrapping hsa via external project we need to use find_library
1010
# as it will not be installed.
1111
if(DEFINED LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH)
12-
find_library(HSA_RUNTIME hsa-runtime64
13-
HINTS
14-
${CMAKE_BINARY_DIR}/../../runtimes/rocr-runtime-prefix/src/rocr-runtime-build
15-
${CMAKE_INSTALL_PREFIX}
16-
PATHS
17-
${LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH}
18-
)
12+
if(OFFLOAD_EXTERNAL_PROJECT_UNIFIED_ROCR)
13+
find_library(HSA_RUNTIME hsa-runtime64
14+
HINTS
15+
${CMAKE_BINARY_DIR}/../../runtimes/rocr-runtime-prefix/src/rocr-runtime-build/rocr/lib
16+
${CMAKE_INSTALL_PREFIX}
17+
PATHS
18+
/opt/rocm)
19+
else()
20+
find_library(HSA_RUNTIME hsa-runtime64
21+
HINTS
22+
${CMAKE_BINARY_DIR}/../../runtimes/rocr-runtime-prefix/src/rocr-runtime-build
23+
${CMAKE_INSTALL_PREFIX}
24+
PATHS
25+
${LIBOMPTARGET_EXTERNAL_PROJECT_HSA_PATH})
26+
endif()
1927
else()
2028
# As of rocm-3.7, hsa is installed with cmake packages and kmt is found via hsa
2129
find_package(hsa-runtime64 QUIET 1.2.0 HINTS ${CMAKE_INSTALL_PREFIX} PATHS /opt/rocm)

0 commit comments

Comments
 (0)