mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-07-30 22:48:07 -07:00
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:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user