mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
dev-cpp/kokkos: add USE=cuda support
Signed-off-by: Matthias Maier <tamiko@gentoo.org>
This commit is contained in:
113
dev-cpp/kokkos/kokkos-4.6.2-r2.ebuild
Normal file
113
dev-cpp/kokkos/kokkos-4.6.2-r2.ebuild
Normal file
@@ -0,0 +1,113 @@
|
||||
# Copyright 1999-2025 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit cmake cuda toolchain-funcs
|
||||
|
||||
DESCRIPTION="C++ Performance Portability Programming EcoSystem"
|
||||
HOMEPAGE="https://github.com/kokkos"
|
||||
|
||||
if [[ ${PV} = *9999* ]]; then
|
||||
inherit git-r3
|
||||
EGIT_REPO_URI="https://github.com/kokkos/kokkos.git"
|
||||
else
|
||||
MY_PV="$(ver_cut 1-2).0$(ver_cut 3)"
|
||||
SRC_URI="https://github.com/${PN}/${PN}/archive/refs/tags/${MY_PV}.tar.gz -> ${P}.tar.gz"
|
||||
S="${WORKDIR}/${PN}-${MY_PV}"
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
fi
|
||||
|
||||
LICENSE="BSD"
|
||||
SLOT="0/${PV}"
|
||||
IUSE="cuda +openmp test"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
DEPEND="sys-apps/hwloc:="
|
||||
RDEPEND="${DEPEND}"
|
||||
|
||||
#
|
||||
# Try to translate the "${CUDAARCHS}" number coming from __nvcc_device_query
|
||||
# into an option string that Kokkos' CMake configuration understands:
|
||||
#
|
||||
kokkos_arch_option() {
|
||||
case "${1}" in
|
||||
3[0257]) echo "-DKokkos_ARCH_KEPLER${1}=ON" ;;
|
||||
5[023]) echo "-DKokkos_ARCH_MAXWELL${1}=ON" ;;
|
||||
6[01]) echo "-DKokkos_ARCH_PASCAL${1}=ON" ;;
|
||||
7[02]) echo "-DKokkos_ARCH_VOLTA${1}=ON" ;;
|
||||
75) echo "-DKokkos_ARCH_TURING${1}=ON" ;;
|
||||
8[06]) echo "-DKokkos_ARCH_AMPERE${1}=ON" ;;
|
||||
89) echo "-DKokkos_ARCH_ADA${1}=ON" ;;
|
||||
90) echo "-DKokkos_ARCH_HOPPER${1}=ON" ;;
|
||||
1[02]0) echo "-DKokkos_ARCH_BLACKWELL${1}=ON" ;;
|
||||
*) die "Unknown CUDA architecture »${1}«" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
pkg_pretend() {
|
||||
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
|
||||
}
|
||||
|
||||
pkg_setup() {
|
||||
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
cmake_src_prepare
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
local mycmakeargs=(
|
||||
-DCMAKE_INSTALL_INCLUDEDIR=include/kokkos
|
||||
-DKokkos_ENABLE_TESTS="$(usex test)"
|
||||
-DKokkos_ENABLE_AGGRESSIVE_VECTORIZATION=ON
|
||||
-DKokkos_ENABLE_SERIAL=ON
|
||||
-DKokkos_ENABLE_HWLOC=ON
|
||||
-DKokkos_ENABLE_CUDA="$(usex cuda)"
|
||||
-DKokkos_HWLOC_DIR="${EPREFIX}/usr"
|
||||
-DKokkos_ENABLE_OPENMP="$(usex openmp)"
|
||||
-DBUILD_SHARED_LIBS=ON
|
||||
)
|
||||
|
||||
if use cuda; then
|
||||
cuda_add_sandbox -w
|
||||
|
||||
if [[ ! -n "${CUDAARCHS}" ]]; then
|
||||
if ! SANDBOX_WRITE=/dev/nvidiactl test -w /dev/nvidiactl ; then
|
||||
eerror
|
||||
eerror "Can not access the GPU at /dev/nvidiactl."
|
||||
eerror "User $(id -nu) is not in the group \"video\"."
|
||||
eerror
|
||||
ewarn
|
||||
ewarn "Can not query the native device. You will need to set one of the"
|
||||
ewarn "supported Kokkos_ARCH_{..} CMake variables, or the CUDAARCHS"
|
||||
ewarn "environment variable to the appropriate architecture by hand..."
|
||||
ewarn
|
||||
else
|
||||
local CUDAARCHS
|
||||
CUDAARCHS="$(__nvcc_device_query || eerror "failed to query the native device")"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -n "${CUDAARCHS}" ]]; then
|
||||
einfo "Building with CUDAARCHS=${CUDAARCHS}"
|
||||
mycmakeargs+=(
|
||||
$(kokkos_arch_option "${CUDAARCHS}")
|
||||
)
|
||||
fi
|
||||
fi
|
||||
|
||||
cmake_src_configure
|
||||
}
|
||||
|
||||
src_test() {
|
||||
local myctestargs=(
|
||||
# Contains "death tests" which are known/expected(?) to fail
|
||||
# https://github.com/kokkos/kokkos/issues/3033
|
||||
# bug #791514
|
||||
-E "(KokkosCore_UnitTest_OpenMP|KokkosCore_UnitTest_Serial)"
|
||||
)
|
||||
|
||||
cmake_src_test
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit cmake toolchain-funcs
|
||||
inherit cmake cuda toolchain-funcs
|
||||
|
||||
DESCRIPTION="C++ Performance Portability Programming EcoSystem"
|
||||
HOMEPAGE="https://github.com/kokkos"
|
||||
@@ -20,12 +20,31 @@ fi
|
||||
|
||||
LICENSE="BSD"
|
||||
SLOT="0/${PV}"
|
||||
IUSE="+openmp test"
|
||||
IUSE="cuda +openmp test"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
DEPEND="sys-apps/hwloc:="
|
||||
RDEPEND="${DEPEND}"
|
||||
|
||||
#
|
||||
# Try to translate the "${CUDAARCHS}" number coming from __nvcc_device_query
|
||||
# into an option string that Kokkos' CMake configuration understands:
|
||||
#
|
||||
kokkos_arch_option() {
|
||||
case "${1}" in
|
||||
3[0257]) echo "-DKokkos_ARCH_KEPLER${1}=ON" ;;
|
||||
5[023]) echo "-DKokkos_ARCH_MAXWELL${1}=ON" ;;
|
||||
6[01]) echo "-DKokkos_ARCH_PASCAL${1}=ON" ;;
|
||||
7[02]) echo "-DKokkos_ARCH_VOLTA${1}=ON" ;;
|
||||
75) echo "-DKokkos_ARCH_TURING${1}=ON" ;;
|
||||
8[06]) echo "-DKokkos_ARCH_AMPERE${1}=ON" ;;
|
||||
89) echo "-DKokkos_ARCH_ADA${1}=ON" ;;
|
||||
90) echo "-DKokkos_ARCH_HOPPER${1}=ON" ;;
|
||||
1[02]0) echo "-DKokkos_ARCH_BLACKWELL${1}=ON" ;;
|
||||
*) die "Unknown CUDA architecture »${1}«" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
pkg_pretend() {
|
||||
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
|
||||
}
|
||||
@@ -34,18 +53,51 @@ pkg_setup() {
|
||||
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
cmake_src_prepare
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
local mycmakeargs=(
|
||||
-DCMAKE_INSTALL_INCLUDEDIR=include/kokkos
|
||||
-DKokkos_ENABLE_TESTS=$(usex test)
|
||||
-DKokkos_ENABLE_TESTS="$(usex test)"
|
||||
-DKokkos_ENABLE_AGGRESSIVE_VECTORIZATION=ON
|
||||
-DKokkos_ENABLE_SERIAL=ON
|
||||
-DKokkos_ENABLE_HWLOC=ON
|
||||
-DKokkos_ENABLE_CUDA="$(usex cuda)"
|
||||
-DKokkos_HWLOC_DIR="${EPREFIX}/usr"
|
||||
-DKokkos_ENABLE_OPENMP=$(usex openmp)
|
||||
-DKokkos_ENABLE_OPENMP="$(usex openmp)"
|
||||
-DBUILD_SHARED_LIBS=ON
|
||||
)
|
||||
|
||||
if use cuda; then
|
||||
cuda_add_sandbox -w
|
||||
|
||||
if [[ ! -n "${CUDAARCHS}" ]]; then
|
||||
if ! SANDBOX_WRITE=/dev/nvidiactl test -w /dev/nvidiactl ; then
|
||||
eerror
|
||||
eerror "Can not access the GPU at /dev/nvidiactl."
|
||||
eerror "User $(id -nu) is not in the group \"video\"."
|
||||
eerror
|
||||
ewarn
|
||||
ewarn "Can not query the native device. You will need to set one of the"
|
||||
ewarn "supported Kokkos_ARCH_{..} CMake variables, or the CUDAARCHS"
|
||||
ewarn "environment variable to the appropriate architecture by hand..."
|
||||
ewarn
|
||||
else
|
||||
local CUDAARCHS
|
||||
CUDAARCHS="$(__nvcc_device_query || eerror "failed to query the native device")"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -n "${CUDAARCHS}" ]]; then
|
||||
einfo "Building with CUDAARCHS=${CUDAARCHS}"
|
||||
mycmakeargs+=(
|
||||
$(kokkos_arch_option "${CUDAARCHS}")
|
||||
)
|
||||
fi
|
||||
fi
|
||||
|
||||
cmake_src_configure
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user