blob: fea24ac7dafc8b353d3f3f753c70d192e995b879 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit cmake edo flag-o-matic
DESCRIPTION="Radeon Open Compute OpenCL Compatible Runtime"
HOMEPAGE="https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime"
if [[ ${PV} == *9999 ]] ; then
EGIT_REPO_URI="https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime"
EGIT_CLR_REPO_URI="https://github.com/ROCm-Developer-Tools/ROCclr"
inherit git-r3
S="${WORKDIR}/${P}"
else
KEYWORDS="~amd64"
SRC_URI="https://github.com/ROCm-Developer-Tools/ROCclr/archive/rocm-${PV}.tar.gz -> rocclr-${PV}.tar.gz
https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime/archive/rocm-${PV}.tar.gz -> rocm-opencl-runtime-${PV}.tar.gz"
S="${WORKDIR}/ROCm-OpenCL-Runtime-rocm-${PV}"
fi
LICENSE="Apache-2.0 MIT"
SLOT="0/$(ver_cut 1-2)"
IUSE="debug test"
RESTRICT="!test? ( test )"
RDEPEND=">=dev-libs/rocr-runtime-5.3
>=dev-libs/rocm-comgr-5.3
>=dev-libs/rocm-device-libs-5.3
>=virtual/opencl-3
media-libs/mesa[-opencl]"
DEPEND="${RDEPEND}
dev-util/opencl-headers"
BDEPEND=">=dev-build/rocm-cmake-5.3
test? (
>=x11-apps/mesa-progs-8.5.0[X]
media-libs/glew
)
"
CLR_S="${WORKDIR}/ROCclr-rocm-${PV}"
PATCHES=( "${FILESDIR}/${PN}-5.3.3-gcc13.patch" )
src_unpack () {
if [[ ${PV} == "9999" ]]; then
git-r3_fetch
git-r3_checkout
git-r3_fetch "${EGIT_CLR_REPO_URI}"
git-r3_checkout "${EGIT_CLR_REPO_URI}" "${CLR_S}"
else
default
fi
}
src_prepare() {
# Fix ld.lld linker error: https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime/issues/155
append-ldflags $(test-flags-CCLD -Wl,--undefined-version)
cmake_src_prepare
pushd ${CLR_S} || die
# Bug #753377
# patch re-enables accidentally disabled gfx800 family
eapply "${FILESDIR}/${PN}-5.0.2-enable-gfx800.patch"
eapply "${FILESDIR}/rocclr-5.3.3-gcc13.patch"
popd || die
}
src_configure() {
# Reported upstream: https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime/issues/120
append-cflags -fcommon
local mycmakeargs=(
-Wno-dev
-DROCCLR_PATH="${CLR_S}"
-DAMD_OPENCL_PATH="${S}"
-DROCM_PATH="${EPREFIX}/usr"
-DBUILD_TESTS=$(usex test ON OFF)
-DEMU_ENV=ON
-DBUILD_ICD=OFF
-DFILE_REORG_BACKWARD_COMPATIBILITY=OFF
)
cmake_src_configure
}
src_install() {
insinto /etc/OpenCL/vendors
doins config/amdocl64.icd
cd "${BUILD_DIR}" || die
insinto /usr/lib64
doins amdocl/libamdocl64.so
doins tools/cltrace/libcltrace.so
}
# Copied from rocm.eclass. This ebuild does not need amdgpu_targets
# USE_EXPANDS, so it should not inherit rocm.eclass; it only uses the
# check_amdgpu function in src_test. Rename it to check-amdgpu to avoid
# pkgcheck warning.
check-amdgpu() {
for device in /dev/kfd /dev/dri/render*; do
addwrite ${device}
if [[ ! -r ${device} || ! -w ${device} ]]; then
eerror "Cannot read or write ${device}!"
eerror "Make sure it is present and check the permission."
ewarn "By default render group have access to it. Check if portage user is in render group."
die "${device} inaccessible"
fi
done
}
src_test() {
check-amdgpu
cd "${BUILD_DIR}"/tests/ocltst || die
export OCL_ICD_FILENAMES="${BUILD_DIR}"/amdocl/libamdocl64.so
local instruction1="Please start an X server using amdgpu driver (not Xvfb!),"
local instruction2="and export OCLGL_DISPLAY=\${DISPLAY} OCLGL_XAUTHORITY=\${XAUTHORITY} before reruning the test."
if [[ -n ${OCLGL_DISPLAY+x} ]]; then
export DISPLAY=${OCLGL_DISPLAY}
export XAUTHORITY=${OCLGL_XAUTHORITY}
ebegin "Running oclgl test under DISPLAY ${OCLGL_DISPLAY}"
if ! glxinfo | grep "OpenGL vendor string: AMD"; then
ewarn "${instruction1}"
ewarn "${instruction2}"
die "This display does not have AMD OpenGL vendor!"
fi
./ocltst -m $(realpath liboclgl.so) -A ogl.exclude
eend $? || die "oclgl test failed"
else
ewarn "${instruction1}"
ewarn "${instruction2}"
die "\${OCLGL_DISPLAY} not set."
fi
edob ./ocltst -m $(realpath liboclruntime.so) -A oclruntime.exclude
edob ./ocltst -m $(realpath liboclperf.so) -A oclperf.exclude
}
|