gnu: Bump rocm to version 7.1.0

* gnu/packages/llvm.scm (%rocm-llvm-version): New variable.
(make-llvm-rocm): New procedure.
(llvm-rocm): New variable.
(make-clang-runtime-rocm): New procedure.
(clang-runtime-rocm): New variable.
(make-clang-rocm): New procedure.
(clang-rocm): New variable.
(rocm-device-libs): New variable.
(rocm-comgr): New variable.
(rocm-hipcc): New variable.
(make-lld-rocm): New procedure.
(lld-rocm): New variable.
* gnu/packages/rocm.scm: Add perl to imports.
(%rocm-version): Update to 7.1.0.
(%rocm-systems-url, %rocm-systems-origin): New variables.
(rocr-runtime): Use %rocm-systems-origin and update build.
(rocm-opencl-runtime): Use %rocm-systems-origin and update build.
(rocm-hip-runtime): New variable.
(rocminfo): Use %rocm-systems-origin and update build.
(%default-amdgpu-targets, %default-amdgpu-targets-property): New variables.
(%amdgpu-targets): New syntax.
(rocm-bandwidth-test): Update and add comprehensive build support.
* gnu/local.mk: Add rocm-bandwidth-test patches.
* gnu/packages/patches/rocm-bandwidth-test-fix-external-packages-search.patch,
gnu/packages/patches/rocm-bandwidth-test-fix-hsa-include-file-lookup.patch,
gnu/packages/patches/rocm-bandwidth-test-take-default-gpus-from-environment.patch:
New files.
* gnu/packages/patches/rocclr-5.6.0-enable-gfx800.patch,
gnu/packages/patches/rocm-opencl-runtime-4.3-noclinfo.patch: Update patch paths.

Change-Id: I43f162b9f8ab898e25d8ecbe4ea30be84a29eb0d
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Jean-Baptiste Note 2025-09-25 16:15:47 +02:00 committed by Andreas Enge
parent ceaf4c4ead
commit 93f06c60ee
No known key found for this signature in database
GPG key ID: F7D5C9BF765C61E3
8 changed files with 741 additions and 250 deletions

View file

@ -2281,6 +2281,9 @@ dist_patch_DATA = \
%D%/packages/patches/rng-tools-revert-build-randstat.patch \
%D%/packages/patches/rocclr-5.6.0-enable-gfx800.patch \
%D%/packages/patches/rocm-opencl-runtime-4.3-noclinfo.patch \
%D%/packages/patches/rocm-bandwidth-test-fix-external-packages-search.patch \
%D%/packages/patches/rocm-bandwidth-test-fix-hsa-include-file-lookup.patch \
%D%/packages/patches/rocm-bandwidth-test-take-default-gpus-from-environment.patch \
%D%/packages/patches/rottlog-direntry.patch \
%D%/packages/patches/ruby-actionpack-remove-browser-tests.patch \
%D%/packages/patches/ruby-activesupport-fix-deprecation-warning.patch \

View file

@ -67,6 +67,7 @@
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages cmake)
#:use-module (gnu packages bash)
#:use-module (gnu packages crypto)
#:use-module (gnu packages gcc)
#:use-module (gnu packages bootstrap) ;glibc-dynamic-linker
@ -86,6 +87,7 @@
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages python-build)
#:use-module (gnu packages rocm)
#:use-module (gnu packages swig)
#:use-module (gnu packages vulkan)
#:use-module (gnu packages xml)
@ -1279,40 +1281,282 @@ Library.")
(define-public clang clang-13)
(define-public clang-toolchain clang-toolchain-13)
(define-public llvm-for-rocm
;; ROCm compiler infrastructure elements are compiled from a monorepo at
;; https://github.com/ROCm/llvm-project. Due to some of these parts
;; referencing both a common origin and llvm helpers (in particular related to
;; patches and base packages). Other ROCm elements are part of rocm.scm
;; This must match '%rocm-version' in rocm.scm. They cannot be shared because
;; toplevel variables cannot be called from one file to another.
(define %rocm-llvm-version "7.1.0")
(define (make-llvm-rocm llvm-base)
(package
;; Currently based on LLVM 19.
(inherit llvm-19)
(name "llvm-for-rocm")
(version "6.4.2") ;this must match '%rocm-version'
(inherit llvm-base)
;; XXX A lot of llvm package phases are dependent on llvm version. Are
;; these resolved early, so that we can override the package version easily?
(version %rocm-llvm-version)
(name "llvm-rocm")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ROCm/llvm-project.git")
(commit (string-append "rocm-" version))))
(file-name (git-file-name name version))
(url "https://github.com/ROCm/llvm-project")
(commit (string-append "rocm-" %rocm-llvm-version))))
(file-name (git-file-name "rocm-llvm" %rocm-llvm-version))
(sha256
(base32
"1j2cr362k7snsh5c1z38ikyihmjvy0088rj0f0dhng6cjwgysryp"))))
"1nwbj2cz99psgq9s9l4wbsxj41l2d2dga5l9rw9jndk05jsn4n7s"))
;; Some of these patches require a further dynamic substitution during
;; package build. Therefore, it is important to derive from the base
;; packages or to duplicate such substitutions. Additionally, some of
;; those substitutions are only applied on specific subcomponents
;; (llvm-clang), so duplicating the base-llvm structure with subcomponents
;; is necessary.
(patches
(map search-patch
(assoc-ref %llvm-patches (package-version llvm-base))))))
(arguments
(substitute-keyword-arguments (package-arguments llvm-19)
(substitute-keyword-arguments (package-arguments llvm-base)
((#:configure-flags flags)
#~(list "-DLLVM_ENABLE_PROJECTS=llvm;clang;lld"
"-DLLVM_TARGETS_TO_BUILD=AMDGPU;X86"
"-DCMAKE_SKIP_BUILD_RPATH=FALSE"
"-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
"-DBUILD_SHARED_LIBS:BOOL=TRUE"
"-DLLVM_VERSION_SUFFIX="))))
#~(append #$flags
(list "-DLLVM_TARGETS_TO_BUILD=AMDGPU;X86"
"-DLLVM_VERSION_SUFFIX=")))))
(properties `((hidden? . #t)
,@(package-properties llvm-19)))
,@(package-properties llvm-base)))
(home-page "https://github.com/ROCm/llvm-project")
(synopsis
(string-append (package-synopsis llvm-19) " (AMD fork)"))
(string-append (package-synopsis llvm-base) " (AMD fork)"))
(description
(string-append (package-description llvm-19) "
(string-append (package-description llvm-base) "
This AMD fork includes AMD-specific additions."))))
(define-public llvm-rocm (make-llvm-rocm llvm-20))
(define (make-clang-runtime-rocm clang-runtime-base)
(package
(inherit clang-runtime-base)
(name "clang-runtime-rocm")
(version (package-version llvm-rocm))
(source (package-source llvm-rocm))
(inputs (modify-inputs (package-inputs clang-runtime-base)
(replace "llvm" llvm-rocm)))))
(define-public clang-runtime-rocm (make-clang-runtime-rocm clang-runtime-20))
(define (make-clang-rocm clang-base)
;; note: tools-extra is embedded in the checkout
(package
(inherit clang-base)
(name "clang-rocm")
(version (package-version llvm-rocm))
(source (package-source llvm-rocm))
(inputs (modify-inputs (package-inputs clang-base)
(delete "clang-tools-extra")))
(propagated-inputs
(modify-inputs (package-propagated-inputs clang-base)
(replace "llvm" llvm-rocm)
(replace "clang-runtime" clang-runtime-rocm)
(append python-lit)))
(arguments
(substitute-keyword-arguments (package-arguments clang-base)
;; The tests can be run, as allowed by check phase rewrite and
;; LLVM_EXTERNAL_LIT setting. However, 84/46171 are failing. Most
;; should probably be disabled.
;;
;; - CUDA tests are failing.
;;
;; - Checking for some -L[[SYSROOT]] is failing, which I guess is
;; expected, given the patches we apply, which are mangling directory
;; searching for libraries.
;;
;; Getting the test suite to pass doesn't seem out of reach. We
;; probably should start with the standard llvm-clang-20x package.
((#:tests? _ #t) #f)
((#:configure-flags flags)
#~(append #$flags
(list
"-DLLVM_TARGETS_TO_BUILD=AMDGPU;X86"
;; WARNING: we could patch
;; #$llvm-rocm/lib/cmake/llvm/AddLLVM.cmake to simplify, by
;; substituting set(LIT_COMMAND
;; "${Python3_EXECUTABLE};${lit_base_dir}/${lit_file_name}")
;; pending this, having a correct python script here is a
;; must-have.
;; TODO: test this on llvm-rocm.
(string-append
"-DLLVM_EXTERNAL_LIT="
(search-input-file %build-inputs "bin/.lit-real"))
;; Disable clang wrapper which depends on lld as well.
"-DCLANG_ENABLE_AMDCLANG=OFF")))
((#:phases phases '%standard-phases)
#~(modify-phases #$phases
(replace 'check
(lambda* (#:rest args)
(setenv "HOME" "/tmp")
(apply (assoc-ref
(@ (guix build gnu-build-system) %standard-phases)
'check)
#:test-target "check-clang" args)))
(replace 'add-tools-extra
(lambda _
(copy-recursively "../clang-tools-extra" "tools/extra")))))))))
(define-public clang-rocm (make-clang-rocm clang-20))
(define-public rocm-device-libs
(package
(name "rocm-device-libs")
(version (package-version llvm-rocm))
(source (package-source llvm-rocm))
(build-system cmake-build-system)
(arguments
(list
#:tests? #f ; Not sure how to run them.
#:build-type "Release"
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _
(chdir "amd/device-libs")))
(add-after 'install 'copy-include-directories
(lambda _
;; at this point we're within amd/build; i guess the build
;; directory should be at the same level as source, but due to
;; the chdir above...
(with-directory-excursion "../device-libs"
(for-each
(lambda (directory)
(let ((include-directory (string-append directory "/inc")))
(copy-recursively
include-directory
(string-append #$output "/" include-directory))))
(list "irif" "oclc" "ockl" "ocml"))))))))
(inputs (list clang-rocm))
(home-page "https://github.com/ROCm/llvm-project/")
(synopsis "ROCm Device libraries")
(description "ROCm device libraries provide AMD-specific device-side language runtime
libraries, namely oclc, ocml, ockl, opencl, hip and hc.")
(license license:ncsa)))
;; Usage note from amd/comgr/src/comgr-env.cpp: at runtime, comgr either needs
;; the awful ROCM_PATH set, or the more palatable LLVM_PATH and HIP_PATH, set.
(define-public rocm-comgr
(package
(name "rocm-comgr")
(version (package-version llvm-rocm))
(source (package-source llvm-rocm))
(build-system cmake-build-system)
(arguments
(list
#:build-type "Release"
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'prepare-to-build
(lambda _
(chdir "amd/comgr")
(setenv "ROCM_PATH"
#$(this-package-input "rocm-device-libs")))))))
(inputs (list libffi rocm-device-libs))
(native-inputs (list
clang-rocm
lld-rocm
python))
(home-page "https://github.com/ROCm/ROCm-CompilerSupport")
(synopsis "ROCm Code Object Manager")
(description "The Comgr library provides APIs for compiling and inspecting
AMDGPU code objects.")
(license license:ncsa)))
(define-public rocm-hipcc
(package
(name "rocm-hipcc")
(version (package-version llvm-rocm))
(source (package-source llvm-rocm))
(build-system cmake-build-system)
(arguments
(list
#:tests? #f ; Not sure how to run them.
#:build-type "Release"
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _
(chdir "amd/hipcc")))
(add-after 'chdir 'patch-rocm-path
(lambda* (#:key inputs #:allow-other-keys)
(substitute* (find-files "src" "\\.h$")
(("roccmPath \\+ \"/bin/rocm_agent_enumerator\"")
(format #f "~s" (search-input-file
inputs
"/bin/rocm_agent_enumerator"))))))
;; This version file very important, as it is parsed under
;; $#{llvm-rocm}/clang/lib/Driver/ToolChains/AMDGPU.cpp and its
;; contents decides on some includes for hipcc.
(add-after 'install 'info-version
(lambda _
(let ((hip-version-dir (string-append #$output "/share/hip")))
(mkdir hip-version-dir)
(with-directory-excursion hip-version-dir
(with-output-to-file "version"
(lambda _
(apply format #t
"HIP_VERSION_MAJOR=~a~%~
HIP_VERSION_MINOR=~a~%~
HIP_VERSION_PATCH=~a~%~
HIP_VERSION_GITHASH=0~%"
(string-split
#$(version-major+minor+point version) #\.))))))))
(add-after 'install 'wrap-programs
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((output-bindir (string-append (assoc-ref outputs "out") "/bin")))
(for-each
(lambda (file)
(wrap-program (string-append output-bindir "/" file)
;; The following definitions and their meaning can be
;; found in hibBin_base.h. We've defined neither
;; HIP_RUNTIME nor HIP_ROCCLR_HOME.
;; HIP_ROCCLR_HOME unfortunately cannot be set here
;; (circular dependency problem) -- it should be set to
;; #$rocm-hip-runtime.
;;(list "HIP_ROCCLR_HOME" '= (list #$rocm-hip-runtime))
(list "HIP_PATH" '= (list #$output))
(list "HIP_CLANG_PATH"
'=
(list (string-append
#$(this-package-input "clang-rocm")
"/bin")))
(list "DEVICE_LIB_PATH"
'=
(list (string-append
#$(this-package-input "rocm-device-libs")
"/amdgcn/bitcode")))
;; This is done in order to please check_config, which
;; checks that HSA_PATH is in LD_LIBRARY_PATH
(list "LD_LIBRARY_PATH"
'suffix
(list #$(this-package-input "rocr-runtime")))
;; checks hipconfig is in PATH
(list "PATH" 'suffix (list output-bindir))))
'( "hipcc" "hipconfig" ))))))))
(inputs (list clang-rocm
rocm-device-libs
rocr-runtime
rocminfo
perl
bash-minimal))
(home-page "https://github.com/ROCm/llvm-project/")
(synopsis "ROCm HIP compiler driver (@command{hipcc})")
(description "The HIP compiler driver (@command{hipcc}) is a compiler utility that will
call @command{clang} and pass the appropriate include and library options for
the target compiler and HIP infrastructure.")
(license license:expat)))
(define-public libunwind-headers
@ -1723,6 +1967,26 @@ existing compilers together.")
(define-public python-clang-13
(clang-python-bindings clang-13))
;; XXX
;; I would move all of rocm packages here and define a ROCm section.
(define (make-lld-rocm lld-base)
(package
(inherit lld-base)
(name "lld-rocm")
(version (package-version llvm-rocm))
(source (package-source llvm-rocm))
(inputs (list llvm-rocm))
(arguments
(substitute-keyword-arguments (package-arguments lld-base)
((#:configure-flags flags)
#~(append #$flags
'("-DLLVM_TARGETS_TO_BUILD=AMDGPU;X86")))))))
(define-public lld-rocm (make-lld-rocm lld-20))
(define-public include-what-you-use
(package
(name "include-what-you-use")
@ -1733,8 +1997,8 @@ existing compilers together.")
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/include-what-you-use/include-what-you-use")
(commit version)))
(url "https://github.com/include-what-you-use/include-what-you-use")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "0dkk65y6abf7bzv10q1ch3dyzj4d5y89qhh43jn189l861d6pzs0"))))

View file

@ -17,8 +17,8 @@ Signed-off-by: Jeremy Newton <Jeremy.Newton@amd.com>
diff --git a/rocclr/device/device.hpp b/rocclr/device/device.hpp
index ef82630325..6409cebc90 100644
--- a/rocclr/device/device.hpp
+++ b/rocclr/device/device.hpp
--- a/projects/clr/rocclr/device/device.hpp
+++ b/projects/clr/rocclr/device/device.hpp
@@ -1431,8 +1431,5 @@ class Isa {
/// @returns If the ROCm runtime supports the ISA.

View file

@ -0,0 +1,58 @@
diff --git a/cmake/build_utils.cmake b/cmake/build_utils.cmake
index 83db1be..6f62931 100644
--- a/cmake/build_utils.cmake
+++ b/cmake/build_utils.cmake
@@ -1010,7 +1010,7 @@ macro(add_bundled_libraries)
add_subdirectory(${FMT_SOURCE_DIR} EXCLUDE_FROM_ALL)
set(FMT_LIBRARIES fmt::fmt-header-only)
else()
- find_package(${FMT_PACKAGE_NAME} REQUIRED ${FMT_PKG_MINIMUM_REQUIRED_VERSION})
+ find_package(${FMT_PACKAGE_NAME} ${FMT_PKG_MINIMUM_REQUIRED_VERSION} REQUIRED)
set(FMT_LIBRARIES fmt::fmt)
endif()
list(APPEND 3RD_PARTY_TARGET_LIST ${FMT_LIBRARIES})
@@ -1020,8 +1020,8 @@ macro(add_bundled_libraries)
# Note: C++23+ we can use std::stacktrace for the traces.
# Some older compilers/systems will not allow that. We will force/use boost::stacktrace for now.
# Check for 'Boost'
- set(BOOST_PACKAGE_NAME "boost")
- set(BOOST_LIBRARY_NAME "boost")
+ set(BOOST_PACKAGE_NAME "Boost")
+ set(BOOST_LIBRARY_NAME "Boost")
set(BOOST_REPO_URL "https://github.com/boostorg/boost.git")
set(BOOST_PKG_MINIMUM_REQUIRED_VERSION "1.74.0")
set(BOOST_REPO_VERSION "boost-1.88.0")
@@ -1128,7 +1128,7 @@ macro(add_bundled_libraries)
add_subdirectory(${SPDLOG_SOURCE_DIR} EXCLUDE_FROM_ALL)
set(SPDLOG_LIBRARIES spdlog::spdlog_header_only)
else()
- find_package(${SPDLOG_PACKAGE_NAME} REQUIRED ${SPDLOG_PKG_MINIMUM_REQUIRED_VERSION})
+ find_package(${SPDLOG_PACKAGE_NAME} ${SPDLOG_PKG_MINIMUM_REQUIRED_VERSION} REQUIRED)
set(SPDLOG_LIBRARIES spdlog::spdlog)
endif()
list(APPEND 3RD_PARTY_TARGET_LIST ${SPDLOG_LIBRARIES})
@@ -1162,7 +1162,7 @@ macro(add_bundled_libraries)
# find_package(Boost 1.74 REQUIRED COMPONENTS stacktrace_basic)
# set(BOOST_LIBRARIES boost::boost)
#endif()
- set(CATCH2_PACKAGE_NAME "catch2")
+ set(CATCH2_PACKAGE_NAME "Catch2")
set(CATCH2_LIBRARY_NAME "Catch2")
set(CATCH2_REPO_URL "https://github.com/catchorg/Catch2.git")
set(CATCH2_PKG_MINIMUM_REQUIRED_VERSION "3.5.1")
diff --git a/main/cmdline/CMakeLists.txt b/main/cmdline/CMakeLists.txt
index ad8219e..f507a2b 100644
--- a/main/cmdline/CMakeLists.txt
+++ b/main/cmdline/CMakeLists.txt
@@ -54,7 +54,7 @@ if(NOT USE_LOCAL_CLI11)
set(CLI11_LIBRARIES CLI11::CLI11)
set(CLI11_INCLUDE_DIRS)
else()
- find_package(CLI11 CONFIG QUIT)
+ find_package(CLI11 CONFIG QUIET)
endif()
--
2.51.0

View file

@ -0,0 +1,16 @@
diff --git a/plugins/tb/transferbench/CMakeLists.txt b/plugins/tb/transferbench/CMakeLists.txt
index 98e4bc4..8e4588e 100644
--- a/plugins/tb/transferbench/CMakeLists.txt
+++ b/plugins/tb/transferbench/CMakeLists.txt
@@ -153,7 +153,7 @@ endif()
## Check for hsa support
find_library(HSA_LIBRARY hsa-runtime64 PATHS ${ROCM_PATH} ${ROCM_PATH}/lib)
-find_path(HSA_INCLUDE_DIR hsa.h PATHS ${ROCM_PATH}/include ${ROCM_PATH}/include/hsa)
+find_path(HSA_INCLUDE_DIR has/hsa.h PATHS ${ROCM_PATH}/include ${ROCM_PATH}/include/hsa)
if(HSA_LIBRARY AND HSA_INCLUDE_DIR)
add_library(hsa-runtime64 SHARED IMPORTED)
set_target_properties(hsa-runtime64 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${HSA_INCLUDE_DIR}" IMPORTED_LOCATION "${HSA_LIBRARY}" INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${HSA_INCLUDE_DIR}")
--
2.51.0

View file

@ -0,0 +1,29 @@
diff --git a/plugins/tb/transferbench/CMakeLists.txt b/plugins/tb/transferbench/CMakeLists.txt
index 8e4588e..1d0e12f 100644
--- a/plugins/tb/transferbench/CMakeLists.txt
+++ b/plugins/tb/transferbench/CMakeLists.txt
@@ -61,20 +61,7 @@ option(ENABLE_NIC_EXEC "Enable RDMA NIC Executor in TransferBench"
# Default GPU architectures to build
#==================================================================================================
-set(DEFAULT_GPUS
- gfx906
- gfx908
- gfx90a
- gfx942
- gfx950
- gfx1030
- gfx1100
- gfx1101
- gfx1102
- gfx1150
- gfx1151
- gfx1200
- gfx1201)
+set(DEFAULT_GPUS ENV{AMDGPU_TARGETS})
# Build only for local GPU architecture
if (BUILD_LOCAL_GPU_TARGET_ONLY)
--
2.51.0

View file

@ -2,8 +2,8 @@ Do not build and install clinfo.
diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt
index 7b97cfdef..23eec15b2 100644
--- a/opencl/CMakeLists.txt
+++ b/opencl/CMakeLists.txt
--- a/projects/clr/opencl/CMakeLists.txt
+++ b/projects/clr/opencl/CMakeLists.txt
@@ -33,7 +33,7 @@ if(BUILD_ICD)
add_subdirectory(khronos/icd)
endif()
@ -15,8 +15,8 @@ index 7b97cfdef..23eec15b2 100644
add_subdirectory(tests/ocltst)
diff --git a/opencl/packaging/CMakeLists.txt b/opencl/packaging/CMakeLists.txt
index 7d9e6366f..f8d08e0fc 100644
--- a/opencl/packaging/CMakeLists.txt
+++ b/opencl/packaging/CMakeLists.txt
--- a/projects/clr/opencl/packaging/CMakeLists.txt
+++ b/projects/clr/opencl/packaging/CMakeLists.txt
@@ -16,7 +16,7 @@ endif()
set(CPACK_DEB_COMPONENT_INSTALL ON)
set(CPACK_RPM_COMPONENT_INSTALL ON)

View file

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
;;; Copyright © 2022, 2023, 2025 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2026 Jean-Baptiste Note <jean-baptiste.note@m4x.org>
;;;
;;; This program is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
@ -24,34 +25,242 @@
#:use-module (guix git-download)
#:use-module (guix build-system cmake)
#:use-module (gnu packages)
#:use-module (gnu packages boost)
#:use-module (gnu packages check)
#:use-module (gnu packages cpp)
#:use-module (gnu packages curl)
#:use-module (gnu packages elf)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gl)
#:use-module (gnu packages linux)
#:use-module (gnu packages llvm)
#:use-module (gnu packages logging)
#:use-module (gnu packages opencl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages pretty-print)
#:use-module (gnu packages python)
#:use-module (gnu packages version-control)
#:use-module (gnu packages vim)
#:use-module (gnu packages xdisorg))
#:use-module (gnu packages perl)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages libffi)
#:use-module (ice-9 match))
;; The components are tightly integrated and can only be upgraded as a unit. If
;; you want to upgrade ROCm, bump this version number and update hashes below.
(define %rocm-version "6.4.2")
;; As of version 6.1.0 several of the ROCm projects are contained within their
;; forked LLVM repository. This is the same as the source for llvm-for-rocm.
(define %rocm-llvm-origin
(define %rocm-version "7.1.0")
;; ROCm-systems derived packages belong here.
(define %rocm-systems-url "https://github.com/ROCm/rocm-systems")
(define %rocm-systems-origin
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ROCm/llvm-project/")
(url (string-append %rocm-systems-url))
(commit (string-append "rocm-" %rocm-version))))
(file-name (git-file-name "llvm-for-rocm" %rocm-version))
(file-name (git-file-name "rocm-systems" %rocm-version))
(sha256
(base32
"1j2cr362k7snsh5c1z38ikyihmjvy0088rj0f0dhng6cjwgysryp"))))
"16h88j5440csz69s7gpcbmiwn72bz4zjlkdm2c7wcyp73m2knnm2"))
(patches
(search-patches
"rocclr-5.6.0-enable-gfx800.patch"
"rocm-opencl-runtime-4.3-noclinfo.patch"))))
(define-public rocr-runtime
(package
(name "rocr-runtime")
(version %rocm-version)
(source %rocm-systems-origin)
(build-system cmake-build-system)
(arguments
(list
#:tests? #f ; No tests.
#:build-type "Release"
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _
(chdir "projects/rocr-runtime")))
(add-after 'unpack 'add-rocm-device-lib-path
(lambda _
(setenv "ROCM_PATH"
#$(this-package-input "rocm-device-libs")))))))
(inputs
(list libdrm
libelf-shared
clang-rocm
lld-rocm
numactl
rocm-device-libs)) ; For bitcode.
(native-inputs (list pkg-config xxd))
(home-page %rocm-systems-url)
(synopsis "ROCm Platform Runtime")
(description "User-mode API interfaces and libraries necessary for host
applications to launch compute kernels to available HSA ROCm kernel agents.")
(license license:ncsa)))
(define-public rocm-opencl-runtime
(package
(name "rocm-opencl-runtime")
(version %rocm-version)
(home-page %rocm-systems-url)
(source %rocm-systems-origin)
(build-system cmake-build-system)
(arguments
(list
#:tests? #f ; Not sure how to run them.
#:build-type "Release"
#:configure-flags
#~(list
(string-append "-DAMD_OPENCL_PATH=" #$(package-source this-package))
"-DCLR_BUILD_OCL=ON"
(string-append "-DROCM_PATH=" #$output)
;; Don't build the ICD loader as we have the opencl-icd-loader
;; package already.
"-DBUILD_ICD=OFF"
;; Don't duplicate the install in an "opencl" directory as well.
"-DFILE_REORG_BACKWARD_COMPATIBILITY=OFF")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _
(chdir "projects/clr")))
(add-after 'chdir 'no-os-release
(lambda _
(substitute* "opencl/packaging/CMakeLists.txt"
(("/etc/os-release") "/dev/null"))))
(add-after 'install 'create-icd
;; Manually install ICD, which simply consists of dumping
;; the path of the .so into the correct file.
(lambda* (#:key outputs #:allow-other-keys)
(let* ((vendors (string-append #$output "/etc/OpenCL/vendors"))
(sopath (string-append #$output "/lib/libamdocl64.so")))
(mkdir-p vendors)
(with-output-to-file (string-append vendors "/amdocl64.icd")
(lambda _ (display sopath)))))))))
(inputs
(list glew
mesa
numactl
opencl-headers
opencl-icd-loader
libffi
rocm-comgr
rocr-runtime))
(synopsis "ROCm OpenCL Runtime")
(description "OpenCL 2.0 compatible language runtime, supporting offline
and in-process/in-memory compilation.")
(license license:expat)))
;; this runtime includes the hipcc and hip-config present in rocm-hipcc
;; wrapping them in rocm-hipcc allows the copies that are made here to be
;; wrapped also.
(define-public rocm-hip-runtime
(package
(name "rocm-hip-runtime")
(version %rocm-version)
(home-page %rocm-systems-url)
(source %rocm-systems-origin)
(build-system cmake-build-system)
(arguments
(list
#:tests? #f ; Not sure how to run them.
#:build-type "Release"
#:configure-flags
#~(list
(string-append "-DAMD_OPENCL_PATH=" #$(package-source this-package))
"-DCLR_BUILD_HIP=ON"
"-DCLR_BUILD_OCL=OFF"
(string-append "-DROCM_PATH=" #$output)
"-DHIP_PLATFORM=amd"
(string-append
"-DHIPCC_BIN_DIR=" #$(this-package-native-input "rocm-hipcc") "/bin")
(string-append
"-DHIP_COMMON_DIR=" #$(package-source this-package) "/projects/hip")
;; for now
"-DUSE_PROF_API=OFF"
"-DHIP_ENABLE_ROCPROFILER_REGISTER=OFF")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _
(chdir "projects/clr")))
(add-after 'chdir 'no-os-release
(lambda _
(substitute* '("hipamd/packaging/CMakeLists.txt"
"hipamd/CMakeLists.txt")
(("/etc/os-release") "/dev/null"))))
(add-after 'chdir 'less-cmake-warnings
(lambda _
(substitute* "rocclr/cmake/ROCclrLC.cmake"
(("2\\.9") "3.0"))))
(add-after 'chdir 'fix-clang-location-for-embed-pch
(lambda _
(substitute* "hipamd/src/CMakeLists.txt"
;; differentiate between CLANG and LLVM packages
(("\\$\\{HIP_LLVM_ROOT\\}")
(string-append "${HIP_LLVM_ROOT} "
#$(this-package-input "clang-rocm"))))
(substitute* "hipamd/src/hip_embed_pch.sh"
(("\\$5") "$6")
(("LLVM_DIR=\"\\$4\"")
"LLVM_DIR=\"$4\"; CLANG_DIR=\"$5\";")
(("\\$LLVM_DIR/bin/clang")
(string-append "$CLANG_DIR/bin/clang"))))))))
(inputs
(list glew
mesa
numactl
perl
opencl-headers
rocm-comgr
rocr-runtime
rocm-device-libs
libffi
clang-rocm))
(native-inputs
(list rocm-hipcc))
(synopsis "ROCm HIP Runtime")
(description "HIP language runtime, allowing execution of HIP kernels
on AMD harware, with library support for in-process/in-memory
compilation (hipclr) of HIP kernel code, and its execution on AMD hardware.")
(license license:expat)))
(define-public rocminfo
(package
(name "rocminfo")
(version %rocm-version)
(source %rocm-systems-origin)
(build-system cmake-build-system)
(arguments
(list
#:tests? #f ; No tests.
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _
(chdir "projects/rocminfo")))
(add-after 'chdir 'patch-binary-paths
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "rocminfo.cc"
(("lsmod")
(search-input-file inputs "bin/lsmod"))
(("grep")
(search-input-file inputs "bin/grep"))))))))
(inputs
(list rocr-runtime kmod python))
(home-page %rocm-systems-url)
(synopsis "ROCm Application for Reporting System Info")
(description "List @acronym{HSA,Heterogeneous System Architecture} Agents
available to ROCm and show their properties.")
(license license:ncsa)))
;; ROCm base helpers.
(define-public rocm-cmake
(package
@ -60,14 +269,14 @@
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ROCm/rocm-cmake/")
(commit (string-append "rocm-" version))))
(url "https://github.com/ROCm/rocm-cmake/")
(commit (string-append "rocm-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1af9z59bm8pj577x43q614v3ff039wijvcdpgw6sdsq1c0ssj260"))))
"19jyymisxiikphzmq6h8vy5cg0r5dz3lxr5wvdf44frb8wxr8vla"))))
(build-system cmake-build-system)
(arguments `(#:tests? #f)) ; Tests try to use git commit
(arguments `(#:tests? #f)) ; Tests try to use git commit
(native-inputs (list git))
(home-page "https://rocm.docs.amd.com/projects/ROCmCMakeBuildTools/")
(synopsis "ROCm cmake modules")
@ -75,31 +284,6 @@
tasks needed for the ROCM software stack.")
(license license:ncsa)))
(define-public rocm-device-libs
(package
(name "rocm-device-libs")
(version %rocm-version)
(source %rocm-llvm-origin)
(build-system cmake-build-system)
(arguments
(list
#:tests? #f ; Not sure how to run them.
#:build-type "Release"
#:configure-flags
#~(list "-DCMAKE_SKIP_BUILD_RPATH=FALSE"
"-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'chdir
(lambda _
(chdir "amd/device-libs"))))))
(inputs (list llvm-for-rocm))
(home-page "https://github.com/ROCm/llvm-project/")
(synopsis "ROCm Device libraries")
(description "AMD-specific device-side language runtime libraries, namely
oclc, ocml, ockl, opencl, hip and hc.")
(license license:ncsa)))
(define-public rocm-hip-cpu
;; There are no releases or tags.
(let ((commit "e112c935057434897bb12d9ab3910380a8bd5f58")
@ -122,193 +306,26 @@ oclc, ocml, ockl, opencl, hip and hc.")
(list
#:configure-flags #~(list "-DBUILD_EXAMPLES=ON")))
(home-page "https://github.com/ROCm/HIP-CPU/")
(synopsis "An implementation of HIP that works on CPUs")
(synopsis "Implementation of HIP that works on CPUs")
(description "The HIP CPU Runtime is a header-only library that allows
CPUs to execute unmodified HIP code. It is generic and does not assume a
particular CPU vendor or architecture.")
(license license:expat))))
(define-public rocm-comgr
(package
(name "rocm-comgr")
(version %rocm-version)
(source %rocm-llvm-origin)
(build-system cmake-build-system)
(arguments
(list
#:build-type "Release"
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'prepare-to-build
(lambda _
(chdir "amd/comgr")
(setenv "ROCM_PATH"
#$(this-package-input "rocm-device-libs")))))))
(inputs (list rocm-device-libs))
(native-inputs (list llvm-for-rocm python))
(home-page "https://github.com/ROCm/ROCm-CompilerSupport")
(synopsis "ROCm Code Object Manager")
(description "The Comgr library provides APIs for compiling and inspecting
AMDGPU code objects.")
(license license:ncsa)))
(define %default-amdgpu-targets
'("gfx908" "gfx90a" "gfx942" "gfx1030" "gfx1100" "gfx1101" "gfx1200" "gfx1201"))
;; This package is deprecated; this is the last version released.
(define-public roct-thunk-interface
(package
(name "roct-thunk-interface")
(version "6.2.4")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ROCm/ROCT-Thunk-Interface.git")
(commit (string-append "rocm-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1y3mn4860z7ca71cv4hhag7racpc208acy8rws8ldw5k8yjc68m0"))))
(build-system cmake-build-system)
(arguments `(#:tests? #f)) ; Not sure how to run tests.
(inputs (list libdrm numactl))
(native-inputs (list `(,gcc "lib") pkg-config))
(home-page "https://github.com/ROCm/ROCT-Thunk-Interface")
(synopsis "Radeon Open Compute Thunk Interface")
(description "User-mode API interfaces used to interact with the ROCk
driver.")
(license (list license:expat license:ncsa))))
;; I guess the intent would be to have this overridable with a package
;; transform akin to --with-property=amdgpu-target="gfx1100;gfx1101"
(define %default-amdgpu-targets-property
`(amdgpu-targets
.
,(string-join %default-amdgpu-targets ";")))
(define-public rocr-runtime
(package
(name "rocr-runtime")
(version %rocm-version)
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ROCm/ROCR-Runtime.git")
(commit (string-append "rocm-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"01gqbzqm5m28dw9b2calrbp9a23w2cc2gwi3pay8yl8qvk4jgkff"))))
(build-system cmake-build-system)
(arguments
(list
#:tests? #f ; No tests.
#:build-type "Release"
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'add-rocm-device-lib-path
(lambda _
(setenv "ROCM_PATH"
#$(this-package-input "rocm-device-libs")))))))
(inputs
(list libdrm
libelf-shared
llvm-for-rocm
numactl
rocm-device-libs ; For bitcode.
roct-thunk-interface))
(native-inputs (list pkg-config xxd))
(home-page "https://github.com/ROCm/ROCR-Runtime")
(synopsis "ROCm Platform Runtime")
(description "User-mode API interfaces and libraries necessary for host
applications to launch compute kernels to available HSA ROCm kernel agents.")
(license license:ncsa)))
(define-public rocm-opencl-runtime
(package
(name "rocm-opencl-runtime")
(version %rocm-version)
(home-page "https://github.com/ROCm/clr")
(source (origin
(method git-fetch)
(uri (git-reference
(url home-page)
(commit (string-append "rocm-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"00zr1fw84nifn2b2zd4wxf00f1171hjmz1lypzzmydsk5yw01q0c"))
(patches
(search-patches
"rocclr-5.6.0-enable-gfx800.patch"
;; Guix includes a program clinfo already.
"rocm-opencl-runtime-4.3-noclinfo.patch"))))
(build-system cmake-build-system)
(arguments
(list
#:tests? #f ; Not sure how to run them.
#:build-type "Release"
#:configure-flags
#~(list
(string-append "-DAMD_OPENCL_PATH=" #$(package-source this-package))
"-DCLR_BUILD_OCL=ON"
(string-append "-DROCM_PATH=" #$output)
;; Don't build the ICD loader as we have the opencl-icd-loader
;; package already.
"-DBUILD_ICD=OFF"
;; Don't duplicate the install in an "opencl" directory as well.
"-DFILE_REORG_BACKWARD_COMPATIBILITY=OFF")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'no-os-release
(lambda _
(substitute* "opencl/packaging/CMakeLists.txt"
(("\"/etc/os-release\"")
"\"/dev/null\""))))
(add-after 'install 'create-icd
;; Manually install ICD, which simply consists of dumping
;; the path of the .so into the correct file.
(lambda* (#:key outputs #:allow-other-keys)
(let* ((vendors (string-append #$output "/etc/OpenCL/vendors"))
(sopath (string-append #$output "/lib/libamdocl64.so")))
(mkdir-p vendors)
(with-output-to-file (string-append vendors "/amdocl64.icd")
(lambda _ (display sopath)))))))))
(inputs
(list glew
mesa
numactl
opencl-headers
opencl-icd-loader
rocm-comgr
rocr-runtime))
(synopsis "ROCm OpenCL Runtime")
(description "OpenCL 2.0 compatible language runtime, supporting offline
and in-process/in-memory compilation.")
(license license:expat)))
(define-public rocminfo
(package
(name "rocminfo")
(version %rocm-version)
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ROCm/rocminfo.git")
(commit (string-append "rocm-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"15mzmxz011sg42jg0dbxz57f4fagmxzdjc6zhd0yab3cq7k1kiv2"))))
(build-system cmake-build-system)
(arguments
(list
#:tests? #f ; No tests.
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'patch-binary-paths
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "rocminfo.cc"
(("lsmod")
(search-input-file inputs "bin/lsmod"))
(("grep") (search-input-file inputs "bin/grep"))))))))
(inputs
(list rocr-runtime kmod))
(home-page "https://github.com/ROCm/rocminfo")
(synopsis "ROCm Application for Reporting System Info")
(description "List @acronym{HSA,Heterogeneous System Architecture} Agents
available to ROCm and show their properties.")
(license license:ncsa)))
(define-syntax-rule (%amdgpu-targets)
(string-split
(assoc-ref (package-properties this-package) 'amdgpu-targets)
#\;))
(define-public rocm-bandwidth-test
(package
@ -317,15 +334,120 @@ available to ROCm and show their properties.")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ROCm/rocm_bandwidth_test.git")
(commit (string-append "rocm-" version))))
(url "https://github.com/ROCm/rocm_bandwidth_test")
(commit (string-append "rocm-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1afmyx0dkif7djdcm5rfhnsibbrkj4py6dvh0gw4x3v750ms69wv"))))
"09ssn8lkjaypq8qy3v28z25qvxsyha4cv4dk6xmfxmgfy8252yqy"))
(patches
(search-patches
"rocm-bandwidth-test-take-default-gpus-from-environment.patch"
"rocm-bandwidth-test-fix-hsa-include-file-lookup.patch"
"rocm-bandwidth-test-fix-external-packages-search.patch"))))
(build-system cmake-build-system)
(arguments `(#:tests? #f)) ; No tests.
(inputs (list rocr-runtime))
(arguments
(list
#:tests? #f
#:build-type "Release"
#:configure-flags
#~(list
"-DAMD_APP_TREAT_WARNINGS_AS_ERRORS=FALSE"
"-DAMD_APP_ROCM_BUILD_PACKAGE=ON"
;; The rocm build system is very opiniated about the rpath and
;; mangles it beyond recognition, stripping all inputs from it.
;; Avoid the breakage.
"-DAMD_APP_ROCM_BUILD_TRY_RPATH=OFF"
;; Allows the plugin files to be correctly rpathed to $#output/lib
;; where shared libraries reside.
"-DAMD_WORK_BENCH_PLUGIN_ADD_INSTALL_PREFIX_TO_RPATH=TRUE"
;; Unfortunately this also needs to be patched everywhere, as the
;; value is individually set to OFF for a lot of targets, and not
;; propagated from the top. So set it here, and use substitutions
;; below.
"-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"
(string-append "-DROCM_PATH=" #$output)
"-DUSE_LOCAL_FMT_LIB=ON"
"-DUSE_LOCAL_NLOHMANN_JSON=ON"
"-DUSE_LOCAL_SPDLOG=ON"
"-DUSE_LOCAL_BOOST=ON"
"-DUSE_LOCAL_CLI11=ON"
"-DUSE_LOCAL_CATCH2=ON")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'patch-out-bogus-git-requirement
(lambda _
(substitute* "CMakeLists.txt"
(("find_package\\(Git QUIET\\)")
"set(GIT_FOUND ON)"))))
;; This converts the amdgpu-targets property to its proper entry
;; point in this package; this relies on the patch
;; rocm-bandwidth-test-take-default-gpus-from-environment.patch
;; above, as I can't seem to find a way to do multiline matches.
;; Note that compiling for all GPUs architectures is sequential, and
;; will run for a very long time.
(add-after 'unpack 'inject-amdgpu-targets
(lambda _
(substitute* "plugins/tb/transferbench/CMakeLists.txt"
(("set\\(DEFAULT_GPUS[^)]*\\)")
(string-append
"set(DEFAULT_GPUS " #$(string-join (%amdgpu-targets)) ")" )))))
;; See configure-flags above.
(add-after 'unpack 'fix-use-link-path
(lambda _
(substitute* (find-files "." "CMakeLists\\.txt$|\\.cmake$")
;; NB: this will also catch instances of
;; CMAKE_INSTALL_RPATH_USE_LINK_PATH
(("INSTALL_RPATH_USE_LINK_PATH FALSE")
"INSTALL_RPATH_USE_LINK_PATH TRUE"))))
;; For the same reason, just in case patchelf ends up in the inputs
;; (the build system may require it), we remove a hardcoded rpath in
;; a bash build script which triggers if patchelf is detected.
(add-after 'unpack 'remove-hardcoded-patchelf
(lambda _
(substitute* "plugins/tb/transferbench/build_libamd_tb.sh"
(("command -v patchelf") "false"))))
;; XXX The build system uses -fuse-ld=lld flag for c++ linking if it
;; finds ld.lld in any way. Unfortunately, for some reason, ld.lld
;; does not correctly setup the rpath when compiling the
;; rocm_bandwidth_test binary (the only executable which shows the
;; problem). We do need ld.lld from lld-rocm in the path for
;; ROCm-specific linking however. Therefore, just disable ld.lld
;; lookup for standard binaries.
;; I guess there's a standard Guix way to have lld behave for rpath
;; -- which should be applied to lld-rocm, probably.
(add-after 'unpack 'dont-use-lld-for-executables
(lambda _
(substitute* "cmake/build_utils.cmake"
(("find_program\\(LD_LLD_PATH ld\\.lld\\)")
"#find_program(LD_LLD_PATH ld.lld)"))))
;; This is just cosmetic and removes superfluous rpath entries
;; involving a nonexistant relative llvm/lib path.
;; XXX: RUNPATH checks are okay with $ORIGIN, but it looks like
;; other packages are removing it altogether -- what to do?
(add-after 'unpack 'remove-dubious-rpath
(lambda _
(substitute* (find-files "." "CMakeLists\\.txt$|\\.cmake$")
((":\\\\\\$ORIGIN(/\\.\\./lib)?/llvm/lib") "")))))))
(inputs (list rocr-runtime
rocm-hip-runtime
rocm-cmake
rocm-device-libs
rocm-comgr
numactl
curl
fmt-11
nlohmann-json
spdlog-1.15
boost
cli11
catch2-3.8))
(properties
(list %default-amdgpu-targets-property))
(native-inputs (list
rocm-hipcc
clang-rocm
lld-rocm))
(home-page "https://github.com/ROCm/rocm_bandwidth_test")
(synopsis "Bandwidth test for ROCm")
(description "RocBandwidthTest is designed to capture the performance
@ -335,7 +457,6 @@ cop/read/writer operations. In addition one can also query the topology of
the system in terms of memory pools and their agents.")
(license license:expat)))
;; e-smi looks hard to unbundle correctly from amd-smi
;; the required esmi version is hardcoded in CMakeLists.txt
(define (make-esmi-source version hash)