aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/rocm.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/rocm.scm')
-rw-r--r--gnu/packages/rocm.scm330
1 files changed, 330 insertions, 0 deletions
diff --git a/gnu/packages/rocm.scm b/gnu/packages/rocm.scm
new file mode 100644
index 0000000000..9a015d2490
--- /dev/null
+++ b/gnu/packages/rocm.scm
@@ -0,0 +1,330 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
+;;;
+;;; 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
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; This program is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages rocm)
+ #:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix packages)
+ #:use-module (guix download)
+ #:use-module (guix utils)
+ #:use-module (guix git-download)
+ #:use-module (guix build-system cmake)
+ #:use-module (gnu packages)
+ #:use-module (gnu packages elf)
+ #:use-module (gnu packages gl)
+ #:use-module (gnu packages linux)
+ #:use-module (gnu packages llvm)
+ #:use-module (gnu packages opencl)
+ #:use-module (gnu packages version-control)
+ #:use-module (gnu packages vim))
+
+;; 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 "4.3.0")
+
+(define-public rocm-cmake
+ (package
+ (name "rocm-cmake")
+ (version %rocm-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/RadeonOpenCompute/rocm-cmake.git")
+ (commit (string-append "rocm-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0sic2zxmzl2pb2865vvq55mbpcr8pby8v19pjdlm08pypqw5h6h6"))))
+ (build-system cmake-build-system)
+ (arguments `(#:tests? #f)) ; Tests try to use git commit
+ (native-inputs `(("git" ,git)))
+ (home-page "https://github.com/RadeonOpenCompute/rocm-cmake")
+ (synopsis "ROCm cmake modules")
+ (description "ROCm cmake modules provides cmake modules for common build
+tasks needed for the ROCM software stack.")
+ (license license:ncsa)))
+
+(define-public rocm-device-libs
+ (package
+ (name "rocm-device-libs")
+ (version %rocm-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/RadeonOpenCompute/ROCm-Device-Libs.git")
+ (commit (string-append "rocm-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1f8xsylfajpxqjk6ayjnrry53y8b0a6lh9d72pd41nffxfyzvw3w"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:configure-flags
+ (list "-DCMAKE_SKIP_BUILD_RPATH=FALSE"
+ "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE")))
+ (inputs `(("llvm" ,llvm-for-rocm)))
+ (home-page "https://github.com/RadeonOpenCompute/ROCm-Device-Libs")
+ (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-comgr
+ (package
+ (name "rocm-comgr")
+ (version %rocm-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/RadeonOpenCompute/ROCm-CompilerSupport.git")
+ (commit (string-append "rocm-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0bakbm7shr0l67lph44b5cnc9psd6rivg1mp79qizaawkn380x60"))
+ (patches
+ (search-patches "rocm-comgr-3.1.0-dependencies.patch"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chdir
+ (lambda _
+ (chdir "lib/comgr"))))))
+ (inputs
+ `(("rocm-device-libs" ,rocm-device-libs)
+ ("llvm" ,llvm-for-rocm)
+ ("lld" ,lld)))
+ (home-page "https://github.com/RadeonOpenCompute/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 roct-thunk-interface
+ (package
+ (name "roct-thunk-interface")
+ (version %rocm-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface.git")
+ (commit (string-append "rocm-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0ffqhrrscmcydfqf61dk58d7nnxk6n2k68jhqfj7a4hvhlphb74f"))))
+ (build-system cmake-build-system)
+ (arguments `(#:tests? #f)) ; Not sure how to run tests.
+ (inputs `(("numactl" ,numactl)))
+ (home-page "https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface")
+ (synopsis "Radeon Open Compute Thunk Interface")
+ (description "User-mode API interfaces used to interact with the ROCk
+driver.")
+ (license license:ncsa)))
+
+(define-public rocr-runtime
+ (package
+ (name "rocr-runtime")
+ (version %rocm-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/RadeonOpenCompute/ROCR-Runtime.git")
+ (commit (string-append "rocm-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0jqfqf5ymwlbpac065bhigmkgsk7mbyimdgvca7ymn38wpf80ka7"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:configure-flags
+ `(,(string-append
+ "-DBITCODE_DIR="
+ (assoc-ref %build-inputs "rocm-device-libs")
+ "/amdgcn/bitcode/"))
+ #:tests? #f ; No tests.
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chdir
+ (lambda _
+ (chdir "src"))))))
+ (inputs
+ `(("libelf" ,libelf)
+ ("numactl" ,numactl)
+ ("llvm" ,llvm-for-rocm)
+ ("roct-thunk-interface" ,roct-thunk-interface)
+ ("rocm-device-libs" ,rocm-device-libs))) ; For bitcode.
+ (native-inputs `(("xxd" ,xxd)))
+ (home-page "https://github.com/RadeonOpenCompute/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 rocclr
+ (package
+ (name "rocclr")
+ (version %rocm-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ROCm-Developer-Tools/ROCclr.git")
+ (commit (string-append "rocm-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1pm1y020zriz7zmi95w0rcpka0jrsc7wwh81sssnysi8wxk3nnfy"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; No tests.
+ #:configure-flags
+ `(,(string-append
+ "-DOPENCL_DIR="
+ (assoc-ref %build-inputs "rocm-opencl-runtime-src")))))
+ (inputs
+ `(("mesa" ,mesa)
+ ("rocm-comgr" ,rocm-comgr)
+ ("llvm" ,llvm-for-rocm)
+ ("rocm-device-libs" ,rocm-device-libs)
+ ("rocr-runtime" ,rocr-runtime)
+ ("rocm-cmake" ,rocm-cmake)
+ ;; rocclr depends on a few headers provided by rocm-opencl-runtime.
+ ("rocm-opencl-runtime-src"
+ ,(origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime.git")
+ (commit (string-append "rocm-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1cglpiaj3ny1z74ssmy6j63vj92sfy4q38ix6qsga0mg3b2wvqz3"))))))
+ (home-page "https://github.com/ROCm-Developer-Tools/ROCclr")
+ (synopsis "Radeon Open Compute Common Language Runtime")
+ (description "ROCclr is a virtual device interface that compute runtimes
+interact with to different backends such as ROCr or PAL. This abstraction
+allows runtimes to work on Windows as well as on Linux without much effort.")
+ (license license:ncsa)))
+
+(define-public rocm-opencl-runtime
+ (package
+ (name "rocm-opencl-runtime")
+ (version %rocm-version)
+ (home-page "https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime")
+ (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
+ "1cglpiaj3ny1z74ssmy6j63vj92sfy4q38ix6qsga0mg3b2wvqz3"))
+ (patches
+ (search-patches
+ "rocm-opencl-runtime-3.10.0-includes.patch"
+ ;; Do not install libOpenCL, which ocl-icd provides.
+ "rocm-opencl-runtime-4.3-noopencl.patch"
+ ;; Guix includes a program clinfo already.
+ "rocm-opencl-runtime-4.3-noclinfo.patch"
+ ;; cltrace linking fails, remove it.
+ "rocm-opencl-runtime-4.3-nocltrace.patch"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; Not sure how to run them.
+ #:phases
+ (modify-phases %standard-phases
+ (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* ((out (assoc-ref outputs "out"))
+ (vendors (string-append out "/etc/OpenCL/vendors"))
+ (sopath (string-append out "/lib/libamdocl64.so")))
+ (mkdir-p vendors)
+ (with-output-to-file (string-append vendors "/amdocl64.icd")
+ (lambda _ (display sopath)))))))))
+ (inputs
+ `(("mesa" ,mesa)
+ ("rocm-comgr" ,rocm-comgr)
+ ("rocr-runtime" ,rocr-runtime)
+ ("rocclr" ,rocclr)
+ ("opencl-icd-loader" ,opencl-icd-loader)
+ ("glew" ,glew)))
+ (native-inputs `())
+ (synopsis "ROCm OpenCL Runtime")
+ (description "OpenCL 2.0 compatible language runtime, supporting offline
+and in-process/in-memory compilation.")
+ (license license:ncsa)))
+
+(define-public rocminfo
+ (package
+ (name "rocminfo")
+ (version %rocm-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/RadeonOpenCompute/rocminfo.git")
+ (commit (string-append "rocm-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0pcm308vwkjrwnrk507iya20mkil8j0vx699w9jk2gas4n4jvkcz"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#: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")
+ (string-append (assoc-ref inputs "kmod") "/bin/lsmod"))
+ (("grep") (which "grep"))))))))
+ (inputs
+ `(("rocr-runtime" ,rocr-runtime)
+ ("kmod" ,kmod)))
+ (home-page "https://github.com/RadeonOpenCompute/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-public rocm-bandwidth-test
+ (package
+ (name "rocm-bandwidth-test")
+ (version %rocm-version)
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/RadeonOpenCompute/rocm_bandwidth_test.git")
+ (commit (string-append "rocm-" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0a14kwkjpiyljgzxblh031qibn6xgbxp6m12zdy1pmwb2c44jjmm"))))
+ (build-system cmake-build-system)
+ (arguments `(#:tests? #f)) ; No tests.
+ (inputs `(("rocr-runtime" ,rocr-runtime)))
+ (home-page "https://github.com/RadeonOpenCompute/rocm_bandwidth_test")
+ (synopsis "Bandwidth test for ROCm")
+ (description "RocBandwidthTest is designed to capture the performance
+characteristics of buffer copying and kernel read/write operations. The help
+screen of the benchmark shows various options one can use in initiating
+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:ncsa)))
+