blob: 4e05309d0c486349c3c67375485b9f88c4ba2f5d (
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
137
138
139
|
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
PYTHON_COMPAT=( python3_{6..9} )
inherit cmake prefix python-any-r1
DESCRIPTION="AMD's library for BLAS on ROCm."
HOMEPAGE="https://github.com/ROCmSoftwarePlatform/rocBLAS"
SRC_URI="https://github.com/ROCmSoftwarePlatform/rocBLAS/archive/rocm-${PV}.tar.gz -> rocm-${P}.tar.gz
https://github.com/ROCmSoftwarePlatform/Tensile/archive/rocm-${PV}.tar.gz -> rocm-Tensile-${PV}.tar.gz"
LICENSE="MIT"
KEYWORDS="~amd64"
IUSE="benchmark test"
SLOT="0/$(ver_cut 1-2)"
BDEPEND="
dev-util/rocm-cmake
!dev-util/Tensile
$(python_gen_any_dep '
dev-python/msgpack[${PYTHON_USEDEP}]
dev-python/pyyaml[${PYTHON_USEDEP}]
')
"
DEPEND="
dev-util/hip:${SLOT}
dev-libs/msgpack
test? ( virtual/blas
dev-cpp/gtest
sys-libs/libomp )
benchmark? ( virtual/blas
sys-libs/libomp )
"
RESTRICT="!test? ( test )"
python_check_deps() {
has_version "dev-python/pyyaml[${PYTHON_USEDEP}]" &&
has_version "dev-python/msgpack[${PYTHON_USEDEP}]"
}
S="${WORKDIR}"/${PN}-rocm-${PV}
PATCHES=("${FILESDIR}"/${PN}-4.3.0-fix-glibc-2.32-and-above.patch
"${FILESDIR}"/${PN}-4.3.0-change-default-Tensile-library-dir.patch
"${FILESDIR}"/${PN}-4.3.0-link-system-blas.patch )
src_prepare() {
eapply_user
pushd "${WORKDIR}"/Tensile-rocm-${PV} || die
eapply "${FILESDIR}/Tensile-${PV}-hsaco-compile-specified-arch.patch" # backported from upstream, should remove after 4.3.0
eapply "${FILESDIR}/Tensile-4.3.0-output-commands.patch"
popd || die
# Fit for Gentoo FHS rule
sed -e "/PREFIX rocblas/d" \
-e "/<INSTALL_INTERFACE/s:include:include/rocblas:" \
-e "s:rocblas/include:include/rocblas:" \
-e "s:\\\\\${CPACK_PACKAGING_INSTALL_PREFIX}rocblas/lib:${EPREFIX}/usr/$(get_libdir)/rocblas:" \
-e "s:share/doc/rocBLAS:share/doc/${P}:" \
-e "/rocm_install_symlink_subdir( rocblas )/d" -i library/src/CMakeLists.txt || die
# Use setup.py to install Tensile rather than pip
sed -r -e "/pip install/s:([^ \"\(]*python) -m pip install ([^ \"\)]*):\1 setup.py install --single-version-externally-managed --root / WORKING_DIRECTORY \2:g" -i cmake/virtualenv.cmake
sed -e "s:,-rpath=.*\":\":" -i clients/CMakeLists.txt || die
cmake_src_prepare
eprefixify library/src/tensile_host.cpp
}
src_configure() {
# allow acces to hardware
addpredict /dev/kfd
addpredict /dev/dri/
addpredict /dev/random
export PATH="${EPREFIX}/usr/lib/llvm/roc/bin:${PATH}"
local mycmakeargs=(
-DTensile_LOGIC="asm_full"
-DTensile_COMPILER="hipcc"
-DTensile_LIBRARY_FORMAT="msgpack"
-DTensile_CODE_OBJECT_VERSION="V3"
-DTensile_TEST_LOCAL_PATH="${WORKDIR}/Tensile-rocm-${PV}"
-DBUILD_WITH_TENSILE=ON
-DBUILD_WITH_TENSILE_HOST=ON
-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr"
-DCMAKE_INSTALL_INCLUDEDIR="include/rocblas"
-DCMAKE_SKIP_RPATH=TRUE
-DBUILD_TESTING=OFF
-DBUILD_CLIENTS_SAMPLES=OFF
-DBUILD_CLIENTS_TESTS=$(usex test ON OFF)
-DBUILD_CLIENTS_BENCHMARKS=$(usex benchmark ON OFF)
${AMDGPU_TARGETS+-DAMDGPU_TARGETS="${AMDGPU_TARGETS}"}
-D__skip_rocmclang="ON" ## fix cmake-3.21 configuration issue caused by officialy support programming language "HIP"
)
CXX="hipcc" cmake_src_configure
# do not rerun cmake and the build process in src_install
sed -e '/RERUN/,+1d' -i "${BUILD_DIR}"/build.ninja || die
}
check_rw_permission() {
cmd="[ -r $1 ] && [ -w $1 ]"
errormsg="${user} do not have read and write permissions on $1! \n Make sure ${user} is in render group and check the permissions."
if has sandbox ${FEATURES}; then
user=portage
su portage -c "${cmd}" || die ${errormsg}
else
user=`whoami`
${cmd} || die ${errormsg}
fi
}
src_test() {
# check permissions on /dev/kfd and /dev/dri/render*
check_rw_permission /dev/kfd
check_rw_permission /dev/dri/render*
addwrite /dev/kfd
addwrite /dev/dri/
cd "${BUILD_DIR}/clients/staging" || die
ROCBLAS_TENSILE_LIBPATH="${BUILD_DIR}/Tensile/library" ./rocblas-test
}
src_install() {
cmake_src_install
if use benchmark; then
cd "${BUILD_DIR}" || die
dolib.so clients/librocblas_fortran_client.so
dobin clients/staging/rocblas-bench
fi
}
|