dev-cpp/eigen: cuda changes

Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/44994
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Paul Zander
2026-05-04 13:51:04 +02:00
committed by Sam James
parent 96e9c4b03d
commit 38d9febc84
3 changed files with 99 additions and 57 deletions

View File

@@ -114,6 +114,10 @@ REQUIRED_USE="
)
test? (
|| ( ${IUSE_TEST_BACKENDS[*]} )
cuda-clang? (
!openmp
${LLVM_REQUIRED_USE}
)
)
"
@@ -193,7 +197,8 @@ DEPEND="
)
cuda-clang? (
$(llvm_gen_dep '
llvm-core/clang:${LLVM_SLOT}[llvm_targets_NVPTX]
llvm-core/clang:${LLVM_SLOT}
llvm-runtimes/clang-runtime:${LLVM_SLOT}[llvm_targets_NVPTX,offload,openmp]
')
)
)
@@ -239,16 +244,13 @@ cuda_set_CUDAHOSTCXX() {
break
fi
CUDAHOSTCXX_test="$(
dirname "$(
realpath "$(
which "${compiler}-$(echo "${version}" | grep -oP "(?<=${package}-)[0-9]*")"
)"
)"
which "${compiler}-$(echo "${version}" | grep -oP "(?<=${package}-)[0-9]*")"
)"
version="<${version}"
do ! echo "int main(){}" | nvcc "-ccbin ${CUDAHOSTCXX_test}" - -x cu &>/dev/null; done
export CUDAHOSTCXX
echo "${CUDAHOSTCXX}"
}
pkg_pretend() {
@@ -368,6 +370,14 @@ src_configure() {
-DEIGEN_DEBUG_ASSERTS="$(usex debug)" # Enable advanced debugging of assertions
-DEIGEN_SPLIT_LARGE_TESTS="yes" # Split large tests into smaller executables
-DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests
-DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests
-DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support.
# -DEIGEN_TEST_SYCL="$(usex sycl)" # Add Sycl support.
# -DEIGEN_SYCL_TRISYCL="no" # Use the triSYCL Sycl implementation (ComputeCPP by default).
$(cmake_use_find_package adolc Adolc)
$(cmake_use_find_package boost Boost)
$(cmake_use_find_package cholmod CHOLMOD)
@@ -437,48 +447,59 @@ src_configure() {
)
fi
mycmakeargs+=(
-DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests
-DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests
-DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support.
# -DEIGEN_TEST_SYCL=no # Add Sycl support.
# -DEIGEN_SYCL_TRISYCL=no # Use the triSYCL Sycl implementation (ComputeCPP by default).
)
if use cuda; then
cuda_add_sandbox -w
if use cuda-clang; then
local llvm_prefix
llvm_prefix="$(get_llvm_prefix -b)"
export CC="${llvm_prefix}/bin/clang"
export CXX="${llvm_prefix}/bin/clang++"
export LIBRARY_PATH="${ESYSROOT}/usr/$(get_libdir)"
# NVCCFLAGS gets injected into CMAKE_CXX_FLAGS, which means we need to use clang as gcc will fail with
# error: unrecognized command-line option
if ! tc-is-clang; then
export CC="${CHOST}-clang-${LLVM_SLOT}"
export CXX="${CHOST}-clang++-${LLVM_SLOT}"
fi
NVCCFLAGS="${NVCCFLAGS:+${NVCCFLAGS} }--libomptarget-nvptx-bc-path=${llvm_prefix}/$(get_libdir)/nvptx64-nvidia-cuda/libomptarget-nvptx.bc"
mycmakeargs+=(
-DCUDA_HOST_COMPILER="${llvm_prefix}/bin/clang++"
-DCUDA_HOST_COMPILER="${CHOST}-clang++-${LLVM_SLOT}"
)
else
cuda_set_CUDAHOSTCXX
mycmakeargs+=(
-DCUDA_HOST_COMPILER="${CUDAHOSTCXX}"
)
if [[ -v CUDACXX ]]; then
mycmakeargs+=(
-DCUDA_NVCC_EXECUTABLE="${CUDACXX}"
-DCMAKE_POLICY_DEFAULT_CMP0146="OLD" # FindCUDA
)
fi
fi
if [[ "${CUDA_VERBOSE}" == true ]]; then
mycmakeargs+=(
-DCUDA_VERBOSE_BUILD=yes
-DCUDA_VERBOSE_BUILD="yes"
)
NVCCFLAGS+=" -v"
fi
export CUDAFLAGS="${NVCCFLAGS}"
[[ -z "${CUDAARCHS}" ]] && einfo "trying to determine host CUDAARCHS"
: "${CUDAARCHS:=$(__nvcc_device_query)}"
export CUDAARCHS
if [[ -v CUDAARCHS ]]; then
mycmakeargs+=(
# TODO this needs to be lowest first for eigen
-DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}"
)
fi
# CUDAFLAGS is used by cmake
# NVCCFLAGS is used by cuda.eclass
mycmakeargs+=(
-DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}"
-DEIGEN_CUDA_CXX_FLAGS="${NVCCFLAGS}"
-DCUDA_USE_STATIC_CUDA_RUNTIME="no"
)
fi

View File

@@ -114,6 +114,10 @@ REQUIRED_USE="
)
test? (
|| ( ${IUSE_TEST_BACKENDS[*]} )
cuda-clang? (
!openmp
${LLVM_REQUIRED_USE}
)
)
"
@@ -193,7 +197,8 @@ DEPEND="
)
cuda-clang? (
$(llvm_gen_dep '
llvm-core/clang:${LLVM_SLOT}[llvm_targets_NVPTX]
llvm-core/clang:${LLVM_SLOT}
llvm-runtimes/clang-runtime:${LLVM_SLOT}[llvm_targets_NVPTX,offload,openmp]
')
)
)
@@ -236,16 +241,13 @@ cuda_set_CUDAHOSTCXX() {
break
fi
CUDAHOSTCXX_test="$(
dirname "$(
realpath "$(
which "${compiler}-$(echo "${version}" | grep -oP "(?<=${package}-)[0-9]*")"
)"
)"
which "${compiler}-$(echo "${version}" | grep -oP "(?<=${package}-)[0-9]*")"
)"
version="<${version}"
do ! echo "int main(){}" | nvcc "-ccbin ${CUDAHOSTCXX_test}" - -x cu &>/dev/null; done
export CUDAHOSTCXX
echo "${CUDAHOSTCXX}"
}
pkg_pretend() {
@@ -367,6 +369,14 @@ src_configure() {
-DEIGEN_DEBUG_ASSERTS="$(usex debug)" # Enable advanced debugging of assertions
-DEIGEN_SPLIT_LARGE_TESTS="yes" # Split large tests into smaller executables
-DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests
-DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests
-DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support.
# -DEIGEN_TEST_SYCL="$(usex sycl)" # Add Sycl support.
# -DEIGEN_SYCL_TRISYCL="no" # Use the triSYCL Sycl implementation (ComputeCPP by default).
$(cmake_use_find_package adolc Adolc)
$(cmake_use_find_package boost Boost)
$(cmake_use_find_package cholmod CHOLMOD)
@@ -439,48 +449,59 @@ src_configure() {
)
fi
mycmakeargs+=(
-DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests
-DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests
-DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support.
# -DEIGEN_TEST_SYCL=no # Add Sycl support.
# -DEIGEN_SYCL_TRISYCL=no # Use the triSYCL Sycl implementation (ComputeCPP by default).
)
if use cuda; then
cuda_add_sandbox -w
if use cuda-clang; then
local llvm_prefix
llvm_prefix="$(get_llvm_prefix -b)"
export CC="${llvm_prefix}/bin/clang"
export CXX="${llvm_prefix}/bin/clang++"
export LIBRARY_PATH="${ESYSROOT}/usr/$(get_libdir)"
# NVCCFLAGS gets injected into CMAKE_CXX_FLAGS, which means we need to use clang as gcc will fail with
# error: unrecognized command-line option
if ! tc-is-clang; then
export CC="${CHOST}-clang-${LLVM_SLOT}"
export CXX="${CHOST}-clang++-${LLVM_SLOT}"
fi
NVCCFLAGS="${NVCCFLAGS:+${NVCCFLAGS} }--libomptarget-nvptx-bc-path=${llvm_prefix}/$(get_libdir)/nvptx64-nvidia-cuda/libomptarget-nvptx.bc"
mycmakeargs+=(
-DCUDA_HOST_COMPILER="${llvm_prefix}/bin/clang++"
-DCUDA_HOST_COMPILER="${CHOST}-clang++-${LLVM_SLOT}"
)
else
cuda_set_CUDAHOSTCXX
mycmakeargs+=(
-DCUDA_HOST_COMPILER="${CUDAHOSTCXX}"
)
if [[ -v CUDACXX ]]; then
mycmakeargs+=(
-DCUDA_NVCC_EXECUTABLE="${CUDACXX}"
-DCMAKE_POLICY_DEFAULT_CMP0146="OLD" # FindCUDA
)
fi
fi
if [[ "${CUDA_VERBOSE}" == true ]]; then
mycmakeargs+=(
-DCUDA_VERBOSE_BUILD=yes
-DCUDA_VERBOSE_BUILD="yes"
)
NVCCFLAGS+=" -v"
fi
export CUDAFLAGS="${NVCCFLAGS}"
[[ -z "${CUDAARCHS}" ]] && einfo "trying to determine host CUDAARCHS"
: "${CUDAARCHS:=$(__nvcc_device_query)}"
export CUDAARCHS
if [[ -v CUDAARCHS ]]; then
mycmakeargs+=(
# TODO this needs to be lowest first for eigen
-DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}"
)
fi
# CUDAFLAGS is used by cmake
# NVCCFLAGS is used by cuda.eclass
mycmakeargs+=(
-DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}"
-DEIGEN_CUDA_CXX_FLAGS="${NVCCFLAGS}"
-DCUDA_USE_STATIC_CUDA_RUNTIME="no"
)
fi

View File

@@ -17,14 +17,14 @@
providing optimal speed with GCC.
</longdescription>
<use>
<flag name="clang">Use clang for cuda units compilation</flag>
<flag name="clang-cuda">Use clang for cuda units compilation</flag>
<flag name="hip">Enable HIP GPU computing support</flag>
<flag name="adolc">Add test support for Adolc (<pkg>sci-libs/adolc</pkg>)</flag>
<flag name="blas">Build the Eigen Blas library</flag>
<flag name="boost">Add test support for Boost.Multiprecision (<pkg>dev-libs/boost</pkg>)</flag>
<flag name="cholmod">Add test support for CHOLMOD (<pkg>sci-libs/cholmod</pkg>)</flag>
<flag name="clang">Use clang for cuda units compilation</flag>
<flag name="cuda-clang">Use clang for cuda units compilation</flag>
<flag name="fftw">Add test support for fftw (<pkg>sci-libs/fftw</pkg>)</flag>
<flag name="hip">Enable HIP GPU computing support</flag>
<flag name="klu">Add test support for KLU (<pkg>sci-libs/klu</pkg>)</flag>
<flag name="lapack">Build the included Eigen LAPACK library</flag>
<flag name="mathjax">Use MathJax for rendering math in HTML docs (dev-libs/mathjax)</flag>