ROCM.ECLASS

部分: eclass-manpages (5)
更新: 2024 年 11 月
索引 返回主内容

名称

rocm.eclass - 用于 ROCm 包的通用函数和变量,这些包是用 HIP 编写的

描述

ROCm 包,如 sci-libs/<roc|hip>*,以及基于 ROCm 库构建的包,可以使用此 eclass 提供的变量和函数。 它通过 USE_EXPAND 处理 AMDGPU_TARGETS 变量,因此用户可以编辑 USE 标志来控制要编译的 GPU 架构。 使用 ${ROCM_USEDEP} 可以确保依赖项之间的一致性。 Ebuilds 可以调用函数 get_amdgpu_flag 将激活的目标转换为 GPU 编译标志,并将它们传递给配置。 函数 rocm_use_hipcc 将活动编译器切换到 hipcc 并清除不兼容的标志(这对 /etc/portage/make.conf 中仅包含 gcc 标志的用户很有用)。 函数 check_amdgpu 可以帮助 ebuild 在 src_test 阶段确保对 GPU 设备的读写权限,如果不可用,则会抛出友好的错误消息。 但是,src_configure 通常不应该访问任何 AMDGPU 设备。 如果它确实访问了,通常意味着 CMakeLists.txt 忽略了 AMDGPU_TARGETS,而倾向于自动检测的 GPU,这不是我们想要的。

支持的 EAPIS

8

示例

ROCm 库的示例 ebuild,位于 https://github.com/ROCmSoftwarePlatform,它使用 cmake 进行构建和测试,并依赖于 rocBLAS
ROCM_VERSION=${PV}
inherit cmake rocm
# ROCm libraries SRC_URI is usually in form of:
SRC_URI="https://github.com/ROCmSoftwarePlatform/${PN}/archive/rocm-${PV}.tar.gz -> ${P}.tar.gz"
S=${WORKDIR}/${PN}-rocm-${PV}
SLOT="0/$(ver_cut 1-2)"
IUSE="test"
REQUIRED_USE="${ROCM_REQUIRED_USE}"
RESTRICT="!test? ( test )"

RDEPEND="
    dev-util/hip
    sci-libs/rocBLAS:${SLOT}[${ROCM_USEDEP}]
"

src_configure() {
    rocm_use_hipcc
    local mycmakeargs=(
        -DAMDGPU_TARGETS="$(get_amdgpu_flags)"
        -DBUILD_CLIENTS_TESTS=$(usex test ON OFF)
    )
    cmake_src_configure
}

src_test() {
    check_amdgpu
    # export LD_LIBRARY_PATH=<path to built lib dir> if necessary
    cmake_src_test # for packages using the cmake test
    # For packages using a standalone test binary rather than cmake test,
    # just execute it (or using edob)
}

依赖于 ROCm 库的包的示例 - 一个依赖于 rocBLAS 的包,使用逗号分隔的 ${HCC_AMDGPU_TARGET} 来确定 GPU 架构,并需要 ROCm 版本 >=5.1

ROCM_VERSION=5.1
inherit rocm
IUSE="rocm"
REQUIRED_USE="rocm? ( ${ROCM_REQUIRED_USE} )"
DEPEND="rocm? ( >=dev-util/hip-${ROCM_VERSION}
    >=sci-libs/rocBLAS-${ROCM_VERSION}[${ROCM_USEDEP}] )"

src_configure() {
    if use rocm; then
        local amdgpu_flags=$(get_amdgpu_flags)
        export HCC_AMDGPU_TARGET=${amdgpu_flags//;/,}
    fi
    default
}
src_test() {
    use rocm && check_amdgpu
    default
}

函数

_rocm_set_globals
设置对 ebuilds 有用的全局变量:IUSE、ROCM_REQUIRED_USE 和 ROCM_USEDEP,除非设置了 ROCM_SKIP_GLOBALS。
get_amdgpu_flags get_amdgpu_flags
将指定的 amdgpu_targets use 标志转换为编译标志。 将默认目标特性追加到 GPU 架构。 请参见 https://llvm.net.cn/docs/AMDGPUUsage.html#target-features
check_amdgpu check_amdgpu
授予并检查 AMDGPU 设备的读写权限,如果不可用,则退出。
rocm_use_hipcc rocm_use_hipcc
将活动 C 和 C++ 编译器切换到 hipcc,清除不支持的标志并设置 ROCM_TARGET_LST 文件。

ECLASS 变量

ROCM_VERSION (必填) (在继承之前设置)
当前包的 ROCm 版本。 对于 ROCm 库,它应该是 ${PV}; 对于依赖于 ROCm 库的其他包,可以将其设置为与 ROCm 库所需的版本相匹配。
ROCM_REQUIRED_USE (由 ECLASS 生成)
需要至少一个 AMDGPU 目标进行编译。 ROCm 库的示例用法
REQUIRED_USE="${ROCM_REQUIRED_USE}"
依赖于 ROCm 库的包的示例用法
IUSE="rocm"
REQUIRED_USE="rocm? ( ${ROCM_REQUIRED_USE} )"
ROCM_USEDEP (由 ECLASS 生成)
这是一个 eclass 生成的 USE-依赖字符串,可以用于依赖于为相同 AMDGPU 架构构建的另一个 ROCm 包。

生成的 USE-标志列表与使用 rocm.eclass 的包兼容。

示例用法

DEPEND="sci-libs/rocBLAS[${ROCM_USEDEP}]"
ROCM_SKIP_GLOBALS
控制是否执行 _rocm_set_globals()。 此变量用于调用 check_amdgpu() 但不需要定义 amdgpu_targets_* USE-标志的 ebuilds,例如 dev-util/hip 和 dev-libs/rocm-opencl-runtime。

示例用法

ROCM_SKIP_GLOBALS=1
inherit rocm

作者

Yiyang Wu <[email protected]>

维护者

Gentoo 科学项目 <[email protected]>

报告 Bug

请通过 https://bugs.gentoo.org/ 报告 Bug

文件

rocm.eclass

另请参见

ebuild(5)
https://gitweb.gentoo.org/repo/gentoo.git/log/eclass/rocm.eclass


索引

名称
描述
支持的 EAPIS
示例
函数
ECLASS 变量
作者
维护者
报告 Bug
文件
另请参见

本文件由 man2html 使用手册页创建。
时间: 2024 年 11 月 12 日,格林威治标准时间 03:27:00